|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
17.04.2008, 23:21 | #441 | |
Реанимируюсь...
Участник клуба
Регистрация: 19.07.2007
Сообщений: 1,445
|
Цитата:
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте.
Правила форума => Правила раздела => Для общего развития => Помощь студентам => Перед тем, как создавать тему, скачайте себе... P.S.: форум не песочница (с)
название статьи на сайте MS: "Отмена принудительного отключения автоматического запуска в реестре Windows" |
|
18.04.2008, 00:41 | #442 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Отчет...
Итак, ...вот что на текущий момент проделано.
Поскольку движок был выполнен на GDI, даже я бы сказал на API, все построение изображений в ОЗУ точка за точкой, то некоторые наши товарищи пожаловались на некоторые тормоза. Предчувствуя наступления того же даже на более мощных компах, в следствии добавления все новых и новых возможностей в цикл построения кадра, я решил поискать другой путь. Говорят, есть такой DirectDraw, и типа он будет быстрее все рисовать. Хорошо, будем пробовать. Через день выясняется, что разработчики не вставили а аппаратку такую нужную поддержку полупрозрачности, вместо этого, только ключ прозрачности (GIF-эффект короче). В результате пришлось писать функцию альфы вручную. После нескольких часов оптимизации получилось вроде бы то, что нужно, быстро и просто, ...но это с цельными сюрфесами, еще же нужно их обрезать ). В общем, замутил тестирование двух версий API и DirectDraw. В итоге, оказалось, что вариант c API работает быстрее, хоть и подгружает процессор чуть больше. Причина вся в том, что слабое звено - пересылка кадра из системной памяти в видеобуфер, который потом выводится на экран. Так что, время опять оказалось потрачено в пустую ((( (как неудачно и с DelphiX). Продолжаем работать с API, а если найдутся знатоки этого дела, то пожалуйста пишите сюда что можно ускорить.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
18.04.2008, 07:18 | #443 | |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Beermonza,есть еще два варианта OpenGL и Direct3D
Цитата:
|
|
18.04.2008, 13:34 | #444 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Beermonza, попробуйте заюзать один из популярных 2D движков, зацените скорость вывода. А там, в зависимости от результата, уже решите как поступить. На Delphi есть несколько хороших, и на OGL и на DX. Если понравится, всегда можно свой написать. Кстати увидите разницу со своими экспериментами с DD. Плюс перед тем как что-то делать свое, желательно поюзать это же но чужое, и несколько штук, чтобы сделать лучше.
p.s. DelphiX наверное всех подкупает словом Delphi в названии
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
18.04.2008, 17:49 | #445 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Давайте думать...
Вот я использую два битовых буфера (TBitmap), TerrBuf хранит поверхность карты в сборе, DrawBuf используется для построения кадра. В начале цикла нужно всегда переносить содержимое из TerrBuf в DrawBuf, делается это все в системной памяти вот так:
Код:
DrawBuf.Assign(TerrBuf); ...тогда можно верхний алгоритм не использовать вовсе, но скорость падает значительно. Кто понимает, что можно сделать, чтобы мой алгоритм передавал байты из буфера в буфер? ...я так понимаю, что пока идет только переназначение поинтеров.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
18.04.2008, 19:25 | #446 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
А если BitBlt вместо Assign, тоже медленно?
В чем основная идея ускорения? Вместо передачи в функцию как аргумент хэндла битмапа (как c BitBlt) перезаписывать RGB байты через ScanLine? Обычно вроде так делают (это я выдрал из другой по назначению функции и немного подправил) Код:
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог Последний раз редактировалось mutabor; 18.04.2008 в 19:46. |
18.04.2008, 21:09 | #447 | |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
Цитата:
BitMap.ScanLine в конечном итоге использует GetDIBits для копирования информации о цвете в буфер в памяти. Изменения этого буфера можно вернуть обратно вызовом SetDIBits. Попробовал реализовать (не знаю как это скажется на скорости): Код:
|
|
19.04.2008, 16:01 | #448 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Исследования продолжаются...
alexBlack, в цикле много чего обрабатывается, но слабые места именно в копировании буферов и выводе в PaintBox. Последнее оставим на потом, разбираемся с буферами. Вижу последней строкой идет Canvas.Draw(0, 0, B); ... это работает оч. медленно для моей модели, ...любой вызов канвы сразу же сказывается на скорости (((
Мой алгоритм работает очень быстро, но результата нет, ...все равно что не работает. mutabor, то, что ты выдрал из другой по назначению функции и немного подправил работает почему-то с аналогичной скоростью, что и Assing ((( ... p2:=p; не работает совсем. Эта мысль меня натолкнула на запить: DrawBuf:=TerrBuf; ...скорость при этом просто потрясающая, но что-то происходит с TerrBuf, похоже что оба буфера схлопыватюся. Нужны другие варианты...
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
19.04.2008, 16:31 | #449 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Я тут немного подумал и упростил код который привел, mutabor,
Код:
Последний раз редактировалось Kostia; 19.04.2008 в 16:42. |
19.04.2008, 16:53 | #450 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Kostia, просто замечательно, это работает в 2 раза быстрее чем Assign, спасибо!
...упростить наверное можно копированием всей памяти одного буфера в другой?
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Уроки по созданию игр для новичков... | -=DeS=- | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 750 | 14.11.2017 20:26 |
Музыка программистов - как вы относитесь к АРИИ? | Весёлый Жека | Свободное общение | 46 | 10.10.2008 22:32 |
Конкурсы по созданию игр на Delphi | mutabor | Свободное общение | 0 | 15.06.2007 12:40 |
Работа по созданию ПО | remix | Фриланс | 3 | 22.04.2007 11:00 |