如何从在 X 下使用 OpenGL 的应用程序的不可见窗口获取屏幕截图?

如何从在 X 下使用 OpenGL 的应用程序的不可见窗口获取屏幕截图?

我正在尝试对 X 下不可见的窗口进行截图。

xwd我的第一个尝试是使用或(来自 ImageMagick)捕获窗口import。不幸的是,当窗口位于其他窗口下方时,隐藏部分是黑色的。更糟糕的是,当窗口不在当前桌面上时,我会收到错误BadMatch

下一个想法是使用 Xnest,它将为这一个应用程序创建一个新的 X 实例,并且它将始终位于顶部。但我遇到了其他问题。Xnest 不支持 OpenGL。

在谷歌上搜索后,我发现 [Xephyr][1] 确实支持 OpenGL……但没有硬件加速,所以它是不可接受的,因为它会杀死我的 CPU。

Xvfb 也是如此,它也使用 CPU 来渲染 OpenGL。以下是部分输出glxinfo

OpenGL 供应商字符串:Mesa Project
OpenGL 渲染器字符串:软件光栅化器
OpenGL 版本字符串:2.1 Mesa 7.8.2
OpenGL着色语言版本字符串:1.20

我能想到的唯一办法就是以某种方式使用 Xlib 强制我的 X 服务器将窗口渲染到 pixbuf。不幸的是,我对 Xlib 几乎一无所知。

所以我的问题是如何从在 X 下使用 OpenGL 的应用程序的不可见窗口获取屏幕截图?

目前,我只能使用 [Python-Xlib][2] 进行截图,并且太平船务。任何其他使用 Python 或 C 的解决方案也是可以接受的。

相关内容