Введение

Принципы работы и определения

Библиотека Graphics Framework или GF призвана обеспечить низкоуровневый интерфейс к графической подсистеме. Она предоставляет базовые возможности низкоуровневого 2D рендеринга, менеджмента памяти и организации доступа к графическим устройствам. Данный раздел предназначен для определения общей терминологии и принципов функционирования графической подсистемы.

Подразделы:

Обзор
Компоненты

Обзор

GF является фреймворком создания низкоуровневых приложений графической подсистемы. Без возможности организации оконных интерфейсов. Последнее является и достоинством и недостатком одновременно. С одной стороны интерфейс включает лишь приближенные к оборудованию примитивы, но при этом организация сложных графических окружений и композиция на этом уровне сложно реализуемы. Последнего недостатка лишен второй низкоуровневый интерфейс графической подсистемы - Screen.

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

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

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

graphics_device.png
Рисунок 1. Роль менеджера io-display

Компоненты

Компоненты, управляемые библитекой Graphics Framework: устройство, дисплей, слой, поверхность и контекст.

Устройство и дисплей являются логическим представлением аппаратных особенностей системы. Каждое устройство имеет соответствующий файл в директории /dev/io-display и при этом имеет не менее одного дисплея, который отображает информацию пользователю.

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

Взаимосвязь устройств, дисплеев и слоёв представлена ниже:

hardware_concepts.png
Рисунок 2. Устройство, дисплей и слой

Поверхность представляет собой фрагмент памяти, доступный библиотеке GF для рендеринга. Все, что выводится в поверхность будет отображено на дисплее, если поверхность ассоциирована со слоем и он является видимым. Поверхность и слой должны быть совместимы по формату пикселей. Для планарных пиксельных форматов (например, YUV) требуется несколько поверхностей для каждого слоя.


Note: Планарные YUV форматы предназначены преимущественно для вывода видео данных. GF не располагает примитивами рендеринга для этой группы форматов.

В общем случае поверхности выделяются в видео памяти, если библиотеке явно не указано оптимизировать скорость доступа к ней со стороны CPU. В этом случае поверхность будет выделена в системной памяти.

Контекст обеспечивает хранение информации о параметрах рендеринга и целевой поверхности. Он является участников всех операций рисования средствами библиотеки GF.

Ниже представлена взаимосвязь между контекстами, поверхностями и слоями:

contexts.png
Рисунок 3. Контексты, поверхностя и слои




Предыдущий раздел: Библиотека Graphics Framework