2012-11-11 129 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(),並將其輸出爲片段顏色。