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()
? 드라이버 버그를 찾았나요?
당신의'GL_VERSION'과'GL_SHADING_LANGUAGE_VERSION'은 무엇입니까? – Matthias
'uint j = uint (abs (i));가 작동합니까? – Matthias
제안이 저에게 효과적이지 않습니다. 내 소스 파일 맨 위에 #version 420이 있습니다. glxinfo는 "4.2.0 NVIDIA 304.64"및 "4.20 NVIDIA via Cg 컴파일러"를 보여줍니다. – dupersuper