Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2009, 18:17   #1
notHaker
Форумчанин
 
Аватар для notHaker
 
Регистрация: 01.12.2009
Сообщений: 569
По умолчанию BitBlt на контекст DC и его альтернатива

Здраствуйте уважаемые Делфисты! Не могли бы вы подсказать более быстрый метод Блиттинга на DC контрола. ТК пишу ассемблерную библу графики, но всё сошлось на тормозах ГДИ. гугл = 0! В душе понимаю, что скорее всего ДЦ закрыт и кроме BitBlt ничего нету, но возможна ли альтернатива? поделитесь опытом! заранее спасибо!!!
Код - это работа, а работа стоит денег.

pz-game.ru. 2d зомби-сурвивал для олдфагов.

Последний раз редактировалось notHaker; 02.12.2009 в 10:54.
notHaker вне форума Ответить с цитированием
Старый 01.12.2009, 22:21   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от notHaker Посмотреть сообщение
Здраствуйте уважаемые Делфисты! Не могли бы вы подсказать более быстрый метод Блиттинга на DC контрола. ТК пишу ассемблерную библу графики, но всё сошлось на тормозах ГДИ. гугл = 0! В душе понимаю, что скорее всего ДЦ закрыт и кроме BitBlt ничего нету, но возможна ли альтернатива? поделитесь опытом! заранее спасибо
Так давайте определимся, вы создаете графическую библиотеку для графики или для GUI под Windows ? Если второе, то наоборот, надо выполнять поддержку HDC только так, а в чем собственно загвозка то ? В чем выявляются "тормоза" ?
BOBAH13 вне форума Ответить с цитированием
Старый 01.12.2009, 22:37   #3
0nni
Форумчанин
 
Аватар для 0nni
 
Регистрация: 24.07.2008
Сообщений: 279
По умолчанию

SetDIBitsToDevice() не намного, но быстрее. Хотя не знаю чем вас скорость не устроила. Просто при копировании битмапа (1024x768) на экран, у меня доходило до 300fps, хотя, различия в глубине цвета думаю могут повлиять.
Если нужен действительно быстрый вывод - то воспользуйся прямым доступом к видоепамяти через DirectDraw. На васме можешь примеры найти.
Сказал и загрустил от бесспорности своей правоты.
0nni вне форума Ответить с цитированием
Старый 01.12.2009, 23:08   #4
notHaker
Форумчанин
 
Аватар для notHaker
 
Регистрация: 01.12.2009
Сообщений: 569
По умолчанию

Да, нужно организовать поддержку GDI. НО. DirectDraw имеет посредственную поддержку GDI, так что функции AlphaBlend(и не только) "выносят" поверхность за пределы формы, а BitBlt - это дрянной побайтовый рендеринг.

Ну или хотя бы поскажите что сделать шоб при SetLayeredWindowAttributes поверхность DDraw не "слетала".
Помогите плиз...

Цитата:
В StretchDIBits (копирование из собственного буфера памяти в экран) если картинка не требует масштабирования и перекодировки глубины цвета то копирование аппаратно ускоряется даже на ооочень стареньких видеокартах и никакой разницы по скорости с ДХ не заметно. Если же глубину цвета нужно менять, то есно StretchDIBits работает намного медленнее чем при просто копировании, но в ДХ я вообще не нашёл подобной возможности, так что сравнивать скорость StretchDIBits можно только с собственным (или найденным в сети) алгоритмом перекодировки глубины цвета
Ещё интересные грабли - независимо от того StretchDIBits, ДХ или что-то ещё, аппаратный ускоритель подхватывает только выровненные как по положению, так и по длине строк блоки памяти, поэтому если просто копировать произвольный по размерам прямоугольник куда попало, то скорость копирования будет сильно различной (то программной, то аппаратной)
Юзал от сель. Господа профи... ваши соображения по этому поводу. .

Там у господина bo0h была примерно таже проблема, что и у меня. Лучшего я не нагуглил . Посоветуйте, поделитесь опытом, а нито я уже вспотел блин! Диплом стоит... заранее спасибо.

Ну неужели никому дела до этого нет...
Код - это работа, а работа стоит денег.

pz-game.ru. 2d зомби-сурвивал для олдфагов.

Последний раз редактировалось notHaker; 02.12.2009 в 10:59.
notHaker вне форума Ответить с цитированием
Старый 02.12.2009, 11:00   #5
notHaker
Форумчанин
 
Аватар для notHaker
 
Регистрация: 01.12.2009
Сообщений: 569
По умолчанию

И исчо... "выровненные как по положению, так и по длине строк блоки памяти" - это как..? Я вабще ничего не понимаю... тугодум *ля...
Код - это работа, а работа стоит денег.

