Быстрый вывод картинок на экран. Как сделать?

dimon72

Нужна программа, которая сможет выводить произвольные картинки, например, BMP на монитор.
Картинки могут выводиться на заданный интервал времени. Временной интервал с одной стороны не ограничен, например, десятки секунд, с другой стороны, определяется частотой кадровой развертки монитора.
При этом, должна быть строгая привязка к этой установленной частоте обновления, т.е., прорисовка изображения должна приурочиваться строго к обновлению кадра.
В программировании рублю так себе.
Можно ли решить эту задачу средствами Delphi, APIWin, OpenGL?
Если да, то как? Может у кого есть примеры, фрагменты кода?
Заранее благодарен.

yolki

у тебя винчестер не поспеет картинки отдавать.
оценки:
1024х100fps = 768*1024*3(rgb)*100fps ~ 200МБ/сек.
ни один винчестер не угонится

vertyal17

Ну картинки заранее в память запихать надобудет.
И скорее всего, придется ботать в сторону DirectX. Но там к частоте особо не увяжешь.

durka82

Ты не учел сжатие.
Или если тебе верить, то фильмы на компьютере - почти анриал.

yolki

а когда картинки, запихнутые в память кончатся - что делать? Или Ахиллес никогда не догонит черепаху?

yolki

Автор треда хотел BMP.
со сжатием другая история.

durka82

Уточни задачу.
Какого рода картинки надо выводить?
Почему не подходят готовые программы (для слайдшоу, например)?

durka82

Думаю, что это он неподумав.
По крайней мере принципиальной невозможности использовать сжатый формат вместо несжатого я не вижу.

bleyman

>> Ну картинки заранее в память запихать надобудет.
Насколько я понял, автор хочет менять картинки достаточно редко, но саму смену привязывать к к vsync, чтобы полосок не было.
>> И скорее всего, придется ботать в сторону DirectX. Но там к частоте особо не увяжешь.
Наглая ложь (с).
Что в дх, что в гл всинк врубается одной строчкой. Целиком программу будет проще писать на gl+glut, потому что типа не надо долго и муторно инициализить девайс, обрабатывать его потерю, переход в фуллскрин и обратно етс.

dimon72

Уточни задачу.
Какого рода картинки надо выводить?
Почему не подходят готовые программы (для слайдшоу, например)?
Нужно выводить конечный ряд картинок, поэтому скорость винта, скорее всего не критична.
Можно и jpeg. Любой формат. Главное - как сделать, чтобы можно было их предъявлять быстро, так, чтобы прорисовка изображения совпадала с обновлением кадровой частоты.
Не уверен, что программы для слайдшоу достаточно быстры для такого.

yolki

насколько я понимаю, гарантировать конец отрисовки до vsync нельзя.
синхронизация с вертикальной развёрткой делается как

...что-то нарисовали(1)...
wait_vsync
...что-то нарисовали(2)...
wait_vsync
..

можно лишь начать рисовать ПОСЛЕ vsync. а успеет или нет - не гарантировано.. разве нет?
Гарантии, что рисование(2) завершится до очередного кадра НЕТ.

dimon72

Пробовал всякие BitBlit или как там это называется?...
DoubleBuffer
Все не то: мерцание заметно при быстрой замене картинок.

yolki

API функции очень медленные, а DC вообще тормоз

dimon72

Те же соображения, но как же сделать?

evgen5555

Тебе же говорят - DirectX, OpenGL, чо ты к винапи-то придрался?

dimon72

Ну, пусть будет, например, OpenGL. Главное - чтоб работало. Как?

bleyman

Ты понимаешь неправильно.
При использовании опенГЛ/директХ картинка долго и с удовольствием рисуется в специальный буфер внутри видеокарточки, а потом, после завершения отрисовки И прохождения всинка видеокарточка начинает выводить на экран данные из этого буфера. А рисует - в другой. Называется Double Buffering.

bleyman

Лезешь на http://nehe.gamedev.net/, скачиваешь всё необходимое (типа glut) и начинаешь плавно изучать туториалы. На шестом тебя уже научат текстурировать. Потом пишешь программу, которая загрузит все нужные текстуры и будет их в нужный момент выводить на прямоугольник, точно влезающий во viewing frustum в режиме ортогональной проекции.
А ваще ты такую военную тайну развёл относительно того, что именно тебе нужно, что я ваще не понимаю ничего.
Мб ты свои картинки в фильм склеишь просто?

Dasar

> Пробовал всякие BitBlit или как там это называется?...
DoubleBuffer
Все не то: мерцание заметно при быстрой замене картинок.
ты уверен, что это связано с выводом меняющихся картинок?
а не с тем, что при этом сначала очищается экран?
ps
Покажи код с помощью, которого ты пытался сделать вывод
pps
Стандартного Gdi (или даже Gdi++) при нормальном использовании обычно за глаза хватает для решения такой задачи.

bleyman

В частности у НеХе есть какой-то собственный фреймворк для туториалов, и в нем мега-функция
bglSetSwapInterval(0) disable Vsync
bglSetSwapInterval(1) enable Vsync
bglSetSwapInterval(2) Vsync/2

stm7884696

купи моник ЖК, или проектор...
И не мучайся с проблемой развертки CRTшных моников )

bleyman

вот ты лох!

yolki

при этом никто не даст гарантии, что между двумя vsync картинка успеет прорисоваться во втором буфере.
а технология была известна уже лет 15-20, называлось pageflipping

Ivan8209

Сколько нужно этих page-й на-flip-ать?
Они же рано или поздно закончатся.
---
...Я работаю антинаучным аферистом...

andrew89

Правильно.
---
Я не работаю.
Оставить комментарий
Имя или ник:
Комментарий: