GPURenderPassEncoder:setIndexBuffer() 方法
注意:此功能在 Web Workers 中可用。
GPURenderPassEncoder 接口的 setIndexBuffer() 方法用于设置当前将为后续绘图命令提供索引数据的 GPUBuffer。
语法
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 既决定了缓冲区中索引值的数据类型,也决定了(当与指定条带图元拓扑("line-strip" 或 "triangle-strip")的管线一起使用时)图元重启值。图元重启值是一个索引值,表示应该开始一个新图元,而不是继续使用先前的索引顶点来构建条带。对于 "uint16",该值为 0xFFFF;对于 "uint32",该值为 0xFFFFFFFF。
返回值
无 (Undefined)。
验证
调用 setIndexBuffer() 时必须满足以下条件,否则会生成 GPUValidationError,并且 GPURenderPassEncoder 会失效:
buffer的GPUBuffer.usage包含GPUBufferUsage.INDEX标志。offset+size小于或等于buffer的GPUBuffer.size。offset是indexFormat的字节大小("uint16"为 2,"uint32"为 4)的倍数。
示例
在 WebGPU Samples 的 阴影映射 示例中,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 |
浏览器兼容性
加载中…