我在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版本进行双打。版本和类型可能是一个毫无意义的问题。尝试使用浮子而不是int进行调试。如果没有帮助,则通过屏幕空间着色器分离和调试ABS()并将其用作片段颜色。