GPURenderBundleEncoder: setVertexBuffer() 方法
GPURenderBundleEncoder
接口的 setVertexBuffer()
方法设置或取消设置给定插槽的当前 GPUBuffer
,该插槽将为后续绘图命令提供顶点数据。
注意:此方法在功能上与 GPURenderPassEncoder
上的等效方法相同 — setVertexBuffer()
。
语法
js
setVertexBuffer(slot, buffer, offset, size)
参数
返回值
无 (未定义
).
验证
调用 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 |
浏览器兼容性
BCD 表格仅在启用了 JavaScript 的浏览器中加载。
另请参阅
- The WebGPU API