我正在使用EasyHook和SlimDX使用SlimDX的Sprite和Texture类覆盖一些图形。当我调整窗口大小时某些程序很好,但其他程序会崩溃 - 例如,Winamp的MilkDrop 2给了我一个模糊的内存错误。
我希望这是由于我创建的售后市场纹理。问题是我应该挂钩什么VTable函数和/或我何时/何时处理和重新创建纹理?重置也许?
如果不明显,我对DirectX了解不多。
edit / ps:我在EndScene挂钩中绘制纹理,但我还没有创建任何其他挂钩......
答案 0 :(得分:2)
如果它是在D3DPOOL_MANAGED(IDirect3DDevice9 :: CreateTexture的D3DPOOL参数)中创建的,则根本不必重新创建纹理。
如果你必须使用D3DPOOL_DEFAULT并且需要杀掉丢失的纹理,那么, 最简单的方法是在调用IDirect3DDevice9 :: Reset之前销毁所有“易腐”对象,然后在调用之后恢复,但前提是它已成功完成。
你也可以跟踪可能返回D3DERR_DEVICELOST的函数(其中有两个),但只挂钩Reset()会更容易。