ЗАО «ЗЭО»

Пожалуйста, войдите или зарегистрируйтесь.

Расширенный поиск  

Новости:

Автор Тема: QT4 screen driver  (Прочитано 4120 раз)

0 Пользователей и 1 Гость просматривают эту тему.

scad

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 48
QT4 screen driver
« : 03 Сентября, 2010, 13:53:39 »

Как уже обсуждалось здесь http://www.zao-zeo.ru/forum/index.php?topic=236.0, здесь: http://www.zao-zeo.ru/forum/index.php?topic=123.0 и еще много где на этом форуме, несмотря на наличие ускорения 2D графики в EP9315 драйвера для qt4, использующие это ускорение отсутствуют.
Я уже писал о желании написать такой драйвер - теперь выкладываю то, что получилось. Сначала немного слов.
0. Те кто хотят быстрого счастья и супер быстрого работающего драйвера - могут дальше не читать. Те кто хочет помочь, вместе разобраться с рядом трудностей и кому интересно как это все работает - добро пожаловать :)
1. Я использую eabi toolchain от faa: http://www.zao-zeo.ru/forum/index.php?topic=138.0 gcc-4.2.4.
2. Ядро Linux 2.6.20.21 собираю отдельно, как написано здесь:http://www.zao-zeo.ru/dokuwiki/doku.php/linux#патчи_ядра
3. В архиве лежат файлы ep93xxfb.h и ep93xxfb.c видеодрайвера их нужно скопировать в уже пропатченное linux-2.6.20.21 в каталог drivers/video и собрать его, чтобы видео было вкомпилено в ядро, а не отдельным модулем. Я тестирую все на ТИОН-ПРО с 8'' панелью, но думаю, что и на VGA мониторе с разрешением 800x600 все пойдет.
4. Я использую qt-embedded 4.6.2 (4.5.2 тоже подойдет) собранную указанным выше тулчейном с опцией -plugin-gfx-linuxfb.
5. В архиве лежит проект dbscreen (просто лень было переименовывать, а брал за образец как раз пример dbscreen от Qt) чтобы его собрать нужно в dbscreen.pro указать верный includepath, а именно путь к исходникам Вашей библиотеки Qt.
6. После сборки драйвера - можно приступать к тестированию, не забудьте указать в вашем start скрипте -display dbscreen.

Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: QT4 screen driver
« Ответ #1 : 03 Сентября, 2010, 15:58:01 »

Снижение нагрузки на процессор заметно?
Записан

scad

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 48
Re: QT4 screen driver
« Ответ #2 : 03 Сентября, 2010, 16:34:56 »

Заметно, но не для всех операций.

Расскажу подробнее про внутреннее устройство всего что сделано.

1. Для рисования окон используется видеопамять. Для этого используется реализация кэша из драйвера linuxfb. Размер видеопамяти объявлен в ep93xxfb.h и в настоящий момент составляет 3840000 байта. Это позволяет хранить помимо основного экрана 800х600х2 еще 3 таких же для рисования окон (backbuffer). Функция ep93xx_copy выполняет финальное копирование нарисованных окон из бэкбуферов на экран (вызывается в dbscreen::blit()). Для областей располагающихся не в видеопамяти (например картинке курсора) выполняется ep93xx_blit, копирующая изображение из буфера на экран.
2. Создан наследник QRasterPaintEngine - QEP93xxPaintEngine и перегружены некоторые функции (самые простые, типа линий  и заливки - этот процесс можно продолжать). Т.к. все окна лежат в буферах видеопамяти при вызове функций QEP93xxPaintEngine вычисляется сдвиг (offset) текущего буфера относительно начала видеопамяти и передается одним из аргументов в функции рисования в ядро Linux.

3. Число реализованных функций в QEP93xxPaintEngine не велико, поэтому возможно и ускорение производительности пока не всегда ощутимо. Процесс реализации функций нужно продолжать, тем более что при различных стилях используются в большей мере различные функции, например для QWindowStyle это drawPolygon, который пока не реализован оптимизированно. Возможно стоит вообще реализовать только 2 функции drawBufferSpan и drawColorSpans, но пока у меня это не получилось.

Записан