Зависшая программа DirectX 9 падает при изменении размера окна, связанном с текстурой - PullRequest
1 голос
/ 03 июня 2010

Я использую EasyHook и SlimDX для наложения некоторой графики, используя классы Sprite и Texture SlimDX. Когда я изменяю размер окон, некоторые программы работают нормально, но другие вылетают - например, MilkDrop 2 от Winamp дает мне неоднозначную ошибку памяти.

Полагаю, это связано с созданной мной послепродажной текстурой. Вопрос в том, какую функцию VTable я должен подключить и / или как / когда я могу расположить и воссоздать текстуру? Сбросить что ли?

Если это не очевидно, я не знаю много о DirectX.

edit / ps: я рисую текстуру внутри хука EndScene, но я еще не создал никаких других хуков ...

1 Ответ

2 голосов
/ 03 июня 2010

Вам вообще не нужно заново создавать текстуру, если она была создана в D3DPOOL_MANAGED (параметр D3DPOOL в IDirect3DDevice9 :: CreateTexture).

Если вам абсолютно необходимо использовать D3DPOOL_DEFAULT и вам нужно уничтожить потерянные текстуры, тогда самый простой способ - уничтожить все «скоропортящиеся» объекты перед вызовом IDirect3DDevice9 :: Reset, а затем восстановить после вызова, но только в том случае, если он был успешным.

Вы также можете отслеживать функции, которые могут возвращать D3DERR_DEVICELOST (их два), но будет проще подключить только Reset ().

...