GPURenderBundleEncoder: setVertexBuffer() 方法

实验性: 这是一个 实验性技术
在生产环境中使用此功能之前,请仔细查看 浏览器兼容性表

安全上下文: 此功能仅在 安全上下文(HTTPS)中可用,并且在某些或所有 支持的浏览器中可用。

GPURenderBundleEncoder 接口的 setVertexBuffer() 方法设置或取消设置给定插槽的当前 GPUBuffer,该插槽将为后续绘图命令提供顶点数据。

注意:此方法在功能上与 GPURenderPassEncoder 上的等效方法相同 — setVertexBuffer()

语法

js
setVertexBuffer(slot, buffer, offset, size)

参数

插槽

一个表示要设置顶点缓冲区的顶点缓冲区插槽的数字。

缓冲区

一个 GPUBuffer,表示包含要用于后续绘制命令的顶点数据的缓冲区,或者为 null,在这种情况下,给定插槽中任何先前设置的缓冲区将被取消设置。

偏移量 可选

一个数字,表示顶点数据在 buffer 中开始的偏移量(以字节为单位)。如果省略,offset 默认值为 0。

大小 可选

一个数字,表示 buffer 中包含的顶点数据的的大小(以字节为单位)。如果省略,size 默认值为 bufferGPUBuffer.size - offset

返回值

无 (未定义).

验证

调用 setVertexBuffer() 时必须满足以下条件,否则将生成 GPUValidationError 并且 GPURenderBundleEncoder 将变为无效

示例

设置顶点缓冲区

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 的浏览器中加载。

另请参阅