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

浏览器兼容性

另见