GPURenderBundleEncoder: setIndexBuffer() 方法

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

安全上下文: 此功能僅在安全上下文(HTTPS)中可用,且支援此功能的瀏覽器數量有限。

注意:此功能在 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 預設為 bufferGPUBuffer.size - offset

關於 indexFormat 的注意事項

indexFormat 決定了緩衝區中索引值的 GPUBuffer.size - offset。當與指定條帶圖元拓撲("line-strip""triangle-strip")的管線一起使用時,它還決定了圖元重啟值。圖元重啟值是一個索引值,指示應該開始一個新的圖元,而不是繼續使用前一個索引的頂點來構建條帶。對於 "uint16",該值為 0xFFFF;對於 "uint32",該值為 0xFFFFFFFF

返回值

無 (Undefined)。

驗證

呼叫 setIndexBuffer() 時必須滿足以下條件,否則將生成 GPUValidationError 並且 GPURenderBundleEncoder 將失效:

  • bufferGPUBuffer.usage 包含 GPUBufferUsage.INDEX 標誌。
  • offset + size 小於或等於 bufferGPUBuffer.size
  • offsetindexFormat 的位元組大小("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

瀏覽器相容性

另見