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