複数のレンダリング ターゲット

複数のレンダリング ターゲット

多くの実装は、複数のレンダリング ターゲットの制約を緩和した機能をサポートしている。最も緩和されているのは、別々に作成可能な複数のレンダリング ターゲットを持つことができる点である。これらのレンダリング ターゲットは、ディメンジョンは同じでなければならないが、フォーマットが同じである必要はない。パイプラインは、IDirect3DDevice9::SetRenderTarget を使って設定する単一のレンダリング ターゲットをサポートしている。これが拡張されて、デバイス上に同時に複数のレンダリング ターゲットを設定できるようになった。新しい能力フラグでこの能力を表現する。

複数のレンダリング ターゲットには、次の制限がある。

  • 一部の実装では、複数のレンダリング ターゲットのすべてのサーフェイスが、フォーマットは異なっても、ビット深度は同じでなければならない場合がある。このような制限がない実装では、能力フラグ D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS を設定してこれを示す。

    能力フラグ D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS を設定した場合、フォーマット タイプまたはビット深度に関係なく、デバイスはすべてのミックス フォーマットをサポートできる。能力フラグ D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS を設定しない場合、デバイスは 16 ビットより上の同じビット深度を含むサーフェイスに対して、ミックス フォーマット タイプをサポートできる。16 ビット深度サーフェイスに対する異なるフォーマット タイプの混在は未定義である。

  • 複数のレンダリング ターゲットのすべてのサーフェイスは、幅と高さが同じでなければならない。

  • 一部の実装では、Z テストおよびステンシル テスト以外に、ピクセル シェーダ後の処理を実行できない。つまり、ディザリング、アルファ テスト、フォグ、ブレンド、ラスタ処理、マスキングを実行できない。ピクセル シェーダ後の処理をサポートできるデバイスは、能力ビットを D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING に設定する。能力フラグ D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING を設定しない場合、USAGE_QUERY_POSTPIXELSHADER_BLENDING を指定した特定のサーフェイスの IDirect3D9::CheckDeviceFormat が何であるかに関係なく、デバイスはすべてのピクセル シェーダ後ブレンディング処理をオフにすると予測される。

    能力フラグ D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING を設定する場合は、まず特定のサーフェイス フォーマットについて、USAGE_QUERY_POSTPIXELSHADER_BLENDING を指定した IDirect3D9::CheckDeviceFormat の結果を調べる。FALSE の場合、その特定のサーフェイス フォーマットに対してピクセル シェーダ後ブレンディング処理は利用できない。TRUE の場合、デバイスは、次のようにすべての同時レンダリング ターゲットに同じステートを適用すると予測される。

    • アルファ ブレンド: oCi 内の色値を i 番目のレンダリング ターゲットとブレンドする。
    • アルファ テスト: oC0 との比較が行われる。比較が失敗した場合、すべてのレンダリング ターゲットのピクセル テストが中止される。
    • フォグ: レンダリング ターゲット 0 にフォグを適用する。その他のレンダリング ターゲットは未定義である。実装では、同じステートを使ってすべてのレンダリング ターゲットにフォグを適用する選択ができる。
    • ディザリング: 未定義。
  • アンチエイリアシングはサポートしていない。

  • 実装によっては、出力書き込みマスク (D3DRS_COLORWRITEENABLE) を適用しない場合がある。これを適用できる実装は、個別の色書き込みマスクを持っている。これは、新しい能力ビットで表される。使用可能な個別の色書き込みマスクの数は、デバイスで使用可能な要素の最大数と等しい。

  • IDirect3DDevice9::Clear は、複数のレンダリング ターゲットのすべてのサーフェイスをクリアする。

  過去においては、このアプリケーション プログラミング インターフェイス (API) が深度ステンシルの設定にも使われていた。IDirect3DDevice9::SetRenderTarget および IDirect3DDevice9::SetDepthStencilSurface で説明しているように、Microsoft® DirectX® 9.0 では、この API は分割されている。

新しいハードウェア能力

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