Salamander 2 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба 2 minutes ago, jcxz said: память не было никакого ускорения - не может такого быть. небольшое ускорение есть - перевел в режим wireFrame - движения стали более плавными. 3 minutes ago, jcxz said: И зачем там ещё умножение на 3? цвет 24 битный. в TFT_FillRectangle() тоже было умножение. 4 minutes ago, jcxz said: Значит у вас проблема в чём-то другом. Скорее всего. Буду копать.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба 6 минут назад, Salamander сказал: цвет 24 битный. в TFT_FillRectangle() тоже было умножение. Вроде как из контекста void dsp3D_LL_drawPoint(uint32_t x, uint32_t y, color32_t color) следует что color - это уже полный (32- или 24-битный) цвет точки, а не цветовая компонента (8-битная). Если формат хранения в видео-памяти - это тройки байт, то и писать нужно по 3 байта сразу (всю точку). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба Перенес вывод непосредственно в тело библиотеки. ТАм тоже есть проверка границ. Отрубил ее. Убрал умножение. Все равно медленно void dsp3D_drawPoint(int32_t x, int32_t y, color32_t color) { //if((x > -1) && (x < SCREEN_WIDTH) && (y > -1) && (y < SCREEN_HEIGHT)) *(__IO uint32_t*)(0xD0000000 + (y * SCREEN_WIDTH + x))=color; //dsp3D_LL_drawPoint(x, y, color); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба Использовать оптимизщации компилятора? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба 5 minutes ago, GenaSPB said: Использовать оптимизщации компилятора? Включил 3 уровень (до этого был 0) - не помогло Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба Включить кеширование кода/данных из флешь и из внешней SDRAM? Хотя судя по тормознутости - не в этом дело, так как НАСТОЛЬКО сильно кеширование не должно влиять. Косяк в чём-то другом..... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба Частота pixel clock LTDC какая? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба Попробую ка я посчитать через какие промежутки времени эта функция вообще вызывается. 1 час назад, Arlleex сказал: Частота pixel clock LTDC какая? Оставьте этот путь, все нормально с дисплеем, TOuchGFX порхает Сделал это так void dsp3D_drawPointDepthBuffer(int32_t x, int32_t y, float32_t z, color32_t color) { if((x > -1) && (x < SCREEN_WIDTH) && (y > -1) && (y < SCREEN_HEIGHT)) { int32_t index = (x + y * SCREEN_WIDTH) * 3; // if(dsp3D_LL_readFromDepthBuffer(index) < z) // return; dsp3D_LL_writeToDepthBuffer(index, z); // dsp3D_LL_drawPoint(x, y, color); // убрал вызов функции низкоуровневого вывода точки, заменил ее на то, что ниже delta_tick=DWT->CYCCNT-last_tick; // считаю разницу. last_tick=DWT->CYCCNT; обновляю счетчик. *(__IO uint32_t*)(0xD0000000 + index)=color; } } Получаю значение 345-380. То есть функция вывода точки вызывается раз в 345 тактов. То есть 552630 точек в секунду, не так ли? Маловато.... Разрешение у меня 1024х600 точек. Я не думаю, что каждый пиксель отрисовывается... Теперь делаю так last_tick=DWT->CYCCNT; *(__IO uint32_t*)(0xD0000000 + index)=color; delta_tick=DWT->CYCCNT-last_tick; то есть, считаю, сколько тактов занимает запись в память. Получаю 7-10 тактов. Я правильно считаю? 1 час назад, Salamander сказал: НА видео человек проверяет на 800х480, меньше конечно разрешение, но скорость в разы больше (да и модель сложнее в разы - там 900 фейсов, у меня 12) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 10 января, 2021 Опубликовано 10 января, 2021 (изменено) · Жалоба Попроьуйте -Ofast -flto... Библиотеку перекомилитровать с теми же флагами. Вообще если в основном векторные рисунки - значит с негодным процессором пытаетесь. Без векторного сопроцессора хорошо заполненные прямоугольники получаются и немного векторонй графики поверх. На видео - поямоугольники заполняются и копируются MDMA, текст - по 8 пикселей memcpy. Кстати, если внешшняя память 16 бит имеет смысл применит RGB565. Изменено 10 января, 2021 пользователем GenaSPB Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба Крамольный вопрос, но все же - может найдется энтузиаст с платой на быстром STM32, например на F7, который эту библиотеку подключит и попробует у себя? В main нужно всего-то вставить #include "dsp3D.h" и float32_t dsp3dModel[122] = {8,12, // VERTEXES // coords normals 1, 1, 1, 0,0,1, // 0 1, 1,-1, 0,-1,0, // 1 1,-1, 1, -1,0,0, // 2 1,-1,-1, 0,0,-1, // 3 -1, 1, 1, 1,0,0, // 4 -1, 1,-1, 0,1,0, // 5 -1,-1, 1, 0,0,0, // 6 -1, -1,-1, 0,0,0, // 7 // FACES // Indexes RGB 0,1,2, 255,255,255, 1,2,3, 255,255,255, 0,1,4, 255,255,255, 1,4,5, 255,255,255, 0,4,6, 255,255,255, 0,2,6, 255,255,255, 2,3,6, 255,255,255, 3,6,7, 255,255,255, 1,3,7, 255,255,255, 1,5,7, 255,255,255, 5,6,7, 255,255,255, 4,5,6, 255,255,255, }; dsp3D_init(); dsp3D_setCameraPosition(0,0,10); dsp3D_setLightPosition(0,0,10); dsp3D_setCameraTarget(0,0,0); while(1) { meshRotation[0]+=0.01; meshRotation[1]+=0.01; meshRotation[2]+=0.01; dsp3D_renderFlat(dsp3dModel); TFT_FillRectangle(0,0,1024,600,0x00); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба У меня сейчас на столе устройство с видео - STM32MP157 на 800 МГц. Если библиотека не привязана с SPL/HAL - то все ок. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба Еще подкину мысль - библиотека использует библиотеку arm_math.h Может с ней есть какие танцы и бубны? Все-таки вычисления..... Условий использования библиотеки от Фабио (которые должен выполнить пользователь и которые могут повлиять на скорость) всего два 1. Вставить функцию вывода точки 2. Подключить arm_math.h В первом условии накосячить сложно, да и по факту - всего 7 тактов занимает запись точки. Значит библиотека arm_math работает медленно? 34 минуты назад, GenaSPB сказал: Если библиотека не привязана с SPL/HAL - то все ок. У меня не привязано. Еще вопрос - серия F7 имеет аппаратную поддержку плавающей точки? Наверное да. Если так, то может быть такое, что у меня эта функция отключена? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 10 января, 2021 Опубликовано 10 января, 2021 (изменено) · Жалоба У вас там непонятная функция TFT_FillRectangle - откуда брать? Она отрендеренный рещультат выдает? Вллтзе куча приведений непонятно зачем, компидятор вызоды за границы массивов диапгнстоирует... Изменено 10 января, 2021 пользователем GenaSPB Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Salamander 2 10 января, 2021 Опубликовано 10 января, 2021 · Жалоба 5 minutes ago, GenaSPB said: TFT_FillRectangle - откуда брать? Она отрендеренный рещультат выдает? Она экран очищает, используйте то, что есть у вас. 6 minutes ago, GenaSPB said: Вллтзе куча приведений непонятно зачем, компидятор вызоды за границы массивов диапгнстоирует... Не пойму Вот это что ли ..\Middlewares\Third_Party\dsp3D\src\dsp3D.c(926): warning: #61-D: integer operation result is out of range dsp3D_drawLine(coord_b[0], coord_b[1], coord_c[0], coord_c[1], ASSEMBLE_ARGB(0xFF, RGBr, RGBg, RGBb)); Ну так оно работать не мешает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 10 января, 2021 Опубликовано 10 января, 2021 (изменено) · Жалоба Кроме dsp3D_LL_drawPoint что еше надо имлементь? Этого не хватило Изменено 10 января, 2021 пользователем GenaSPB Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться