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

标签 opengl glsl shader

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通过将值转换为另一种向量类型,如 uvec3vec3 ,对这些类型使用更广泛的操作(如按位和,乘法),然后转换回来。

与您的 bvec3onetwo ,这些是几个选项:

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/

相关文章:

arrays - WebGL:将统一数组传递给着色器

c++ - 动态传递 direct3d 着色器参数

ios - 在 iOS 和 OpenGLES 2.0 中使用 sampler3D 纹理的 texture3D 查找是否可用

java - 当前线程中没有 OpenGL 上下文

windows - Windows 上的 OpenGL SDK

OpenGL 纹理数组将纹理完全渲染为黑色

opengl - 从噪声纹理推导出不确定性值?

c++ - 如何使用 OpenGL 渲染到多个纹理?

opengl - gl_NormalMatrix

opengl - GLSL 1.5 简单几何着色器