首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Direct3D钩子覆盖

Direct3D钩子覆盖
EN

Stack Overflow用户
提问于 2011-01-20 05:57:21
回答 1查看 2.5K关注 0票数 1

我试图实现像Fraps程序一样的效果,这是一个覆盖在游戏之上的效果,为了做到这一点,我在调用原始函数之前挂钩了IDirect3DDevice9::EndScene函数并渲染了东西。然而,当我渲染东西时,它弄乱了游戏已经绘制的效果,并且不能正确地绘制自己。我的钩子看起来就像

代码语言:javascript
复制
HRESULT __stdcall endscene_hook(IDirect3DDevice9* id3d_device) {
    if (pGameOverlay) {
         pGameOverlay->Render();
    }

    return endscene_orig(dev);
}

其中pGameOverlay只是指向一个类的指针,该类的Render方法只是将一些内容绘制到之前设置的设备上(未显示)。还有什么是我应该做的吗?

我在某处读到Fraps实际上挂接的是Present方法,而不是EndScene。这是正确的吗?如果是,为什么?不能在对Present的调用之间只有一个BeginScene/EndScene对吗

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-20 06:07:39

您肯定可以为每个Present使用多个BeginScene/EndScene,这实际上是一种相当常见的做法。通常,一对BeginScene/EndScene用于每个单独的渲染目标。(附加渲染目标的一个示例可能是镜子,但多个渲染目标还有许多其他用途,如阴影缓冲区或用于后期处理效果的专用深度目标)。

挂钩Present要安全得多,因为这是实际“显示”(Presents)对用户所做的任何事情的调用,因此从定义的角度来看,每个帧都有一个Present (因为这正是定义frame的Present )。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4741263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档