我试图实现像Fraps程序一样的效果,这是一个覆盖在游戏之上的效果,为了做到这一点,我在调用原始函数之前挂钩了IDirect3DDevice9::EndScene函数并渲染了东西。然而,当我渲染东西时,它弄乱了游戏已经绘制的效果,并且不能正确地绘制自己。我的钩子看起来就像
HRESULT __stdcall endscene_hook(IDirect3DDevice9* id3d_device) {
if (pGameOverlay) {
pGameOverlay->Render();
}
return endscene_orig(dev);
}其中pGameOverlay只是指向一个类的指针,该类的Render方法只是将一些内容绘制到之前设置的设备上(未显示)。还有什么是我应该做的吗?
我在某处读到Fraps实际上挂接的是Present方法,而不是EndScene。这是正确的吗?如果是,为什么?不能在对Present的调用之间只有一个BeginScene/EndScene对吗
发布于 2011-01-20 06:07:39
您肯定可以为每个Present使用多个BeginScene/EndScene,这实际上是一种相当常见的做法。通常,一对BeginScene/EndScene用于每个单独的渲染目标。(附加渲染目标的一个示例可能是镜子,但多个渲染目标还有许多其他用途,如阴影缓冲区或用于后期处理效果的专用深度目标)。
挂钩Present要安全得多,因为这是实际“显示”(Presents)对用户所做的任何事情的调用,因此从定义的角度来看,每个帧都有一个Present (因为这正是定义frame的Present )。
https://stackoverflow.com/questions/4741263
复制相似问题