我一直在使用Windows API的BitBlt
功能来执行屏幕抓取。
但是有许多缺点:
BitBlt
) - 要解决这个问题需要禁用Aero,我只是不愿意这样做。屏幕闪烁,事物转移。 CAPTUREBLT
标记,则无法捕获分层Windows。启用后,捕获时鼠标光标会闪烁。这似乎是一个小问题,但当应用程序无其他错误时,它非常烦人。作为解决方法,我打算将分层窗口渲染为附加光标。 我已经在使用OpenGL显示和操作捕获的屏幕数据。 BitBlt
为我提供像素数据,将其加载到纹理中相对容易。然而,这有点荒谬,因为我手动将数据重新发送回GPU,因为它应该可以在GPU上开始使用。数据肯定存在,但尝试访问它是另一回事。
我认为供应商的待办事项列表(或可能在任何列表中)的此功能并不高,但我想问一下知道AMD是否有任何条款( ATI)或NVidia在其驱动程序中用于读取屏幕缓冲区(例如,进入OpenGL上下文)。我对现代GPU架构知之甚少,不知道从哪里开始挖掘答案。
答案 0 :(得分:3)
OpenGL只能读取上下文帧缓冲区(窗口),以及您创建的任何帧缓冲区或pbuffers。 OpenGL无法触摸桌面或任何其他窗口。
答案 1 :(得分:1)
这是一个有趣的问题。不幸的是,我不认为这是真的支持。我发现创建全屏不可见窗口并使用glReadPixels读取像素数据有一定程度的成功报告:
http://www.virtualdub.org/blog/pivot/entry.php?id=142
http://www.opentk.com/node/2430
但是,我认为执行此操作时的行为未定义,仅适用于特定的硬件/操作系统配置。