0

我有一个代理D3D9.dll,我注意到我DirectX::Present在游戏中的代理之前被调用。

是否可以扭转这一点(首先是原始功能,然后是我的功能)?我画的一些元素被游戏覆盖了。

游戏使用 Ogre3D 进行渲染。

注意:我还想做一些“黑客”,比如冻结相机,我注意到以下几点:

在游戏DirectX::Present功能之前设置相机位置不会产生任何结果,而在游戏DirectX::Present调用之后设置相机位置会产生我想要的行为。(用 CheatEngine 测试)

4

1 回答 1

0

通常你在代理中有这样的结构:

HRESULT my_IDirect3DDevice9::Present(CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion)
{
    return (m_pIDirect3DDevice9->Present( pSourceRect, pDestRect, hDestWindowOverride, pDirtyRegion));
}

要首先完成原始功能,您只需要执行以下操作:

HRESULT uMod_IDirect3DDevice9::Present(CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion)
{
    HRESULT myresult = (m_pIDirect3DDevice9->Present( pSourceRect, pDestRect, hDestWindowOverride, pDirtyRegion));
    *** YOUR CODEWHATEVER ****
    return myresult;
}
于 2014-03-25T16:57:26.547 回答