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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.10.2010, 21:35   #41
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
Счастье

Давайте конкретно определимся:

1) У нас 2D;
2) Игра не сетевая по заданию топикстартера;
3) Узкое звено - GDI;
4) FPS - побочный продукт, важна загрузка CPU!

Это софтвар братья прогеры! ...влепить рендер (вывод GDI на экран) в repeat, чтобы смотреть избыточный FPS - глупо, сожрет нафиг все ресурсы. Посему, нужно смотреть по загрузке CPU сколько раз в секунду код успевает провернуться без тормозов. Имеет место регулирование загрузки интервалом таймера, это нормально!

Ulex, еще раз позволю себе уточнить, ...когда математическая модель игрового пространства живет "своей жизнью", отдельно от рендера в 2D, где анимация уже раскадрована и имеет строгое количество кадров в секунду рендерить два или более раз один и тот же статичный кадр - нецелесообразный расход ресурсов! ...когда хоть что-то изменится, т.е. какой-либо объект сменит свой кадр анимации, только тогда нужно рендерить этот изменившийся кадр, частично или как у меня перерисовать все полностью, поскольку могут сменить кадры все объекты одновременно, собственно, деревья всегда меняют кадры и все объекты постоянно шевелятся. Ну, понятно наконец, почему математическая модель должна быть жестко связана с рендерингом ?

В однопользовательском приложении, если вдруг комп задумается, хоть в софтваре, хоть видеокарта не справится с выводом и затянет рендер, ни в коем случае не допустимо видеть слайд-шоу событий, видеть начало атаки объекта, а через секунды две свой труп, ...если таймер общий, ТО! ...это будет все равно что кнопка ПАУЗА на пульте DVD! ...андерстенд!

Задача - устроить вывод графики как можно быстрее, именно графики, ...а математическая модель считается быстро, в некоторых пределах. Вот я переправил свой пример. Связал подсчет времени на весь внутренний код с интервалом, вот так:

Код:
procedure TForm1.TimerGameTimer(Sender: TObject);
begin  
  tmtick2 := GetTickCount - tmtick1 + 1;
  tmtick1 := GetTickCount;

  ...код

end;
...и вывод во втором таймере по 1 с, вот так:

Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Form1.Caption := 'мс: '+IntToStr(tmtick2)+' fps: '+IntToStr(1000 div tmtick2);
end;
Очень хорошо видно, когда от переполнения объектов отрисовка начинает не вмещаться в интервал таймера. Количество объектов ограничено числом 65535. Ставил 1500 с интервалом 20, начинает тормозить, но загрузка CPU 30%.

НО! ...MMX по 8 байт не сработал, только по 4, ...не понимаю почему, когда ставлю по 8 байт появляются вертикальные полосы в цветах радуги, изображение есть, но через фильтр такой, ...я просто сменил xmm регистры на mm, и не вышло, очистка emms везде есть, ...поставил по 4 байта пока, до выяснения причин, ...хочется чтобы "старички" запустились.
Вложения
Тип файла: zip BeerTest2.zip (612.0 Кб, 16 просмотров)
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 17.10.2010, 22:16   #42
Tronix
Форумчанин
 
Аватар для Tronix
 
Регистрация: 15.06.2010
Сообщений: 740
По умолчанию

Небольшой оффтоп, но в то же время и по теме.
Я сейчас путем долгих мук и хитрых комбинаций таки собрал Bochs из исходников для эмуляции 586 (Pentium MMX), сейчас на него ставиться WinXP. Потом можно будет тестировать на нем запуск/не запуск программы.

Beermonza Давайте помогу в переводе на чистый MMX и SSE процедур? Конечно было бы идеально видеть весь код, чтобы самому тестировать сразу, но можно как-то исхитриться и создать новую программу, которая использует вышеприведенную функцию рисуя просто 3 изображения на форме статично...
Чтобы понять рекурсию, сперва нужно понять рекурсию.
Tronix вне форума Ответить с цитированием
Старый 17.10.2010, 23:57   #43
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Tronix, спасибо за предложение, ...конечно же не откажусь от помощи, тем более, что пока проблему не решил. Исходник визуализатора во вложении, там же и pas-файл модуля работы с PNG-файлами.

