GPURenderBundleEncoder:setVertexBuffer() 方法
注意:此功能在 Web Workers 中可用。
GPURenderBundleEncoder 接口的 setVertexBuffer() 方法用于设置或取消设置指定槽位中当前将为后续绘制命令提供顶点数据的 GPUBuffer。
注意: 此方法的功能与其在 GPURenderPassEncoder 上的等效方法 — setVertexBuffer() — 完全相同。
语法
js
setVertexBuffer(slot, buffer, offset, size)
参数
返回值
无 (Undefined)。
验证
调用 setVertexBuffer() 时必须满足以下条件,否则将生成 GPUValidationError,并且 GPURenderBundleEncoder 将变得无效
buffer的GPUBuffer.usage包含GPUBufferUsage.VERTEX标志。slot小于GPUDevice的maxVertexBuffers限制。offset+size小于或等于buffer的GPUBuffer.size。offset是 4 的倍数。
示例
设置顶点缓冲区
js
function recordRenderPass(passEncoder) {
if (settings.dynamicOffsets) {
passEncoder.setPipeline(dynamicPipeline);
} else {
passEncoder.setPipeline(pipeline);
}
passEncoder.setVertexBuffer(0, vertexBuffer);
passEncoder.setBindGroup(0, timeBindGroup);
const dynamicOffsets = [0];
for (let i = 0; i < numTriangles; ++i) {
if (settings.dynamicOffsets) {
dynamicOffsets[0] = i * alignedUniformBytes;
passEncoder.setBindGroup(1, dynamicBindGroup, dynamicOffsets);
} else {
passEncoder.setBindGroup(1, bindGroups[i]);
}
passEncoder.draw(3, 1, 0, 0);
}
}
上面的代码片段摘自 WebGPU 示例 Animometer 示例。
取消设置顶点缓冲区
js
// Set vertex buffer in slot 0
passEncoder.setVertexBuffer(0, vertexBuffer);
// Later, unset vertex buffer in slot 0
passEncoder.setVertexBuffer(0, null);
规范
| 规范 |
|---|
| WebGPU # dom-gpurendercommandsmixin-setvertexbuffer |
浏览器兼容性
加载中…