GPURenderPassEncoder: drawIndexed() 方法

可用性有限

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

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

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

GPURenderPassEncoder 接口的 drawIndexed() 方法根据通过 setVertexBuffer()setIndexBuffer() 提供的顶点和索引缓冲区来绘制索引图元。

语法

js
drawIndexed(indexCount)
drawIndexed(indexCount, instanceCount)
drawIndexed(indexCount, instanceCount, firstIndex)
drawIndexed(indexCount, instanceCount, firstIndex, baseVertex)
drawIndexed(indexCount, instanceCount, firstIndex, baseVertex, firstInstance)

参数

indexCount

一个定义要绘制的索引数量的数字。

instanceCount 可选

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

firstIndex 可选

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

baseVertex 可选

在索引顶点缓冲区之前添加到每个索引值中的数字。如果省略,baseVertex 默认为 0。

firstInstance 可选

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

返回值

无 (Undefined)。

示例

在 WebGPU 示例 阴影映射 中,drawIndexed() 在每个动画帧的两个单独的渲染通道中使用,一个用于填充阴影缓冲区,另一个用于绘制场景的主要视图。请研究示例代码列表以了解完整上下文。

js
// …

const commandEncoder = device.createCommandEncoder();
{
  const shadowPass = commandEncoder.beginRenderPass(shadowPassDescriptor);
  shadowPass.setPipeline(shadowPipeline);
  shadowPass.setBindGroup(0, sceneBindGroupForShadow);
  shadowPass.setBindGroup(1, modelBindGroup);
  shadowPass.setVertexBuffer(0, vertexBuffer);
  shadowPass.setIndexBuffer(indexBuffer, "uint16");
  shadowPass.drawIndexed(indexCount);

  shadowPass.end();
}
{
  const renderPass = commandEncoder.beginRenderPass(renderPassDescriptor);
  renderPass.setPipeline(pipeline);
  renderPass.setBindGroup(0, sceneBindGroupForRender);
  renderPass.setBindGroup(1, modelBindGroup);
  renderPass.setVertexBuffer(0, vertexBuffer);
  renderPass.setIndexBuffer(indexBuffer, "uint16");
  renderPass.drawIndexed(indexCount);

  renderPass.end();
}

// …

规范

规范
WebGPU
# dom-gpurendercommandsmixin-drawindexed

浏览器兼容性

另见