効果 (Direct3D 9)
Microsoft DirectX 効果を使用すると、頂点シェーダーとピクセル シェーダーとパイプライン状態を統合してオブジェクトをレンダリングできます。 効果は、シェーダーを組み合わせて固有のレンダリング条件を生成する次の論理的な手順です。
効果は、さまざまなハードウェア バージョンのシェーダーを記述する便利な方法も提供します。 異なるビデオ カードではさまざまな機能がサポートされるため、アプリケーションはさまざまなデバイスで実行されるいくつかの手法を記述できます。 これにより、アプリケーションが最新かつ最も優れたハードウェアで実行されている場合、アプリケーションは最も高度な効果の手法を実行できます。 一方、より洗練されていない効果の手法は、より安価または能力の低いハードウェアで実行するように自動的に選択できます。
効果は、頂点処理と、グラフィックス パイプラインによって実行されるピクセル処理の一部を置き換えることができます。 頂点シェーダーとピクセル シェーダーを使用する効果の例は、BasicHLSL サンプルにあります。 このサンプルを入手し、DirectX SDK から学習できます。 DirectX SDK の詳細については、「 DirectX SDK はどこにありますか?」を参照してください。
効果の詳細については、次のトピックを参照してください。
次の図は、パイプラインを示しています。
パイプラインは、入力データをフレーム バッファーを埋める出力ピクセルに変換します。 入力データは、オブジェクト空間内の頂点で構成されるオブジェクト、または N パッチ、四角形パッチ、三角形パッチから作成された高次サーフェスから取得されます。 入力データがテセレーションされると、パイプラインは最終的なピクセル カラーを生成する前に、頂点処理、プリミティブ処理、およびピクセル処理を実行します。
頂点とピクセルの処理は、固定関数パイプラインによって実行することも、プログラミング可能なシェーダーで実装することもできます。 入力データテセレーション、プリミティブ処理、およびデータ出力は、パイプラインの状態によって制御されます。 これはすべて効果に統合できます。 効果は、パイプラインの機能を制御する状態を設定します。 エフェクトは、プログラム可能なシェーダーと固定関数の状態を管理します。
効果は状態を保存および復元でき、効果の実行前と同じ状態でデバイスを残すことができます。 効果が管理できる状態の種類は次のとおりです。
- シェーダーの状態。 これには、シェーダーの作成と削除、シェーダー定数の設定、シェーダーの状態の設定、シェーダーを使用したレンダリングが含まれます。
- テクスチャとサンプラーの状態。 これには、テクスチャ ファイルの指定、テクスチャ ステージの初期化、サンプラー オブジェクトの作成、サンプラーの状態の設定が含まれます。
- その他のパイプラインの状態。 これには、変換、照明、マテリアル、レンダリング オプションを設定するための状態が含まれます。 グローバル変数またはローカル変数を指定できます。 変数は、効果自体またはアプリケーションによって設定できます。
効果には、手法と呼ばれる複数のレンダリング オプションが含まれています。 各手法は、グローバル変数、パイプラインの状態、テクスチャとサンプラーの状態、シェーダーの状態をカプセル化します。 1 つのスタイルがレンダリング パスに実装されます。 1 つ以上のパスを手法でカプセル化できます。 すべてのパスと手法を検証して、効果コードがハードウェア デバイスで実行されるかどうかを確認できます。
効果は状態を管理します。 ここでは、パイプラインでレンダリング条件を指定するために必要なすべての種類の情報が含まれるため、単語の状態は非常に広く使用されます。 これには、パイプラインのほぼすべての機能領域が含まれます。
レンダリング オプションは、手法とパスによって制御されます。 アプリケーションは、1 つのアクティブな手法を設定し、1 つ以上のパスをレンダリングすることによって、効果をレンダリングします。 効果内のすべてのレンダリングは、 Begin 呼び出しと End 呼び出しの一致するペア内で実行されます。 Begin が呼び出されると、stateblock が作成され、デバイスの状態が保存されます (特に指定しない限り)。 アプリケーションがレンダリングするように指定したパスが手法によってレンダリングされた後、 End が呼び出されてアクティブな手法が終了します。 エフェクト システムは、状態ブロックでキャプチャされたパイプライン状態を自動的に復元することによって応答します (この保存および復元機能を無効にしない限り)。
複数パスレンダリングシーケンスをプログラミングする場合、それぞれが独自の状態設定を必要とします。これにより、状態の変更を追跡するために必要なハウスキーピングが減る可能性があります。 効果によって保存および復元できる状態の詳細については、「 効果の状態 (Direct3D 9)」を参照してください。
効果パラメーターは、エフェクトで宣言されたすべての非静的変数です。 これには、グローバル変数と注釈を含めることができます。 効果パラメーターは、共有キーワード (keyword)でパラメーターを宣言し、効果プールを使用して効果を作成することで、異なる効果間で共有できます。
複製された効果は、複製元の効果と同じ効果プールを使用します。 効果を複製すると、グローバル変数、手法、パス、注釈など、効果の正確なコピーが作成されます。