реклама на сайте
подробности

 
 
5 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> Програмирование графики, вопрос
Onkel
сообщение Sep 3 2016, 09:47
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 708
Регистрация: 8-05-11
Из: Чг
Пользователь №: 64 861



Цитата(_pv @ Sep 3 2016, 11:48) *
а совсем правильно сложить это сразу в память видеокарты, тогда и сдвиги и отрисовка процессор никак не нагрузят

я еще когда в 90е делал систему сдирания буржуйских чипов для наших конфетных харь, готовил следующий экран в памяти, vga имело буфер размером со всю экранную память, и потом просто переключал память, выводимую на экран.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 3 2016, 10:10
Сообщение #17


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(whale_nik @ Sep 3 2016, 14:38) *
со 100 мс пока зкран весь сдвинется родить можно будет )

Вы же сами в стартовом посте написали про 0.1с. Вот это и есть 100мс.
А 1000FPS вы никакими BitBlt и OpenGl-ями не получите. Урежьте осетраsm.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
_pv
сообщение Sep 3 2016, 10:17
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата(whale_nik @ Sep 3 2016, 16:38) *
Я правильно понял, что
если создать две одинаковые матрицы, и потом по очереди копировать одну в другую со сдвигом , прибавляя новые данные ? Так можно скопировать ?
Можно примерчик плиз ?
Я так понимаю это glCopyPixels ?

с glCopyPixels сдвинуть текущую картинку на один пиксель и через glDrawPixels дорисовать только один недостающий столбец.
никаких дополнительных буферов в этом случае вообще не надо.
Go to the top of the page
 
+Quote Post
whale_nik
сообщение Sep 3 2016, 11:51
Сообщение #19


Местный
***

Группа: Участник
Сообщений: 364
Регистрация: 25-09-08
Пользователь №: 40 483



Цитата(AHTOXA @ Sep 3 2016, 14:10) *
Вы же сами в стартовом посте написали про 0.1с. Вот это и есть 100мс.
А 1000FPS вы никакими BitBlt и OpenGl-ями не получите. Урежьте осетраsm.gif

Чета я не то сказал )))
Реально хотелось бы достичь макс скорость 5 сек на весь экран, это 5/1100 = 4,5 мс/столбец
ну а тут как получиться
Цитата(_pv @ Sep 3 2016, 14:17) *
с glCopyPixels сдвинуть текущую картинку на один пиксель и через glDrawPixels дорисовать только один недостающий столбец.
никаких дополнительных буферов в этом случае вообще не надо.

Осталось все это нарисовать в коде )
Цитата(Onkel @ Sep 3 2016, 13:47) *
я еще когда в 90е делал систему сдирания буржуйских чипов для наших конфетных харь, готовил следующий экран в памяти, vga имело буфер размером со всю экранную память, и потом просто переключал память, выводимую на экран.

Ну тут кроме это окна еще куча других работает, копировать весь экран не получиться.

Такое предлагаю,
создаем матрицу размер +1 по х,
вводим новые значения в правый столбец,
выводим в канву со сдвигом -1 (чтобы новые данные появились справа)
копируем полученную канву в матрицу с нуля,
и тд.

