|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
16.05.2008, 08:49 | #501 | ||
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
Цитата:
Цитата:
not ((MapPixel.R=0) And (MapPixel.G=0) And (MapPixel.B=0)) <> (MapPixel.R>0) And (MapPixel.G>0) And (MapPixel.B>0) например, для R=0,G=1,B=1 первое = true, второе - false ------------------------------------------------------------------ за пояснения спасибо |
||
16.05.2008, 14:55 | #502 | |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Цитата:
"если ВСЕ компоненты = 0, то НЕ смешивать" - это If (MapPixel.R=0) And (MapPixel.G=0) And (MapPixel.B=0) then НЕ смешивать
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
|
16.05.2008, 19:49 | #503 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Не знаю учитывали ли вы этот фактор, хочу обратить на него внимание, он намного может повысить скорость отрисовки кадра. Суть в том, чтобы не отрисовывать весь кадр (весь буфер) на экран целиком, а отрисовывать только то что необходимо, то что поменялось.
Дело в том, что конечная отрисовка на экран это самая ресурсопожирающая часть, и ее оптимизация может ощутимо ускорить вывод графики, в отличие от операций в памяти к-рые и так быстро происходят и их вклад во время затраченное на вывод кадра небольшой. Этот принцип используется и в играх, и при сжатии видео. Насчет реализации не подскажу, но если удастся сэкономить на площади отрисовки, результат будет как говорится налицо )
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)
Проверь себя! Онлайн тестирование | Мой блог |
16.05.2008, 20:53 | #504 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Все учтено. Допустим тайловое поле нет смысла каждый раз отрисовывать по кускам, оно однажды "собранное" хранится в буфере и ассемблером перегоняется в DrawBuf в самом начале построения кадра. Остальные объекты все анимированные, ...все живое и "дышит". По-любому, в каждый момент времени все объекты меняют свой кадр анимации, тут ничего не поделаешь. Отрисовка в буфере после передачи заднего фона идет выборочно, т.е. только там где есть какой-либо объект, причем порядок соблюдается, какой объект за каким находится, можно персонажа проводить между двумя деревьями, все равно придется отрисовывать оба, если бы они были статичные, тогда конечно, только зону прохода персонажа и куски из текстур деревьев.
Потом, вывод множества мелких участков на экран будет медленнее чем экран целиком, ...а в данном случае, когда множество объектов, все движется, эффективнее окажется вывод целиком.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Последний раз редактировалось Beermonza; 16.05.2008 в 20:57. |
16.05.2008, 21:04 | #505 | |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Цитата:
Я про вывод уже на экран, не про буфер в памяти, буфер по степени нагрузки на процессор и рядом не стоит, там и смысла особого нет что-то улучшать.
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; 16.05.2008 в 21:08. |
|
16.05.2008, 22:13 | #506 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
mutabor, там же через BitBlt отрисовка в WMPaint:
BitBlt(DC,X,Y,X2,Y2,DrawBuf.Canvas.Handle ,0,0,SRCCOPY); типа X,Y,X2,Y2 нужно как-то определить и будет отрисовка участка. Теперь мысль ясна, ...нужно подумать. alexBlack, что-то я по ходу туплю, ...вот это для текстуры на один кадр: Т М TexPoint := Bits + (SH*2-1 - y_up ) * texLine + x_left*3; MapPoint := Bits + (SH*2-1 -(y_up+SH)) * texLine + x_left*3; ...а если в текстуре "лента" из кадров, такие же с маской, но продолжают текстуру: TTTTT MMMM тут я зашел в тупик, ...куда прописать сдвиг в SW*Номер кадра? texLine теперь длиннее ширины одного кадра в 5 раз.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
16.05.2008, 22:43 | #507 | |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Цитата:
Сделай для пробы простой тест-имитацию (выведи кусочками некоторую часть буфера меньшую чем весь буфер и увидишь разницу). В случае с BitBlt тут важны все шесть параметров BitBlt(DC,X1,Y1,W,H,DrawBuf.Canvas.Handle,X2,Y2,SRCCOPY); X1,Y1(куда ложить) должны совпадать с X2,Y2(откуда брать) буфер ведь такой же как и экран? W,H - ширина и высота копируемой части (так вот кто ворует мои мегагерцы =) Ход этот давно известен и используется в играх. Не знаю правда, есть ли где-то инфа по нему. Но я уверен это не проблема, мы и сами с усами ))) Кстати винда окна тоже экономно перерисовывает (InvalidateRect) p/s. Я раньше интересовался mpeg4 кодеками, так там для пущего сжатия этот же принцип используется - ключевые кадры содеражщие полный кадр и за ключевым идет серия промежуточных только с изменениями, намного меньшие по размеру. p/s.2 Конечно при скроллинге (если он есть) будет перерисовываться все, но в более статичных сценах отрисовка будет быстрее. Можно сделать условие если изменения превышают какой-то процент то все это пропустить и просто вывести буфер целиком.
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; 16.05.2008 в 23:08. |
|
16.05.2008, 23:45 | #508 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
расчет смещений:
|
17.05.2008, 15:27 | #509 | |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
alexBlack, так и делал, только чуть изменил для скорости:
Код:
Без Pointer'ов и сдвигов через DWORD() работает на порядок быстрее! alexBlack, тебе низкий поклон! Цитата:
За мысль респект!
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
|
17.05.2008, 16:59 | #510 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Пока результаты такие:
7 объектов 250х270, занимают в разброс ~ 50% экрана Вызов 7 раз BitBlt - 7% CPU 1 раз BitBlt всего буфера - 4% CPU Делал так: Код:
Руководитель проекта 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 |