GPURenderBundleEncoder: setPipeline() 方法
setPipeline()
方法是 GPURenderBundleEncoder
接口的一部分,用于设置后续渲染包命令要使用的 GPURenderPipeline
。
注意:此方法在功能上与其在 GPURenderPassEncoder
上的等效方法 — setPipeline()
完全相同。
语法
js
setPipeline(pipeline)
参数
pipeline
-
用于后续渲染包命令的
GPURenderPipeline
。
返回值
无 (Undefined
).
验证
调用setPipeline()
时必须满足以下条件,否则会生成 GPUValidationError
,并且 GPURenderBundleEncoder
将变为无效状态。
- 如果
GPURenderPipeline
写入深度/模板附件的深度分量,则depthReadOnly
(在源GPUCommandEncoder.beginRenderPass()
调用的描述符中指定)为true
。 - 如果
GPURenderPipeline
写入深度/模板附件的模板分量,则stencilReadOnly
(在源GPUCommandEncoder.beginRenderPass()
调用的描述符中指定)为true
。
示例
js
function recordRenderPass(passEncoder) {
if (settings.dynamicOffsets) {
passEncoder.setPipeline(dynamicPipeline);
} else {
passEncoder.setPipeline(pipeline);
}
passEncoder.setVertexBuffer(0, vertexBuffer);
passEncoder.setBindGroup(0, timeBindGroup);
const dynamicOffsets = [0];
for (let i = 0; i < numTriangles; ++i) {
if (settings.dynamicOffsets) {
dynamicOffsets[0] = i * alignedUniformBytes;
passEncoder.setBindGroup(1, dynamicBindGroup, dynamicOffsets);
} else {
passEncoder.setBindGroup(1, bindGroups[i]);
}
passEncoder.draw(3, 1, 0, 0);
}
}
以上代码片段取自 WebGPU 示例 Animometer 示例。
规范
规范 |
---|
WebGPU # dom-gpurendercommandsmixin-setpipeline |
浏览器兼容性
BCD 表格仅在浏览器中加载