我有一个有意识语法错误的GLSL片段着色器。
void main()
{
// vec4 is ommitted
gl_FragColor = (1,1,0,1);
}
但是我仍然可以编译并链接它而不会出错。运行我的应用程序后 我在屏幕上看不到任何内容。这是一种奇怪的行为还是其他什么?
答案 0 :(得分:5)
您已使用逗号运算符。
您的代码会对每个逗号分隔的数字进行评估并将其全部丢弃,但最后一个除外,因此它等同于编写
gl_FragColor = (1);
其中括号仅用于分组,而不是函数调用,因此可以忽略。为向量分配单个值时,它会将该值复制到所有组件,因此您的语句与写入相同 -
gl_FragColor = vec4(1,1,1,1);
“背景”是否为白色?在这种情况下,你什么也看不见。