2010-06-24 1 views
0

나는 내 첫 번째 시도가 (ImageMagick를에서) xwd 또는 import를 사용하여 창을 캡처했다X에서 OpenGL을 사용하는 응용 프로그램의 보이지 않는 창에서 스크린 샷을 얻으려면 어떻게해야합니까?

X를 아래에 표시되지 윈도우의 스크린 샷을 만들려고 노력하고 있습니다. 불행히도 창문이 다른 창 아래에 있으면 숨겨진 부분이 검은 색입니다. 더 나쁜 것은 윈도우가 현재 데스크탑에 없을 때 BadMatch 오류가 발생한다는 것입니다.

다음 생각은이 응용 프로그램에 대해 새로운 X 인스턴스를 만드는 Xnest를 사용하는 것이고 항상 맨 위에있게됩니다. 그리고 나는 다른 문제를 겪는다. Xnest는 OpenGL을 지원하지 않습니다.

구글 검색 중 일부는 OpenGL을 지원하는 [Xephyr] [1]을 발견하지만 하드웨어가 가속화되지 않아 내 CPU를 죽이기 때문에 악성 코드가되지 않습니다.

Xvfb도 CPU를 사용하여 OpenGL을 렌더링합니다. 유일한 것은 내가 어떻게 든 pixbuf에 창을 렌더링하기 위해 내 X 서버를 강제로 Xlib를 사용하는 것입니다 생각할 수있는 왼쪽

 
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 

: 아래 glxinfo의 출력의 일부입니다. 불행히도 Xlib에 대한 지식이 거의 없습니다.

내 질문은 어떻게 X에서 OpenGL을 사용하는 응용 프로그램의 보이지 않는 창에서 스크린 샷을 얻을 수 있습니까?

이제는 [Python-Xlib] [2] 및 PIL을 사용하여 스크린 샷을 만들 수 있습니다. 파이썬이나 C를 사용하는 다른 솔루션도 사용할 수 있습니다.

+0

GL 응용 프로그램에서 glReadPixels를 사용하는 것의 문제점은 무엇입니까? –

+0

소스 코드가 없습니다. – elmo

답변

0

내가 아는 한 이것은 불가능합니다. 문제는 문자 그대로 저장하려고하는 픽셀이 존재하지 않는다는 것입니다. X 서버와 비디오 드라이버는 아무 것도 볼 수없는 것들을 렌더링하는 것을 피할 것입니다.

GL 앱을 제어 할 수 있다면 Matias가 언급 한 것처럼 GL에서 할 수있는 일이있을 것입니다. 예 : framebuffer 객체 확장을 사용하면 화면 밖의 텍스처로 렌더링 할 수 있습니다.

관련 문제