标签: glsl
我需要在我的GLSL代码中多次调用这种函数。
vec2 minx(vec2 a, vec2 b) { if (a.x < b.x) return a; else return b; }
我担心过度分支。有没有办法避免if-else构造?
答案 0 :(得分:1)
我建议使用GLSL函数mix和step。
mix
step
mix根据范围[0.0,1.0]中的浮点插值a在2个值之间进行插值。如果a等于0.0,则返回第一个值,如果a等于1.0,则返回第二个值。
a
step测试值是否小于边值。如果它小于0.0则返回,否则返回1.0。
如果将两个函数组合在一起,您的代码将如下所示:
vec2 minx(vec2 a, vec2 b) { return mix( a, b, step( b.x, a.x ) ); }
注意,step的结果正好是0.0或正好是1.0,这会导致mix返回第一个值或返回第二个值。