GLSL abs()坏了吗?

时间:2012-11-11 21:12:11

标签: 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()吗?我真的发现了驱动程序错误吗?

1 个答案:

答案 0 :(得分:2)

Abs()在1.30开始支持整数,在4.10版本时开始加倍。版本和类型可能是一个不明显的问题。尝试用浮点数而不是整数进行调试。如果这比通过屏幕空间着色器隔离和调试abs()没有用,并将其输出为片段颜色。