Tho*_*mas 6 opengl shader glsl
GLSL 有lessThan、greaterThan等组件明智的函数,它们返回bvec.
还有any()和all(),但好像没有and()。
如果我有两个bvec3s 并且想要一个新的bvec3,相当于:
bvec3 new = bvec3(two.x && one.x, two.y && one.y, two.z && one.z);
Run Code Online (Sandbox Code Playgroud)
有没有更快的方法或更优化的方法来做到这一点?
我正在尝试编写高度优化的 GLSL 代码。
完全不确定这是否会更有效,但我相信您可以通过将and两个bvec3值转换为另一种向量类型(如uvec3or )来完成vec3,对这些类型使用更广泛的运算(如按位与、乘法),然后转换后退。
根据您的bvec3价值观one和two,有以下几种选择:
bvec3(uvec3(one) & uvec3(two))
bvec3(uvec3(one) * uvec3(two))
bvec3(vec3(one) * vec3(two))
Run Code Online (Sandbox Code Playgroud)
在使用它之前你绝对应该进行基准测试。按组件表达的速度很有可能更快。