OpenGL ES 3.0規範的一部分對我來說並不完全清楚。OpenGL ES 3.0:寫入多個緩衝區
https://www.khronos.org/registry/Ope...s_spec_3.0.pdf,第185頁:
如果一個OpenGL ES着色語言1.00片段着色器寫入 gl_FragColor或gl_FragData,DrawBuffers指定繪製緩衝區,如果 任何,到其中的單個片段的顏色由gl_FragColor定義或者 寫入gl_FragData [0]。如果一個OpenGL ES着色語言3.00 片段着色器寫入用戶定義的變化出變量, DrawBuffers指定一組繪製緩衝區成各由這些變量所限定的 多輸出顏色可單獨 寫入。
我此瞭解以下方式:
1)如果我使用OpenGL ES 3.0和寫入使用GLSL 1.0着色器,那麼唯一的辦法可以寫至2個緩衝器一次(COLOR0和COLOR1)是手動指定在片段着色器中寫入gl_FragData [0]和gl_FragData [1]的內容。如果我然後想回到僅寫入COLOR0,我必須將glPrograms切換爲只寫入gl_FragData [0](或gl_FragColor)的glPrograms。 2)如果另一方面我使用OpenGL ES 3.0並使用GLSL 3.0編寫我的着色器,那麼我可以編寫一個片段着色器,其輸出被定義爲單個變量,變量爲變量,並且動態地開啓並且關閉通過調用DrawBuffers()寫入COLOR1,而不需要交換glPrograms。
以上是否正確?
謝謝。還有一個問題(我想我應該試着做而不是問你):規範似乎是說即使使用GLSL 1.0,我仍然可以動態地將gl_FragColor的輸出重定向到任何COLOR_ATTACHMENTi,對於任何有附件的我,都通過簡單的調用DrawBuffers()? – Leszek
從未嘗試過說實話;我曾經使用過MRT支持的唯一原因是我實際上有多個渲染目標;從來沒有試圖重新映射它們。 – solidpixel