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

Как наибыстрейше вывести на экран точку?

2 minutes ago, jcxz said:

память не было никакого ускорения - не может такого быть.

небольшое ускорение есть - перевел в режим wireFrame - движения стали более плавными.

 

3 minutes ago, jcxz said:

И зачем там ещё умножение на 3?

цвет 24 битный. в TFT_FillRectangle()  тоже было умножение.

 

4 minutes ago, jcxz said:

Значит у вас проблема в чём-то другом.

Скорее всего. Буду копать....

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


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

6 минут назад, Salamander сказал:

цвет 24 битный. в TFT_FillRectangle()  тоже было умножение.

Вроде как из контекста

void dsp3D_LL_drawPoint(uint32_t x, uint32_t y, color32_t color)

следует что color - это уже полный (32- или 24-битный) цвет точки, а не цветовая компонента (8-битная).

Если формат хранения в видео-памяти  - это тройки байт, то и писать нужно по 3 байта сразу (всю точку).

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


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

Перенес вывод непосредственно в тело библиотеки. ТАм тоже есть проверка границ. Отрубил ее. Убрал умножение. Все равно медленно

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);
}

 

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


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

5 minutes ago, GenaSPB said:

Использовать оптимизщации компилятора?

Включил 3 уровень (до этого был 0) - не помогло

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


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

Включить кеширование кода/данных из флешь и из внешней SDRAM?

Хотя судя по тормознутости - не в этом дело, так как НАСТОЛЬКО сильно кеширование не должно влиять. Косяк в чём-то другом.....

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


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

Попробую ка я посчитать через какие промежутки времени эта функция вообще вызывается.  

1 час назад, Arlleex сказал:

Частота pixel clock LTDC какая?:wink:

Оставьте этот путь, все нормально с дисплеем, 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)

 

 

 

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


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

Попроьуйте -Ofast -flto... Библиотеку перекомилитровать с теми же флагами.
Вообще если в основном векторные рисунки - значит с негодным процессором пытаетесь. Без векторного сопроцессора хорошо заполненные прямоугольники получаются и немного векторонй графики поверх. На видео - поямоугольники заполняются и копируются MDMA, текст - по 8 пикселей memcpy. Кстати, если внешшняя память 16 бит имеет смысл применит RGB565.

 

Изменено пользователем GenaSPB

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


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

Крамольный вопрос, но все же - может найдется энтузиаст с платой на быстром 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);
}	

 

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


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

У меня сейчас на столе устройство с видео - STM32MP157 на 800 МГц. Если библиотека не привязана с SPL/HAL - то все ок.

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


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

 

 

Еще подкину мысль - библиотека использует библиотеку arm_math.h

Может с ней есть какие танцы и бубны? Все-таки вычисления.....

Условий использования библиотеки от Фабио (которые должен выполнить пользователь и которые могут повлиять на скорость) всего два

1. Вставить функцию вывода точки 

2. Подключить arm_math.h 

В первом условии накосячить сложно, да и по факту  - всего 7 тактов занимает запись точки.

Значит библиотека arm_math  работает медленно? 

34 минуты назад, GenaSPB сказал:

Если библиотека не привязана с SPL/HAL - то все ок.

У меня не привязано.

 

Еще вопрос - серия F7 имеет  аппаратную поддержку плавающей точки? Наверное да. Если так, то может быть такое, что у меня эта функция отключена?

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


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

У вас там непонятная функция TFT_FillRectangle - откуда брать? Она отрендеренный рещультат выдает?

Вллтзе куча приведений непонятно зачем, компидятор вызоды за границы массивов диапгнстоирует...

Изменено пользователем GenaSPB

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


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

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));

Ну так оно работать не мешает.

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


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

Кроме
dsp3D_LL_drawPoint
что еше надо имлементь? Этого не хватило

Изменено пользователем GenaSPB

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...