10

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

4

1 回答 1

2

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

于 2012-11-12T02:46:05.993 回答