複数のレンダー ターゲット (Direct3D 9)
複数のレンダー ターゲット (MRT) とは、1 つの描画関数の読み出しによって複数のサーフェス (「IDirect3D9Surface」を参照) をレンダリングする機能です。これらのサーフェスは、互いに独立して作成できます。レンダー ターゲットは、IDirect3DDevice9::SetRenderTarget を使用して設定できます。
複数のレンダー ターゲットには次の制限があります。
D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS CAP が設定されていない限り、一緒に使用されるレンダー ターゲットはビット深度が同じでなければなりません。
複数のレンダー ターゲットのすべてのサーフェスは、幅と高さが同じでなければなりません。
一部の実装では、複数のレンダー ターゲットで Z テストおよびステンシル テスト以外にピクセル シェーダー後の処理を実行できません。つまり、ディザリング、アルファ テスト、フォグ、ブレンディング、マスキングを実行できません。ピクセル シェーダー後の処理をサポートできるデバイスは、CAP ビットを D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING に設定します。
D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING CAP を設定する場合は、まず特定のサーフェス フォーマットについて、USAGE_QUERY_POSTPIXELSHADER_BLENDING を指定した IDirect3D9::CheckDeviceFormat の結果を調べる必要があります。FALSE の場合、その特定のサーフェス フォーマットに対してピクセル シェーダー後ブレンディング処理は利用できません。TRUE の場合、デバイスは、次のようにすべての同時レンダー ターゲットに同じステートを適用すると予測されます。
- アルファ ブレンディング:oCi 内のカラー値を i 番目のレンダー ターゲットとブレンドします。
- アルファ テスト:oC0 との比較が行われます。比較が失敗した場合、すべてのレンダー ターゲットのピクセル テストが中止されます。
- フォグ:レンダー ターゲット 0 にフォグを適用します。その他のレンダー ターゲットは未定義です。実装では、同じステートを使ってすべてのレンダー ターゲットにフォグを適用する選択ができます。
- ディザリング:不定です。
アンチエイリアシングはサポートされていません。
実装によっては、出力書き込みマスク (D3DRS_COLORWRITEENABLE) を適用しない場合があります。これを適用できる実装は、個別の色書き込みマスクを持っています。これは新しい能力ビットで表されます。使用可能な個別の色書き込みマスクの数は、デバイスで使用可能な要素の最大数と等しくなります。
新しいハードウェア CAP:
D3DCAPS9.NumSimultaneousRTs
// The value is 1 for all hardware except those that
// can support this feature. It is never 0.
D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS - True if the hardware can support it
D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING - True if the hardware can support it