我一直在使用Windows API的BitBlt函数来执行屏幕抓取。
然而有许多缺点:
DWM和Aero会导致大幅的减速(3ms – > 35ms只是为了调用BitBlt ) – 要解决这个问题,需要禁用Aero,我不想这样做。 屏幕闪烁,事情转移。
必须将数据重新传输到GPU,才能将数据作为纹理加载
没有CAPTUREBLT标志不能捕获分层的Windows。 启用时,捕捉时鼠标光标闪烁。 这可能看起来像一个小问题,但当应用程序没有错误时,这是非常烦人的。 作为解决这个问题的方法,我打算将一个分层窗口渲染为一个额外的游标。
我已经在使用OpenGL来显示和处理捕获的屏幕数据。 BitBlt给我的像素数据,它是相对容易加载到纹理。 然而,这有点荒谬,因为我手动将数据重新发送回GPU时,它应该在GPU上可用开始。 数据当然是存在的,但试图访问是另一回事。
我认为,供应商的待办事项清单(或可能在任何清单上)的这个function并不高,但我想问问那些知道AMD(ATI)或NVidia在读取屏幕缓冲区的驱动程序中(例如在OpenGL环境中)。 我对现代GPU架构知之甚less,不知道从哪里开始寻找答案。
如何使batch file全屏?
只显示全屏图像的EXE
如何在Linux中创buildAlt + Tab友好的全屏程序(如游戏)?
Java全屏jframe与双显示器
后期处理Windowsvideo输出
Java全屏模式不能在Ubuntu上工作
如何获取dxgi中显示器/输出的当前显示模式(分辨率,刷新率)?
在Gnome 3,Xfce和Unity下的Qt中,带有子窗口的全屏窗口并不能保持最佳状态
你能全屏运行一个VB应用程序吗?
使用WinAPI进行全屏pipe理
OpenGL只能读取上下文framebuffer(一个窗口)以及任何已经创建的帧缓冲区或pbuffers。 OpenGL无法触摸桌面或任何其他窗口。
这是个有趣的问题。 不幸的是,我不认为这是真的支持。 我发现在创建一个全屏幕不可见窗口和用glreadPixels读取像素数据方面取得了一些成功的报告:
http://www.virtualdub.org/blog/pivot/entry.PHP?id=142
http://www.opentk.com/node/2430
但是,我相信这样做的行为是未定义的,只能在特定的硬件/操作系统配置上工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。