2017-05-07 105 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

謝謝,這就是我的想法,但我不確定。 –

相關問題