Типа того, работает но жрет ресурсов столько же как предыдущие варианты (
похоже это типа тоже тупое копирование массива а не сдвиг указателя памяти

TRect tRectFrom(1,0,1101,800);
TRect tRectTo (0,0,1100,800);

Image1->Canvas->CopyMode=cmSrcCopy;
Image1->Canvas->CopyRect(tRectTo,gBitmap->Canvas,tRectFrom);

TRect tRectFrom2(0,0,1100,800);
TRect tRectTo2 (0,0,1100,800);

gBitmap->Canvas->CopyRect(tRectTo2,Image1->Canvas,tRectFrom2);

for ( y = 0; y < h1; y++)
{
ptr = (Byte *)gBitmap->ScanLine[y];

ptr[3300+0] = (Byte)Col;
ptr[3300-1] = (Byte)0;
ptr[3300-2] = (Byte)0;

ptr[3300-3] = (Byte)Col;
ptr[3300-4] = (Byte)0;
ptr[3300-5] = (Byte)0;

ptr[3300-6] = (Byte)Col;
ptr[3300-7] = (Byte)0;
ptr[3300-8] = (Byte)0;

}

ps а не , был не прав, вроде меньше нагрузка ...

Сообщение отредактировал Herz - Sep 3 2016, 12:35
Go to the top of the page
 
+Quote Post
k155la3
сообщение Sep 3 2016, 12:35
Сообщение #20


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(whale_nik @ Sep 3 2016, 14:51) *
. . . .
Ну тут кроме это окна еще куча других работает, копировать весь экран не получиться.
. . . .

Если Вам эта работа нужна в качестве инструмента.
В винде, по крайней мере в XP, можно "монополизировать" экран, те. фактически работать без окон, графика в полноэкранном режиме.
(я давненько игрался с этим режимомом для реализации простого, но длинного графика-лога с удобным скроллингом мышкой и масштабированием)
Окон естесетвенно, нет. Ваш график отображается реалтайм.
При восстановлении стандартного режима, окно "свертывается", с упрощенным отрбражением, скроллинг загрубляется,
например, до 20 позиций раз по полсекунды.


Go to the top of the page
 
+Quote Post
whale_nik
сообщение Sep 3 2016, 12:38
Сообщение #21


Местный
***

Группа: Участник
Сообщений: 364
Регистрация: 25-09-08
Пользователь №: 40 483



Без окон никак, увы.

Вот вроде бы нагрузка небольшая получилась...

Сообщение отредактировал Herz - Sep 3 2016, 17:24
Причина редактирования: Избыточное цитирование

Прикрепленные файлы
Прикрепленный файл  Project1__2_.zip ( 20.45 килобайт ) Кол-во скачиваний: 10
 
Go to the top of the page
 
+Quote Post
DASM
сообщение Sep 3 2016, 12:43
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



а почему побайтно работаете и не пословно?
Go to the top of the page
 
+Quote Post
whale_nik
сообщение Sep 3 2016, 12:44
Сообщение #23


Местный
***

Группа: Участник
Сообщений: 364
Регистрация: 25-09-08
Пользователь №: 40 483



Цитата(DASM @ Sep 3 2016, 16:43) *
а почему побайтно работаете и не пословно?


Не понял вопроса, в смысле цвета ?



Сообщение отредактировал whale_nik - Sep 3 2016, 16:52
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 3 2016, 13:16
Сообщение #24


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(whale_nik @ Sep 3 2016, 16:51) *
Чета я не то сказал )))
Реально хотелось бы достичь макс скорость 5 сек на весь экран, это 5/1100 = 4,5 мс/столбец
ну а тут как получиться

4,5 мс - это 222 герца. Тоже многовато.
Вы примите во внимание, что для человеческого глаза не нужна такая частота. Достаточно, скажем, 60 Гц (вернее, достаточно 25, а 60 - это будет ультра-гладкая картинка). Вот и перерисовывайте соответственно 60 раз в секунду. Пусть за одну перерисовку у вас добавляется не один, а несколько столбцов.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
amaora
сообщение Sep 3 2016, 13:26
Сообщение #25


Местный
***

Группа: Участник
Сообщений: 421
Регистрация: 2-01-08
Пользователь №: 33 778



В лоб будет больше 60 к/с, если оптимизировать как должно, немного медленнее memcpy. А можно и взять готовый memmove, останется добавлять один столбец. Выводить можно через libsdl.
Go to the top of the page
 
+Quote Post
whale_nik
сообщение Sep 3 2016, 17:42
Сообщение #26


Местный
***

Группа: Участник
Сообщений: 364
Регистрация: 25-09-08
Пользователь №: 40 483



Цитата(AHTOXA @ Sep 3 2016, 17:16) *
4,5 мс - это 222 герца. Тоже многовато.
Вы примите во внимание, что для человеческого глаза не нужна такая частота. Достаточно, скажем, 60 Гц (вернее, достаточно 25, а 60 - это будет ультра-гладкая картинка). Вот и перерисовывайте соответственно 60 раз в секунду. Пусть за одну перерисовку у вас добавляется не один, а несколько столбцов.

