2013-09-03 3 views
3

xclient의 프론트 버퍼에서 루트 윈도우의 백 버퍼로 복사 할 때 compiz는 어떤 메커니즘을 사용합니까?xclient의 프론트 버퍼에서 루트 윈도우의 백 버퍼로 복사 할 때 compiz는 어떤 메커니즘을 사용합니까?

나는 컴 피즈 소스에서이 절차를 찾을 수 없습니다. xclient의 윈도우 'frontbuffer가 루트 백 버퍼를 업데이트하도록 업데이트 될 때마다 호출하는 함수가 있습니까?

답변

3

Copiz는 오프 스크린 픽스맵으로 창을 리디렉션 할 X Composite extension를 사용합니다. 그런 다음 GLX/OpenGL에 대한 GLX_EXT_texture_from_pixmap 확장을 사용하여 오프 스크린 픽스맵을 OpenGL 텍스처로 전송합니다.

조성물 위해 혼합은 X 서버는 루트 윈도우 (윈도우 루트 윈도우 인 부모)와 화면 보호 층 사이에 배치되는 특수 합성 윈도우 층을 제공 가능. Compiz는 복합 레이어에서 창을 만들고, 해당 창에 대한 OpenGL 컨텍스트를 만들고 OpenGL 드로잉 명령을 사용하여 컴포지션을 수행합니다.

는 OpenGL을 사용하지 않는 컴포 지터가 있습니다. 그런 다음 서버 측 컴포지션 (Composite 프로토콜 자체를 테스트하는 경우를 제외하고는 오히려 쓸모가 없음)을 사용하거나 XRender 드로잉 메서드를 사용합니다. 기술적으로 X 코어 드로잉 메서드도 작동하지만 변형 및 확장은 지원하지 않습니다. 당신이 보통 작곡가를 갖고 싶어하는 것들.

아무것도는 컴포 지터에 의해 루트 창으로 그려지지 않습니다. 모든 컴포지션은 컴포지트 레이어로 이동합니다. 내가 이해

+0

그래서, 복합 레이어는 화면 버퍼에 대한 전체 화면 백 버퍼처럼? 텍스처 (어린이 창 '픽스맵 (pixmaps)에서 복합 레이어로 옮기는 compiz의 메커니즘은 무엇인가? – LZOO

+0

@LZOO : 아니, 합성 레이어는 작곡가가 활성화되었을 때 실제로 본 것입니다. Windows는 오프 스크린 픽스맵으로 ** 리다이렉트 **를받습니다. 이것은 오프 스크린 백 버퍼로 간주 될 수 있습니다. 그러나 "거대한"전체 화면 백 버퍼가 없습니다. 모든 일은 XCreateWixow 대신 XCreatePixmap을 사용하여 만든 것처럼 각 창을 화면 외부의 픽스맵으로 처리한다는 것입니다. 이것이 바로 RedirectWindow가하는 일입니다. 창에서 RedirectWindow를 닫으면 주 화면에서 사라지고 그 내용을 어떻게 든 가져 와서 작성자가 보이는 버퍼에 그려야합니다. – datenwolf

+0

@LZOO : 합성 레이어가있는 이유는 합성기가 대개 루트 윈도우를 리디렉션하기 때문입니다. 그러나 리다이렉트 된 윈도우의 자식 인 모든 것들은 오프 스크린이됩니다. 그러나 작곡가는 작곡을 그릴 때 * 화면에 ** * ** 항목이 필요합니다. 그것이 컴포지트 레이어가 문자 그대로 그림으로 들어가는 곳입니다. – datenwolf