Перейти к содержанию

middleware - графическая библиотека

В проекте нужна графика на LCD. Вывод графики на LCD думаю организовать из внутреннего буфера во встроенном ОЗУ микроконтроллера (видеобуфер).
Алгоритм отрисовки (обновления всего экрана или его части) думаю организовать как-то подобно:
Код
{
  struct UpdateRegion {
    int xLeft, yTop, xRight, yBottom;
  } region;
  BeginPaint(&region);
  ...  //вызов функций отрисовки графических примитивов (прямоугольники, прямые, текст, ...) в видеобуфере
  ...  //
  EndPaint(&region);
}
Соответственно:
BeginPaint() - обнуляет регион обновления экрана (минимальный прямоугольник пикселей, включающий в себя все модификации видеобуфера, совершённые функциями формирования примитивов).
EndPaint() - пересылает регион обновления в LCD-контроллер (по SPI).

Так вот - я конечно могу написать сам все функции отрисовки граф. примитивов в видеобуфере, но может есть какая-то готовая, отлаженная библиотека, вразумительно и некриворуко(!) написанная?
Чтобы не изобретать лисапед.
Интересует именно middleware, т.е. - отрисовка в памяти, без взамодействия с железом. Нижний уровень работы с железом я напишу сам.
Требования примерно такие:
1.Возможность задать формат видеобуфера: размеры X*Y, порядок расположения пикселей в видеобуфере (по-строчно, по-столбцам, ...), способ упаковки пикселей в байты видеобуфера (ну или по-крайней мере чтобы поддерживался формат: 4 бит цвета на пиксел, два пиксела в байте). Необходима картинка именно с малым кол-вом цветов, ибо хочу разрешение порядка 320*240, но без цепляния внешней памяти к МК - видеобуфер во внутренней ОЗУ МК.
2.Необходим минимальный набор функций рисования граф.примитивов: прямая, закрашенный прямоугольник, эллипс, вывод текста (шрифт чтобы можно было задать свой) с возможностью задания ориентации строк шрифта: +-90/180 градусов, рисование пиктограмм, может быть ещё рисование закрашенных многоугольников. Отрисовка каких-либо элементов графического интерфейса (типа окон, кнопок и т.п.) не нужна.
3.Поддержка UpdateRegion: каждая функция рисования примитива должна добавлять в регион обновления свой новый регион, формируя минимальный охватывающий прямоугольный регион обновления. Или должна быть возможность добавить самостоятельно такой функционал.
4.Поддержка возможности задания прямоугольного региона отсечения (ClippingRegion) действующего на все функции рисования примитивов.
5.Возможность задания трансформации системы координат: нормальное положение / поворот на 180 градусов.
6.Желательна возможность работы с несколькими разными видеобуферами одновременно, с разным форматом этих видеобуферов (например: один буфер - 4бита/пиксел, другой - Ч/Б (1бит/пиксел)).
7.Желательна библиотека в исходниках, но в крайнем случае можно и бинарники (под Cortex-M). Должна быть написана хорошо(!). Никакие поделия недоученных школьников не интересуют. Желателен малый объём, чтобы ничего лишнего (или возможность дефайнами отключить ненужный функционал). Очень интенсивно будет использоваться процедура рисования прямой - она должна быть оптимальна.

Буду благодарен за любые полезные ссылки, комменты, советы.
Ещё раз акцентирую внимание - нужна именно middleware(!), без какой-либо привязки к железу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
народ активно использует uGFX есть еще пара недобитков полностью свободных.
мне под мое железо пришлось лопатить собственный движок, ибо те движки что есть, расчитаны что у вас в озу можно разместить целый кадр экрана.
а у меня нету столько памяти, несколько строк могу себе позволить.
Изменено пользователем AlexRayne

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(AlexRayne @ Jan 11 2018, 17:17) <{POST_SNAPBACK}>
мне под мое железо пришлось лопатить собственный движок, ибо те движки что есть, расчитаны что у вас в озу можно разместить целый кадр экрана.

Уменьшение разрядности цвета позволяет сделать невпихуемое - впихуемым. cool.gif

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Многое из перечисленного делал сам. Как-то работает. Хотел бы взять и за ум взяться и переделать, но не очень сильно хочу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация