Sto creando uno shader sfocatura gaussiano in GLSL. Poiché il kernel della convoluzione è simmetrico, ne memorizzo metà. Scrivo:GLSL abs() rotto?
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);
}
Stranamente, questo è il disegno della sfocatura leggermente a sinistra di quello che dovrebbe essere. Ma sostituisco la terza riga con:
uint j = i * sign(i);
E ora funziona come mi aspetto. Ho rotto abs()
? Ho davvero trovato un bug del driver?
Qual è il tuo 'GL_VERSION' e' GL_SHADING_LANGUAGE_VERSION'? – Matthias
'uint j = uint (abs (i));' funziona? – Matthias
Il tuo suggerimento non funziona per me. Ho #version 420 nella parte superiore del mio file sorgente. glxinfo mostra "4.2.0 NVIDIA 304.64" e "4.20 NVIDIA tramite compilatore Cg". – dupersuper