Passando D3DFMT_UNKNOWN in IDirect3DDevice9 :: CreateTexture ()
Domanda
Mi chiedo a questo proposito se crei una trama in memoria in DirectX con la funzione CreateTexture:
HRESULT CreateTexture(
UINT Width,
UINT Height,
UINT Levels,
DWORD Usage,
D3DFORMAT Format,
D3DPOOL Pool,
IDirect3DTexture9** ppTexture,
HANDLE* pSharedHandle
);
... e passa nel formato D3DFMT_UNKNOWN
cosa dovrebbe succedere esattamente? Se provo a ottenere la superficie del primo o del secondo livello, si verificherà un errore? Può fallire? Il dispositivo grafico sceglierà solo un formato casuale di sua scelta? Ciò potrebbe causare problemi tra diversi modelli / marchi di schede grafiche?
Soluzione
L'ho appena provato e non fallisce, soprattutto
Quando Utilizzo
è impostato su D3DUSAGE_RENDERTARGET
o D3DUSAGE_DYNAMIC
, viene costantemente visualizzato come D3DFMT_A8R8G8B8
, non importa quale Ho fatto il formato del buffer posteriore o altre impostazioni. Non so se questo abbia a che fare con la mia scheda grafica o meno. Suppongo che specificare sconosciuto significhi "scegliere per me" e che il formato a 32 bit sia più semplice per la mia scheda.
Quando l'utilizzo era D3DUSAGE_DEPTHSTENCIL
, falliva costantemente.
Quindi la mia migliore conclusione è che specificando D3DFMT_UNKNOWN
in quanto il formato offre a DirectX la scelta di come dovrebbe essere. O forse per impostazione predefinita è sempre D3DFMT_A8R8G8B
.
Purtroppo, non posso confermare nulla di tutto ciò in alcuna documentazione da nessuna parte. : |
Altri suggerimenti
MSDN non dice . Ma sono abbastanza sicuro che otterrai " D3DERR_INVALIDCALL " di conseguenza.
Se il metodo ha esito positivo, il ritorno il valore è D3D_OK. Se il metodo fallisce, il valore restituito può essere uno dei seguente: D3DERR_INVALIDCALL, D3DERR_OUTOFVIDEOMEMORY, E_OUTOFMEMORY.
Penso che questo rientri nel "non definito" categoria. Alcuni driver falliranno le allocazioni, mentre altri potrebbero essere predefiniti a qualcosa. Non ho mai visto nulla nel WDK che dica che questa condizione deve essere gestita. Immagino che se abiliti il ??runtime DX di debug vedrai un messaggio di errore.