IDirect3DDevice9::ValidateDevice 方法 (d3d9.h)

報告裝置在單一階段中轉譯目前紋理混合作業和自變數的能力。

語法

HRESULT ValidateDevice(
  [out, retval] DWORD *pNumPasses
);

參數

[out, retval] pNumPasses

類型: DWORD*

DWORD 值的指標,以填入透過 multipass 轉譯完成所需效果所需的轉譯階段數目。

傳回值

類型: HRESULT

如果方法成功,傳回值會D3D_OK。 如果方法失敗,傳回值可以是下列其中一項:D3DERR_CONFLICTINGRENDERSTATE、D3DERR_CONFLICTINGTEXTUREFILTER、D3DERR_DEVICELOST、D3DERR_DRIVERINTERNALERROR、D3DERR_TOOMANYOPERATIONS、D3DERR_UNSUPPORTEDALPHAARG、D3DERR_UNSUPPORTEDALPHAOPERATION、D3DERR_UNSUPPORTEDCOLORARG、D3DERR_UNSUPPORTEDCOLOROPERATION、D3DERR_UNSUPPORTEDFACTORVALUE、D3DERR_UNSUPPORTEDTEXTUREFILTER、D3DERR_WRONGTEXTUREFORMAT。

備註

只有在其他功能不足時,才應該使用 IDirect3DDevice9::ValidateDevice 方法來驗證案例。 例如,在多階段文字處理案例中,您可以查詢 D3DCAPS9 結構的 MaxTextureBlendStages 和 MaxSimultaneousTextures 成員,以判斷裝置上是否可進行多階段文字調整。

目前的硬體不一定實作作業和自變數的所有可能組合。 您可以藉由設定所需的混合作業,然後呼叫 IDirect3DDevice9::ValidateDevice 方法,判斷是否可以使用指定的自變數來執行特定的混合作業。

IDirect3DDevice9::ValidateDevice 方法會使用目前的轉譯狀態、紋理和紋理階段狀態,在呼叫時執行驗證。 呼叫后對這些因素所做的變更會使先前的結果失效,而且必須在轉譯場景之前再次呼叫 方法。

為了獲得最佳效能,請在初始化時呼叫 IDirect3DDevice9::ValidateDevice ;請勿在轉譯迴圈內使用它。

目前硬體很少支援使用擴散反覆運算值作為自變數或作業 (D3DTA_DIFFUSED3DTOP_BLENDDIFFUSEALPHA) 。 大部分的硬體只能在最後一個紋理作業階段引進逐一查看的色彩數據。

請嘗試為每個階段指定紋理 (D3DTA_TEXTURE) 做為第一個自變數,而不是第二個自變數。

許多卡片不支援在任意紋理階段使用擴散或純量值。 通常,這些只能在第一個或最後一個紋理混合階段使用。

許多卡片沒有與第一個紋理相關聯的混合單位,其能夠將Alpha複寫到色板或反轉輸入。 因此,如果可能的話,您的應用程式可能只需要使用第二個紋理階段。 在這類硬體上,第一個單位會假設為處於其默認狀態,其中第一個色彩自變數會設定為使用D3DTOP_SELECTARG1作業D3DTA_TEXTURE。

輸出Alpha上比色彩作業更複雜或大幅不同的作業,較不一定受到支援。

某些硬體不支援同時使用D3DTA_TFACTOR和D3DTA_DIFFUSE。

許多卡片不支援同時使用多個紋理和 mipmapped 三線性篩選。 如果針對涉及多重文字混合作業且驗證失敗的紋理要求三線性篩選,請關閉三線篩選並重新驗證。 在此情況下,您可能想要改為執行 multipass 轉譯。

規格需求

需求
目標平台 Windows
標頭 d3d9.h (包含 D3D9.h)
程式庫 D3D9.lib

另請參閱

IDirect3DDevice9

IDirect3DDevice9::GetTextureStageState

IDirect3DDevice9::SetTextureStageState