GPURenderBundleEncoder: setIndexBuffer() 方法
注意:此功能在 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默认为buffer的GPUBuffer.size-offset。
关于 indexFormat 的注意事项
indexFormat 决定了缓冲区中索引值的 GPUBuffer.size - offset。当与指定条带图元拓扑("line-strip" 或 "triangle-strip")的管线一起使用时,它还决定了图元重启值。图元重启值是一个索引值,指示应该开始一个新的图元,而不是继续使用前一个索引的顶点来构建条带。对于 "uint16",该值为 0xFFFF;对于 "uint32",该值为 0xFFFFFFFF。
返回值
无 (Undefined)。
验证
调用 setIndexBuffer() 时必须满足以下条件,否则将生成 GPUValidationError 并且 GPURenderBundleEncoder 将失效:
buffer的GPUBuffer.usage包含GPUBufferUsage.INDEX标志。offset+size小于或等于buffer的GPUBuffer.size。offset是indexFormat的字节大小("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 |
浏览器兼容性
加载中…