Wykonuję cieniowanie rozmyte Gaussa w GLSL. Ponieważ jądro splotu jest symetryczne, przechowuję jego połowę. Piszę:GLSL abs() jest uszkodzony?
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);
}
To dziwne, rysuje rozmycie nieco na lewo od tego, co powinno być. Ale potem zastępuję tę trzecią linię:
uint j = i * sign(i);
A teraz działa tak, jak oczekuję. Czy złamałem numer abs()
? Czy naprawdę znalazłem błąd kierowcy?
Jakie są Twoje "GL_VERSION" i "GL_SHADING_LANGUAGE_VERSION"? – Matthias
Czy 'uint j = uint (abs (i));' działa? – Matthias
Twoja sugestia nie działa dla mnie. Mam #version 420 na górze mojego pliku źródłowego. glxinfo pokazuje "4.2.0 NVIDIA 304.64" i "4.20 NVIDIA przez kompilator Cg". – dupersuper