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

Hes*_*dsi 2 opengl glsl

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

void main()
{
    // vec4 is ommitted
    gl_FragColor = (1,1,0,1);
} 
Run Code Online (Sandbox Code Playgroud)

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

jco*_*der 5

您已使用逗号运算符.

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

gl_FragColor = (1);
Run Code Online (Sandbox Code Playgroud)

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

gl_FragColor = vec4(1,1,1,1);
Run Code Online (Sandbox Code Playgroud)

"背景"是白色的吗?在这种情况下,你什么都看不到.