在片段着色器中对浮点数取模为何出现语法错误?
片段着色器语法错误排查:强制类型转换与取模运算问题
问题描述
刚接触片段着色器,以下代码出现语法错误:
if ((int) pos.y % 9 == 1) shade = 1;
其中pos.y和shade均为浮点数,意图通过(int)转换pos.y后使用取模运算,错误提示为:
ERROR: 0:17: ')' : syntax error syntax error
检查括号数量未发现问题,需排查错误原因及解决方法。
错误原因
GLSL(OpenGL着色器语言)不支持C风格的(类型)强制转换语法,你写的(int) pos.y不符合GLSL的语法规则。着色器编译器会把这个结构解析成语法错误,误以为括号不匹配,从而抛出')'相关的语法错误提示。
解决方法
GLSL中需要使用构造函数式的类型转换,即int(pos.y)来完成浮点数到整数的转换。同时,由于shade是浮点数,赋值时建议使用1.0而非1,保持类型一致性:
if (int(pos.y) % 9 == 1) shade = 1.0;
内容的提问来源于stack exchange,提问作者Sitacious
相关产品推荐
相关产品推荐

