|
0 / 0 / 0
Регистрация: 26.06.2016
Сообщений: 57
|
|
StmGL :) Или хотим изобрести велосипед22.09.2016, 18:30. Показов 4248. Ответов 12
Метки нет (Все метки)
Всем привет!
Имеем STM32F7 с интерфейсом LTDC. Все работает очень шикарно с базовой поддержкой 1024*768*24B цвета. Хотим сделать некую либу - что-то вроде OpenGL. Со всеми вытекающими: смешивание цветов, отрисовка примитивов, текстурирование и т.п. В голове рождается небольшая схема памяти: 2 экрана <--Буфер построения Каждый элемент (то есть, линия, треугольник и т.п.) строится в отдельном маленьком буфере потом перегоняется в соответствующие координаты в буфер построения со смешиванием с тем, что уже лежит в буфере. Теперь проблемы: цикл от 0 до 1024*768 проходит за 200мс. Сразу в голову пришла мысль об использовании DMA. Все четко - работает моментально, НО как использовать DMA и смешивать с тем что уже лежит по адресу назначения... С радостью готов выслушать любые мысли на тему. Спасибо
0
|
|
| 22.09.2016, 18:30 | |
|
Ответы с готовыми решениями:
12
Доделайте мне задачу, пожалуйста - Постройте иерархию классов: товар, велосипед, горный велосипед, самокат движущийся велосипед или машина
|
|
0 / 0 / 0
Регистрация: 25.04.2016
Сообщений: 334
|
|
| 22.09.2016, 18:54 | |
|
Раз есть LTDC, то должен быть и DMA2D.
0
|
|
|
0 / 0 / 0
Регистрация: 15.02.2015
Сообщений: 444
|
|
| 22.09.2016, 23:37 | |
|
Зачем вам порт OpenGL, да еще в таком разрешении? STM32F7 конечно мощная линейка, но на 3D-графику её едва хватит.
0
|
|
|
0 / 0 / 0
Регистрация: 26.03.2015
Сообщений: 316
|
||
| 23.09.2016, 00:41 | ||
Тут общий смысл в том что обрабатывается окно по всем слоям начиная с самого нижнего, в случае когда изменений много - считается вся изменяемая площадь одного слоя, потом второго и так далее. В представлении st - слой это графика с альфа каналом, подложка есно rgb, выхлоп то-же rgb. После смешивания первого слоя с подложкой - получаем новую подложку в формате rgb, физически расположенную в тех-же адресах. В условии что на всём экране меняется всего один символ - то обработка слоёв происходит по габаритам этого символа, после переключение этого буфера на выход в момент смены кадров, с одновременным копированием изменений в бывший активный буфер. С момента начала обработки поступивших графических команд, все новые команды на модификацию падают во временный буфер, из которого потом будут сортироваться по слоям и зонам активности. Понимаю что выглядит сложно, и даже страшно. Но в ином случае получаем дикий перерасход машинного времени, и муар на экране при смене графики. А в случае прямого рисования графики прямо из основного цикла - получаем, точнее теряем скорость работы основного алгоритма.
0
|
||
|
0 / 0 / 0
Регистрация: 26.06.2016
Сообщений: 57
|
||
| 23.09.2016, 13:57 | ||
Физически это дело хранится в одномерных массивах длиной 100*100 и 10*10 соответственно. И вот не могу придумать как смешивать маленький элемент с большим... потому что DMA2D разложит весь элемент 10*10 в одну строку. Вариант в голове: смешивать по линиям. То есть, это цикл из 10 проходов и внутри 10 запусков DMA2D в нужном месте... Или же под каждый элемент выделять слой равный размеру экрана... И по сути в нем будет 99% места не использоваться и будет требоваться только для быстрого смешивания.
0
|
||
|
0 / 0 / 0
Регистрация: 26.06.2016
Сообщений: 57
|
||
| 23.09.2016, 14:01 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 25.04.2016
Сообщений: 334
|
||
| 23.09.2016, 14:22 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 26.06.2016
Сообщений: 57
|
|
| 23.09.2016, 16:46 | |
|
Главу про dma2d пытаюсь найти :) только вот что-то толкового описания всех возможностей не найду...только примеры или готовые собранные библиотеки :(
0
|
|
|
0 / 0 / 0
Регистрация: 15.02.2015
Сообщений: 444
|
|
| 23.09.2016, 17:17 | |
|
Вам нужен не даташит, а Reference Manual (#0385), страница 253.
0
|
|
|
0 / 0 / 0
Регистрация: 26.03.2015
Сообщений: 316
|
||
| 23.09.2016, 21:19 | ||
Конвейер графических команд - исключительно для самих команд, он не содержит слои - но имеет команды для модификации каждого слоя. В супер экономичном варианте, при использовании экранчика с параллельным интерфейсом, и достаточно свежим чипом - рисование происходит в ограниченной области экранчика. При этом два временных буфера могут быть меньше размеров экрана, но иметь размеры самого большого графического элемента, либо вовсе - динамически выделять память. При обработке/изменении части экрана, на дисплей нужно подать команды ограничения видимой области, видимость - это для внешнего интерфейса, сам экран при этом не усохнет. Потом выделяем или ограничиваем имеющийся буфер. Первая команда из конвейера - копирует фон в эту память (цвет или картинку) - простым дма. Одновременно вторая команда рисует символ/графику с использованием прозрачности в отдельный буфер. По завершении запускаем dma2d, с сохранением результатов в один из первичных буферов - теперь он считается подложкой. Как вариант - dma2d сразу пишет в экранную область жк экранчика. В случае когда графика более сложная, подложка в выделенном участке экрана (буфере) - перерисовывается несколько раз. Например ситуация: 1 подложка - потоковое видео от камеры, 2 первый слой - квадрат с прозрачностью определённого цвета под виртуальную кнопку, 3 второй слой - символ (буква/значёк) с неровными краями и использованием прозрачности, 4 третий слой - элемент управления с возможностью перекрытия (стрелка/перекрестье и так-далее) - это та графика которую рисуют в случае наложения. Получаем три буфера под камеру - один приёмный, два для маштабирования в габариты экрана, один буфер под графический слой для LTDC, два мелких буфера под самый габаритный графический элемент. Обработка происходит исключительно в местах наличия изменившейся графики.
0
|
||
|
0 / 0 / 0
Регистрация: 26.06.2016
Сообщений: 57
|
|
| 27.09.2016, 09:00 | |
|
Да, reference manual все объяснил. И да, теперь смогу все элементы хранить по слоям и все в память влезает .
Камрады, спасибо.
0
|
|
|
0 / 0 / 0
Регистрация: 15.02.2015
Сообщений: 444
|
|
| 27.09.2016, 10:47 | |
|
Пожалуйста. Обращайтесь если что. Или пишите о ходе работы, будет интересно почитать.
0
|
|
|
0 / 0 / 0
Регистрация: 26.06.2016
Сообщений: 57
|
|
| 30.09.2016, 12:27 | |
|
Сейчас нахожусь на стадии поиска алгоритмов для рисования гладких элементов (например линий).
Движок сейчас выполняет функции контроля памяти и смешивания элементов. Пробовал на встроенном мониторе - без лагов смешиваются 90 слоев разных размеров. При частоте раз в 30мс.
0
|
|
| 30.09.2016, 12:27 | |
|
Помогаю со студенческими работами здесь
13
Надзиратель томагавков или что за велосипед я изобрел?
Обработка строк или как сделать свой велосипед Создать классы: колесо, велосипед и автомобиль (иерархия или композиция) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|