如果我的 vec4 为 NULL,我正在尝试检查着色器 (GLSL) 内部。我需要这个有几个原因,主要是为了让特定的显卡兼容,因为其中一些在 gl_FragColor 中传递了以前的颜色,而另一些则没有(提供需要覆盖的空 vec4)。好吧,在一台相当新的 Mac 上,有人收到了这个错误:
java.lang.RuntimeException: Error creating shader: ERROR: 0:107: '==' does not operate on 'vec4' and 'int'
ERROR: 0:208: '!=' does not operate on 'mat3' and 'int'
这是我在片段着色器中的代码:
void main()
{
if(gl_FragColor == 0) gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); //Line 107
vec4 newColor = vec4(0.0, 0.0, 0.0, 0.0);
[...]
if(inverseViewMatrix != 0) //Line 208
{
[do stuff with it; though I can replace this NULL check with a boolean]
}
[...]
gl_FragColor.rgb = mix(gl_FragColor.rgb, newColor.rgb, newColor.a);
gl_FragColor.a += newColor.a;
}
如您所见,我在开始时对 gl_FragColor 进行了 0/NULL 检查,因为有些显卡会在那里传递有价值的信息,但有些则不会。现在,在那台特殊的 Mac 上,它不起作用。我做了一些研究,但找不到有关如何在 GLSL 中进行正确 NULL 检查的任何信息。甚至有一个,还是我真的需要在这里制作单独的着色器?