Какой механизм использует compiz при копировании из переднего буфера xclient в задний буфер корневого окна?

Какой механизм использует compiz при копировании из переднего буфера xclient в задний буфер корневого окна?

Я не могу найти эту процедуру в исходном коде. Есть ли функция, которую она вызывает всякий раз, когда фронт-буфер окна xclient обновляется для обновления корневого буфера?

1 ответ

Copiz использует расширение X Composite для перенаправления окон в изображение за пределами экрана. Затем он использует расширение GLX_EXT_texture_from_pixmap для GLX/OpenGL для передачи этих закадровых растровых изображений в текстуры OpenGL.

Для компоновки X-сервер с поддержкой Composite предоставляет специальный слой составного окна, который помещается между корневым окном (и окнами которого родительское окно является родительским) и слоем экранной заставки. Compiz создает окно в этом составном слое, создает контекст OpenGL для этого окна и выполняет компоновку, используя команды рисования OpenGL.

Есть также композиторы, которые не используют OpenGL. Затем они либо используют композицию на стороне сервера (что довольно бесполезно, за исключением тестирования самого протокола Composite), либо используют методы рисования XRender. Технически X основные методы рисования тоже будут работать, но они не поддерживают преобразования и масштабирование; вещи, которые вы обычно хотели бы иметь для композитора.

Ничто не обращается к корневому окну композитором. Вся композиция идет в композитный слой.

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