Как я могу получить скриншот из невидимого окна приложения, которое использует OpenGL под X?
Я пытаюсь сделать скриншот невидимого окна под X.
Моя первая попытка была захватить окно с помощью xwd
или же import
(из ImageMagick). К сожалению, когда окно находится под некоторыми другими окнами, скрытые части черные. Еще хуже то, что когда окно не на текущем рабочем столе, я получаю BadMatch
ошибка.
Следующей мыслью было использование Xnest, который создал бы новый экземпляр X только для этого одного приложения, и он всегда был бы на вершине. И я сталкиваюсь с другой проблемой. Xnest не поддерживает OpenGL.
Некоторый поиск в Google, и я нахожу [Xephyr][1], который поддерживает OpenGL... но не с аппаратным ускорением, так что это не приемлемо, так как убивает мой процессор.
То же самое касается Xvfb, который также использует процессор для рендеринга OpenGL. Ниже приведена часть вывода из glxinfo
:
Строка поставщика OpenGL: Mesa Project Строка рендеринга OpenGL: Software Rasterizer Строка версии OpenGL: 2.1 Mesa 7.8.2 Строка версии языка затенения OpenGL: 1.20
Единственное, что я могу придумать, это каким-то образом использовать Xlib, чтобы заставить мой X-сервер визуализировать окно в pixbuf. К сожалению, я почти не знаю Xlib.
Итак, мой вопрос, как я могу получить скриншот из невидимого окна приложения, которое использует OpenGL под X?
На данный момент я могу сделать только скриншот, используя [Python-Xlib][2] и PIL. Также приемлемо любое другое решение, использующее Python или C.