2012-04-05 8 views
3

Ich habe einen Geometrieshader für meine OpenGL-Anwendung eingeführt. Meine Shader haben einige "variierende" Variablen, die ich vom Vertex-Shader zum Fragment-Shader übergebe. Jetzt, nachdem ich den Geometrieshader eingeführt habe, muss ich jeden variierenden Wert im Geometrieshader für jeden Eckpunkt manuell übergeben. Gibt es eine Möglichkeit, das zu vermeiden und Dinge "automatisch" zu tun?Übergeben variierender Variablen durch Geometrieshader

Antwort

2

Nr

Sobald Sie einen Geometrie-Shader in Ihrer Pipeline vorstellen, wenn Sie Variablen, um von dem Vertex-Shader mit dem Fragment-Shader Sie wollen manuell passieren müssen, eine Eingangsgröße von der Spitze zu schaffen Shader und eine Ausgabevariable für den Fragment-Shader. Ich weiß nicht, welche GLSL-Version Sie verwenden, aber Sie können Abschnitt 4.3.4 des GLSL 3.30 spec überprüfen.

2

Nein, weil es für nichts außer einem Noop-Geometrieshader keine sinnvolle Methode gibt. Und wenn Ihr Geometrieshader nichts mit der Geometrie zu tun hat, warum wird er überhaupt aktiviert?

Im Allgemeinen nimmt ein Geometrie-Shader eine Anzahl von Scheitelpunkten als Eingabe und erzeugt eine (andere) Anzahl von Scheitelpunkten als Ausgabe. Also, welche Eingabespitze (n) soll (n) 'automatisch' auf welche Ausgabespitze (n) gemappt werden?

+0

Ja, Sie haben Recht. In meinem Fall tut der Geometrieshader eigentlich nichts mit der Geometrie zu tun, abgesehen davon, dass er Vertices verwerfen muss, daher ist es dort sinnvoll. Aber ich verstehe, dass die Anwendung von Geometrieshadern viel breiter ist, also was ich will, ist nicht machbar. Danke für die Erklärung. – SimpleMan

+0

Es gibt sehr nützliche Geometrieshader, die die Geometrie nicht verändern. Geometrieshader sind die einzige Stelle, an der alle Eckpunkte eines Primitivs für die Berechnung verfügbar sind. Die "Single-Pass Wireframe" -Technik verwendet diese Informationen, um zusätzliche Informationen hinzuzufügen, ohne die Geometrie zu ändern. Wenn man diese Technik benutzt, ist es ein bisschen nervig alle anderen Werte zu durchlaufen. Aber wir müssen, so cest'la'vie. –