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

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

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2011, 10:19   #11
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию

Цитата:
Сообщение от Kostia Посмотреть сообщение
Возможно
1. Текстуры слишком большие
2. Может вы во время процесса игры подгружаете дополнительные ресурсы с жесткого диска
3. 300-400 многовато, хотя если куча маленьких картинок ~ 16*16, то должно быть норм

Как оптимизировать
1. Сокращайте число спрайтов
2. Уменьшайте размеры текстур
3. Тестируйте и ищите в каком месте ваша программа работает медленнее всего и пытайтесь оптимизировать.
4. Переходите на Direct3D или OpenGL, но лучше попытаться оптимизировать то что имеется.
1. текстуры имеют размер 60x60, соответственно по спрайту в каждой клетке карты.
2. с диска ресурсы подгружаются 1 раз по первому требованию, затем хранятся в менеджере.
4. уже давно задумываюсь о переходе на HGE, но все никак не могу отвязаться от своего творения. Уж больно много времени потрачено на разработку, да и что говорить - игра-то уже написана. Просто есть понимание того, что производительность ограничена, и создать карту в несколько тысяч клеток уже невозможно, что неприятно
sashonk вне форума Ответить с цитированием
Старый 16.12.2011, 10:23   #12
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию

Цитата:
Сообщение от phomm Посмотреть сообщение
Спрайты должны быть все в единичном экземпляре (храниться в любом подобии ресурсного менеджера), если у вас карта местности, разумно разбить на слои, которые в разной степени забуфферизовать. Например грузим местность, рисуем буфер карты из тайлов, а потом в каждой итерации не всю карту перерисовываем, а именно буфер. Слои неподвижных объектов тоже можно забуфферизовать. Слои подвижных объектов лучше перерисовывать с фоном по такой схеме - рисуем кусок фона (выстригаем из буфера карты и если надо из буферов остальных слоев) на месте подвижного объекта(по старым координатам), рисуем подвижный объект на новых координатах.
Насчет карты ещё такой совет - хранить буфер карты (особенно большой карты - накладно, да и на выстригании из него для текущей итерации прорисовки куска карты на экране может быть накладно ) - могу посоветовать создать буфер именно соизмеримым с размером экрана, а при скролле карты сдвигать буфер (сам относительно себя) на н клеток и дорисовывать недостающие клетки.
phomm, мысль хорошая!
sashonk вне форума Ответить с цитированием
Старый 16.12.2011, 10:29   #13
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию

есть еще вопрос. реально ли сделать полноценный альфа-блендинг на ddaw? Так чтобы рендерился весь полный экран. Сейчас я использую ассемблерные вставки, но скорость их работы оставляет желать лучшего (
Уже несколько спрайтов (до 10) приводят к сильным затормозам, я уже
молчу про фул-скрин. В идеале вообще бы хотелось использовать текстуры с переменным альфаканалом
sashonk вне форума Ответить с цитированием
Старый 16.12.2011, 10:42   #14
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Дак выкладывай куски кода, которые отвественны за всю рисовку, поглядим, покумекаем.
Кстати, размерчик текстур неплохо бы довести до 64, и вообще кратные 2 лучше обсчитываются (хотя лично я не проверял говорю как слышал от умных людей)
phomm вне форума Ответить с цитированием
Старый 16.12.2011, 22:17   #15
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию

Код я сам не писал, а взял когда-то с какого-то сайта. Там у чувака был рабочий пример, который рендерил полноэкранную картинку при разрешении 800x600 и глубиной 16 бит с завидной скоростью. Сколько я ни старался, у меня не получилось добиться такой производительности. То ли дело в разрешении, то ли в том, что у меня картинки проклятые. В общем, решил что дело это гиблое) Выкладывать все бессмысленно, могу выложить функцию рендера пов-ти, написанную с использованием mmx. Она довольно большая, т.к. там раздельный код для разных форматов пикселя, поэтому прикреплю аттачем.
Вложения
Тип файла: txt function.txt (33.0 Кб, 154 просмотров)
sashonk вне форума Ответить с цитированием
Старый 16.12.2011, 22:22   #16
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию

Цитата:
Сообщение от phomm Посмотреть сообщение
Дак выкладывай куски кода, которые отвественны за всю рисовку, поглядим, покумекаем.
Кстати, размерчик текстур неплохо бы довести до 64, и вообще кратные 2 лучше обсчитываются (хотя лично я не проверял говорю как слышал от умных людей)
да, я тоже где-то читал, что это лучше, но руки проверить так и не дошли)
sashonk вне форума Ответить с цитированием
Старый 21.12.2011, 21:02   #17
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию

Цитата:
Сообщение от phomm Посмотреть сообщение
Дак выкладывай куски кода, которые отвественны за всю рисовку, поглядим, покумекаем.
Кстати, размерчик текстур неплохо бы довести до 64, и вообще кратные 2 лучше обсчитываются (хотя лично я не проверял говорю как слышал от умных людей)
phomm, посмотрел код?
sashonk вне форума Ответить с цитированием
Старый 21.12.2011, 21:47   #18
Warn
Форумчанин
 
Аватар для Warn
 
Регистрация: 03.11.2011
Сообщений: 230
По умолчанию

Знаю, что была пейпера от амд по поводу как написать быстрый memcpy основные моменты, на которые они обращали внимание это выравнивание, потом нужно пользоваться преффечером процессора и соблюдать локальность данных в пределах кеша проца, пользовать mmx и sse. Тут я думаю на те же моменты следует обратить внимание, что бы ускорить ф-ю.
Warn вне форума Ответить с цитированием
Старый 22.12.2011, 08:40   #19
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Видимо придется взять свои слова обратно (ну что я покумекаю, другие-то может и глянут и что дельное скажут).
Кумекать над сишным кодом с кучей асм-вставок (при чем ммх) , вращающим директ-икс не моё...

Слова насчет буферов и менеджеров, думаю всё равно в силе, хоть на каком ЯП и АПИ
phomm вне форума Ответить с цитированием
Старый 22.12.2011, 16:13   #20
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

sashonk, я в свое время тоже пытался использовать DDraw, но бесполезно. Как только требуется вывод полноценных альфа-канальных текстур (а не с ключом прозрачности) вся сила блиттинга испаряется. Тоже пытался задействовать ассемблерные вставки, но причина лежит ниже. Обработку данных текстуры по рукописной процедуре на ассемблере выполняет процессор. Ему нужно взять данные из видеопамяти (у тебя) обработать и положить обратно. Как известно, такой метод слаб в скорости из-за меньшей частоты шины между CPU и видеопамятью. Оно не предназначено для такого использования, ...тут быстрее будет CPU + оперативная, но опять же, нужно результат как-то отправлять в видеопамять, и снова всплывает слабое звено. Советую бросить эту затею, если действительно нужна скорость, или если почти устраивает - переписать процедуру блиттинга на конкретную битность текстур.

Скорость копирования зависит от того кратны ли данные (в байтах) четырем. Стандартная операция копирования данных в памяти работает на обычных регистрах. Если применяется MMX или SSE, то обработку и копирование можно выполнять, соответственно, по 8 и 16 байт. Если данные не кратны этим числам, то будет тратиться время на обработку "хвоста", которая просто пропускается если условия кратности выполнены.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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