Меня смущает еще цикл по-yy, сделал на скорую руку, так и не избавился, ...хочется всю отрисовку и по-X и по-Y пустить в asm-код.
Вложения
Тип файла: zip MMX Stat.zip (54.3 Кб, 16 просмотров)
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 18.10.2010, 17:21   #44
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Цитата:
Посему, нужно смотреть по загрузке CPU сколько раз в секунду код успевает провернуться без тормозов. Имеет место регулирование загрузки интервалом таймера, это нормально!
Это даже правильно. Только в твоём тесте интервал таймера регулирует непонятно что. Потому что реальный таймер живёт по своим законам (кратным 15-16 мс) и по большому счёту класть хотел на эти настройки.
Я пример теста привёл чтобы показать, что если тест завязан с регулировкой FPS и периодом таймера, то связь должна быть однозначная и расхождение в реально получившемся FPS и установленным по таймеру сразу мне скажут, что программа лагает. А сейчас непонятно как оценивать. Например на P4-2D при 1000 объектов загрузка 50% - это предел, т.к. тут два ядра, что это значит, значит программа начала тормозить, FPS же не соответствует установленному. Да нет, он же и раньше не соответствовал, да и вообще не обязан соответствовать. Ладно, в последнем тесте хоть реальные тайминги видно. По ним можно сориентироваться, что таймер не успевает. Ну это если знать, что успевать он должен за 33 мс, а не за то 20, как стоит в настройках. В топку TTimer и SetTime. Бери уже нормальные таймеры - вот я к чему и пишу уже всё это в третий раз и пример выложил.

Цитата:
Ну, понятно наконец, почему математическая модель должна быть жестко связана с рендерингом
В таком случае математическая модель не жёстко связана с рендерингом, а она под него прогибается.

Предыдущий свой пост я написал в большей степени для ZotaC_а (про него мы забыли совсем). Он же не пишет на GDI. Сторонник DX и OGL - он будет вынужден наступить на эти грабли. Когда на одинаковых мощных машинах он будет наблюдать разную по скорости картину рендера.

Ну, понятно наконец, почему математическая модель не должна быть жестко связана с рендерингом ?
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 18.10.2010, 18:20   #45
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
Счастье

Ulex, ту, ...тить, 2D у нас, у топикстартера 2D, ...два дэ-э-э-э! ...раскадровка уже выполнена в единицах измерения КАДРЫ В СЕКУНДУ, как не старайся, а время рендера уже завязано на этот показатель - кадры в секунду. ЛЮБАЯ современная машина будет ограничена в скорости этим самым показанием интервала, что регулируется, ...вспоминаем древние игры, которые на современных компах просто заканчиваются не начавшись по случаю смерти героя от времени, ...т.е. интервала нет соврем, таймер - такт процессора, жжет напропалую игрушка ...в моем примере, ты реально выставляешь скорость игры, с которой она будет работать на всех машинах. Но, ставить нужно разумный интервал, чтобы соответствовал показателю анимации (кадры в секунду) и не жрал ресурсы, рендеря множество раз одну и ту же картину без изменения.

Сказать что будет, если рентер на своем таймере, а математическая модель не своем? ...синхронизировать не удается, оно постоянно дергает изображение, попасть в такт невозможно, ...приходится существенно задирать такт рендеринга, от этого растет нагрузка на CPU, оно нам надо? ...рационально поступать нужно. То, что ты поставил 1000 объектов и оно начало тормозить говорит о том, что есть какой-то предел, и он появляется на 1000 объектах, ...вспоминаем, какая игра 2D может похвастаться таким содержанием кадра? ...задача - выполнить код отрисовки как можно быстрее, чтобы он смог больше выдать объектов, а GDI так и останется со своим прерыванием 30 кадров, оно не тянет больше, это OC!

От использования таймера только плюс, ...он оттягивает время, не давая влететь в исключение, если код внутри него не успел выполниться. Я неоднократно уже описывал ситуацию, ...все твердили вокруг "используй точный таймер", и что? ...использовал, ...когда объектов стало много, программа просто повисла и всего делов, ...не мудрствуя лукаво можно, не опасаясь проблем, пользоваться TTimer'ом, который как раз показывает на сколько тормозной у вас код.

