Ich hätte gerne zwei Pixel-Shader; das erste macht eine Sache und dann die nächste etwas anderes. Ist das möglich, oder muss ich alles in den einen Shader packen?Können Sie mehrere Pixel (Fragment) -Shader im selben Programm haben?
Antwort
Sie können dies tun, z.B. indem Funktionsaufrufe vom Haupteinstiegspunkt zu Funktionen ausgeführt werden, die in den verschiedenen Shader-Objekten implementiert sind.
main() {
callToShaderObject1()
callToShaderObject2()
}
jede dieser callToShaderObject Funktionen können in verschiedenen Shader-Objekte leben, aber alle Objekte im selben Programm gebunden und verknüpft werden, bevor sie verwendet werden kann.
Sie können nicht gleichzeitig ausgeführt werden, aber Sie können unterschiedliche Shader für verschiedene Geometrien verwenden oder in mehreren Durchgängen mit unterschiedlichen Shadern rendern.
Würde das also ein anderes Programm erfordern? Also ein anderes Programm für jeden Pass? Wie in, ich könnte einen Vertex-und Fragment-Shader auf einem Programm (was ist ein Durchgang?) Und dann einen Vertex-und Fragment-Shader auf einem anderen Programm (der zweite Durchgang?)? Kann ich glUseProgram() einfach ändern, wenn mir danach ist? Also rende ich im Wesentlichen eine Szene zweimal ...? – Harry
Genau richtig. Genau wie bei einem Multi-Pass-Render in einer festen Pipeline, aber anstatt die openGL-Einstellungen zwischen den Pässen zu ändern, laden Sie verschiedene Programme. –
- 1. OVR_multiview2 im Fragment-Shader
- 2. Implementieren Sie mehrere Ereignislistener im selben Fragment - Android
- 3. Mehrere Textureinheiten mit Fragment Shader funktionieren nicht
- 4. Mehrere GridView im selben scrollbaren Layout/Fragment hinzufügen
- 5. Fragment-Shader: Ausgangsvariablen
- 6. GLSL Fragment-Shader Syntaxfehler
- 7. Wie weiß glGetUriformBlockIndex, ob im Vertex-Shader oder im Fragment-Shader gesucht werden soll?
- 8. Können Sie mehrere Schriftfarben im ausgewählten Feld haben?
- 9. Können mehrere Dateien im selben Block gespeichert werden?
- 10. Pixel-Shader-Rückkehr immer weiß
- 11. Testattribute im Metallfragment Shader
- 12. Mehrere Parameter im URL-Fragment
- 13. SQL Query - Mehrere Joins im selben Feld
- 14. OpenGL Fragment Shader Return Festfarbe für Textur
- 15. OpenGL Programm/Shader Uninitialisierung
- 16. Einstellen der Pixel-Shader-Uniform-Variable
- 17. Pixel-Shader perfekt in Unity ShaderLab
- 18. OpenGL Fragment Shader Kompilierung Problem
- 19. OpenGL Fragment Shader in einer Textur
- 20. Mehrere Variablen im selben Maßstab in R
- 21. Bildverarbeitung im Shader und Exportergebnisse
- 22. Wie können Sie Threads im selben Prozess auflisten?
- 23. Array Indizierung in Fragment-Shader
- 24. Fragment Shader - Zeichnen einer Linie?
- 25. Mehrere Module im selben Paket notieren.json Datei
- 26. Mehrere SCNMaterials mit gemeinsam genutztem Shader
- 27. iPad - Mehrere UITableView im selben Bildschirm
- 28. Erlang: mehrere Verhaltensweisen im selben Modul definiert?
- 29. Wie können Python-Bibliotheken verschiedener Projekte im selben Paket sein?
- 30. Trivial WebGL Fragment Shader nur Rendering ersten 150 von 256 Pixel
Warum sollten Sie das aus Gründen der Kuriosität tun, anstatt einfach alle Funktionen im Fragment-Shader in Frage zu stellen? Ist das so, dass Code mit anderen Shader-Programmen geteilt werden kann, ohne dass Duplikationen nötig sind? –
@Nick: Ich habe es selbst nicht benutzt gesehen. Ich war überrascht, als ich zum ersten Mal die Spezifikation über die Idee las, Shader-Programme aus Shader-Objekten zu erstellen - daher weiß ich, dass Sie es können. Es wurde aus dem Standard-Kompiliermodell ... – Bahbar
Update: Ich habe gesehen, dass dies jetzt im Einsatz ist, während ich moded Minecraft Shader studiere. In diesem Fall war es sehr nützlich, da jeder Shader viele Optionen hat, die ein- und ausgeschaltet werden können, wobei verschiedene Effekte in Verbindung mit verschiedenen anderen funktionieren. In einem solchen Szenario und wenn mehrere Autoren beteiligt sind, wird es viel nützlicher, Funktionen in separate Dateien zu unterteilen. –