2017-05-07 181 views
2

我目前正在为一款游戏制作简单的用户界面,并绘制每个需要使用2个流水线状态(每个相同顶点着色器)的按钮。一个为边界绘制线条,使用静态颜色片段着色器,另一个使用渐变渐变绘制按钮的内部。我想知道如果我需要两个不同的渲染指令编码器,每一个管道,或者如果我能做到以下几点:我可以在一个MTLRenderCommandEncoder中使用多个MTLRenderPipelineState吗?

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() 

回答

3

是的,你可以使用多个管道状态在一个渲染指令编码器。这正是为什么存在setRenderPipelineState()方法的原因,而不是流水线状态是渲染过程描述符的一部分。渲染过程描述符中的属性仅在创建渲染命令编码器时读取,并且在编码器的生存期内无法更改。编码器上可独立设置的任何东西都可以在其使用期限内进行更改。

+0

谢谢,这就是我的想法,但我不确定。 –

相关问题