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 具有针对 lessThangreaterThan 等的组件智能函数,它们返回 bvec

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

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

以上是关于GLSL 中是不是有用于 AND 的内置函数,或者是不是有一些优化的方法来执行组件明智的 AND?的主要内容,如果未能解决你的问题,请参考以下文章

glsl 内置数学函数

WebGL-Shader入门(5.着色器语言GLSL ES 内置变量和内置函数)

OPENGL ES 2.0 知识串讲 ——GLSL 语法(IV)

Dart 中是不是有用于复制目录的内置函数?

OpenGL着色器语言GLSL资料汇编

OpenGL着色器语言GLSL资料汇编