GLSL 330 core片段着色器切换Linux gcc后编译报错如何解决?
问题原因
你遇到的编译错误是向量维度不匹配导致的,和GLSL版本、glad配置无关:
你定义的ambient为vec4类型,但diffuse、specular均为vec3类型,三者执行加法运算时维度不一致。不同平台的GLSL编译器校验严格度不同,Windows下部分显卡驱动会对这类小问题做隐式兼容处理,而Linux下的Mesa驱动对GLSL规范的执行更严格,因此会直接抛出编译错误。
修复步骤
- 修改ambient变量的定义,统一光照计算的维度为3维向量:
将原代码
vec4 ambient = ambientStrength * vec4(ambLig,1.0);
替换为
vec3 ambient = ambientStrength * ambLig;
- 调整最后一行FragColor的计算逻辑,将光照结果转为4维向量后再和纹理采样值运算:
FragColor = texture(texture0, TexCoord) * vec4(ambient + diffuse + specular, 1.0);
修改后即可正常编译运行。
内容的提问来源于stack exchange,提问作者agent25
相关产品推荐
相关产品推荐

