Freigeben über


Rendern eines Effekts (Direct3D 11)

Ein Effekt kann verwendet werden, um Informationen zu speichern oder mithilfe einer Gruppe von Status zu rendern. Jede Technik gibt einen Satz von Vertex-Shadern, Hull-Shadern, Domänenshadern, Geometrie-Shadern, Pixel-Shadern, Compute-Shadern, Shaderstatus, Sampler- und Texturzustand, ungeordneten Zugriffsansichtsstatus und anderen Pipelinestatus an. Sobald Sie also den Zustand in einem Effekt organisiert haben, können Sie den Renderingeffekt kapseln, der sich aus diesem Zustand ergibt, indem Sie den Effekt erstellen und rendern.

Es gibt einige Schritte zum Vorbereiten eines Effekts für das Rendern. Die erste ist das Kompilieren, das den HLSL-ähnlichen Code anhand der HLSL-Sprachsyntax und der Effektframeworkregeln überprüft. Sie können einen Effekt aus Ihrer Anwendung mithilfe von API-Aufrufen kompilieren oder einen Effekt offline kompilieren, indem Sie das Effektcompiler-Hilfsprogramm fxc.exeverwenden. Nachdem ihr Effekt erfolgreich kompiliert wurde, erstellen Sie ihn, indem Sie einen anderen (aber sehr ähnlichen) Satz von APIs aufrufen.

Nachdem der Effekt erstellt wurde, gibt es zwei verbleibende Schritte für die Verwendung. Zunächst müssen Sie die Effektzustandswerte (die Werte der Effektvariablen) initialisieren, indem Sie eine Reihe von Methoden zum Festlegen des Zustands verwenden, wenn sie nicht in HLSL initialisiert werden. Bei einigen Variablen kann dies einmal erfolgen, wenn ein Effekt erstellt wird. Andere müssen jedes Mal aktualisiert werden, wenn Ihre Anwendung die Renderschleife aufruft. Sobald die Effektvariablen festgelegt sind, weisen Sie die Laufzeit an, den Effekt zu rendern, indem Sie eine Technik anwenden. Diese Themen werden weiter unten ausführlich erläutert.

Natürlich gibt es Leistungsüberlegungen für die Verwendung von Effekten. Diese Überlegungen sind weitgehend identisch, wenn Sie keinen Effekt verwenden. Dinge wie die Minimierung der Anzahl von Zustandsänderungen und das Organisieren der Variablen nach Häufigkeit der Aktualisierung. Diese Taktiken werden verwendet, um die Menge an Daten zu minimieren, die von der CPU an die GPU gesendet werden müssen, und daher potenzielle Synchronisierungsprobleme zu minimieren.

In diesem Abschnitt

Thema BESCHREIBUNG
Kompilieren eines Effekts
Nachdem ein Effekt erstellt wurde, besteht der nächste Schritt darin, den Code zu kompilieren, um auf Syntaxprobleme zu überprüfen.
Erstellen eines Effekts
Ein Effekt wird erstellt, indem der kompilierte Effektbytecode in das Effektframework geladen wird. Im Gegensatz zu Effekt 10 muss der Effekt vor dem Erstellen des Effekts kompiliert werden. In den Arbeitsspeicher geladene Effekte können durch Aufrufen von D3DX11CreateEffectFromMemory erstellt werden.
Festlegen des Effektzustands
Einige Effektkonstanten müssen nur initialisiert werden. Nach der Initialisierung wird der Effektzustand für die gesamte Renderschleife auf das Gerät festgelegt. Andere Variablen müssen jedes Mal aktualisiert werden, wenn die Renderschleife aufgerufen wird. Der grundlegende Code zum Festlegen von Effektvariablen ist unten für jeden Variablentyp dargestellt.
Anwenden einer Technik
Wenn die Konstanten, Texturen und Shaderzustände deklariert und initialisiert sind, müssen Sie nur noch den Effektzustand auf dem Gerät festlegen.

Effekte (Direct3D 11)