GPURenderBundleEncoder: setIndexBuffer() 方法
注意:此功能在 Web Workers 中可用。
GPURenderBundleEncoder 介面的 setIndexBuffer() 方法用於設定將為後續繪圖命令提供索引資料的當前 GPUBuffer。
注意: 此方法與 GPURenderPassEncoder 上的等效方法 setIndexBuffer() 功能相同。
語法
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 決定了緩衝區中索引值的 GPUBuffer.size - offset。當與指定條帶圖元拓撲("line-strip" 或 "triangle-strip")的管線一起使用時,它還決定了圖元重啟值。圖元重啟值是一個索引值,指示應該開始一個新的圖元,而不是繼續使用前一個索引的頂點來構建條帶。對於 "uint16",該值為 0xFFFF;對於 "uint32",該值為 0xFFFFFFFF。
返回值
無 (Undefined)。
驗證
呼叫 setIndexBuffer() 時必須滿足以下條件,否則將生成 GPUValidationError 並且 GPURenderBundleEncoder 將失效:
buffer的GPUBuffer.usage包含GPUBufferUsage.INDEX標誌。offset+size小於或等於buffer的GPUBuffer.size。offset是indexFormat的位元組大小("uint16"為 2,"uint32"為 4)的倍數。
示例
js
// …
const bundleEncoder = device.createRenderBundleEncoder(descriptor);
bundleEncoder.setPipeline(pipeline);
bundleEncoder.setBindGroup(0, sceneBindGroupForRender);
bundleEncoder.setBindGroup(1, modelBindGroup);
bundleEncoder.setVertexBuffer(0, vertexBuffer);
bundleEncoder.setIndexBuffer(indexBuffer, "uint16");
bundleEncoder.drawIndexed(indexCount);
const renderBundle = bundleEncoder.finish();
// …
規範
| 規範 |
|---|
| WebGPU # dom-gpurendercommandsmixin-setindexbuffer |
瀏覽器相容性
載入中…