为什么这个GLSL代码编译和链接,即使它有语法错误?

时间:2013-04-11 12:43:42

标签: opengl glsl

我有一个有意识语法错误的GLSL片段着色器。

void main()
{
    // vec4 is ommitted
    gl_FragColor = (1,1,0,1);
} 

但是我仍然可以编译并链接它而不会出错。运行我的应用程序后 我在屏幕上看不到任何内容。这是一种奇怪的行为还是其他什么?

1 个答案:

答案 0 :(得分:5)

您已使用逗号运算符。

您的代码会对每个逗号分隔的数字进行评估并将其全部丢弃,但最后一个除外,因此它等同于编写

gl_FragColor = (1);

其中括号仅用于分组,而不是函数调用,因此可以忽略。为向量分配单个值时,它会将该值复制到所有组件,因此您的语句与写入相同 -

gl_FragColor = vec4(1,1,1,1);

“背景”是否为白色?在这种情况下,你什么也看不见。