GLSL 中是不是有用于 AND 的内置函数,或者是不是有一些优化的方法来执行组件明智的 AND?
Posted
技术标签:
【中文标题】GLSL 中是不是有用于 AND 的内置函数,或者是不是有一些优化的方法来执行组件明智的 AND?【英文标题】: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 具有针对 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 代码。
【问题讨论】:
【参考方案1】:完全不确定这是否会更有效,但我相信您可以通过将两个 bvec3
值转换为另一种向量类型(如 uvec3
或 vec3
)来处理 and
值,使用更广泛的对这些类型进行操作(如按位与、乘法),然后再转换回来。
使用您的bvec3
值one
和two
,这些是一些选项:
bvec3(uvec3(one) & uvec3(two))
bvec3(uvec3(one) * uvec3(two))
bvec3(vec3(one) * vec3(two))
在使用它之前,您绝对应该进行基准测试。组件式表达式很有可能更快。
【讨论】:
以上是关于GLSL 中是不是有用于 AND 的内置函数,或者是不是有一些优化的方法来执行组件明智的 AND?的主要内容,如果未能解决你的问题,请参考以下文章
WebGL-Shader入门(5.着色器语言GLSL ES 内置变量和内置函数)