Freigeben über


Effekte (Direct3D 11)

Ein DirectX-Effekt ist eine Auflistung des Pipelinezustands, der durch in HLSL geschriebene Ausdrücke und eine für das Effektframework spezifische Syntax festgelegt wird.

Verwenden Sie nach dem Kompilieren eines Effekts die Effektframework-APIs zum Rendern. Die Effektfunktionalität kann von einem so einfachen Wie einem Vertex-Shader, der Geometrie transformiert, und einem Pixelshader, der eine Volltonfarbe ausgibt, bis hin zu einer Renderingtechnik, die mehrere Durchläufe erfordert, jede Phase der Grafikpipeline verwendet und den Shaderzustand sowie den Pipelinezustand bearbeitet, der nicht den programmierbaren Shadern zugeordnet 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 verwendet wird, sowie anderer nicht programmierbarer Pipelinezustand. Sie können einen Effekt im Arbeitsspeicher als Textzeichenfolge erstellen, aber in der Regel wird die Größe so groß, dass es praktisch ist, den Effektzustand in einer Effektdatei (einer Textdatei, die mit der Erweiterung .fx endet) zu speichern. Um einen Effekt zu verwenden, müssen Sie ihn kompilieren (um die HLSL-Syntax sowie die Effektframeworksyntax zu überprüfen), den Effektzustand über API-Aufrufe initialisieren und die Renderschleife so ändern, dass die Rendering-APIs aufgerufen werden.

Ein Effekt kapselt den gesamten Renderzustand, der für einen bestimmten Effekt erforderlich ist, in einer einzelnen Renderingfunktion, die als Technik bezeichnet wird. Ein Durchlauf ist eine Teilmenge einer Technik, die den Renderzustand enthält. Um einen Rendereffekt mit mehreren Durchläufen zu implementieren, implementieren Sie einen oder mehrere Durchläufe innerhalb einer Technik. Angenommen, Sie möchten eine Geometrie mit einem Satz von Tiefen-/Schablonenpuffern rendern und dann einige Sprites darüber zeichnen. Sie können das Geometrierendering im ersten Durchlauf und die Spritezeichnung im zweiten Durchlauf implementieren. Zum Rendern des Effekts rendern Sie einfach beide Durchläufe in ihrer 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 natürlich die Kompilierzeit für den Effekt. Eine Möglichkeit, diese Funktionalität auszunutzen, besteht darin, Effekte mit Techniken zu erstellen, die für die Ausführung auf unterschiedlicher Hardware konzipiert sind. Dadurch 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 in beliebiger Weise gruppiert werden. Beispielsweise könnten mehrere Gruppen erstellt werden, eine pro Material; Jedes Material könnte eine Technik für jede Hardwareebene haben; Jede Technik verfügt über einen Satz von Durchläufen, die das Material auf der jeweiligen Hardware definieren.

In diesem Abschnitt

Thema BESCHREIBUNG
Organisieren des Zustands in einem Effekt
Mit Direct3D 11 wird der Effektzustand für bestimmte Pipelinephasen nach Strukturen organisiert.
Effektsystemschnittstellen
Das Effektsystem definiert mehrere Schnittstellen zum Verwalten des Effektzustands.
Spezialisieren von Schnittstellen
ID3DX11EffectVariable verfügt über eine Reihe von Methoden zum Umwandeln der Schnittstelle in den jeweiligen Schnittstellentyp, den Sie benötigen.
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
Beim Klonen eines Effekts wird eine zweite, fast identische Kopie des Effekts erstellt.
Stream Out-Syntax
Ein Geometry-Shader mit Stream out wird mit einer bestimmten Syntax deklariert.
Unterschiede zwischen Effekten 10 und Effekten 11
In diesem Thema werden die Unterschiede zwischen Effekten 10 und Effekten 11 erläutert.

Programmieranleitung für Direct3D 11