Ich mache einen Gaussian Blur Shader in GLSL. Da der Faltungskern symmetrisch ist, speichere ich die Hälfte davon. Ich schreibe:GLSL abs() gebrochen?
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);
}
Seltsamerweise zeichnet dies die Unschärfe etwas links von dem, was es sein sollte. Aber dann ersetze ich diese dritte Zeile mit:
uint j = i * sign(i);
Und jetzt funktioniert es, wie ich es erwarte. Habe ich abs()
gebrochen? Habe ich wirklich einen Treiberfehler gefunden?
Was ist Ihre 'GL_VERSION' und' GL_SHADING_LANGUAGE_VERSION'? – Matthias
Funktioniert? Uint j = uint (abs (i))? – Matthias
Ihr Vorschlag funktioniert nicht für mich. Ich habe # Version 420 an der Spitze meiner Quelldatei. glxinfo zeigt "4.2.0 NVIDIA 304.64" und "4.20 NVIDIA via Cg compiler". – dupersuper