Оглавление
Аппаратное ускорение графики в Qt для встраиваемых Linux-системАппаратное ускорениеПри проектировании приложений для встраиваемых устройств часто имеется компромисс между графическими эффектами и производительностью. На многих устройствах вы не можете иметь оба, поскольку аппаратное обеспечение нужное для таких операций на них просто нет. С ростом количества устройств, которые используют аппаратное обеспечение предназначенное для графических операций, компромиссы нужны меньше. Кроме того, включение динамических графических эффектов имеет два других преимущества для использования графического ускорения. Первая - что аппаратное ускорение графики более энергоэффективно, чем использование ЦПУ. Причина в том, что ЦПУ может требовать тактовой частоты, которая до 20 раз выше, чем у ГПУ, добиваясь таких же результатов. Например, типичное аппаратно ускоренный мобильный графический модуль может растеризовать одну или две билинейных структуры выбираемых за один такт, пока программная реализация легко занимает более 20 тактов. Типичная Система на чипе (System-on-a-chip, SoC) аппаратной графики обычно имеет заметно меньшую тактовую частоту и пропускную способность памяти, а также другой уровень ускорения чем настольные ГПУ. Один пример - это что многие ГПУ пропускают трансформацию и освещение из графического конвейера и выполняют только растеризацию. Другой причиной использования ГПУ является разгрузка основного ЦПУ, либо для экономии энергии либо для параллельного выполнения других операций. Часто скорость отрисовки с ГПУ не слишком превышает таковую с ЦПУ, но чистый выигрыш от использования ГПУ заключается в освобождении ЦПУ от выполнения других задач, что можно использовать для создания большего быстродействия используя опыт. Следовательно, ключом при написании хороших приложений для устройств является ограничение "вау-фактора" того, что целевое аппаратное обеспечение может обработать, и получить преимущество от любого специализированного графического аппаратного обеспечения. Qt предоставляет несколько способов и для визуализации улучшенных эффектов на экране, и для ускорения вашего приложения, используя аппаратное ускорение графики. Qt для встраиваемого графического конвейераQt использует QPainter для всех графических операций. Используя то же API независимо от платформы, код можно повторно использовать на разных устройствах. QPainter использует разные механизмы рисования в QPaintEngine API для выполнения реального рисования. QPaintEngine API предоставляет механизмы рисования для каждой оконной системы и каркас рисования, поддерживаемый Qt. Что касается Qt для встраиваемых систем, она также включает реализации для OpenGL ES версий 1.1 и 2.0, а также OpenVG и DirectFB (только во встраиваемых Linux-системах). Используя один из этих механизмов рисования вы будете способны улучшить графическую производительность вашего приложения Qt. Тем не менее, если используемые графические операции не поддерживаются, это может быть также ловушкой, значительно замедляющей ваше приложение. Всё это зависит от того, какой вид графических операций поддерживается конфигурацией целевых аппаратных устройств. Механизм рисования будет управлять всеми графическими операциями, поддерживаемыми аппаратными устройствами для ГПУ, и оттуда отправлять их в буфер кадров. Неподдерживаемые графические операции снижают скорость QRasterPaintEngine и обрабатываются ЦПУ перед отправкой в буфер кадров. В заключение, операционная система отправляет отключение обновления рисования на экран/дисплей. Операция снижения скорости довольно дорогая в отношении потребления памяти и должны избегаться. Требования к конфигурации аппаратного обеспеченияПеред реализацией любого приложения используя аппаратное ускорение, будет мудро получить обзор того, какого вида операции аппаратного ускоренной графики доступны для целевого устройства. Замечание: На устройствах без аппаратного ускорения Qt будет использовать QRasterPaintEngine, который обрабатывает ускорение используя программное обеспечение. На устройствах, поддерживающих OpenGL ES, OpenVG или DirectFB (не поддерживается в Windows CE), Qt будет использовать соответствующие механизмы рисования для ускорения рисования. Тем не менее, конфигурации аппаратного обеспечения, которые поддерживают только ограниченный набор возможностей аппаратного ускорения, могут не столько ускорить, сколько замедлить аппаратную графику при использовании неподдерживаемых операций, которые должны снизить скорость механизма растеризации. Различные архитектурыОсновываясь на архитектуре, используемой в устройстве, мы можем сделать рекомендацию о том, какие технологии аппаратного ускорения использовать. В основном имеется две разных архитектуры на встраиваемых устройствах. Это устройства с Unified Memory Architecture (UMA) и устройства со специализированной графической памятью. Как правило, профессиональные устройства имеют специализированную графическую память. Устройства начального уровня использует системную память, иногда резервируя область память, а иногда нет. В дополнение к этому, мы можем категоризировать устройства по пяти типам, основываясь на различных графических операциях, поддерживаемых аппаратурой.
Основываясь на этих характеристиках в таблице ниже рекомендуется, какие механизмы рисования использовать с разными типами аппаратной конфигурации. Рекомендуемое использование аппаратного ускорения, основанного на аппаратном обеспечении
Замечание: Так как DirectFB API весьма прост, механизм растрового рисования обрабатывает большинство операций. Замечание: Растровое и альфа-смешивание в настоящее время не поддерживаются в Windows CE. Windowing on Embedded Linux with Hardware Accelerated GraphicsQt for Embedded Linux includes its own windowing system, QWS. QWS was designed in 1999, well before graphics acceleration was available for embedded devices. It does a great job providing a lightweight window manager including all the expected functionality such as arbitrary windows that can be moved, resized, minimized, etc. Getting QWS to work with GPUs is very challenging, particularly with OpenGL and OpenVG because there is no standard way in Linux to share textures across processes. Some silicon vendors provide private APIs to allow texture sharing, others do not. These limitations are documented under the sections describing each type of accelerated hardware APIs. The simplest most generic support for accelerated graphics is a full screen single process single window. General options
Supported Hardware Accelerated Graphics APIsThis table shows which Hardware Accelerated Graphics APIs currently supported by Qt.
|
Попытка перевода Qt документации. Если есть желание присоединиться, или если есть замечания или пожелания, то заходите на форум: Перевод Qt документации на русский язык... Люди внесшие вклад в перевод: Команда переводчиков |