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

Ускорить DirectDraw

Есть фотка высота 3200 ширина 1600, 

нужно что бы она плавно выезжала справа, проходила экран и  уезжала слева.

Реализовано на  DirectDraw 

lpDDSBack01->BltFast(sr.left-1,sr.top, lpDDSBack01, &sr, FALSE);           
lpDDSPrimary->Blt(&wr, lpDDSBack01, &sr, DDBLT_WAIT, 0);                     

Те сдвигаем  lpDDSBack01 на один столбец методом копирования и выводим на lpDDSPrimary.

Все работает но как то слишком медленно, весь проход  занимает аж 30сек,

можно как то ускорить ?

Сам цикл бегает в потоке ничего его не тормозит кроме копирования.

Если копировать скажем сразу на 3 столбца то появляется замыливание изображения.

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


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

42 минуты назад, whale сказал:

можно как то ускорить ?

Очевидно: Создать в памяти DC. Совместимый с экранным форматом и таким же размером, как экранное окно. Загрузить изображение в него один раз. А потом уже из него копировать в экранное ОЗУ, сдвигая на пиксель, сколько нужно раз.

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


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

8 hours ago, jcxz said:

Загрузить изображение в него один раз

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

на 1 пиксель влево, справа в него в крайней столбец заноситься новые данные.

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


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

Тогда 2 контекста с картинками и их двигать по основному. Может быть три чтобы совсем не было задержки.

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


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

17 hours ago, whale said:

Все работает но как то слишком медленно, весь проход  занимает аж 30сек

ну так-то 1600 пикселей поделить на ~60 кадров/c секунд 30 и получится если по пикселю за кадр двигать.

 

и по directdraw я сварщик не настоящий, но с opengl закинуть в картинку в gpu (glTexImage2D), нарисовать прямоугольник во весь размер glRects(-1,-1,1,1) а в шейдере сделать texelfetch(pic, vec2(x+xPos,y)), обновляя uniform xPos каждый кадр на сколько надо, не копируя ничего процессором вообще.

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


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

2 hours ago, _pv said:

с opengl

Я с этой либой не знаком совсем.

6 hours ago, vov4ick said:

2 контекста с картинками

Вы предлагаете сделать буфер длинной на две фотки, загрузить в него сразу две фотки и копировать из него скользящим окном в праймери ? 

После того как окно дойдет до конца  буфера перегрузить его новыми фотками и окно переставить на начало ? 

Тогда устраняется копирование буфера само в себя, может и сработать .....

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

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


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

11 часов назад, whale сказал:

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

Всё то же самое, только экранную плоскость шириной = сумме картинок. И копировать оттуда в экранный контекст окно размером в экран, постепенно его сдвигая.

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


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

26 minutes ago, jcxz said:

сумме картинок

Фоток может быть до сотни, думаю память этого не переживет, тем более  иногда используют планшеты и  всякий древний кал мамонта, 

каждая фотка 15мб итого надо полтора  гектара видеопамяти или озу что хуже.

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

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


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

2 часа назад, whale сказал:

Фоток может быть до сотни, думаю память этого не переживет, тем более  иногда используют планшеты и  всякий древний кал мамонта, 

А если хоть немного подумать?? Вроде как очевидно всё.

Сделайте кольцевой буфер из фоток. Шириной = ширина экранного окна + ширина максимальной фотки. И двигайте попиксельно. Добавляя новую фотку справа, когда старая полностью вошла в экран.

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


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

21 час назад, whale сказал:

создать бегущую ленту из последовательных фото

Это типовой слайдер, смену кадров логично делать быстро, но гармонически по синусу, далее остановка для созерцания, а от тупого линейного сдвига даже в бегущих строках отказываются, потому как мозг далеко не каждого первого гражданина способен за ним угнаться.

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


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

36 minutes ago, Plain said:

смену кадров логично делать быстро, но гармонически по синусу

Такое есть давно но иногда нужна именно лента.

Ленту можно остановить, она создает более полное ощущение об пространстве, часть объектов попадает на стык и разделяется на две фотки итд

Самое быстрое сейчас это если копировать скользящим окном в размер области вывода, если пытаться уменьшать окно ( те сначала ширина =1 а затем линейно возрастает до  полной ширины и далее уже константа) то почему то скорость падает, пока занят выяснением этого эффекта.

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

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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