Question

Je m'interroge un peu à ce sujet si vous créez une texture en mémoire dans DirectX avec la fonction CreateTexture:

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

... et transmettez au format D3DFMT_UNKNOWN ce qui est censé se passer exactement? Si j'essaie d'obtenir la surface du premier ou du deuxième niveau, cela provoquera-t-il une erreur? Peut-il échouer? Le périphérique graphique choisira-t-il simplement un format aléatoire de son choix? Cela pourrait-il causer des problèmes entre différents modèles / marques de cartes graphiques?

Était-ce utile?

La solution

Je viens de l'essayer et il n'échoue pas, principalement

Lorsque Usage est défini sur D3DUSAGE_RENDERTARGET ou D3DUSAGE_DYNAMIC , il apparaît systématiquement sous la forme D3DFMT_A8R8G8B8 , peu importe ce que Je l'ai fait pour le format de tampon de retour ou d'autres paramètres. Je ne sais pas si cela a à voir avec ma carte graphique ou non. J'imagine que spécifier des moyens inconnus, "choisir pour moi", et que le format 32 bits est plus simple pour ma carte.

Lorsque l'utilisation était D3DUSAGE_DEPTHSTENCIL , cela échouait systématiquement.

Donc, ma meilleure conclusion est que spécifier D3DFMT_UNKNOWN en tant que format donne à DirectX le choix de ce qu'il devrait être. Ou peut-être toujours par défaut toujours D3DFMT_A8R8G8B .

Malheureusement, je ne peux confirmer aucune de ces informations dans aucune documentation. : |

Autres conseils

MSDN ne dit pas . Mais je suis sûr que vous obtiendrez "D3DERR_INVALIDCALL". en conséquence.

  

Si la méthode réussit, le retour   la valeur est D3D_OK. Si la méthode échoue,   la valeur de retour peut être l'un des   suivant: D3DERR_INVALIDCALL,   D3DERR_OUTOFVIDEOMEMORY,   E_OUTOFMEMORY.

Je pense que cela entre dans la catégorie "non défini". Catégorie. Certains pilotes échoueront dans les allocations, alors que d'autres risquent de faire défaut. Je n'ai jamais rien vu dans le WDK qui indique que cette condition doit être traitée. Je suppose que si vous activez le runtime DX de débogage, vous verrez un message d'erreur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top