opengl – GLSL中是否有内置函数用于AND,或者是否有一些优化方法用于组件明智的AND?

GLSL具有用于lessThan,greaterThan等的组件智能函数,它们返回bvec.

还有any()和all(),但似乎没有和().

如果我有两个bvec3并想要一个新的bvec3,相当于:

bvec3 new = bvec3(two.x && one.x, two.y && one.y, two.z && one.z);

是否有更快的方式或更优化的方式来做到这一点?

我正在尝试编写高度优化的GLSL代码.

最佳答案 根本不确定这是否会更有效,但我相信你可以通过将它们转换为另一种矢量类型(如uvec3或vec3)来实现两个bvec3值,并对这些类型使用更广泛的操作(如按位和乘法) ,然后转换回来.

您的bvec3值为1和2,这些是几个选项:

bvec3(uvec3(one) & uvec3(two))
bvec3(uvec3(one) * uvec3(two))
bvec3(vec3(one) * vec3(two))

在使用它之前你应该确定基准.组件表达式更快的可能性很大.

点赞