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

瀏覽器相容性

另見