【问题标题】:Is there a built-in function in GLSL for AND or is there some optimized method for doing component wise AND?GLSL 中是否有用于 AND 的内置函数,或者是否有一些优化的方法来执行组件明智的 AND?
【发布时间】:2014-07-06 19:23:15
【问题描述】:

GLSL 具有针对 lessThangreaterThan 等的组件智能函数,它们返回 bvec

还有any()all(),不过好像没有and()

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

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

有没有更快或更优化的方法来做到这一点?

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

【问题讨论】:

    标签: opengl glsl shader


    【解决方案1】:

    完全不确定这是否会更有效,但我相信您可以通过将两个 bvec3 值转换为另一种向量类型(如 uvec3vec3)来处理 and 值,使用更广泛的对这些类型进行操作(如按位与、乘法),然后再转换回来。

    使用您的bvec3onetwo,这些是一些选项:

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

    在使用它之前,您绝对应该进行基准测试。组件式表达式很有可能更快。

    【讨论】:

      猜你喜欢
      • 2020-11-11
      • 1970-01-01
      • 1970-01-01
      • 2011-12-19
      • 1970-01-01
      • 2017-04-10
      • 2018-04-24
      • 1970-01-01
      • 2018-02-18
      相关资源
      最近更新 更多