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