Opengl 想写一个屏幕截图录制应用程序,从哪里开始?

Opengl 想写一个屏幕截图录制应用程序,从哪里开始?,opengl,screen,screen-capture,Opengl,Screen,Screen Capture,我想开始编写一个可以捕获屏幕内容或捕获特定全屏应用程序内容的应用程序,但我不确定从何处开始 理想情况下,这将使用OpenGL编写,但我不知道OpenGL捕获应用程序屏幕内容的功能。如果我能用OpenGL来捕捉魔兽世界,那就太完美了 OpenGL捕获应用程序屏幕内容的功能 它们根本不存在。OpenGL是一个用于在屏幕上显示内容的API。只有一个函数可以从OpenGL glReadPixels中检索像素,并且它只能用于调用glReadPixels的OpenGL上下文所绘制的内容;即使对于非屏幕FBO

我想开始编写一个可以捕获屏幕内容或捕获特定全屏应用程序内容的应用程序,但我不确定从何处开始

理想情况下,这将使用OpenGL编写,但我不知道OpenGL捕获应用程序屏幕内容的功能。如果我能用OpenGL来捕捉魔兽世界,那就太完美了

OpenGL捕获应用程序屏幕内容的功能

它们根本不存在。OpenGL是一个用于在屏幕上显示内容的API。只有一个函数可以从OpenGL glReadPixels中检索像素,并且它只能用于调用glReadPixels的OpenGL上下文所绘制的内容;即使对于非屏幕FBO来说,这也是非常不可靠的,因为操作系统可以在任何时候随意关闭、清除或以其他方式更改主窗口的帧缓冲区内容

请注意,您可以在internet上找到一些关于如何使用OpenGL进行屏幕截图的教程。它们中的任何一个都不能在现代计算机系统上工作,因为那些依赖于屏幕上所有窗口共享GPU扫描帧缓冲区的一个大的连续区域的未定义行为在现代图形系统中不再适用,因为窗口拥有自己的、独立的帧缓冲区集,并且屏幕上的图像是由这些帧缓冲区合成的


捕获屏幕内容是一项高度依赖于操作系统的任务,在如何实现这一任务上没有灵丹妙药。一些系统提供随时可用的屏幕捕获API;但是,根据性能要求,这些屏幕捕获API可能不是最佳选择。一些捕获程序将DLL注入每个进程,以便在生成图像的源位置进入渲染进程。一些屏幕捕获系统安装了自定义内核驱动程序,以访问图形卡视频扫描缓冲区,该缓冲区通常映射到系统地址空间,绕过图形卡的驱动程序来复制内容。

您将使用什么语言?我不认为OpenGL有这些功能,它是一个3D图形API,所以它会呈现在屏幕上,而不是在谷歌上。你会发现问题,回来问他们。