我正在 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/