我有一个代理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));
}
要首先完成原始功能,您只需要执行以下操作:
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;
}