2010-06-03 5 views
1

J'utilise EasyHook et SlimDX pour superposer certains graphiques en utilisant les classes Sprite et Texture de SlimDX. Quand je redimensionne des fenêtres, certains programmes sont corrects, mais d'autres vont planter - MilkDrop 2 de Winamp me donne une erreur de mémoire ambiguë par exemple.Un programme DirectX 9 accroché se bloque lors du redimensionnement de la fenêtre, en relation avec la texture

Je m'attends à ce que cela soit dû au marché après-vente que j'ai créé. La question est de savoir quelle fonction VTable dois-je accrocher et/ou comment/quand puis-je disposer et recréer la Texture? Reset peut-être?

Si ce n'est pas évident, je ne connais pas grand-chose à DirectX.

modifier/ps: je peins la texture à l'intérieur d'un crochet EndScene, mais je n'ai pas créé d'autres crochets encore ...

Répondre

2

Vous ne devriez pas avoir à recréer la texture du tout si elle a été créée en D3DPOOL_MANAGED (Paramètre D3DPOOL de IDirect3DDevice9 :: CreateTexture).

Si vous devez absolument utiliser D3DPOOL_DEFAULT et ont besoin de tuer des textures perdues, puis, la façon la plus simple serait de détruire tous les objets « périssables » avant l'appel à IDirect3DDevice9 :: Reset, et restaurer puis après l'appel, mais seulement si c'était réussi. Vous pouvez également suivre les fonctions qui peuvent renvoyer D3DERR_DEVICELOST (il y en a deux), mais l'activation de Reset() sera plus facile.

+0

+1 Bonne réponse. Je parierais certainement son problème de choix de piscine. Dunno pourquoi cette question est Wiki de la Communauté si ... – Goz

+0

Je fais ce que SigTerm a dit sur IDirect3DDevice9 :: Reset. Avant, j'essayais de gérer les pools gérés et par défaut, mais ça se déroulait de la même façon. –

Questions connexes