Как я могу получить скриншот из невидимого окна приложения, которое использует 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.

0 ответов

Другие вопросы по тегам