Freigeben über


Effekte (Direct3D 11)

Ein DirectX-Effekt ist eine Auflistung von Pipelinestatus, die von Ausdrücken festgelegt wird, die in HLSL- geschrieben wurden, und einige Syntax, die speziell für das Effektframework ist.

Verwenden Sie nach dem Kompilieren eines Effekts die Effektframework-APIs zum Rendern. Effektfunktionen können von einem einfachen Vertex-Shader reichen, der Geometrie und einen Pixel-Shader transformiert, der eine Volltonfarbe ausgibt, zu einer Renderingtechnik, die mehrere Durchläufe erfordert, jede Phase der Grafikpipeline verwendet und den Shaderzustand sowie den Pipelinestatus bearbeitet, der nicht mit den programmierbaren Shadern verknüpft ist.

Der erste Schritt besteht darin, den Zustand zu organisieren, den Sie in einem Effekt steuern möchten. Dazu gehören Shaderstatus (Vertex, Hull, Domäne, Geometrie, Pixel und Compute-Shader), Textur- und Samplerzustand, der von den Shadern und anderen nicht programmierbaren Pipelinestatus verwendet wird. Sie können einen Effekt im Arbeitsspeicher als Textzeichenfolge erstellen, aber in der Regel wird die Größe groß genug, um den Effektstatus in einer Effektdatei zu speichern (eine Textdatei, die in einer FX-Erweiterung endet). Um einen Effekt zu verwenden, müssen Sie ihn kompilieren (um die HLSL-Syntax sowie die Syntax des Effektframeworks zu überprüfen), den Effektstatus über API-Aufrufe initialisieren und die Renderschleife so ändern, dass die Rendering-APIs aufgerufen werden.

Ein Effekt kapselt den gesamten Renderzustand, der von einem bestimmten Effekt benötigt wird, in einer einzigen Renderingfunktion, die als Technik bezeichnet wird. Bei einem Pass handelt es sich um einen Teilsatz einer Technik, die den Renderzustand enthält. Um einen Mehrfachdurchlaufrenderingeffekt zu implementieren, implementieren Sie einen oder mehrere Übergaben innerhalb einer Technik. Angenommen, Sie wollten einige Geometrien mit einem Satz von Tiefen-/Schablonenpuffern rendern und dann einige Sprites darüber zeichnen. Sie könnten das Geometrierendering im ersten Durchlauf und die Sprite-Zeichnung im zweiten Durchlauf implementieren. Um den Effekt zu rendern, rendern Sie einfach beide Übergeben in der Renderschleife. Sie können eine beliebige Anzahl von Techniken in einem Effekt implementieren. Je größer die Anzahl der Techniken ist, desto größer ist die Kompilierungszeit für den Effekt. Eine Möglichkeit, diese Funktionalität auszunutzen, besteht darin, Effekte mit Techniken zu erstellen, die auf unterschiedlicher Hardware ausgeführt werden sollen. Auf diese Weise kann eine Anwendung die Leistung basierend auf den erkannten Hardwarefunktionen ordnungsgemäß herabstufen.

Eine Reihe von Techniken kann in einer Gruppe gruppiert werden (die die Syntax "fxgroup") verwendet. Techniken können beliebig gruppiert werden. So könnten beispielsweise mehrere Gruppen pro Material erstellt werden; jedes Material könnte eine Technik für jede Hardwareebene haben; jede Technik hätte eine Reihe von Durchläufen, die das Material auf der jeweiligen Hardware definieren.

In diesem Abschnitt

Thema Beschreibung
Organisationsstatus in einem Effekt
Bei Direct3D 11 wird der Effektstatus für bestimmte Pipelinephasen nach Strukturen organisiert.
Effektsystemschnittstellen
Das Effektsystem definiert mehrere Schnittstellen zum Verwalten des Effektzustands.
Spezialisiert auf Schnittstellen
ID3DX11EffectVariable verfügt über eine Reihe von Methoden zum Umwandeln der Schnittstelle in den gewünschten Schnittstellentyp.
Schnittstellen und Klassen in Effekten
Es gibt viele Möglichkeiten, Klassen und Schnittstellen in Effects 11 zu verwenden.
Rendern eines Effekts
Ein Effekt kann zum Speichern von Informationen oder zum Rendern mithilfe einer Gruppe von Status verwendet werden.
Klonen eines Effekts
Das Klonen eines Effekts erzeugt eine zweite, fast identische Kopie des Effekts.
StreamOutsyntax
Ein Geometrie-Shader mit Streamout wird mit einer bestimmten Syntax deklariert.
Unterschiede zwischen Effekten 10 und Effekten 11
In diesem Thema werden die Unterschiede zwischen Effekten 10 und Effekt 11 gezeigt.

Programmierhandbuch für Direct3D 11-