GLSL abs() broken?



我在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()并将其用作片段颜色。

相关内容

  • 没有找到相关文章

最新更新