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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2010, 18:09   #81
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Собственно, резервов полно. Например, Loop я заменил на такую последовательность:

Код:
mov ecx, H

// код

sub ecx, 1
cmp ecx, 0
jne  @xx
Прирост производительности в 1,5 раза, от текущего теста. Ищем дальше.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 29.10.2010, 19:47   #82
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Про Loop я тебе уже давно говорил.
http://www.programmersforum.ru/showp...99&postcount=9

Цитата:
Думаешь Flash-игра меньше загружает процессор?
Оба-на. А при чём тут Flash?

Цитата:
Задача сводится к сносной работе
Продолжаем искать чёрную кошку. Давай так, сделай возможность в своём тесте отключить ещё и деревья. Чтобы в цикле рисования была возможность оставить только копирование подложки и BitBlt. Я конечно в дизассемблере занопил эту область, но это не совсем честный тест получается, так как вместе с деревьями занопились и человеки. Вот если хотя бы просто копирование подложки + 10 маленьких человеков загрузит проц хотя бы менее чем на 80%, тогда ещё есть смысл искать эту кошку и бороться за пользователей третьих пеньков. Если нет, то и смысла дальнейшей оптимизации лично я не вижу.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 29.10.2010, 21:18   #83
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Тогда про Loop я, честно говоря, "не втянул озон", теперь только вспомнил, ...впопыхах искал твои рекомендации, не нашел и изобразил это, выше показанное, ...до сих пор не понимаю разницу между jne и jnz, ...ну, не суть, разберемся со временем.

Flash тут конкретным боком, поскольку on-line игры на нем частенько, ...садят CPU нещадно, ...Dofus (РПГ) мой Pentium 4 3GHz грузил на 100%, и в паузах по 50%, ...это считается "нормой", ...я этот уровень перескочил, но хочу уделить внимание "допнямчетвертым".

Хорошо, сделаю отключение всего, ...если есть желание и время поиграешься настройками, ...узнаем что к чему.

Спасибо за поддержку.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 30.10.2010, 15:35   #84
.pixel
c++, dx/ogl
Форумчанин
 
Аватар для .pixel
 
Регистрация: 10.11.2008
Сообщений: 131
По умолчанию

…BitBlt для "до 4х пней" тем более таких размеров «подложка», мне кажется это тоже колоссальная нагрузка на проц. Может, стоит обратить внимание на видео подсистему? И воспользоваться ею преимуществами). "Дочетвертый пень" явно может иметь видео уровня GeForce 2/4 MX пусть даже и хуже… а это DDraw c flip’ом буферов и oGL) Интересно, а через Overlaу можно организовать вывод? Все быстрее битблта)
“Batch, Batch, Batch:” What Does It Really Mean?
I am a donut! Ask not how many tris/batch, but
rather how many batches/frame!
.pixel вне форума Ответить с цитированием
Старый 30.10.2010, 19:38   #85
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

.pixel, не знаю пока доступа к форме, только через BitBlt. Даже точно не знаю куда он перекидывает данные, ...по всей видимости по контексту формы в ее буфер, а потом буфер всей формы на экран, ...может не так, но медленно, если логически рассудить. Много раз спрашивал, как можно рисовать сразу в области формы по указателю на внутренний битмап, а то же приходится рисовать в буфер, а его кидать в форму BitBlit'ом.

Вот тест с отключением всего:
Вложения
Тип файла: zip MMX Test 5 2010.zip (614.1 Кб, 14 просмотров)
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 01.11.2010, 16:06   #86
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Вот так вот получилось:
Вобщем, я больше не вижу пространства для оптимизации. Нет здесь этой кошки. И искать её бесполезно.

Код HTML:
кол-во перс| деревья | Подложка | BitBlt| загрузка CPU (%)| вых интервал (мс)|
-----------|---------|----------|-------|-----------------|------------------|
     0     |    0    |    +     |   +   |     98-99       |       31-41      |
     0     |    0    |    -     |   +   |       35        |        31        |
     0     |    0    |    +     |   -   |       35        |        31        |
    10     |    0    |    -     |   +   |       34        |        31        |
   100     |    0    |    -     |   +   |       35        |        31        |
   100     |    1    |    -     |   +   |       67        |        31        |
   100     |    2    |    -     |   +   |       71        |        31        |
   100     |    3    |    -     |   +   |       99        |       31-41      |
  1000     |    0    |    +     |   +   |       99        |        62        |
   100     |    0    |    +     |   +   |       99        |       31-41      |
------------------------------------------------------------------------------
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 01.11.2010, 17:41   #87
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Если не затруднит, проверь вот такие варианты:

PHP код:
кол-во персдеревья Подложка BitBltзагрузка CPU (%)| вых интервал (мс)|
-----------|---------|----------|-------|-----------------|------------------|
    
10     |    0    |    +     |   +   |        ?        |         ?        |
    
10     |    1    |    +     |   +   |        ?        |         ?        |
    
10     |    2    |    +     |   +   |        ?        |         ?        |
    
10     |    3    |    +     |   +   |        ?        |         ?        |
    
20     |    0    |    +     |   +   |        ?        |         ?        |
    
20     |    1    |    +     |   +   |        ?        |         ?        |
    
20     |    2    |    +     |   +   |        ?        |         ?        |
    
