运行DirectX代理函数*之后*原始函数*之前*?

时间:2013-03-23 20:18:36

标签: c++ proxy directx directx-9 ogre3d

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

是否可以将其反转(首先是原始功能,然后是我的功能)?我绘制的一些元素被游戏覆盖。

游戏使用Ogre3D进行渲染。

注意:我也想做一些“黑客”,比如冻结相机,我注意到以下事项:

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

1 个答案:

答案 0 :(得分: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;
}