次の方法で共有


複数のレンダー ターゲット (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