次の方法で共有


vs_3_0の頂点テクスチャ (DirectX HLSL)

頂点シェーダー 3.0 モデルでは、 texldl - vs texture load ステートメントを使用した頂点シェーダーでのテクスチャ参照がサポートされています。 頂点エンジンには、 D3DVERTEXTEXTURESAMPLER0、D3DVERTEXTEXTURESAMPLER1、D3DVERTEXTEXTURESAMPLER2、D3DVERTEXTEXTURESAMPLER3 という名前の 4 つのテクスチャ サンプラー ステージが含まれています。 これらは、ピクセル エンジンのディスプレイスメント マップ サンプラーとテクスチャ サンプラーとは異なります。

これら 4 つのステージで設定されたテクスチャをサンプリングするには、頂点エンジンを使用し、 CheckDeviceFormat メソッドを使用してステージをプログラムします。 SetTexture を使用して、ステージ インデックス D3DVERTEXTEXTURESAMPLER0 から D3DVERTEXTEXTURESAMPLER3 を使用して、これらのステージでテクスチャを設定します。 頂点テクスチャ サンプラーを表す(ps_2_0のように) サンプラー レジスタである頂点シェーダーに新しいレジスタが導入されました。 このレジスタは、使用する前にシェーダーで定義する必要があります。

アプリケーションでは、D3DUSAGE_QUERY_VERTEXTEXTUREを使用して CheckDeviceFormat を呼び出すことによって、頂点テクスチャとして形式がサポートされているかどうかを照会できます。

注意

これはクエリ フラグであるため、Createxxx 関数では受け入れられません。 既定のプールで作成された頂点テクスチャは、ピクセル テクスチャとして設定でき、その逆も可能です。 ただし、ソフトウェア頂点処理を使用するには、頂点テクスチャをスクラッチ プールに作成する必要があります (混合モード デバイスかソフトウェア頂点処理装置かにかかわらず)。

 

この機能は、次の点を除き、ピクセル テクスチャと同じです。

  • 異方性テクスチャ フィルタリングはサポートされていないため、D3DSAMP_MAXANISOTROPYは無視され、D3DTEXF_ANISOTROPICを虫眼鏡に設定したり、これらのステージに縮小したりすることはできません。
  • 変更率情報は使用できないので、アプリケーションは詳細レベルを計算し、その情報を texldl - vs にパラメーターとして指定する必要があります。

次のような制約があります。

  • ピクセル シェーダーと同様に、マルチエレメント テクスチャがサポートされている場合は、D3DSAMP_ELEMENTINDEXを使用して、サンプリング元の要素を把握します。
  • これらのステージでは、状態D3DSAMP_DMAPOFFSETは無視されます。
  • CheckDeviceFormat with D3DUSAGE_QUERY_VERTEXTEXTURE" を使用してテクスチャに対してクエリを実行し、頂点テクスチャとして使用できるかどうかを確認します。
  • VertexTextureFilterCaps は、頂点テクスチャ サンプラーで許可されるフィルターの種類を示します。 D3DPTFILTERCAPS_MINFANISOTROPIC とD3DPTFILTERCAPS_MAGFANISOTROPICは許可されていません。

サンプリング ステージ レジスタ

サンプリング ステージ レジスタは、テクスチャ ロード ステートメントで使用できるサンプリング ユニットを識別します。 サンプリング ユニットはテクスチャ サンプリング ステージに対応し、 SetSamplerState で提供されるサンプリング固有の状態をカプセル化します。

各サンプラーは、 SetTexture を使用して対応するサンプラーに設定された単一のテクスチャ サーフェスを一意に識別します。 ただし、同じテクスチャ サーフェスを複数のサンプラーで設定できます。

描画時に、テクスチャをレンダー ターゲットとテクスチャとしてステージで同時に設定することはできません。

vs_3_0では 4 つのサンプラーがサポートされているため、1 つのシェーダー パスで最大 4 つのテクスチャ サーフェスを読み取ることができます。 サンプラー レジスタは、テクスチャ 読み込みステートメントの引数としてのみ表示される場合があります: texldl - vs

vs_3_0では、サンプラーを使用する場合は、シェーダー プログラムの開始時に( ps_2_0のように) dcl_samplerType (sm3 - vs asm) を使用して宣言する必要があります。

ソフトウェア処理

この機能は、ソフトウェア頂点処理でサポートされます。 サポートされている特定のフィルターの種類は、 GetDeviceCaps を 呼び出して VertexTextureFilterCaps を確認することで確認できます。 発行されたすべてのテクスチャ形式は、ソフトウェアの頂点処理で頂点テクスチャとしてサポートされます。

アプリケーション チェックは、CheckDeviceFormat を呼び出して (D3DVERTEXTEXTURESAMPLER |D3DUSAGE_SOFTWAREPROCESSING)使用として。 ソフトウェア頂点処理では、すべての形式がサポートされています。 スクラッチ プールは、ソフトウェアの頂点処理に必要です。

API の変更

   
// New define
#define D3DVERTEXTEXTURESAMPLER0 (D3DDMAPSAMPLER+1)
#define D3DVERTEXTEXTURESAMPLER1 (D3DDMAPSAMPLER+2)
#define D3DVERTEXTEXTURESAMPLER2 (D3DDMAPSAMPLER+3)
#define D3DVERTEXTEXTURESAMPLER3 (D3DDMAPSAMPLER+4)
    

#define D3DVERTEXTEXTURESAMPLER  (0x00100000L)

// New caps field in D3DCAPS9
DWORD VertexTextureFilterCaps;

頂点パイプライン