我有一个代理D3D9.dll
,我注意到我的DirectX::Present
在游戏之前被调用。
是否有可能逆转这(首先是原始函数,然后是我的函数)?我画的一些元素会被游戏覆盖。
游戏使用Ogre3D进行渲染。
注意:我还想做一些"技巧",比如冻结相机,我注意到以下事情:
在游戏的DirectX::Present
函数之前设置相机位置没有结果,而在游戏的DirectX::Present
调用之后设置相机位置导致我想要的行为。(使用CheatEngine测试)
通常在代理中有这样的结构:
HRESULT my_IDirect3DDevice9::Present(CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion)
{
return (m_pIDirect3DDevice9->Present( pSourceRect, pDestRect, hDestWindowOverride, pDirtyRegion));
}
要首先完成原始函数,您只需要执行SMTH,如:
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;
}