Dies soll zwar ein Forum für Fortgeschrittene sein, aber Shader sind mehr und mehr auch ein Thema für Anfänger wie ich. Deshalb wage ich es, hier zu posten
Also, ich habe einige grundsätzliche Verständnisfragen zu Shadern, mir ist die Infrastruktur nicht so ganz klar. Wenn ich das richtig verstehe, kann die fixed Pipeline an zwei Stellen (die zur Zeit auch schon als "deprecated" gekennzeichnet sind) aufgebrochen und mit eigenem Code, den Shadern, überbrückt werden. Ein Vertex-Shader und/oder ein Fragment-Shader werden zu einem Shaderprogramm verbunden und in die OpenGL-Pipeline eingeklinkt. Das bedeutet ja, dass nur ein einziges Programm mit maximal 2 Shadern aktiv sein kann.
Nun las ich im OpenGL-Redbook, dass man beliebig viele Shader und auch mehrere Shader-Programme bereitstellen kann. Wie passt das zu der Annahme oben? In Wirklichkeit werden ja in einem 3D-Programm die verschiedensten Shader mit jeweils speziellen Funktionen gebraucht, zwischen denen ständig hin- und hergeschaltet wird. Mal werden scharfkantige Objekte gerendert, dann im selben Frame Terrains mit Multitexturing usw. In allen Tutorial-Beispielen, auch im DGL-Tutorial von Sascha Wilms (das ansonsten sehr gut ist), wird immer nur der einfache Fall mit einem Vertex-Shader, einem Fragment-Shader und einem Shaderprogramm vorgestellt.
Ich vermute mal (ohne sicher zu sein), dass je nach Situation das eine oder andere aktiviert bzw. deaktiviert werden muss, sofern man den ganzen erforderlichen "Shader-Stuff" im voraus kompiliert. Aber so ein Shader-Management erfordert ja auch gewisse Strategien, um effektiv und rationell vorgehen zu können. Gibt es dazu Infos? Oder liege ich total verkehrt, und alles kann in ein einziges Shaderpaar gepackt werden?
|