次の方法で共有


複数のレンダー ターゲット (Direct3D 9)

複数のレンダー ターゲット (MRT) とは、1 回の描画呼び出しで複数のサーフェスにレンダリングする機能を指します (IDirect3D9Surface参照)。 これらのサーフェスは、互いに独立して作成できます。 レンダー ターゲットは、IDirect3DDevice9::SetRenderTargetを使用して設定できます。

複数のレンダー ターゲットには、次の制限があります。

  • 一緒に使用されるすべてのレンダー ターゲット サーフェスは、同じビット深度を持つ必要がありますが、D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHSキャップが設定されていない限り、異なる形式にすることができます。

  • 複数のレンダー ターゲットのすべてのサーフェスの幅と高さが同じである必要があります。

  • 一部の実装では、z テストとステンシル テストを除き、ディザリング、アルファ テスト、曇りなし、ブレンドまたはマスクなしなど、複数のレンダー ターゲットに対してピクセル後シェーダー操作を実行できません。 ピクセル後シェーダー操作をサポートできるデバイスは、キャップ ビットをD3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDINGに設定します。

    D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDINGキャップが設定されている場合は、最初に IDirect3D9::CheckDeviceFormatを調べて、特定のサーフェス形式のUSAGE_QUERY_POSTPIXELSHADER_BLENDING結果を確認する必要があります。 false の場合、その特定のサーフェス形式に対してピクセル後シェーダー ブレンド操作は使用できません。 true の場合、デバイスは次のように、すべての同時レンダー ターゲットに同じ状態を適用する必要があります。

    • アルファ ブレンド: oCi のカラー値は、ith レンダー ターゲットとブレンドされます。
    • アルファ テスト: oC0 との比較が行われます。 比較が失敗した場合、すべてのレンダー ターゲットに対してピクセル テストが終了します。
    • 霧: レンダー ターゲット 0 は霧が発生します。 その他のレンダー ターゲットは未定義です。 実装では、すべて同じ状態を使用して、それらを霧にすることを選択できます。
    • ディザリング: 未定義。
  • アンチエイリアシングはサポートされていません。

  • 一部の実装では、出力書き込みマスク (D3DRS_COLORWRITEENABLE) が適用されません。 可能なものは、独立した色の書き込みマスクを持つことができます。 これは、新しい機能ビットを使用して表されます。 使用可能な独立色書き込みマスクの数は、デバイスで使用可能な要素の最大数に等しくなります。

新しいハードウェアキャップ:

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

ピクセル パイプライン