GPUQueue: writeBuffer() 方法
注意:此功能在 Web Workers 中可用。
GPUQueue 介面的 writeBuffer() 方法將提供的資料來源寫入給定的 GPUBuffer。
這是一個便捷函式,它提供了一種替代透過 buffer 對映和 buffer-to-buffer 複製來設定 buffer 資料的方式。它允許使用者代理確定複製資料的最高效方法。
語法
writeBuffer(buffer, bufferOffset, data, dataOffset, size)
引數
buffer-
一個代表要寫入資料的
GPUBuffer物件。 bufferOffset-
一個數字,表示在
GPUBuffer中開始寫入資料的位元組偏移量。 data-
一個代表要寫入
GPUBuffer的資料來源的物件。這可以是一個ArrayBuffer、TypedArray或DataView。 dataOffset可選-
一個數字,表示從資料來源內部開始寫入資料的偏移量。如果
data是TypedArray,則此值為元素的數量;否則,此值為位元組數。如果省略,dataOffset預設為 0。 size可選-
一個數字,表示要從
data寫入buffer的內容的大小。如果data是TypedArray,則此值為元素的數量;否則,此值為位元組數。如果省略,size將等於data的總大小減去dataOffset。
返回值
無 (Undefined)。
異常
OperationErrorDOMException-
如果未滿足以下標準,則該方法會丟擲
OperationError:data的大小等於或大於 0。dataOffset小於或等於data的大小。data的大小(在轉換為位元組時,對於TypedArray)是 4 的倍數。
驗證
呼叫 writeBuffer() 時必須滿足以下標準,否則將生成 GPUValidationError,並且 GPUQueue 將變得無效:
buffer可用,即未處於不可用(如果GPUBuffer當前已 對映)或已銷燬(使用GPUBuffer.destroy()方法)狀態。buffer的GPUBuffer.usage包含GPUBufferUsage.COPY_DST標誌。bufferOffset(在轉換為位元組時)是 4 的倍數。data的大小 -dataOffset+bufferOffset(在轉換為位元組時),等於或小於buffer的GPUBuffer.size。
示例
在我們 基礎渲染演示中,我們在一個 Float32Array 中定義了一些頂點資料,我們將用它來繪製一個三角形。
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。
const vertexBuffer = device.createBuffer({
size: vertices.byteLength, // make it big enough to store vertices in
usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
});
要將資料放入 buffer,我們可以使用 writeBuffer()。
device.queue.writeBuffer(vertexBuffer, 0, vertices, 0, vertices.length);
規範
| 規範 |
|---|
| WebGPU # dom-gpuqueue-writebuffer |
瀏覽器相容性
載入中…