Rendern eines Effekts (Direct3D 10)
Ein Effekt kann verwendet werden, um Informationen zu speichern oder mit einer Gruppe von Status zu rendern. Jede Technik gibt Vertex-Shader, Geometrie-Shader, Pixel-Shader, Shaderzustand, Sampler- und Texturzustand sowie andere 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 mithilfe des Effektcompiler-Hilfsprogramms kompilieren. 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. 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, die Auswirkung durch Anwenden einer Technik zu rendern. Diese Themen werden weiter unten ausführlicher erläutert.
- Kompilieren eines Effekts (Direct3D 10)
- Erstellen eines Effekts (Direct3D 10)
- Festlegen des Effektzustands (Direct3D 10)
- Anwenden einer Technik (Direct3D 10)
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 beispielsweise das Minimieren der Menge an Zustandsänderungen oder das Organisieren der Variablen sein, die nach Häufigkeit aktualisiert werden müssen. 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.