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);