我在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()
吗?我真的发现了驱动程序错误吗?
答案 0 :(得分:2)
Abs()在1.30开始支持整数,在4.10版本时开始加倍。版本和类型可能是一个不明显的问题。尝试用浮点数而不是整数进行调试。如果这比通过屏幕空间着色器隔离和调试abs()没有用,并将其输出为片段颜色。