Общие принципы композиции

Композиция - это процесс объединения изображений из нескольких источников в единое целое

Screen стремится, насколько это возможно, использовать аппаратные слои (pipelines) контроллера дисплеев для осуществления композиции. Когда аппаратура и соответствующий драйвер поддерживают несколько слоев, Screen предоставляет возможность воспользоваться их преимуществами. Для приложений, которым требуются сложные графические преобразования на этапе отображения, имеется возможность воспользоваться встроенными в оконную подсистему средствами визуализации с привлечением аппаратной акселерации. Только в случае, если платформа не поддерживает требуемого оконной подсистеме набора аппаратного обеспечения, Screen прибегает к использованию программного рендеринга.

Например, в зависимости от конкретного аппаратного обеспечения, могут поддерживаться следующие виды организации прозрачности на этапе композиции:

Целевое окно обзора (destination view port)
Позволяет указать область отображения окна в которую вписывается (при масштабировании) или по которой обрезается исходное изображение. Этот подход обеспечивает видимость содержимого, лежащего вне границ исходного окна.
Chroma-ключ (source chroma key)
Позволяет пикселям определенного цвета изображения-источника быть прозрачными (не отображаемыми на экране). В отличие от предыдущего подхода, здесь могут иметь прозрачность часть пикселей внутри окна.
Альфа смешивание (source alpha key)
Позволяет смешивать цвета исходного и целевого пикселя, опираясь на альфа ключ источника. Альфа смешивание является наиболее гибким, но в то же время и ресурсоемким, механизмом обеспечения прозрачности и полу-прозрачности изображения.

Существует два типа аппаратной композиции:

Композиция посредством аппаратных слоёв
Объединение всех видимых (включенных) слоев контроллера дисплеев.
Композиция оконной подсистемы Screen
Объединение нескольких компонентов изображения в единое представление, ассоциированное с дисплеем. Подобная композиция осуществляется средствами Composition Manager из состава оконной подсистемы Screen.

Композиция посредством аппаратных слоёв

Функции данного вида композиции определяются исключительно контроллером дисплеев. По этой причине они варьируются от системы к системе.

Все видимые слои объединяются при выводе на экран. Каждый слой имеет единственный ассоциированный буфер.

Буфер, ассоциированный с окном может быть выведен лишь в выбранный слой напрямую. Подобное окно считается автономным, поскольку никакой композиции со стороны Composition Manager по отношению к ассоциированному буферу не осуществляется. Формат пикселей в буфере автономного окна определяется возможностями контроллера дисплеев.

composition-1.png
Рисунок 1. Пример классической композиции аппаратных слоёв (2 окна, 2 слоя)

Представленный пример демонстрирует аппаратную композицию двух окон в разных слоях. Каждое окно выводит изображение в свой собственный буфер, который ассоциируется с соответствующим слоем. На этапе отображения контроллер дисплеев считывает содержимое буферов и выводит их поочередно на экран.


Note: Параметры композиции является системно-зависимым.

Композиция в графической подсистеме Screen

Большинство предлагаемых аппартной композицией возможностей достижимы встроенными средствами Screen и реализуются в Composition Manager.

Если аппаратные слои не поддерживаются или их число недостаточно для визуализации требуемого набора окон, решением может стать лишь второй тип композиции. Также к нему имеет смысл обратиться в том случае, когда контроллер дисплеев не предоставляет требуемого набора функциональных возможностей.

Composition Manager позволяет аппаратно объединять несколько оконных буферов в единый результирующий буфер, который в последующем будет выводиться на экран. Это так называемый композиционный буфер или фреймбуфер (framebuffer) Screen.

composition-2.png
Рисунок 2. Пример композиции в графической подсистеме Screen (2 окна и 1 слой)

Пример композиции в Screen демонстрирует вывод 2 окон в один слой. Изображения, содержащиеся в этих окнах, объединяются в единый композиционный буфер, который ассоциируется с дисплеем.

Для этого вида композиции не требуется установка следующих параметров окна: SCREEN_PROPERTY_PIPELINE, SCREEN_PROPERTY_USAGE (бит SCREEN_USAGE_OVERLAY).

Для объединения преимуществ обоих подходов можно одновременно использовать представленные практики.

composition-3.png
Рисунок 3. Объединение подходов (3 окна, 1 композиционный буфер и 2 слоя)

Пример демонстрирует 3 окна. Первое окно захватывает первый доступный аппаратный слой контроллер дисплеев. Другие окна ассоциируются с композиционным буфером, который привязывается ко второму слою. Содержимое обоих слоев объединяется воедино средствами контроллера дисплеев.

Для организации подобной композиции требуется корректно настроенный Screen, а также соответствующим образом проинициализированные параметры окон.


Note: Индексирование аппаратных слоев и z-индекс окон применяются и определяются независимо.

Индексирование слоев определяется аппаратно и имеет приоритет. Z-индекс окон является частью логики функционирования Composition Manager и определяются на этапе проектирования приложения и системы.

При проектировании результирующей конфигурации необходимо уделить особое внимание индексированию слоев и окон. Вы должны убедиться в том, что конкретные z-индексы имеют смысл в пределах конкретного слоя. Например, если вы назначаете высокое значение z-индексу для окна (обычно это означает, что окно должно быть размещено на переднем плане), скорее всего стоит ассоциировать окно со слоем верхнего уровня. В противном случае результат может быть не таким, как вы ожидаете, независимо от значения z-индекса.


Сравнение представленных видов композиции

Оба подхода имеют как достоинства, так и недостатки. Некоторые из них проявляются только для приложений, которые часто обновляют содержимое окна.

Вид композиции Композиция слоёв Композиция графической подсистемы Screen
Достоинства
  • Оконные буферы не требуют копирования данных во фреймбуфер
  • Ресурсы CPU и/или GPU на композицию не расходуются
  • Эффективно для окон с высокой частотой обмена
  • Не ограничивается возможностями слоя
  • Программная перерисовка курсора или фонового изображения под ним не требуется
  • Композиция возможна даже при наличии единственного слоя
  • Существенно упрощается глобальная модификация содержимого оконного буфера (поворот, масштабирование, альфа смешивание, перемещение)
  • Возможно создание окон с пиксельными форматами, которые не поддерживаются слоем (Screen может конвертировать формат исходного изображения в один из поддерживаемых слоем на этапе композиции)
Недостатки
  • Возможности композиции ограничены функциональностью контроллера дисплеев
  • Возможности меняются от платформы к платформе, что ограничивает портируемость прикладного кода
  • Всё меньше вендоров продолжает поддерживать аппаратные слои
  • Количество слоев жестко ограничено в каждой конкретной системе
  • Число поддерживаемых пиксельных форматов неизменно в каждой конкретной системе
  • Только один оконный буфер может быть ассоциирован с каждым слоем
  • Оконный буфер или его часть должны быть скопированы в композиционный фреймбуфер
  • Требуется расходование некоторых вычислительных ресурсов и CPU и GPU на осуществление композиции
  • Требуется поддержка аппаратной акселерации графики (2D или 3D)




Предыдущий раздел: Оконная подсистема Screen