使用gl_FragColor与输出vec4颜色?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用gl_FragColor与输出vec4颜色?相关的知识,希望对你有一定的参考价值。

关于gl_FragColor被弃用似乎有很多含糊之处。例如,它在GLSL 4.40 specification中缺失,但它包含在GLSL 4.60 specification中。

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

答案

是的,gl_FragColor已被弃用。您应该使用以下语法:

layout(location = 0) out vec4 diffuseColor;

它包含在7.1.7. Compatibility Profile Built-In Language Variables部分的GLSL 4.60规范中。这意味着,如果您创建核心上下文,则此变量将不可用。

另一答案

如果您仔细阅读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,则消耗的片段颜色未定义。

这意味着你不能在gl_FragColor中使用OpenGL Core profile Context,因为它已被弃用,但它仍然可以在兼容性配置文件中使用。

从片段着色器写入输出缓冲区的现代方法是声明user-defined output variables并使用Layout Qualifiers

以上是关于使用gl_FragColor与输出vec4颜色?的主要内容,如果未能解决你的问题,请参考以下文章

WebGL着色器绘制一个点

OpenGL 与 GLSL 版本号

视觉基础篇14 # 如何使用片元着色器进行几何造型?

GLSL版本的区别和对比

将 OpenGL 片段着色器设置为仅通过漫反射减少 vec4 色点的 RGB 值,而不是 alpha

gl_FragColor 值是不是应该标准化?