GLSL abs()坏了吗?

dup*_*per 10 opengl 3d graphics 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);
}
Run Code Online (Sandbox Code Playgroud)

奇怪的是,这会使模糊略微偏向左侧.但后来我用以下内容替换第三行:

uint j = i * sign(i);
Run Code Online (Sandbox Code Playgroud)

而现在它的工作就像我期望的那样.我破了abs()吗?我真的发现了驱动程序错误吗?

JAr*_*Are 3

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