Rendern eines Effekts (Direct3D 11)
Ein Effekt kann verwendet werden, um Informationen zu speichern oder mit einer Gruppe von Status zu rendern. Jede Technik gibt eine Reihe von Vertex-Shadern, Hüllen-Shadern, Domänen-Shadern, Geometrie-Shadern, Pixel-Shadern, Compute-Shadern, Shaderzustand, Sampler- und Texturzustand, ungeordneten Zugriffsansichtszustand und anderen Pipelinestatus an. Sobald Sie also den Zustand in einem Effekt organisiert haben, können Sie den Renderingeffekt, der sich aus diesem Zustand ergibt, kapseln, indem Sie den Effekt erstellen und rendern.
Es gibt einige Schritte zum Vorbereiten eines Effekts für das Rendering. Die erste ist die Kompilierung, bei der HLSL wie Code mit der HLSL-Sprachsyntax und den Auswirkungsframeworkregeln überprüft wird. Sie können einen Effekt aus Ihrer Anwendung mithilfe von API-Aufrufen kompilieren, oder Sie können einen Effekt offline kompilieren, indem Sie das Effektcompiler-Hilfsprogrammfxc.exe. Nachdem der 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) mithilfe einer Reihe von Methoden zum Festlegen des Zustands initialisieren, 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. Nachdem die Effektvariablen festgelegt wurden, teilen Sie der Laufzeit mit, den Effekt durch Anwenden einer Technik zu rendern. Diese Themen werden weiter unten ausführlicher erläutert.
Natürlich gibt es Überlegungen zur Leistung bei der Verwendung von Effekten. Diese Überlegungen sind größtenteils identisch, wenn Sie keinen Effekt verwenden. Dies kann z. B. das Minimieren der Menge an Zustandsänderungen und das Organisieren der Variablen nach Aktualisierungshäufigkeit sein. Diese Taktiken werden verwendet, um die Menge der 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 im Kompilieren des Codes, um nach Syntaxproblemen zu suchen. |
| Erstellen eines Effekts |
Ein Effekt wird durch Laden des kompilierten Effekt-Bytecodes in das Effektframework erstellt. Im Gegensatz zu Effekten 10 muss der Effekt kompiliert werden, bevor der Effekt erstellt wird. In den Arbeitsspeicher geladene Effekte können durch Aufrufen von D3DX11CreateEffectFromMemory erstellt werden. |
| Festlegen des Effektzustands |
Einige Effektkonst constants 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 wird unten für jeden Variablentypen gezeigt. |
| Anwenden einer Technik |
Wenn die Konstanten, Texturen und der Shaderzustand deklariert und initialisiert sind, müssen Sie nur noch den Effektzustand auf dem Gerät festlegen. |