pz-game.ru. 2d зомби-сурвивал для олдфагов.
notHaker вне форума Ответить с цитированием
Старый 02.12.2009, 14:25   #6
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Ну или хотя бы поскажите что сделать шоб при SetLayeredWindowAttributes поверхность DDraw не "слетала".
Без понятия что это значит точно, но как я понимаю, и как надо делать и почему?!
1. Вам Windows не даст прямого доступа за просто так (имеется ввиду без драйверов и т.п.. в ring0) к видеопамяти что это может значит?
2. Видео память - а именно быстрый доступ дает вам такие вещи как DirectX, OpenGl и др.
3. Если уж беретесь за отрисовку через подобные либы то опять таки свести все к HDC
4. Имеяя HDC использовать нужные Вам Windows API - может вы не заметили, но обычно окна HWND и контексты отрисовки HDC во всех API основных, это все таки правило.
Думаю сделаите выводы. А пытатся на прямую через DirectX рисовать и взаимодействовать сразу с API такие как Layered Windows тем более, не даст ничего хорошо. Самый оптимальный вариант, отрисовка в буфере (в памяти на HBITMAP + HDC + Scan0, вообщем DIB секция) и потом с использованием соотвествующего HDC вызывать API связанные с Layered Windows.

p.s. а можете озвучить тему дипломного проекта ? А то просто мне тоже через пару лет писать
BOBAH13 вне форума Ответить с цитированием
Старый 02.12.2009, 14:35   #7
notHaker
Форумчанин
 
Аватар для notHaker
 
Регистрация: 01.12.2009
Сообщений: 569
По умолчанию

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
Без понятия что это значит точно, но как я понимаю, и как надо делать и почему?!
1. Вам Windows не даст прямого доступа за просто так (имеется ввиду без драйверов и т.п.. в ring0) к видеопамяти что это может значит?
2. Видео память - а именно быстрый доступ дает вам такие вещи как DirectX, OpenGl и др.
3. Если уж беретесь за отрисовку через подобные либы то опять таки свести все к HDC
4. Имеяя HDC использовать нужные Вам Windows API - может вы не заметили, но обычно окна HWND и контексты отрисовки HDC во всех API основных, это все таки правило.
Думаю сделаите выводы. А пытатся на прямую через DirectX рисовать и взаимодействовать сразу с API такие как Layered Windows тем более, не даст ничего хорошо. Самый оптимальный вариант, отрисовка в буфере (в памяти на HBITMAP + HDC + Scan0, вообщем DIB секция) и потом с использованием соотвествующего HDC вызывать API связанные с Layered Windows.

p.s. а можете озвучить тему дипломного проекта ? А то просто мне тоже через пару лет писать
Диплом : (если коротко) Написать движок оконной графики (те свой GDI(по началу я даже испугался ), НО доверить винде лишь окна, и дочерние тоже). Как мне объяснили "похорошему", приветствуется быстрота, качество и, главное, оригинальность работы. Исчо объяснили, что копирование будет жестоко наказано!!

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

И всё таки как насчёт вот этого :

Цитата:
Ещё интересные грабли - независимо от того StretchDIBits, ДХ или что-то ещё, аппаратный ускоритель подхватывает только выровненные как по положению, так и по длине строк блоки памяти, поэтому если просто копировать произвольный по размерам прямоугольник куда попало, то скорость копирования будет сильно различной (то программной, то аппаратной)
как это понимать?? что за выравнивание такое??
Код - это работа, а работа стоит денег.

pz-game.ru. 2d зомби-сурвивал для олдфагов.

Последний раз редактировалось notHaker; 02.12.2009 в 17:18.
notHaker вне форума Ответить с цитированием
Старый 03.12.2009, 01:04   #8
notHaker
Форумчанин
 
Аватар для notHaker
 
Регистрация: 01.12.2009
Сообщений: 569
По умолчанию

ну господа модеры... откликнитесь пожалуйста...
эх... неужели тема быстрого блитинга никому не интересна?
Код - это работа, а работа стоит денег.

pz-game.ru. 2d зомби-сурвивал для олдфагов.

Последний раз редактировалось notHaker; 03.12.2009 в 12:59.
notHaker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Контекст воспроизведения OpenGL Gerzs Мультимедиа в Delphi 5 23.11.2009 11:33
Контекст воспроизведения OpenGL Sergeevich Gamedev - cоздание игр: Unity, OpenGL, DirectX 6 08.11.2009 21:50
Альтернатива StringGrid SNUPY Помощь студентам 2 22.09.2009 10:21
неубиваемый вирус! все антивирусы не находят его! кто знает как его убрать? Yury111 Безопасность, Шифрование 12 05.06.2009 11:19
Альтернатива sleep Zuzlan Общие вопросы Delphi 2 01.11.2007 01:44