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