複数要素テクスチャ (Direct3D 9)

従来のテクスチャは、単一要素のテクスチャと見なされます。 複数要素テクスチャを使用すると、アプリケーションはピクセル シェーダーからテクスチャの複数の要素に同時に書き込みを行うことができます。 次のレンダリング パスの結果は、アプリケーションで 1 つ以上の要素を単一要素テクスチャとして使用できることです。つまり、ピクセル シェーダーへの入力として使用できます。 これらの追加の要素は、アプリケーションによって後で渡される中間結果の一時ストアと考えることができます。

この機能を公開するハードウェアの第 1 世代には、次の制限があります。

  • すべての複数要素テクスチャ サーフェスが自動的に割り当てられます。 この制限に対処するには、複数の RGBA チャネルがインターリーブされた新しい種類のサーフェス形式として扱います。
  • 複数の要素テクスチャのすべての要素は、同じビット深度を持つことができます。 この制限は、新しいサーフェス形式の名前で表されます。
  • 複数要素テクスチャをプライマリ/表示可能にすることはできません。 つまり、画面外のみである必要があります。 この制限は、サーフェス形式の列挙によって表されます。
  • ディザリング、アルファ テスト、フォギング、ブレンド、ラスター操作、マスクは使用できません。 z テストとステンシル テストを除き、ピクセル後シェーダー処理は行われません。
  • テクスチャをミップマップにすることはできません。 mip チェーンの作成は失敗します。
  • 同じ要素をレンダー ターゲットと同時にテクスチャとして設定することはできません。 ただし、同じ複数要素テクスチャサーフェスの異なる要素は、同時にテクスチャとレンダーターゲットにすることができます。
  • アンチエイリアシングはサポートされていません。
  • テクスチャとして使用する場合、複数要素のテクスチャ サーフェスをフィルター処理することはできません。 この制限は、 CheckDeviceFormat を使用して確認できます。
  • 複数要素のテクスチャ サーフェスをロックすることはできません。
  • 通常のテクスチャと同様に、さまざまなステージにそれぞれを割り当てることで、複数の複数要素テクスチャ サーフェスを同時に使用できます。
  • 複数要素テクスチャ サーフェスは、他のテクスチャ形式と同様に、読み取り操作でのガンマ変換を 2.2 から 1.0 にサポートします。
  • 一部の実装では、出力書き込みマスク (D3DRS_COLORWRITEENABLE) が適用されません。 独立したカラーライトマスクを持つことができます。 これは、新しい機能ビットを使用して表されます。 使用できる独立したカラー ライト マスクの数は、デバイスが使用可能な要素の最大数と等しくなります。
  • [クリア] を選択すると、レンダー ターゲットとして設定されている複数要素テクスチャのすべての要素がクリアされます。

複数要素テクスチャの使用方法は、次の手順に従います。

  1. アプリケーションは、複数要素テクスチャ形式の可用性を確認することで、この機能のサポートを検出します。
  2. アプリケーションは、 CreateTexture を呼び出してこれらのサーフェスを作成します。
  3. アプリケーションは 、SetRenderTarget 呼び出しを使用して、サーフェスをレンダー ターゲットとして設定します。 ピクセル シェーダーは、 mov - ps 命令を使用してサーフェスに出力を提供します。
  4. SetTexture は、複数要素のテクスチャ サーフェスを特定のステージに設定するために呼び出されます。 他のテクスチャと同様に、同じサーフェスを一度に複数のステージに設定できます。
  5. SetSamplerState は、サンプラーがサンプリングする複数要素テクスチャの適切な要素番号にD3DSAMP_ELEMENTINDEXを設定するために呼び出されます。 この状態の既定値は 0 です。これは、複数要素以外のテクスチャが機能することを意味します。 この状態を不適切な数に設定すると、未定義の動作が発生します。複数要素のテクスチャが 2 つの要素のみであり、たとえば、サンプラーが 4 番目の要素からサンプリングするように求められる場合です。

API のサポート

複数要素テクスチャをサポートする API 要素の概要を次に示します。

  • D3DFMT_MULTI2_ARGB8サーフェス形式は、形式のインターリーブされた性質を表します。

  • D3DSAMP_ELEMENTINDEXサンプラーの状態は、使用する要素インデックスを示します。

  • 次のレンダリング状態では、複数要素テクスチャがサポートされています。

    • D3DRS_COLORWRITEENABLE1
    • D3DRS_COLORWRITEENABLE2
    • D3DRS_COLORWRITEENABLE3

    D3DRS_COLORWRITEENABLEレンダー ターゲット (または要素) ゼロに適用されます。

  • D3DPMISCCAPS_INDEPENDENTWRITEMASKS フラグは、デバイスが複数の要素テクスチャまたは複数のレンダー ターゲットに対して独立した書き込みマスクをサポートしていることを示します。

ピクセル パイプライン