GPURenderPassEncoder: setIndexBuffer() 方法

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

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

setIndexBuffer() 方法属于 GPURenderPassEncoder 接口,用于设置当前 GPUBuffer,该缓冲区将为后续的绘制命令提供索引数据。

语法

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,并且 GPURenderPassEncoder 将变为无效

  • bufferGPUBuffer.usage 包含 GPUBufferUsage.INDEX 标志。
  • offset + size 小于或等于 bufferGPUBuffer.size
  • offsetindexFormat 的字节大小的倍数(对于 "uint16" 为 2,对于 "uint32" 为 4)。

示例

在 WebGPU 示例 Shadow Mapping 中,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

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参见