vs_3_0 (DirectX HLSL 中的頂點紋理)

頂點著色器 3.0 模型支援使用 texldl - vs texture load 語句在頂點著色器中的紋理查閱。 頂點引擎包含四個紋理取樣器階段,名為 D3DVERTEXTEXTURESAMPLER0、D3DVERTEXTEXTURESAMPLER1、D3DVERTEXTEXTURESAMPLER2 和 D3DVERTEXTEXTURESAMPLER3。 這些與圖元引擎中的位移地圖取樣器和紋理取樣器不同。

若要取樣在這四個階段設定的紋理,您可以使用頂點引擎,並使用 CheckDeviceFormat 方法來程式設計階段。 使用 SetTexture在這些階段設定紋理,並使用階段索引 D3DVERTEXTEXTURESAMPLER0 到 D3DVERTEXTEXTURESAMPLER3。 頂點著色器引進了新的暫存器,取樣器暫存器暫存器 (,例如在 ps_2_0) 中,代表頂點紋理取樣器。 使用此暫存器之前,必須先在著色器中定義這個暫存器。

應用程式可以使用D3DUSAGE_QUERY_VERTEXTEXTURE呼叫CheckDeviceFormat,以查詢格式是否支援為頂點紋理。

注意

這是查詢旗標,因此在任何 Createxxx 函式中都不接受它。 在預設集區中建立的頂點紋理可以設定為圖元紋理,反之亦然。 不過,若要使用軟體頂點處理,必須在臨時集區中建立頂點紋理, (不論它是混合模式裝置還是軟體頂點處理裝置) 。

 

此功能與圖元紋理相同,但下列情況除外:

  • 不支援非等向性紋理篩選,因此會忽略D3DSAMP_MAXANISOTROPY,而且無法針對放大設定D3DTEXF_ANISOTROPIC,或針對這些階段縮小。
  • 變更資訊的速率無法使用,因此應用程式必須計算詳細資料層級,並將該資訊作為 texldl - vs的參數提供。

限制包含:

  • 如同圖元著色器,如果支援多重元素紋理,D3DSAMP_ELEMENTINDEX用來找出要取樣的專案。
  • 這些階段會忽略狀態D3DSAMP_DMAPOFFSET。
  • 使用 CheckDeviceFormat 搭配 D3DUSAGE_QUERY_VERTEXTEXTURE」 來查詢紋理,以查看是否可以當做頂點紋理使用。
  • VertexTextureFilterCaps 指出頂點紋理取樣器允許的篩選類型。 不允許D3DPTFILTERCAPS_MINFANISOTROPIC 和D3DPTFILTERCAPS_MAGFANISOTROPIC。

取樣階段暫存器

取樣階段暫存器會識別可用於紋理載入語句的取樣單位。 取樣單位對應于紋理取樣階段,封裝 SetSamplerState中提供的取樣特定狀態。

每個取樣器都會唯一識別使用 SetTexture設定為對應取樣器的單一紋理表面。 不過,相同的紋理表面可以在多個取樣器上設定。

在繪製時,無法同時將紋理設定為轉譯目標和階段中的紋理。

因為vs_3_0支援四個取樣器,所以最多可以在單一著色器階段中讀取四個紋理表面。 取樣器暫存器可能只會在紋理載入語句中顯示為引數: texldl - vs.

在vs_3_0中,如果您使用取樣器,則必須在著色器程式的開頭使用 dcl_samplerType (sm3 - vs asm) (宣告為 ps_2_0) 。

軟體處理

軟體頂點處理中將支援這項功能。 您可以呼叫 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;

頂點管線