2009-07-30 30 views
1

我有種想了解這一點,如果你在內存中的DirectX創建紋理與CreateTexture功能:傳遞D3DFMT_UNKNOWN到的IDirect3DDevice9 :: CreateTexture()

HRESULT CreateTexture(
    UINT Width, 
    UINT Height, 
    UINT Levels, 
    DWORD Usage, 
    D3DFORMAT Format, 
    D3DPOOL Pool, 
    IDirect3DTexture9** ppTexture, 
    HANDLE* pSharedHandle 
); 

...並傳遞D3DFMT_UNKNOWN格式應該發生什麼?如果我試圖弄清楚第一層或第二層的表面,會不會導致錯誤?它可以失敗嗎?圖形設備會選擇一種隨機的格式嗎?這可能會導致不同的顯卡型號/品牌之間的問題?

回答

2

我只是嘗試了一下,並沒有失敗,主要是

Usage設置爲D3DUSAGE_RENDERTARGETD3DUSAGE_DYNAMIC,它一貫出來作爲D3DFMT_A8R8G8B8,無論我做什麼後臺緩衝區格式或其他設置。我不知道這是否與我的顯卡有關。我的猜測是,指定未知的手段,「爲我挑選」,並且32位格式對我的卡最容易。

當使用量爲D3DUSAGE_DEPTHSTENCIL時,它一直失敗。

所以我最好的結論是,指定D3DFMT_UNKNOWN作爲格式使DirectX選擇它應該是什麼。或者它總是默認爲D3DFMT_A8R8G8B

不幸的是,我無法在任何地方的任何文檔中確認這一點。 :|

0

MSDN不說。但我很肯定你會因此得到「D3DERR_INVALIDCALL」。

如果該方法成功,則返回 值爲D3D_OK。如果方法失敗,則返回值可能是 之一:D3DERR_INVALIDCALL, D3DERR_OUTOFVIDEOMEMORY, E_OUTOFMEMORY。

+0

不,我試過了,它並沒有失敗,至少在所有情況下都是如此。 – GManNickG 2009-07-30 04:48:41

0

我認爲這屬於「未定義」類別。一些司機會失敗的分配,而其他人可能會默認的東西。我從來沒有在WDK上看到任何說這種情況需要處理的東西。我猜如果你啓用調試DX運行時,你會看到一條錯誤消息。