効果のレンダリング (Direct3D 11)
効果は、情報を格納したり、状態のグループを使用してレンダリングしたりするために使用できます。 各手法では、頂点シェーダー、ハル シェーダー、ドメイン シェーダー、ジオメトリ シェーダー、ピクセル シェーダー、コンピューティング シェーダー、シェーダーの状態、サンプラーとテクスチャの状態、順序なしのアクセス ビューステート、その他のパイプライン状態のセットを指定します。 そのため、状態をエフェクトに整理したら、効果を作成してレンダリングすることで、その状態から生じるレンダリング効果をカプセル化できます。
レンダリング用の効果を準備するための手順がいくつかあります。 1 つ目は、HLSL 言語構文と効果フレームワーク規則に対して HLSL のようなコードをチェックするコンパイルです。 API 呼び出しを使用してアプリケーションから効果をコンパイルすることも、エフェクト コンパイラ ユーティリティfxc.exeを使用してオフラインで効果 を コンパイルすることもできます。 効果が正常にコンパイルされたら、別の (ただし非常によく似た) API セットを呼び出して作成します。
効果が作成された後、それを使用するための残りの 2 つの手順があります。 まず、HLSL で初期化されていない場合は、状態を設定するためのいくつかのメソッドを使用して、効果状態の値 (効果変数の値) を初期化する必要があります。 一部の変数の場合、これは効果が作成されたときに 1 回行うことができます。他のユーザーは、アプリケーションがレンダー ループを呼び出すたびに更新する必要があります。 効果変数が設定されたら、手法を適用して効果をレンダリングするようにランタイムに指示します。 これらのトピックについては、以下で詳しく説明します。
当然ながら、効果を使用する場合のパフォーマンスに関する考慮事項があります。 効果を使用していない場合、これらの考慮事項はほとんど同じです。 状態の変化の量を最小限に抑え、更新の頻度別に変数を整理するなどの処理。 これらの戦術は、CPU から GPU に送信する必要があるデータの量を最小限に抑え、同期の潜在的な問題を最小限に抑えるために使用されます。
このセクションの内容
トピック | 説明 |
---|---|
効果をコンパイルする |
効果が作成されたら、次の手順では、コードをコンパイルして構文の問題をチェックします。 |
効果を作成する |
効果は、コンパイルされた効果のバイトコードを効果フレームワークに読み込むことで作成されます。 効果 10 とは異なり、効果を作成する前に、効果をコンパイルする必要があります。 メモリに読み込まれた効果は、 D3DX11CreateEffectFromMemory を呼び出すことによって作成できます。 |
効果の状態を設定する |
一部の効果定数は初期化する必要があります。 初期化されると、効果の状態は、レンダー ループ全体のデバイスに設定されます。 他の変数は、レンダー ループが呼び出されるたびに更新する必要があります。 各種類の変数について、効果変数を設定するための基本的なコードを次に示します。 |
手法を適用する |
定数、テクスチャ、シェーダーの状態を宣言して初期化すると、デバイスで効果の状態を設定するだけで済みます。 |