opengl - GLSL abs() 坏了?

标签 opengl graphics 3d driver glsl

我正在 GLSL 中制作高斯模糊着色器。由于卷积核是对称的,所以我存储了一半。我写道:

vec3 glow = vec3(0.0);
for (int i = -WIDTH; i <= WIDTH; i++) {
    uint j = abs(i);
    glow += kernel[j] + texelFetch(u_glowTexture, coord + ivec2(i, 0), 0);
}

奇怪的是,这将模糊效果稍微偏向了应有的左侧。但随后我将第三行替换为:

uint j = i * sign(i);

现在它正在像我预期的那样工作。我是否破坏了 abs()?我真的发现了驱动程序错误吗?

最佳答案

Abs() 从 1.30 版本开始支持整数,从 4.10 版本开始支持 double 。可能是版本和类型方面存在不明显的问题。尝试使用 float 而不是整数进行调试。如果这没有帮助,请通过屏幕空间着色器隔离和调试 abs() 并将其输出用作片段颜色。

关于opengl - GLSL abs() 坏了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13335507/

相关文章:

c - OpenGL实际更新屏幕需要多长时间?

java - 如何用Java制作Panel、Frame等来显示图形?

3d - 为什么我的处理应用程序无法运行?

c++ - 如何在我的 OpenGL 应用程序中实现准确(但可变)的 FPS 限制/上限?

c++ - OpenGL,围绕一个点的旋转仍然围绕原点不起作用

macos - 使用 OpenGL 在 Mac OSX El Capitan 上渲染 Glitch

Apache HTTPD 配置可视化

javascript - 使用 jquery 制作 3d 效果

c++ - 在C++中删除数组导致程序崩溃

c - 根据点旋转一个物体