GPURenderPassEncoder:setIndexBuffer() 方法
注意:此功能在 Web Workers 中可用。
GPURenderPassEncoder 介面的 setIndexBuffer() 方法用於設定當前將為後續繪圖命令提供索引資料的 GPUBuffer。
語法
js
setIndexBuffer(buffer, indexFormat, offset, size)
引數
buffer-
一個表示包含要用於後續繪圖命令的索引資料的緩衝區的
GPUBuffer。 indexFormat-
一個列舉值,用於定義
buffer中包含的索引資料的格式。可能的值為:"uint16""uint32"
offset可選-
一個數字,表示
buffer中索引資料開始位置的位元組偏移量。如果省略,offset預設為 0。 size可選-
一個數字,表示
buffer中包含的索引資料的位元組大小。如果省略,size預設為buffer的GPUBuffer.size-offset。
關於 indexFormat 的說明
indexFormat 既決定了緩衝區中索引值的資料型別,也決定了(當與指定條帶圖元拓撲("line-strip" 或 "triangle-strip")的管線一起使用時)圖元重啟值。圖元重啟值是一個索引值,表示應該開始一個新圖元,而不是繼續使用先前的索引頂點來構建條帶。對於 "uint16",該值為 0xFFFF;對於 "uint32",該值為 0xFFFFFFFF。
返回值
無 (Undefined)。
驗證
呼叫 setIndexBuffer() 時必須滿足以下條件,否則會生成 GPUValidationError,並且 GPURenderPassEncoder 會失效:
buffer的GPUBuffer.usage包含GPUBufferUsage.INDEX標誌。offset+size小於或等於buffer的GPUBuffer.size。offset是indexFormat的位元組大小("uint16"為 2,"uint32"為 4)的倍數。
示例
在 WebGPU Samples 的 陰影對映 示例中,setIndexBuffer() 在每個動畫幀中被用於兩個獨立的渲染通道:一個用於繪製主模型,另一個用於繪製其陰影。請參閱示例程式碼列表以獲取完整上下文。
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-setindexbuffer |
瀏覽器相容性
載入中…