Seite 1 von 1

Shader Attribut nur aktiv wenn es benutzt wird?

Verfasst: 28.04.2014, 18:18
von Lichtweite
Hallo,

ich spiele seit ein paar Tage mit OpenGL rum und mir ist ein merkwürdiges Verhalten aufgefallen. Wenn ich mir die aktiven Attribute und Uniforms von meinem Shader anzeigen lasse, dann sind diese aktiv oder halt nicht in Abhängigkeit ob deren Verwendung auch zu einem Ergebnis im Fragment-Shader führt, also wenn ich z.B. allen Beleuchtungskram weg lasse und somit die Normals nicht wirklich zur Farbe des Pixels beitragen, dann wird dieses Attribut auch nicht von OpenGL aktiviert und ich erhalte auch eine -1 bei GetAttribLocation zurück, obwohl ich die Normals noch per in vec4 s_vNormals; im Vertex-Shader drin stehen habe.

Das ist vielleicht alles blöd beschrieben, aber kennt wer solch ein Verhalten?

Re: Shader Attribut nur aktiv wenn es benutzt wird?

Verfasst: 28.04.2014, 19:24
von Artificial Mind
Hallo!

Der OGL-Compiler darf in der Optimierung sämtliche Attribute und Uniforms rauswerfen (und damit die Locations auf -1 setzen) wenn diese nicht zum Endergebnis beitragen.
Insbesondere wenn du deine Lichtberechnung drin lässt aber nur ne Konstante rausschreibst, wirft der auch alles weg. Eigentlich ist das ein sehr schönes Feature.

Re: Shader Attribut nur aktiv wenn es benutzt wird?

Verfasst: 28.04.2014, 19:25
von Ingrater
Der shader compiler von OpenGL optimiert in der Regel alle attributes and uniforms weg die nicht zum Ergebnis beitragen, das ist normal. Wenn du erzwingen willst, dass sie auftauchen musst du "ergebnis += variable * 0.0001" oder so einbauen.

Re: Shader Attribut nur aktiv wenn es benutzt wird?

Verfasst: 28.04.2014, 19:39
von Lichtweite
Besten Dank für die Antwort und ich habe fast einen ganzen Tag wie ein Irrer den Code debuggt :lol: