加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

Windows – 从GPU获取完整的桌面屏幕截图

发布时间:2020-12-14 01:39:12 所属栏目:Windows 来源:网络整理
导读:我一直在使用 Windows API的BitBlt功能来执行屏幕抓取. 但是有很多缺点: DWM和Aero导致了巨大的减速(3ms – 35ms只是调用BitBlt) – 要解决这个问题,这将需要禁用我宁愿不做的Aero.屏幕闪烁,事情转移. 数据必须重新传输到GPU才能将数据作为纹理加载 没有CAP
我一直在使用 Windows API的BitBlt功能来执行屏幕抓取.

但是有很多缺点:

> DWM和Aero导致了巨大的减速(3ms – > 35ms只是调用BitBlt) – 要解决这个问题,这将需要禁用我宁愿不做的Aero.屏幕闪烁,事情转移.
>数据必须重新传输到GPU才能将数据作为纹理加载
>没有CAPTUREBLT标志,无法捕获分层Windows.启用时,捕获时鼠标光标会闪烁.这似乎是一个小问题,但是当应用程序没有其他bug时,这是非常烦人的.作为一种解决方法,我打算将一个分层窗口渲染为一个附加的游标.

我已经在使用OpenGL显示和操纵捕获的屏幕数据. BitBlt给出了像素数据,并且将其加载到纹理中相对容易.然而,这是稍微荒谬的,因为当GPU开始使用时,我手动将数据重新发送回GPU.数据绝对是有的,但试图访问它是一个不同的事情.

我认为这个功能在供应商的待办事项列表中(或可能在任何列表中)可能不是很高,但是我想询问那些知道AMD(ATI)或NVidia在他们的驱动程序中读取屏幕缓冲区(例如,进入OpenGL上下文).我根本不了解现代GPU架构,知道从哪里开始挖掘答案.

OpenGL只能读取上下文framebuffer(一个窗口),以及您创建的任何帧缓冲区或pbuffers. OpenGL无法触摸桌面或任何其他窗口.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读