1

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

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

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

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

4

1 回答 1

2

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

如果您绝对必须使用 D3DPOOL_DEFAULT 并且需要消除丢失的纹理,那么,最简​​单的方法是在调用 IDirect3DDevice9::Reset 之前销毁所有“易腐烂的”对象,然后在调用之后恢复,但前提是它成功了.

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

于 2010-06-03T02:30:42.307 回答