Что плохого в том, что на старом компе игра иногда будет замедляться, а не показывать вашу атаку и следом труп? ...бутылку успеваем хлебнуть с хелспоинтами? ...в моем случае успеваем. Вспоминаем даже приставки 8-битные, ...когда много объектов она притормаживает, и таймер общий, и это 2D, и если файтинг на Сеге Мегадрайв, Мортал Комбат, например, ...аналогичная картина, ...что в этом плохого?

Хочется наблюдать FPS ? ...так и создавайте 3D, это будет хоть не глупо, а в 2D кадрами заведует математическая модель, она сменяет состояние, указывает тип анимации, считает кадры, переключает кадры в начало если насчитала предел, ...смена кадра - сигнал на рендер, а т.к. объектов много и все они меняют кадр по такту математической модели, то смысла держать на рентер отдельный таймер нет совсем. Что будет если по таймеру рендера идет отставание? ...графика будет икать, показывая дискретные события. Что в этом случае нужно делать? ...тормозить таймер математической модели? ...нет? ...оставить как есть?

Что такое "бонус замедления" ? ...это когда таймер математической модели остается прежним и никогда не меняется, а в тактирование кадра конкретного объекта вводится счет задержки, ...у себя я это уже предусмотрел. Что такое "ускорение" ? ...это когда анимация меняется, скажем, с "шага" на "бег", это разные наборы (анатомию понимаете, разные движения совершенно), при этом пиксельное смещение увеличивается, НО! показатель КАДРЫ В СЕКУНДУ остается! Задача сводится к тому, чтобы выбрать интервал таймера, который соответствует динамике игры, и не более 30 мс, ...это GDI, быстрее не будет. А гипотетически, если без вывода на экран, только рисование кадра, то там и 500 и 1000 fps показывает, которые падают с ростом числа объектов, ...в них смысла ноль.

...и, да, ...еще раз уточню, в последнем примере не MMX, вернее он, но не по 8 байт, а по 4, пока не понятно почему не работает по 8, надеюсь поможет Tronix, ...и там количество объектов еще увеличится, нагрузка на CPU падет, на тех же 30 кадрах.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его

Последний раз редактировалось Beermonza; 18.10.2010 в 18:46.
Beermonza вне форума Ответить с цитированием
Старый 18.10.2010, 18:52   #46
Tronix
Форумчанин
 
Аватар для Tronix
 
Регистрация: 15.06.2010
Сообщений: 740
По умолчанию

Цитата:
Сообщение от Beermonza Посмотреть сообщение
...и, да, ...еще раз уточню, в последнем примере не MMX, вернее он, но не по 8 байт, а по 4, пока не понятно почему не работает по 8, надеюсь поможет Tronix, ...и там количество объектов еще увеличится, нагрузка на CPU падет, на тех же 30 кадрах.
Конечно попробую помочь, но сегодня целый день возился с распозновалкой штрих-кодов там из раздела фриланс, вот только сейчас запилил наконец чтобы работало на любых фотках. А с MMX наверное завтра уже займусь, сегодня уже башка не варит...
Чтобы понять рекурсию, сперва нужно понять рекурсию.
Tronix вне форума Ответить с цитированием
Старый 18.10.2010, 19:00   #47
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Хорошо, Tronix, как сможешь, ...спасибо.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 18.10.2010, 19:12   #48
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Цитата:
Хочется наблюдать FPS ?
Да нет, не хочется. Я как бы сразу сказал, что не полагал увидеть этот параметр в тесте. Ну ты же его прикрутил. Тогда будь любезен, чтобы он соответствовал настройкам, или убери совсем. То что GDI не тянет больше 33 fps - чушь. Пример я выложил. К тому же мне было авторитетно сказано, что сделать его ещё быстрее как два пальца.

