GPURenderBundleEncoder: setIndexBuffer() 方法

实验性: 这是一个 实验性技术
在生产环境中使用此功能之前,请仔细查看 浏览器兼容性表

安全上下文:此功能仅在 安全上下文(HTTPS)中可用,在某些或所有 支持的浏览器 中。

setIndexBuffer() 方法是 GPURenderBundleEncoder 接口的一个方法,它设置当前将为后续绘图命令提供索引数据的 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 既决定了缓冲区中索引值的类型,又在与指定了带状图元拓扑("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

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