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

挂钩的DirectX 9程序在调整窗口大小时崩溃,与纹理相关,directx,hook,slimdx,Directx,Hook,Slimdx,我正在使用EasyHook和SlimDX使用SlimDX的Sprite和Texture类覆盖一些图形。当我调整窗口大小时,一些程序可以正常运行,但其他程序会崩溃——例如Winamp的MilkDrop 2给了我一个模糊的内存错误 我想这是因为我创造了售后市场结构。问题是我应该挂接什么VTable函数和/或如何/何时处理和重新创建纹理?也许会重置 如果不是很明显,我对DirectX了解不多 编辑/ps:我在EndScene挂钩中绘制纹理,但我还没有创建任何其他挂钩…如果纹理是在D3DPOOL_托管(

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

我想这是因为我创造了售后市场结构。问题是我应该挂接什么VTable函数和/或如何/何时处理和重新创建纹理?也许会重置

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


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

如果纹理是在D3DPOOL_托管(IDirect3DDevice9::CreateTexture的D3DPOOL参数)中创建的,则不必重新创建纹理

如果您必须使用D3DPOOL_默认值,并且需要消除丢失的纹理,那么, 最简单的方法是在调用IDirect3DDevice9::Reset之前销毁所有“易腐”对象,然后在调用之后进行恢复,但前提是该操作成功


您还可以跟踪可能返回D3DERR_DEVICELOST(有两个)的函数,但是只挂接Reset()会更容易。

+1回答得好。我敢打赌这是一个池选择的问题。不知道为什么这个问题是社区维基…我在做SigTerm在IDirect3DDevice9::Reset上说的。在此之前,我确实尝试过托管池和默认池,但无论哪种方式,它都会抛出相同的结果。