一个钩住的DirectX 9程序在窗口调整大小,纹理相关时崩溃

时间:2010-06-03 00:31:36

标签: directx hook slimdx

我正在使用EasyHook和SlimDX使用SlimDX的Sprite和Texture类覆盖一些图形。当我调整窗口大小时某些程序很好,但其他程序会崩溃 - 例如,Winamp的MilkDrop 2给了我一个模糊的内存错误。

我希望这是由于我创建的售后市场纹理。问题是我应该挂钩什么VTable函数和/或我何时/何时处理和重新创建纹理?重置也许?

如果不明显,我对DirectX了解不多。

edit / ps:我在EndScene挂钩中绘制纹理,但我还没有创建任何其他挂钩......

1 个答案:

答案 0 :(得分:2)

如果它是在D3DPOOL_MANAGED(IDirect3DDevice9 :: CreateTexture的D3DPOOL参数)中创建的,则根本不必重新创建纹理。

如果你必须使用D3DPOOL_DEFAULT并且需要杀掉丢失的纹理,那么, 最简单的方法是在调用IDirect3DDevice9 :: Reset之前销毁所有“易腐”对象,然后在调用之后恢复,但前提是它已成功完成。

你也可以跟踪可能返回D3DERR_DEVICELOST的函数(其中有两个),但只挂钩Reset()会更容易。