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」 來查詢紋理,以查看它是否可以當做頂點紋理使用。
- 頂點TextureFilterCaps 指出頂點紋理取樣器允許的篩選類型。 不允許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;
相關主題