2009-05-21 4 views
1

In meiner Engine lade ich Cg-Shader aus Paaren von Vertex-/Pixel-Shader-Dateien. Ich würde gerne in der Lage sein, Shader zu kombinieren, um sie zu kombinieren (Beleuchtung + Material usw.). Haben Sie keine guten Möglichkeiten, verschiedene Shader in Cg zu stapeln, bevor Sie die Shader in separate Funktionen aufteilen und daraus eine einzelne Shader-Skript-Zeichenfolge erstellen?Cg-Shader stapeln

Antwort

2

Es klingt ein bisschen wie das, was Sie wollen, ist ähnlich wie die dynamische Shader Linking-Funktion in DirectX 11? Die Schnittstellen-Funktion von Cg ermöglicht Ihnen, ähnliche Dinge zu erreichen. Sie können Shader neu konfigurieren, so dass Sie Dinge wie die Berechnung der Beleuchtung oder die Änderung des Materialtyps einfach und sauber vornehmen können.

Angenommen, Sie möchten einen Shader schreiben, müssen jedoch die Art und Weise ändern können, wie die Beleuchtung berechnet wird. Sie könnten eine Light-Schnittstelle definieren, die eine Funktion hat, die das Licht irgendwie berechnet. Woanders implementieren Sie das Light-Interface wie zum Beispiel CoolLight und UberLight. Zur Laufzeit können Sie angeben, welche Implementierung der Light-Schnittstelle verwendet werden soll, ähnlich wie Sie andere Parameter angeben.

Um zu sehen, ob dies das ist, was Sie wollen, empfehle ich die Cg Benutzerhandbuch (http://developer.download.nvidia.com/cg/Cg_2.2/CgUsersManual.pdf) zu suchen. Wenn Sie nach "Shared Parameters and Interfaces" suchen, gibt es ein kleines Beispiel.