次の方法で共有


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

ピクセル パイプライン