|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
25.11.2011, 01:52 | #1 |
Форумчанин
Регистрация: 26.10.2009
Сообщений: 170
|
directdraw функция blt
Добрый день
как можно функцией Blt() рендерить маленькую (спрайтовую) поверхность на большую (бэкбуфер) в полный размер последнего, так, чтобы изображение не растягивалось, а копировалось? т.е. увидеть на экране не один растянутый спрайт, а множество того же размера. если это возможно, конечно |
25.11.2011, 07:00 | #2 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Делай в цикле.
Ищи "Замостить изображение", "Заливка картинкой" |
25.11.2011, 19:51 | #3 |
Форумчанин
Регистрация: 26.10.2009
Сообщений: 170
|
поискал, толком ничего не нашел. видимо придется делать внеэкранную поверхность и на нее заливать картинку. В цикле!
тогда в догонку еще вопрос. Я слышал, что типичный размер поверхности должен быть кратен 8. в своем приложении я создавал различные поверхности, в т.ч. с произвольными шириной и высотой. Когда я определяю размер поверхности через вызов ddsurface->Lock(), в структуре DDSURFACEDESC содержатся те же значения ширины и высоты, что и были заданы. Это обман драйвера (т.е. реальные размеры пов-ти не такие, как возвращает вызов Lock) или размеры действительно такие, какими их задали при создании пов-ти? отражается ли как-то на скорости блиттинга тот факт, что пов-ть кратна или не кратна 8? |
25.11.2011, 22:11 | #4 | ||||
Форумчанин
Регистрация: 03.11.2011
Сообщений: 230
|
Цитата:
либо как ты хотел Primary + Offscreеn и Blt. Рисуешь все в Offscreеn, ее блитиш на первичную. Цитата:
Цитата:
Цитата:
|
||||
13.12.2011, 10:37 | #5 |
Форумчанин
Регистрация: 26.10.2009
Сообщений: 170
|
есть проблема! большое кол-во спрайтов блиттится медленно, поэтому в тех
местах карты, где объектов много, ощутимы притормозы. Как посоветовали бы улучшить быстродействие? |
13.12.2011, 11:13 | #6 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
много, это сколько? Неужели over 1000 штук?
|
13.12.2011, 12:14 | #7 |
Форумчанин
Регистрация: 03.11.2011
Сообщений: 230
|
спрайты точно в видео памяти сидят?
Код:
|
13.12.2011, 23:53 | #8 |
Форумчанин
Регистрация: 26.10.2009
Сообщений: 170
|
все верно, спрайты в видеопамяти. не 1000, но штук 300-400 может быть
|
16.12.2011, 07:02 | #9 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Возможно
1. Текстуры слишком большие 2. Может вы во время процесса игры подгружаете дополнительные ресурсы с жесткого диска 3. 300-400 многовато, хотя если куча маленьких картинок ~ 16*16, то должно быть норм Как оптимизировать 1. Сокращайте число спрайтов 2. Уменьшайте размеры текстур 3. Тестируйте и ищите в каком месте ваша программа работает медленнее всего и пытайтесь оптимизировать. 4. Переходите на Direct3D или OpenGL, но лучше попытаться оптимизировать то что имеется. |
16.12.2011, 09:40 | #10 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,885
|
Спрайты должны быть все в единичном экземпляре (храниться в любом подобии ресурсного менеджера), если у вас карта местности, разумно разбить на слои, которые в разной степени забуфферизовать. Например грузим местность, рисуем буфер карты из тайлов, а потом в каждой итерации не всю карту перерисовываем, а именно буфер. Слои неподвижных объектов тоже можно забуфферизовать. Слои подвижных объектов лучше перерисовывать с фоном по такой схеме - рисуем кусок фона (выстригаем из буфера карты и если надо из буферов остальных слоев) на месте подвижного объекта(по старым координатам), рисуем подвижный объект на новых координатах.
Насчет карты ещё такой совет - хранить буфер карты (особенно большой карты - накладно, да и на выстригании из него для текущей итерации прорисовки куска карты на экране может быть накладно ) - могу посоветовать создать буфер именно соизмеримым с размером экрана, а при скролле карты сдвигать буфер (сам относительно себя) на н клеток и дорисовывать недостающие клетки. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
directdraw не рисует... | ros.pro | Мультимедиа в Delphi | 5 | 01.06.2011 19:58 |
Проблемы с DirectDraw в VC++ | Копоть Артём | Помощь студентам | 4 | 21.05.2011 23:36 |
Помогите с directdraw | BuT@JL | Общие вопросы Delphi | 5 | 22.08.2009 18:33 |
Assembler и DirectDraw | Д'якон | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 3 | 23.10.2008 08:59 |
DirectDraw | Kostia | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 29 | 15.04.2008 22:35 |