web api instance method
GPURenderBundleEncoder: setVertexBuffer() method
Secure contextAvailable in workers
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.
[!NOTE] This method is functionally identical to its equivalent on
GPURenderPassEncoder—setVertexBuffer().
Syntax
setVertexBuffer(slot, buffer, offset, size)
Parameters
slot- : A number referencing the vertex buffer slot to set the vertex buffer for.
buffer- : A
GPUBufferrepresenting the buffer containing the vertex data to use for subsequent drawing commands, ornull, in which case any previously-set buffer in the given slot is unset.
- : A
offsetOptional- : A number representing the offset, in bytes, into
bufferwhere the vertex data begins. If omitted,offsetdefaults to 0.
- : A number representing the offset, in bytes, into
sizeOptional- : A number representing the size, in bytes, of the vertex data contained in
buffer. If omitted,sizedefaults to thebuffer’ssize-offset.
- : A number representing the size, in bytes, of the vertex data contained in
Return value
None (undefined).
Validation
The following criteria must be met when calling setVertexBuffer(), otherwise a GPUValidationError is generated and the GPURenderBundleEncoder becomes invalid:
buffer’susagecontains theGPUBufferUsage.VERTEXflag.slotis less than theGPUDevice’smaxVertexBufferslimit.offset+sizeis less than or equal to thebuffer’ssize.offsetis a multiple of 4.
Examples
Set vertex buffer
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);
}
}
The above snippet is taken from the WebGPU Samples Animometer example.
Unset vertex buffer
// Set vertex buffer in slot 0
passEncoder.setVertexBuffer(0, vertexBuffer);
// Later, unset vertex buffer in slot 0
passEncoder.setVertexBuffer(0, null);
Specifications
SpecificationsStandards references are available on the canonical MDN page.
Browser compatibility
Browser compatibilityCompatibility data is available on the canonical MDN page.
See also
- The WebGPU API