The setVertexBuffer() method of the GPURenderBundleEncoder interface sets or unsets the current GPUBuffer for the given slot that will provide vertex data for subsequent drawing commands.
setVertexBuffer(slot, buffer, offset, size)
The following criteria must be met when calling setVertexBuffer(), otherwise a GPUValidationError is generated and the GPURenderBundleEncoder becomes invalid:
-
buffer's GPUBuffer.usage contains the GPUBufferUsage.VERTEX flag. -
slot is less than the GPUDevice's maxVertexBuffers limit. -
offset + size is less than or equal to the buffer's GPUBuffer.size. -
offset is a multiple of 4.
function recordRenderPass(
passEncoder: GPURenderBundleEncoder | GPURenderPassEncoder
) {
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);
}
}
The above snippet is taken from the WebGPU Samples Animometer example.
passEncoder.setVertexBuffer(0, vertexBuffer);
passEncoder.setVertexBuffer(0, null);