共用方式為


vs_3_0中的頂點紋理 (DirectX HLSL)

頂點著色器 3.0 模型支援使用 texldl - 紋理載入語句,在頂點著色器中支援紋理查閱。 頂點引擎包含四個紋理取樣器階段,名為 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;

頂點管線