GPUQueue: writeBuffer() 方法

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

安全上下文: 此功能僅在安全上下文(HTTPS)中可用,且支援此功能的瀏覽器數量有限。

注意:此功能在 Web Workers 中可用。

GPUQueue 介面的 writeBuffer() 方法將提供的資料來源寫入給定的 GPUBuffer

這是一個便捷函式,它提供了一種替代透過 buffer 對映和 buffer-to-buffer 複製來設定 buffer 資料的方式。它允許使用者代理確定複製資料的最高效方法。

語法

js
writeBuffer(buffer, bufferOffset, data, dataOffset, size)

引數

buffer

一個代表要寫入資料的 GPUBuffer 物件。

bufferOffset

一個數字,表示在 GPUBuffer 中開始寫入資料的位元組偏移量。

data

一個代表要寫入 GPUBuffer 的資料來源的物件。這可以是一個 ArrayBufferTypedArrayDataView

dataOffset 可選

一個數字,表示從資料來源內部開始寫入資料的偏移量。如果 dataTypedArray,則此值為元素的數量;否則,此值為位元組數。如果省略,dataOffset 預設為 0。

size 可選

一個數字,表示要從 data 寫入 buffer 的內容的大小。如果 dataTypedArray,則此值為元素的數量;否則,此值為位元組數。如果省略,size 將等於 data 的總大小減去 dataOffset

返回值

無 (Undefined)。

異常

OperationError DOMException

如果未滿足以下標準,則該方法會丟擲 OperationError

  • data 的大小等於或大於 0。
  • dataOffset 小於或等於 data 的大小。
  • data 的大小(在轉換為位元組時,對於 TypedArray)是 4 的倍數。

驗證

呼叫 writeBuffer() 時必須滿足以下標準,否則將生成 GPUValidationError,並且 GPUQueue 將變得無效:

  • buffer 可用,即未處於不可用(如果 GPUBuffer 當前已 對映)或已銷燬(使用 GPUBuffer.destroy() 方法)狀態。
  • bufferGPUBuffer.usage 包含 GPUBufferUsage.COPY_DST 標誌。
  • bufferOffset(在轉換為位元組時)是 4 的倍數。
  • data 的大小 - dataOffset + bufferOffset(在轉換為位元組時),等於或小於 bufferGPUBuffer.size

示例

在我們 基礎渲染演示中,我們在一個 Float32Array 中定義了一些頂點資料,我們將用它來繪製一個三角形。

js
const vertices = new Float32Array([
  0.0, 0.6, 0, 1, 1, 0, 0, 1, -0.5, -0.6, 0, 1, 0, 1, 0, 1, 0.5, -0.6, 0, 1, 0,
  0, 1, 1,
]);

要在此渲染管線中使用這些資料,我們需要將其放入一個 GPUBuffer。首先,我們將建立 buffer。

js
const vertexBuffer = device.createBuffer({
  size: vertices.byteLength, // make it big enough to store vertices in
  usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
});

要將資料放入 buffer,我們可以使用 writeBuffer()

js
device.queue.writeBuffer(vertexBuffer, 0, vertices, 0, vertices.length);

規範

規範
WebGPU
# dom-gpuqueue-writebuffer

瀏覽器相容性

另見