我试图做一个不可见的窗口的屏幕截图下X.如何从使用X下的OpenGL的应用程序的不可见窗口获取屏幕截图?
我第一次尝试捕捉(来自ImageMagick的)使用xwd
或import
窗口。 不幸的是,当窗户在其他一些窗户下时,隐藏的部分是黑色的。 更糟糕的是,当窗口不在当前桌面上时,我得到一个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的解决方案。
在GL应用程序中只使用glReadPixels有什么问题? – 2010-06-24 17:10:26
我没有源代码。 – elmo 2010-09-15 13:04:33