GLSL中两个整数的比较

GLSL中两个整数的比较,glsl,Glsl,我想构建一个片段着色器,我意识到glsl 1.5.0中两个int之间的比较将始终返回false。我在方法参数中使用整数作为枚举。这是一个简单的问题,这段代码有相同的结果 void main(){ int x=5; #如果(x==5) gl_FragColor=vec4(1.0); #否则 gl_FragColor=vec4(1.0,0.0,0.0,1.0); #恩迪夫 } 我尝试了这段代码,条件x==int(2)将始终返回true void main(){ int x=5; #如果(x==in

我想构建一个片段着色器,我意识到glsl 1.5.0中两个int之间的比较将始终返回false。我在方法参数中使用整数作为枚举。这是一个简单的问题,这段代码有相同的结果

void main(){
int x=5;
#如果(x==5)
gl_FragColor=vec4(1.0);
#否则
gl_FragColor=vec4(1.0,0.0,0.0,1.0);
#恩迪夫
}
我尝试了这段代码,条件
x==int(2)
将始终返回true

void main(){
int x=5;
#如果(x==int(2))
gl_FragColor=vec4(1.0);
#否则
gl_FragColor=vec4(1.0,0.0,0.0,1.0);
#恩迪夫
}
那么,我应该怎么做才能以正确的方式比较两个整数呢?

\if
\else
\endif
都是预处理器语句。但
intx=5是一个局部变量。预处理器处理源字符串,它是协同编译过程的一部分,但它是在实际编译之前完成的。变量
x
对预处理器没有意义

预处理器的
x
可以定义如下:

#定义x 5
#如果(x==5)
gl_FragColor=vec4(1.0);
#否则
gl_FragColor=vec4(1.0,0.0,0.0,1.0);
#恩迪夫
但是glsl
if
语句以关键字
if
开头,后跟bool表达式和语句。可选,后跟关键字
else
和另一条语句:

intx=5;
如果(x==5)
{
gl_FragColor=vec4(1.0);
}
其他的
{
gl_FragColor=vec4(1.0,0.0,0.0,1.0);
}
在这种情况下,可以跳过大括号,因为在每种情况下只有一条语句

注意,也可以使用三元运算符:

gl\u FragColor=x==5?vec4(1.0):vec4(1.0,0.0,0.0,1.0);
这些都可以详细阅读。“3.3预处理器”章节对预处理器进行了说明,“6.2选择”章节中规定了
if
语句,以及“5.8赋值”章节中的三元运算符