使用gl_FragColor对比vec4颜色?

时间:2018-07-21 19:53:09

标签: opengl glsl

gl_FragColor被弃用似乎有很多歧义。例如,GLSL 4.40 specification中缺少它,但GLSL 4.60 specification中却包含了它。

最安全,最兼容,最受支持的策略是什么?使用gl_FragColor还是定义out vec4 color这样的着色器输出?

2 个答案:

答案 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