20     |    3    |    +     |   +   |        ?        |         ?        |
------------------------------------------------------------------------------ 
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 01.11.2010, 19:12   #88
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Да как бы не затруднит. Скорее всего уже завтра.
Смысла правда в этом не вижу особенного, расстраиваться только.
Да и как дальше оценивать не очень понятно. Загрузка CPU будет 100% во всех этих тестах. Реальный таймер засекать? Но он на пустой сцене с 0 объектов и деревьев уже нестабилен 31-41. Далее до 100 маленьких объектов с 0 деревьев он так и болтается 31-41. На 1000 объектов интервал становится 62. Промежутки не смотрел. Деревья тоже не смотрел. Просто лично я перспективы оптимизации здесь больше не вижу. В секунду должно выводиться 30 кадров, каждый кадр содержит минимум очистку (вывод задника) и конечный вывод BitBlt кадра на HDC. Вывод задника у тебя построен на инструкциях MMX. Т.е. всё, это минимум, и он уже грузит проц на 100 и тянет таймер (не стабильно, но тянет).
Ещё остается попробовать 16-ти битные тектуры, но это в ущерб качеству.
И была ещё одна идея у меня. Я тут подумал, а что если в качестве BackBufer_а использовать поверхность, созданную в видеопамяти, и выводить все наши картинки из ОЗУ непосредственно в видюху, а потом метод Present интерфейса IDirect3DDevice8. Ну и пока моя реализация этого метода на DirectX8.1 оказалась гораздо медленне обычного BitBlt.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 01.11.2010, 22:15   #89
.pixel
c++, dx/ogl
Форумчанин
 
Аватар для .pixel
 
Регистрация: 10.11.2008
Сообщений: 131
По умолчанию

Ulex...
Цитата:
И была ещё одна идея у меня. Я тут подумал, а что если в качестве BackBufer_а использовать поверхность, созданную в видеопамяти, и выводить все наши картинки из ОЗУ непосредственно в видюху, а потом метод Present интерфейса IDirect3DDevice8. Ну и пока моя реализация этого метода на DirectX8.1 оказалась гораздо медленне обычного BitBlt.
Можно даже взять dd7й и рисовать в окно

Первичную создать…
Код:
ddSurfaceDesc.dwFlags=DDSD_CAPS;
ddSurfaceDesc.ddsCaps.dwCaps=DDSCAPS_PRIMARYSURFACE | DDSCAPS_VIDEOMEMORY;
	
hRet=pDD->CreateSurface( &ddSurfaceDesc, &pPrimarySurface, NULL );
Затем в качестве BackBuffer использовать Офф-Скрин поверхность…
Код:
ddSurfaceDesc.dwFlags=DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
ddSurfaceDesc.ddsCaps.dwCaps=DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY;
ddSurfaceDesc.dwHeight=600;
ddSurfaceDesc.dwWidth=800;
hRet=pDD->CreateSurface(&ddSurfaceDesc, &pBackBuffer, NULL);
В нем формировать изображение посредством прямого доступа к области памяти
Код:
pBackBuffer ->Lock(NULL,&ddSurfaceDesc,
		DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT,NULL);

UINT surfaceWidth=ddSurfaceDesc.lPitch;
UINT surfaceHeight=ddSurfaceDesc.dwHeight;

char *buf=(char*)ddSurfaceDesc.lpSurface; //указатель на поверхность!
ZeroMemory(buf, surfaceWidth*surfaceHeight ); //очистка Back-буфера

//тут может находиться оптимизированный mmx/sse код прорисовки сцены

pBackBuffer ->Unlock(NULL);
А затем «блиттить», его на первичную, сколь угодно часто и когда угодно, хоть 25раза в сек)

Код:
pPrimarySurface->BltFast(0, 0, pBackBuffer, NULL,  DDBLTFAST_WAIT);
“Batch, Batch, Batch:” What Does It Really Mean?
I am a donut! Ask not how many tris/batch, but
rather how many batches/frame!
.pixel вне форума Ответить с цитированием
Старый 01.11.2010, 23:08   #90
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Ребята, мне чертовски интересно все это )) ...пробовал и так и эдак, ...рисовал в память видеокарты из ОЗУ, но что-то увидел загрузку под потолок и успокоился, и это на Pentium 4, может что-то не так делал, ...попробую поискать старые исходники. Из-за чего весь "сыр-бор", ...ну, не помещается в видеопамяти на 32М всего многообразия, что встречается в одном кадре (у меня). 2D игра не обязательно это стратегия типа первой SimCity, ...бывает и с огромными полупрозрачными анимированными объектами, как у меня деревья, их кадры нужно куда-то девать, это 15М в RGBА качестве, на одно дерево, даже кадров всего 12, старался как можно меньше их соединить, без потери качества и видимости цикла. Такое еще никто не делал, мне кажется. Если 3D с такой же детализацией, чтобы текстура на ствол и на один лист (256К максимум), то загнется не только Celeron, но и Pentium 4 со своими видеокартами, когда игрок зайдет в лес. А делать малополигонные метелки как-то не по мне. ))
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
wi-fi и скорость stenl1 Компьютерное железо 19 01.06.2010 17:48
Скорость рисования графиков Master07 Общие вопросы C/C++ 3 16.07.2009 21:45
Скорость bakanis Работа с сетью в Delphi 6 05.04.2009 12:39
Скорость скачивания Терминатор Свободное общение 3 30.03.2009 19:03
Скорость проигрывания Bigtyoma Мультимедиа в Delphi 0 30.09.2008 15:57