【发布时间】:2017-02-21 16:01:22
【问题描述】:
OpenGL ES 3.0 规范的一部分对我来说并不完全清楚。
https://www.khronos.org/registry/Ope...s_spec_3.0.pdf,第 185 页:
如果 OpenGL ES Shading Language 1.00 片段着色器写入 gl_FragColor 或 gl_FragData,DrawBuffers 指定绘制缓冲区,如果 任何,其中由 gl_FragColor 定义的单个片段颜色或 gl_FragData[0] 被写入。如果 OpenGL ES Shading Language 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)的程序。
2) 另一方面,如果我使用 OpenGL ES 3.0 并使用 GLSL 3.0 编写我的着色器,那么我可以编写一个片段着色器,其输出定义为单个 variing out 变量,并且通过调用 DrawBuffers() 动态打开和关闭对 COLOR1 的写入,无需交换 glPrograms。
上面说的对吗?
【问题讨论】:
标签: opengl-es