在现有图形应用程序上绘制 DirectX/OpenGL 图形

2024-03-07

首先,如果这个问题已经得到解答,请让我立即道歉,因为我可能只是在不规则的搜索条件下搜索它。

我希望在使用 DirectX 绘制自己的图形(游戏)的应用程序中绘制 2D 图形。我将通过将 DLL 注入到应用程序中(我对此部分没有任何疑问,我可以做到)并绘制图形来实现这一点。但由于我不太擅长 DirectX/OpenGL,因此我有几个基本问​​题要问。

1)为了在该窗口上绘制图形,我是否需要从进程内存中获取预先存在的上下文,即绘图场景的某种句柄?

2) 如果应用程序使用 DirectX,我可以在其上使用 OpenGL 图形吗?

请让我知道如何解决这个问题。任何细节将不胜感激:-) 先感谢您。


您注入 DLL 的方法确实是正确的方法。类似的程序FRAPS使用相同的方法。我无法告诉您有关 Direct3D 的方法,但对于 OpenGL,您需要执行以下操作:

首先你必须Hook到函数中wglMakeCurrent, glFinish and wglSwapBuffers of opengl32.dll这样您的 DLL 就会注意到何时选择了 OpenGL 上下文进行绘图。将他们的调用传递给操作系统。什么时候wglMakeCurrent被称为使用函数GetPixelFormat找出窗口是否是双缓冲的。还可以使用glGet…OpenGL 调用来找出您正在处理的 OpenGL 上下文版本。如果您有旧版 OpenGL 上下文,则必须使用与现代 OpenGL-3 或更高版本的核心上下文不同的方法来绘制叠加层。

如果是双缓冲窗口,请使用 HookwglSwapBuffers执行进一步的 OpenGL 绘图操作。 OpenGL 只是在画布上绘制的笔和画笔(以点、线和三角形的形式)。然后通过wglSawpBuffers调用使一切可见。

如果是单个缓冲上下文而不是wglSwapBuffers挂钩的函数是glFinish.

使用 OpenGL 绘制 2D 就像禁用深度缓冲并使用正交投影矩阵一样简单。您可以随时更改 OpenGL 状态。只要确保在离开挂钩之前将所有东西恢复到原始状态即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在现有图形应用程序上绘制 DirectX/OpenGL 图形 的相关文章

随机推荐