2010-06-24 21 views
0

我试图做一个不可见的窗口的屏幕截图下X.如何从使用X下的OpenGL的应用程序的不可见窗口获取屏幕截图?

我第一次尝试捕捉(来自ImageMagick的)使用xwdimport窗口。 不幸的是,当窗户在其他一些窗户下时,隐藏的部分是黑色的。 更糟糕的是,当窗口不在当前桌面上时,我得到一个BadMatch错误。

接下来的想法是使用Xnest,它将为这个应用程序创建一个新的X实例,并且它总是处于顶层。而我遇到了其他问题。 Xnest不支持OpenGL。

一些在谷歌搜索和我找到[Xephyr] [1],它支持OpenGL ...但没有硬件加速,所以它不能适应,因为它杀死我的CPU。

对于也使用CPU渲染OpenGL的Xvfb也是如此。下面是从glxinfo输出的一部分:

 
OpenGL vendor string: Mesa Project 
OpenGL renderer string: Software Rasterizer 
OpenGL version string: 2.1 Mesa 7.8.2 
OpenGL shading language version string: 1.20 

唯一剩下的是我能想到的就是以某种方式使用Xlib的强制我的X服务器来渲染窗口到的pixbuf。不幸的是,我几乎没有Xlib的知识。

所以我的问题是如何从一个使用OpenGL下X的应用程序的不可见窗口截图?

至于现在我只能使用[Python-Xlib] [2]和PIL制作屏幕截图。 也可以使用任何其他使用Python或C的解决方案。

+0

在GL应用程序中只使用glReadPixels有什么问题? – 2010-06-24 17:10:26

+0

我没有源代码。 – elmo 2010-09-15 13:04:33

回答

0

据我所知,这是不可能的。问题是你试图保存的像素字面上不存在。 X服务器和视频驱动程序将避免渲染不可见的东西。

如Matias提到的,如果您可以控制GL应用程序,那么您可能会在GL中执行一些操作。例如帧缓冲区对象扩展可让您渲染到屏幕外的纹理。

相关问题