gl_FragColor
被弃用似乎有很多歧义。例如,GLSL 4.40 specification中缺少它,但GLSL 4.60 specification中却包含了它。
最安全,最兼容,最受支持的策略是什么?使用gl_FragColor
还是定义out vec4 color
这样的着色器输出?
答案 0 :(得分:1)
是的,gl_FragColor
已过时。您应该使用以下语法:
layout(location = 0) out vec4 diffuseColor;
它包含在GLSL 4.60规范的7.1.7. Compatibility Profile Built-In Language Variables
下。这意味着,如果您创建核心上下文,则此变量将不可用。
答案 1 :(得分:1)
如果您仔细阅读GLSL 4.40 specification,则会在“ 7.1.1兼容性配置文件内置语言变量” 一章中找到gl_FragCoord
。在GLSL 4.60 specification中。
使用兼容性配置文件时,以下片段输出变量在片段着色器中可用:
out vec4 gl_FragColor; out vec4 gl_FragData[gl_MaxDrawBuffers];
写入
gl_FragColor
指定随后的固定功能管线将使用的片段颜色。如果后续的固定功能消耗了片段颜色,并且片段着色器可执行文件的执行未将值写入gl_FragColor
,则所消耗的片段颜色未定义。
这意味着您不能在OpenGL Core profile Context中使用gl_FragColor
,因为它已被弃用,但是在兼容性配置文件中仍然可以使用。
从片段着色器写入输出缓冲区的现代方法是声明user-defined output variables并使用Layout Qualifiers。