GLSL片段着色器怪异的if-else行为,导致编译器错误

时间:2019-12-24 10:07:37

标签: opengl graphics glsl shader fragment-shader

编译片段着色器时出现一个奇怪的错误。错误日志显示:

Error in Shader compilation: 0(226) : error C0000: syntax error, unexpected ',', expecting "::" at token ","

上下文是我正在使用片段着色器计算场景灯光,我的想法是,如果没有灯光,则对象的输出颜色必须是其环境颜色,否则必须是黑色,进行光照计算(这将考虑环境颜色)。

因此,环境颜色是穿过制服的vec4,我也有3个int制服来传递一定数量的定向光,点光源和点光源。当我尝试执行下一个代码时:

vec4 colorOutput = vec4(vec3(0.0), 1.0);
if((u_CurrentSPLights + u_CurrentDirLights + u_CurrentPointLights) > 0)
    colorOutput = u_AmbientColor;

它给出了提到的编译错误。但是,如果删除if语句和“ colorOutput = u_AmbientColor”行,并保留所有其他着色器代码不变,则它将按预期进行编译和工作。

我已经研究了一段时间,但我仍然不明白为什么像if语句这样简单的事情(语法上似乎没有错)会产生该编译错误。

更新:即使我在“ vec4 colorOutput = ...”行之后注释了两行,它仍然崩溃,但是如果我删除它们,它就可以工作了……这非常令人困惑。这可能与下一行有关,这是3个for循环穿过灯光以计算其效果的3个循环,如下所示:

for(int i = 0; i < u_CurrentDirLights; ++i)
        colorOutput += CalculateDirectionalLight(DirLightsArray[i], normalVec, viewDirection, !u_TextureEmpty);

0 个答案:

没有答案