2012-11-11 131 views
8

我正在GLSL中制作高斯模糊着色器。由于卷积核是对称的,因此我存储了其中的一半。我写道:GLSL abs()损坏?

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

什么是您的GL_VERSION和GL_SHADING_LANGUAGE_VERSION? – Matthias

+0

uint j = uint(abs(i));'工作吗? – Matthias

+0

你的建议不适合我。我的源文件顶部有#version 420。 glxinfo通过Cg编译器显示“4.2.0 NVIDIA 304.64”和“4.20 NVIDIA”。 – dupersuper

回答

1

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