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