4,5 это не обновление картинки а добавление одного столбца, а частота окна получиться 5 сек если считать кадром обновление всего окна.

Цитата(amaora @ Sep 3 2016, 17:26) *
В лоб будет больше 60 к/с, если оптимизировать как должно, немного медленнее memcpy. А можно и взять готовый memmove, останется добавлять один столбец. Выводить можно через libsdl.

Вы говорите для меня загадками )

Господа, вот такая штука виснет намертво и ничего не выводит, если без goto в таймере вызывать все отлично, в чем дело ?

int h1 = gBitmap->Height;
int w1 = 3300;

fg:

Col--;

for ( y = 0; y < h1; y++) // âàðèàíò 2 = ìåíÿåì â ìàñèâå òîëüêî îäèí ñòîëáåö
{
data_in[0][y]=random(250);
data_in[1][y]=random(250);
data_in[2][y]=random(250);
}

//-----------------------------------

TRect tRectFrom(1,0,1101,h1);
TRect tRectTo (0,0,1100,h1);

Image1->Canvas->CopyMode=cmSrcCopy;
Image1->Canvas->CopyRect(tRectTo,gBitmap->Canvas,tRectFrom);

TRect tRectFrom2(0,0,1100,h1);
TRect tRectTo2 (0,0,1100,h1);

gBitmap->Canvas->CopyRect(tRectTo2,Image1->Canvas,tRectFrom2);


for ( y = 0; y < h1; y++)
{
ptr = (Byte *)gBitmap->ScanLine[y];


ptr[w1+0] = (Byte)data_in[0][y];
ptr[w1-1] = (Byte)data_in[1][y];
ptr[w1-2] = (Byte)data_in[2][y];

}

//-----------------------------------

Sleep(100);
goto fg;
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Sep 3 2016, 17:46
Сообщение #27


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Ребят, я не понимаю зачем нам тут gl и уж тем более полноэкранная графика с монополизацией экрана....
Компонент лежит на форме и может предоставить свой DC(Device Context). Этот контекст как раз позволит рисовать в заданную область на форме(в окне).
Зачем лезть в gl если есть более стандартные функции из GDI. Сделать это всё на Canvas вместо Image и будет счастье.
Я бы взял за основу вот этот пример, где есть скроллинг битмэпа
https://msdn.microsoft.com/ru-ru/library/wi...0(v=vs.85).aspx
Используется как раз BitBlt()
Device context у нас есть, буфер сделать нет проблем... в целом тоже нет проблем )

Ежели кто-то сможет пояснить за использование GL в данном случае то я бы с интересом почитал.


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
whale_nik
сообщение Sep 3 2016, 17:58
Сообщение #28


Местный
***

Группа: Участник
Сообщений: 364
Регистрация: 25-09-08
Пользователь №: 40 483



Цитата(AHTOXA @ Sep 3 2016, 17:16) *


Вот 5 сек на весь экран примерно 5мс/столбец, не вижу тут мега быстрого чего то .
Прикрепленные файлы
Прикрепленный файл  Project1__3_.zip ( 20.77 килобайт ) Кол-во скачиваний: 9
 
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Sep 3 2016, 18:31
Сообщение #29


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Логичнее было бы в архив прилепить исходник, вместо этого безобразия
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
whale_nik
сообщение Sep 3 2016, 19:09
Сообщение #30


Местный
***

Группа: Участник
Сообщений: 364
Регистрация: 25-09-08
Пользователь №: 40 483



Цитата(sigmaN @ Sep 3 2016, 22:31) *
Логичнее было бы в архив прилепить исходник, вместо этого безобразия


Пардон, попробуйте этот

Прикрепленные файлы
Прикрепленный файл  Project1__2_.zip ( 250.14 килобайт ) Кол-во скачиваний: 14
 
Go to the top of the page
 
+Quote Post

5 страниц V  < 1 2 3 4 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 02:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.01491 секунд с 7
ELECTRONIX ©2004-2016