将cg中的矢量比较转换为glsl

将cg中的矢量比较转换为glsl,glsl,shader,Glsl,Shader,我无法将cg着色器转换为glsl 在cg中,有一行: float4 dst = tex2D(DST, i.uv); float4 outputColor = (dst > 0.5 ? 1.0 : 2.0); 当我将其转换为glsl时: vec4 dst = texture2D(DST, v_texCoord); vec4 outputColor = (dst > 0.5 ? 1.0 : 2.0); 我有一个错误: '>' : comparison operator only

我无法将cg着色器转换为glsl

在cg中,有一行:

float4 dst = tex2D(DST, i.uv);
float4 outputColor = (dst > 0.5 ? 1.0 : 2.0);
当我将其转换为glsl时:

vec4 dst = texture2D(DST, v_texCoord);
vec4 outputColor = (dst > 0.5 ? 1.0 : 2.0);
我有一个错误:

'>' : comparison operator only defined for scalars
然后我试着:

vec4 outputColor = (dst > vec4(0.5) ? 1.0 : 2.0);
还是同样的错误


任何人都可以给我一些关于如何在glsl中转换的建议?谢谢:

假设Cg比较代码实质上是将这些操作中的每一个广播到向量的4个分量,GLSL没有简单的内置方法来处理它。但它确实有办法做到这一点

现代GLSL ie:texture2D早就被丢弃的版本可以访问组件级比较函数,这些函数受您的条件影响。它们生成布尔向量,表示相应的组件是否满足条件

然后可以使用mix函数进行组件选择。但是,您必须手动执行整数广播才能使其正常工作

因此,等效的GLSL代码为:

mix(vec4(2.0), vec4(1.0), greaterThan(dst, vec4(0.5)));
是的,mix中的值顺序是向后的:为不大于第一个的错误条件取的值;真正的情况是第二种情况