我目前正在为游戏制作简单的 UI,并且要绘制每个按钮,我需要使用 2 个管道状态(每个状态都使用相同的顶点着色器)。一种是用静态颜色片段着色器绘制边框的线条,另一种是用波纹渐变绘制按钮内部。我想知道我是否需要两个不同的渲染命令编码器,每个管道一个,或者我是否可以执行以下操作:
let encoder = command.makeRenderCommandEncoder(descriptor: renderPassDesc)
encoder.setRenderPipelineState(stateWithStaticFragmentShader)
// encode some buffers and draw line-strips
encoder.setRenderPipelineState(stateWithGradientFragmentShader)
// encode some buffers and draw button background
encoder.endEncoding()
最佳答案
是的,您可以在一个渲染命令编码器中使用多个管线状态。这正是 setRenderPipelineState()
方法存在的原因,而不是将管道状态作为渲染过程描述符的一部分的原因。渲染 channel 描述符中的属性仅在创建渲染命令编码器时读取,并且在该编码器的生命周期内无法更改。在编码器上可独立设置的任何内容都可以在其生命周期内更改。
关于swift - 我可以在一个 MTLRenderCommandEncoder 中使用多个 MTLRenderPipelineStates 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43827284/