GLSL 具有 lessThan
的组件智能功能, greaterThan
等,它们返回 bvec
.
还有any()
和 all()
,但似乎没有and()
.
如果我有两个 bvec3
s 并想要一个新的 bvec3
, 相当于:
bvec3 new = bvec3(two.x && one.x, two.y && one.y, two.z && one.z);
有没有更快或更优化的方法来做到这一点?
我正在尝试编写高度优化的 GLSL 代码。
最佳答案
完全不确定这是否会更有效,但我相信您可以执行 and
两个 bvec3
通过将值转换为另一种向量类型,如 uvec3
或 vec3
,对这些类型使用更广泛的操作(如按位和,乘法),然后转换回来。
与您的 bvec3
值 one
和 two
,这些是几个选项:
bvec3(uvec3(one) & uvec3(two))
bvec3(uvec3(one) * uvec3(two))
bvec3(vec3(one) * vec3(two))
在使用它之前,您绝对应该进行基准测试。组件方式的表达式很有可能更快。
关于opengl - GLSL 中是否有用于 AND 的内置函数,或者是否有一些优化的方法来执行组件明智的 AND?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24599502/