LINUX.ORG.RU

Как работают композиторы

 , , ,


0

4

Есть ли статьи описывающие работу композиторов в Линуксе (Wayland и т.п.)? Интересует механизм синхронизации отрисовки (vsync), как происходит перерисовка (обмен (swap) буферами или копирование заднего буфера в передний, перерисовывается всё при каждом изменении или отслеживается изменяемая область), обмен буферами между процессами, взаимодействие с Mesa.

★★★★★
Ответ на: комментарий от eternal_sorrow

This is the second in a series of articles on the subject of writing a Wayland compositor from scratch using wlroots.

Внутренности работы композитора там не обсуждаются. Использование готовой библиотеки не интересно.

X512 ★★★★★
() автор топика

на freedesktop поищи, там есть, но по факту дефицит инфы и доков по линуксовому графическому стеку это норма, т.к. разрабам лень - они для библиотек даже примеры простые не всегда делают, ещё можешь прямо девольту написать и спросить, где взять данное низкоуровневое описание, он может знает или делал заметки, т.к. не из головы же wlroots писал.

AKonia ★★
()
Последнее исправление: AKonia (всего исправлений: 1)
Ответ на: комментарий от X512

Брошюрка от DeVault с минимальным примером – https://wayland-book.com/introduction.html

как происходит перерисовка

Зависит от бэкенда. Я писал только GLES2 бэкенд, там обычный swap.

перерисовывается всё при каждом изменении или отслеживается изменяемая область

Хотя ничто не мешает перерисовывать всё, Wayland предоставляет информацию о damage area, так что любая вменяемая имплементация будет перерисовывать только поменявшиеся участки.

Siborgium ★★★★★
()
Ответ на: комментарий от Siborgium

Я писал только GLES2 бэкенд, там обычный swap.

любая вменяемая имплементация будет перерисовывать только поменявшиеся участки

Если перерисовывать только меняющиеся участки, то вместо обычного swap надо будет копировать усечённую часть заднего буфера в передний. Я правильно понимаю? Тиринга не будет?

X512 ★★★★★
() автор топика
Последнее исправление: X512 (всего исправлений: 1)
Ответ на: комментарий от Siborgium

любая вменяемая имплементация будет перерисовывать только поменявшиеся участки.

Похоже там хитрее сделано, нашёл статью авторов wlroots про описание механизма частичного обновления. Вкратце используется переключение, а не копирование буферов и учёт того что осталось неизменным по отношению к переднему буферу в текущем буфере для рисования.

X512 ★★★★★
() автор топика
Ответ на: комментарий от X512

Начал писать ответ, но вы уже сами нашли хороший (и более компетентный) источник. Дополню еще немного.

Помимо damage tracking есть необходимость вовремя послать сигнал на отрисовку содержимого окнам – так чтобы они успели отрисовать изменения и послать вам сигналы вовремя, но и чтобы время до следующего обновления экрана оказалось минимальным.

Взаимодействовать с обновлением экрана можно через, например, drm. Пример можно найти здесь.

Siborgium ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.