Цитата:
То, что ты поставил 1000 объектов и оно начало тормозить говорит о том, что есть какой-то предел, и он появляется на 1000 объектах
Нет, не говорит ни о чём, потому что я не вижу тормозов глазами. Я не знаю с какой скоростью они должны двигаться. А при таком методе они просто начнут двигаться чуть медленнее. Как понять, что вот он предел. А никак, только по загрузке определить. Но это неправда. Если даже загрузка 100, но система успевает рисовать сцену 33 раза в секунду, значит она НЕ перегружена. Хорошо что ты ввёл параметр FPS и я знаю, что он должен быть равен ~ 33. Зная всё это я могу сказать, что перегрузка наступает при 1100 объектах, но не раньше. С периодом обновления в 30 мс.

Цитата:
Сказать что будет, если рентер на своем таймере, а математическая модель не своем?
Стоп! Я где то говорил про два таймера? Нет. Таймер один, просто он считает себя важнее графики и не обязан её ждать. Он проверяет, есть ли вывод, если вывода нет - значит карта свободна и можно её грузануть графикой. Если она занята, то досвидания, конец таймера. Render - пассивный и работает только по команде таймера.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru

Последний раз редактировалось Ulex; 18.10.2010 в 19:24.
Ulex вне форума Ответить с цитированием
Старый 18.10.2010, 19:35   #49
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Ulex, поставь 1 мс интервал, и увидишь, что код выполняется в этом режиме (весь код со всеми пирогами и тормозами системы) за 16 мс, может и быстрее, 58 fps, но видны дерганья, это такт ОС, он рисует по своему обновлению и применяет Repaint, я долго разбирался с этим, но бросил, плавности можно достичь, если следовать обновлению ОС, а раз для 2D более и не нужно, то это огромный плюс в экономии ресурсов. Знаю, дело в таймере, ...но 16 мс остается только до момента, у меня, 500 объектов, по загрузке CPU 50%, ...это показатель скорости кода рисования в ОЗУ и однократного вывода BitBlt, и 16 мс забирает таймер на свою работу. Слышу, как в ноуте молотит вентилятор, ...ставлю интервал 17 мс, он замолкает, 30% CPU, т.е. я поставил столько, сколько требуется ему на выполнение, и машина начинает экономить ресурсы. Вот и нужно добиваться скорости внутреннего кода, не захламлять ненужными вычислениями, тогда будет хорошо.

В чем плюсы? ...первое - таймер не дает перегрузить систему, ограничивая отрисовку снизу, второе - дает возможность выставить FPS, ...вспоминаем, в Quake III тоже есть установка, ...но это сетевая вещь, там дискретность, ...а ресурс это экономит серьезно!

Просто в современном мире испокон веков варварские методы использования ресурсов, чего не коснись, ...а вот только считай на днях, во временных рамках истории, человек задумался об экономии. Это касается и игр.

Кстати, в твоем примере выдает 33 fps, это так и должно быть? ...а если побольше объектов и если каждый такт перекидывается подложка на весь кадр, ...статические крупные объекты как у меня, чтобы с прозрачностью, ...а?
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его

Последний раз редактировалось Beermonza; 18.10.2010 в 20:35.
Beermonza вне форума Ответить с цитированием
Старый 18.10.2010, 20:01   #50
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Цитата:
это такт ОС, он рисует по своему обновлению и применяет Repaint
Ничего про это не знаю. Т.е. если я в обработчик WM_PAINT помещу код, который будет чего то рисовать, то он у меня рано или поздно нарисуется сам?

Цитата:
Кстати, в твоем примере выдает 33 fps, это так и должно быть?
Ну а сколько должно быть, если период таймера 30 мс? Если установите 20 будет 50. Если поставите 10 будет 100, если система успеет, если не успеет, будет меньше, это и будет показатель тормозов. Настройки ставятся по кнопке F1. Там можно и убрать это перекидывание подложки. И вообще выключить последний SetDIBits. Тогда просто увидим скорость пустого чистого таймера (ну как бы не совсем пустого, логика в нём всё таки есть, поэтому если количество объектов >0, то в таймере они будут все просчитываться). Прозрачности нет, есть просто цветовой ключ, при отключенном обновлении подложки это видно.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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