GPUQueue: writeBuffer() 方法
注意:此功能在 Web Workers 中可用。
GPUQueue 接口的 writeBuffer() 方法将提供的数据源写入给定的 GPUBuffer。
这是一个便捷函数,它提供了一种替代通过 buffer 映射和 buffer-to-buffer 复制来设置 buffer 数据的方式。它允许用户代理确定复制数据的最高效方法。
语法
js
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 中定义了一些顶点数据,我们将用它来绘制一个三角形。
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 |
浏览器兼容性
加载中…