GPURenderBundleEncoder: draw() 方法

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

注意:此功能在 Web Workers 中可用。

GPURenderBundleEncoder 接口的 draw() 方法会根据 setVertexBuffer() 提供的顶点缓冲区来绘制图元。

注意: 此方法在功能上与其在 GPURenderPassEncoder 上的对应方法 — draw() — 完全相同。

语法

js
draw(vertexCount)
draw(vertexCount, instanceCount)
draw(vertexCount, instanceCount, firstVertex)
draw(vertexCount, instanceCount, firstVertex, firstInstance)

参数

vertexCount

一个定义要绘制的顶点数的数字。

instanceCount 可选

一个定义要绘制的实例数量的数字。如果省略,instanceCount 默认为 1。

firstVertex 可选

一个数字,定义从顶点缓冲区开始绘制的偏移量(以顶点为单位)。如果省略,firstVertex 默认为 0。

firstInstance 可选

一个定义要绘制的第一个实例的数字。如果省略,firstInstance 默认为 0。

返回值

无 (Undefined)。

示例

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 示例

规范

规范
WebGPU
# dom-gpurendercommandsmixin-draw

浏览器兼容性

另见