Effekte (Direct3D 9)
Ein Microsoft DirectX-Effekt ermöglicht die Integration von Vertex- und Pixelshadern in den Pipelinezustand, um Objekte zu rendern. Effekte sind der nächste logische Schritt bei der Kombination von Shadern, um eindeutige Renderbedingungen zu erzeugen.
Effekte bieten auch eine bequeme Möglichkeit, Shader für verschiedene Hardwareversionen zu schreiben. Da verschiedene Grafikkarten unterschiedliche Funktionen unterstützen, kann eine Anwendung mehrere Techniken schreiben, die auf einer Vielzahl von Geräten ausgeführt werden. Auf diese Weise kann die Anwendung, wenn die Anwendung auf der neuesten und besten Hardware ausgeführt wird, die anspruchsvollste Effekttechnik ausführen. Andererseits können weniger anspruchsvolle Effekttechniken automatisch ausgewählt werden, um auf weniger teurer oder weniger leistungsfähiger Hardware ausgeführt zu werden.
Ein Effekt kann die Vertexverarbeitung und einen Teil der Pixelverarbeitung ersetzen, die von der Grafikpipeline ausgeführt wird. Ein Beispiel für einen Effekt, der einen Vertexshader und einen Pixelshader verwendet, finden Sie im BasicHLSL-Beispiel. Sie können dieses Beispiel aus dem DirectX SDK abrufen und mehr darüber erfahren. Informationen zum DirectX SDK finden Sie unter Wo befindet sich das DirectX SDK?.
Weitere Informationen zu Effekten finden Sie in den folgenden Themen:
Das folgende Diagramm zeigt die Pipeline.
Die Pipeline transformiert Eingabedaten in Ausgabepixel, die den Framepuffer füllen. Die Eingabedaten stammen von Objekten, die aus Scheitelpunkten im Objektraum oder oberflächen höherer Ordnung bestehen, die aus N-Patches, Rechtecks und Dreieckspatches erstellt wurden. Nachdem die Eingabedaten tesselliert wurden, führt die Pipeline Vertexverarbeitung, Grundtypverarbeitung und Pixelverarbeitung durch, bevor die endgültigen Pixelfarben generiert werden.
Die Vertex- und Pixelverarbeitung kann von der Pipeline mit festen Funktionen oder mit programmierbaren Shadern implementiert werden. Die Tesselation von Eingabedaten, die primitive Verarbeitung und die Datenausgaben werden durch den Pipelinezustand gesteuert. All dies kann in einen Effekt integriert werden. Ein Effekt legt den Zustand fest, der die Funktionsweise der Pipeline steuert. Effekte verwalten programmierbare Shader sowie den festen Funktionszustand.
Effekte können den Zustand speichern und wiederherstellen, sodass sich das Gerät im gleichen Zustand wie vor der Ausführung des Effekts befindet. Zu den Zustandstypen, die ein Effekt verwalten kann, gehören:
- Shaderstatus. Dies umfasst das Erstellen und Löschen von Shadern, das Festlegen von Shaderkonstanten, das Festlegen des Shaderzustands und das Rendern mit Shadern.
- Textur- und Samplerzustand. Dazu gehören das Angeben von Texturdateien, das Initialisieren von Texturphasen, das Erstellen von Samplerobjekten und das Festlegen des Samplersstatus.
- Anderer Pipelinestatus. Dies umfasst Zustände zum Festlegen von Transformationen, Beleuchtung, Materialien und Renderingoptionen. Dies können globale oder lokale Variablen sein. Die Variablen können entweder durch den Effekt selbst oder durch die Anwendung festgelegt werden.
Effekte enthalten mehrere Renderingoptionen, die als Techniken bezeichnet werden. Jede Technik kapselt globale Variablen, den Pipelinezustand, den Textur- und Samplerzustand sowie den Shaderzustand. Ein einzelner Stil wird in einem Renderingdurchlauf implementiert. Ein oder mehrere Durchläufe können in einer Technik gekapselt werden. Alle Durchläufe und Techniken können überprüft werden, um festzustellen, ob der Effektcode auf dem Hardwaregerät ausgeführt wird.
Effekte verwalten den Zustand. Das Wort state wird hier sehr allgemein verwendet, da es alle Arten von Informationen enthält, die die Pipeline zum Angeben der Renderbedingungen benötigt. Dies umfasst nahezu alle Funktionsbereiche der Pipeline.
Renderingoptionen werden durch Techniken und Durchläufe gesteuert. Eine Anwendung rendert einen Effekt, indem sie eine aktive Technik festlegt und einen oder mehrere Durchläufe rendert. Das gesamte Rendering in einem Effekt erfolgt innerhalb eines übereinstimmenden Paars von Begin - und End-Aufrufen . Wenn Begin aufgerufen wird, wird ein Stateblock erstellt und der Gerätezustand gespeichert (sofern Sie nichts anderes angeben). Nachdem eine Technik die Durchläufe gerendert hat, die die Anwendung zum Rendern angibt, wird End aufgerufen, um die aktive Technik zu beenden. Das Effektsystem antwortet, indem der im Statusblock erfasste Pipelinestatus automatisch wiederhergestellt wird (es sei denn, Sie deaktivieren diese Speicher- und Wiederherstellungsfunktion).
Beim Programmieren von Renderingsequenzen mit mehreren Durchgängen, für die jeweils ein eigenes Zustandssetup erforderlich ist, können Effekte die für die Nachverfolgung von Zustandsänderungen erforderliche Housekeeping verringern. Weitere Informationen zu den Zuständen, die durch Effekte gespeichert und wiederhergestellt werden können, finden Sie unter Effektzustände (Direct3D 9).
Effektparameter sind alle nicht statischen Variablen, die in einem Effekt deklariert werden. Dies kann globale Variablen und Anmerkungen umfassen. Effektparameter können zwischen verschiedenen Effekten gemeinsam verwendet werden, indem Parameter mit dem freigegebenen Schlüsselwort (keyword) deklariert und dann der Effekt mit einem Effektpool erstellt wird.
Geklonte Effekte verwenden den gleichen Effektpool wie der Effekt, aus dem sie geklont werden. Beim Klonen eines Effekts wird eine exakte Kopie eines Effekts erstellt, einschließlich globaler Variablen, Techniken, Pässen und Anmerkungen.