Como posso obter uma captura de tela de uma janela não visível de um aplicativo que usa o OpenGL em X?

2

Estou tentando fazer uma captura de tela de uma janela não visível em X.

Minha primeira tentativa foi capturar a janela usando xwd ou import (do ImageMagick). Infelizmente quando a janela está sob algumas outras janelas, as partes ocultas são pretas. O pior é que, quando a janela não está na área de trabalho atual, recebo um erro BadMatch .

O próximo pensamento foi usar o Xnest, que criaria uma nova instância X apenas para esse aplicativo e estaria sempre no topo. E eu me deparo com outro problema. Xnest não suporta OpenGL.

Algumas pesquisas no Google e eu acho [Xephyr] [1] que suporta OpenGL ... mas não acelerado por hardware, então não é accaptable, pois mata a minha CPU.

O mesmo vale para o Xvfb, que também usa CPU para renderizar o OpenGL. Abaixo está parte da saída do 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

A única coisa que posso pensar é de alguma forma usar o Xlib para forçar meu servidor X a renderizar a janela para um pixbuf. Infelizmente eu quase não tenho conhecimento do Xlib.

Então, minha pergunta é: como posso obter uma captura de tela de uma janela não visível de um aplicativo que usa o OpenGL em X?

Por enquanto, só posso fazer uma captura de tela usando [Python-Xlib] [2] e PIL . Além disso, qualquer outra solução usando Python ou C é aceitável.

    
por elmo 25.06.2010 / 18:03

0 respostas