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

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

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

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

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

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

WM_PAINT сработает сам, когда ОС поймет, что окно изменило свое положение или параметры, будет перерисовывать все полностью с новыми параметрами. Что происходит если в нее опустить вывод именно твоего кадра, я не в курсе, у меня раньше эта процедура то таймеру срабатывала, ...сказать сложно было лучше или нет, ...требования были другие.

Сейчас приходится отправлять битмап по контексту в форму, но нет доступа к самому битмапу формы, чтобы рисовать в форму сразу в ОЗУ и давать команду обновления, типа Update. Так вроде исключается звено Битмап -> Битмап формы.

На счет отсутствия прозрачности, ...ох и фигачит код на asm'е, я пробовал без прозрачности, сколько бы не ставил интервал, даже 1 мс, загрузки CPU вообще не наблюдал, 1%, ...вот так вот, ...а когда большой буфер и все полного качества RGBA и крупное, тут нужно стараться снизить нагрузку. По большому счету, тесту подлежит только рисование в ОЗУ, а оно очень быстрое )).
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 18.10.2010, 22:07   #52
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Да покажите же мне уже тот код, который по таймеру 1мс (fps=1000) фигачит с загрузкой 1%. Чёрт с ней даже с полупрозрачностью. Обычный SetDIBits такой области по таймеру 30 мс (нашему любимому) грузит мою систему на 2%. Значит на такой же одноголовой будет ~4, на том самом Celerone, который в три раза слабее (по тактовой частоте ядра) теоретически может быть 12. Однако в Celerone - слабое место не процессор, а ОЗУ (то самое, которое быстрое). Но это мы ещё ничего не нарисовали. А по таймеру в 1 мс на голом BitBlt повесился и четвёртый пень.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 18.10.2010, 22:28   #53
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Я не могу отключить полупрозрачность, оно заложено в asm-код, это переделывать все, полностью. Пока MMX не заработает, следующего примера не будет. А там я сделаю отключение BitBlt. Но, считать FPS без вывода - некорректно, ...как и просто прерывать вывод если не успевает отрисоваться. Вот я у тебя в примере поставил 100 колобков, таймер 1 мс, а изображение мерцает и глотает кадры, т.е. сначала колобок тут, ик, и в другом месте, ...а показывает 140 fps - это некорректное значение, ...интересует, сколько честных кадров отрисованных по команде математической модели успевает появиться на экране. И я тебе скажу, ...проделал следующий опыт, просто сделал смещение персонажей у себя изменяемым, ...ввел 10 и увидел тоже самое, что у тебя с таймером 1 мс, только у меня 20 мс на таймере и не мерцает ни разу. Т.е. тактирование идет 20 мс, а персонажи носятся как в дискретном режиме, когда не успевает отрисоваться кадр у тебя. То же самое будет, если я отделю отрисовку и поставлю таймер на математическую модель в 1 мс, а смещение оставлю 1, ...я буду видеть дискретные события игры, ...это не fps! ...не знаю, стоит наверное считать время выполнения кода, который включает в себя только отрисовку в ОЗУ.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 18.10.2010, 23:00   #54
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Это абсолютно честный показатель. 140fps - значит GDI успела отрисовать эти 100 колобков 140 раз за секунду, а поставили ей 1000. Это и есть чистый показатель производительности графики. Без каких то там таймеров, которые чего то там оттягивают.

Цитата:
интересует, сколько честных кадров отрисованных по команде математической модели успевает появиться на экране.
Ровно 140, остальные математическая модель шлёт в игнор. Потому что она главная. А графика это лишь средство отображения её действий. И если графика не успевает за логикой, надо менять компьютер, это будет честнее (по отношению к игроку), чем делать из игры амёбу.

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

Цитата:
Сообщение от Ulex Посмотреть сообщение
Ровно 140, остальные математическая модель шлёт в игнор. Потому что она главная. А графика это лишь средство отображения её действий. И если графика не успевает за логикой, надо менять компьютер, это будет честнее (по отношению к игроку), чем делать из игры амёбу.
Не согласен. Никакой и кадров нельзя слать в игнор, а показывать один и тот же - не рационально. Вот ты варвар ))) ...сменить машину потому, что разработчик рулит кадрами увеличением такта логики? ..."извини пользователь, я тут наворочил колобков в 2D, если не тянет по скорости, меняй машину" ...оно? ))))))

Цитата:
Сообщение от Ulex Посмотреть сообщение
Не идёт у тебя тактирование в 20 мс. Если идёт, то как могло получится 33 fps?
Потому, что таймер даже пустой только с счетчиком на 1 мс забирает 16 мс, ...у меня.

Это софтвар, ох и получат "старички" чувствую с "правильным FPS", это же не запустить больше ничего, только игра и все. Ой, не знаю, ...как еще призвать к экономии ресурсов.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 19.10.2010, 00:31   #56
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Цитата:
Не согласен. Никакой и кадров нельзя слать в игнор, а показывать один и тот же - не рационально. Вот ты варвар ))) ...сменить машину потому, что разработчик рулит кадрами увеличением такта логики? ..."извини пользователь, я тут наворочил колобков в 2D, если не тянет по скорости, меняй машину" ...оно? ))))))
Оно, самое оно. Если разработчику хватает мозгов поставить таймер на 1 мс и в него рисовальщик засунуть, то именно так и надо писать на коробке, только ещё с указанием, что такие машины появятся лет через 20.
Beermonza, это тест, именно поэтому здесь допустимо ставить интервал в 1 мс. Но заметь, я могу поставить 1 мс и посмотреть (потестировать), а ты - нет. Потому что таймер в твоём тесте, который я установил на 20 мс, считает, что он умнее меня и работает на 33.
И, кстати, при моём способе построения изображения, когда первичен игровой таймер, никто не мешает разработчику экономить. Потому что в таймере ничего не рисуется, в таймере даётся команда на отрисовку (WM_PAINT). И если логика программы считает, что кадр, расчёты для которого она провела, является дублем предыдущего, она может не давать команду на отрисовку. Логика командует графикой, поэтому она крутит ей как хочет (как хочет разработчик).
И ещё раз (в третий). Если игра не обеспечивает динамику на каких то машинах, то да, надо об этом писать на коробке. Пользователь платит за то, чтобы поиграть в полноценную игру. А твой метод, который на слабой машине начнёт тянуть кота за хвост - это всё равно что смотреть кино на скорости в 1/2. Да, вроде и понятно всё, ничего не пропустил, но как то устал за четыре часа наблюдения за гнусавыми даунами.

Добавлено:
Поправочка - установить 1 мс и я на самом деле не могу. Чуть переписал тест, вобщем на такой скорости уже даже логика не успевает отработать, поэтому даже мультимедийный таймер начинает тянуть интервал. Если отключаю обработку столкновения объектов, то игровой таймер таки срабатывает 1000 раз в секунду. А вот если включить, то только 480-500. Т.е. 2-3 мс меньше ставить смысла и для этого таймера нет. Ещё больше захотел увидеть чудо, которое шпарит 1000 fps с 1%-ой загрузкой
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru

Последний раз редактировалось Ulex; 19.10.2010 в 02:10.
Ulex вне форума Ответить с цитированием
Старый 19.10.2010, 15:40   #57
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Ну, вот видишь, поправочка появляется. Какой смысл считать в торте дохлых мух, если они все равно несъедобные? ...давай откинем их. Оттяжка все равно рано или поздно произойдет, даже если на "старичке" сработает более приоритетный системный поток, игра подвиснет и продолжит свою работу с того же места, ...что у меня уже выполнено, только со 100% гарантией, ...а у тебя не факт, может подвиснуть только вывод на экран, получим "ик", я пока не видел как это реализовано.

Вот ситуация: играл играл, бац проблемы, что-то решил ОС поработать у себя, винтом поскреб, занял ОЗУ, выставил приоритет себе. В это время у тебя серьезный бой, ...ап! подвисло, и тут уже труп лежит твоего персонажа, и не понятно что было, как босс тебя шмякнул, чего применил, ...а сохранение далеконько от этого момента, ...упс! как неловко У меня бывало очень часто, что игры подтормаживают и даже стопорятся, но продолжаются дальше с того же места после освобождения ресурсов. Более поздние игры, 3D, например, Дети Селены (стратегия) икают, не показывая промежуточных событий, очевидно, там система за которую ты борешься. Она актуальна для сетевых игр, где проблемы твои не должны быть проблемами всех играющих.

С простейшим таймером обстоит так: он работает сразу на выбранном режиме "по-умолчанию", ...рулить уже не приходится, анимации выше 30 кадров нет в природе, есть кривые руки создателей, которые думают "чем быстрее, тем реалистичнее", ...на самом деле нужно уложиться в 24 кадра и выполнить размазывание сразу в рендере набора анимации. Глаз человека не сразу "отпускает" изображение, достаточно посмотреть на клавиатуру и тут же резко закрыть глаза, в "памяти" остается картинка на 100 мс примерно, ...вот и смысла задирать такт и вывод на экран нет совсем. Зрительный эффект - раздражение биологических сенсоров, чтобы совсем не чувствовать мерцания, достаточно 24-30 кадров в секунду в анимации (смены кадров движения, ...не путать с частотой обновления монитора). Если придерживаться этого показателя и выполнять анимацию как положено, то ощущение реальности обеспечено, и для это FPS не нужен никак. Опять подходим к тому, что "по-умолчанию" для тебя 30 мс точных и 20 мс по TTimer'у устраивает вполне, так и говоришь "я всегда ставлю 20", ну, а я ставлю 31, ...и мне пофиг точно это или не точно, создаю игру чтобы играть а не смотреть FPS и как она жрет ресурсы, выкидывает кадры или молотит, ...что там еще проверять нужно, сработало/не сработало, проверять дубль, ...т.е. щепетильно относимся к игре в широком месте и грубо косячим в узком, тенденция, ...а потом многочисленные моды и обновления (за деньги), маркетинг ...добрее нужно быть к пользователю, ...сначала добиться быстрой работы на самых старых машинах, а потом уже писать на коробке системные рекомендации и продавать продукт, ...а то же повадились недоделки сплавлять, ...Heroes Of Might & Magic ! на все времена! ...аминь брат.

Если нужно посмотреть прям невтерпеж, я могу кинуть версию для SSE, только там корректно цвет выводится по 8 байт за такт если. И опять же, как ты мне поверишь, что считает время правильно? ...кинуть счетчик в начало и в конец отрисовки в ОЗУ поймать значение, показать? Опиши "правильный" с твоей точки зрения, точный подсчет и я тебе специально создам тест.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 19.10.2010, 18:13   #58
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Если честно, то я уже тоже устал от этой темы. Уже давно всем всё понятно, и понятно, что все останутся при своих. Меня только напрягает, что я по десять раз одно и то же пишу.
Beermonza, ну ты представляешь, что такое интервал 1 мс? Не та 1 мс, которую ты как бы установил в своём "хорошем" таймере, а реальная 1 мс. Ещё с учетом того, что винда - это не система реального времени. Да появилась поправочка, когда я в сцену ввёл 10000 объектов, таймер не успевает за этот интервал уже даже логику обработать.
Но опять повторюсь - это тест, поэтому здесь можно ставить всё что угодно и куда угодно. Он специально сделан для того, чтобы смотреть как и что влияет на производительность.
Если тебя не устраивает такой подход к тестированию, то убирай этот параметр к чертям (будем оценивать исключительно по загрузке CPU), либо приводи таблицу соответствия твоего таймера реальным таймингам, потому что я не знаю, чему он там кратен, толи 15, толи 16 мс.
Я не знаю, я разве где то возражал, что в игре FPS должна быть не равна 30, или должна быть больше 30? Или должна быть 1000 равна? Не было такого. Это ты сам установил в тесте 1 мс и начал возмущаться, дескать почему тест кадры глотает. А что ему делать, если ты хочешь с него поиметь 1000 кадров в сек. Прогнуться под твоё глупое требование, просадить логику до скорости графики и радостно сообщить, что fps=140?
Ну ты понял мою точку зрения, я так делать не буду.
Вообще я как бы тоже сторонник экономии. Но я непонимаю, с чего ты решил, что мой метод как то противоречит принципу экономии ресурсов?
Хочешь 30 мс, ставь 30. Я уже говорил, на 30 мс я вижу графический курсор (именно как он дёргается). Или если тест позволяет поставить 1 мс, то надо обязательно её поставить и почему то при этом считать, что и в игре разработчик тоже обязан ставить 1 мс? Я не вижу взаимосвязи между тестом графики, и каким то законченным (или находящемся в процессе) реальном проекте. В тесте нет места экономии. Тест обязан уметь быть расточительным. Иначе ты ничего не протестируешь.

Цитата:
Если нужно посмотреть прям невтерпеж, я могу кинуть версию для SSE
Нет, не нужно. Будем ждать версию, которую можно тестировать на Celerone. Вопрос был именно в том, как GDI программы будут работать на относительно старых крнфигурациях.
Цитата:
Опиши "правильный" с твоей точки зрения, точный подсчет и я тебе специально создам тест.
Не надо ничего создавать специально для меня. Я не знаю какой метод правильный. В конечном итоге я остановился на самом простом. На том, который предлагал Tronix. Завёл ещё один таймер, назовём его измерительным (обычный SetTime) на 1 сек. А в игровом таймере и в рисовальщике (т.к. они у меня развязаны) завёл по переменной (одна для таймера, одна для рисовальщика). В каждом цикле игрового таймера и рисовальщика эти переменные инкрементируются. В измерительном таймере просто выводится количество полученных тиков как бы в секунду и переменные сбрасываются. И я вижу сколько натикал у меня игровой таймер (сколько было циклов логики) и сколько из этих циклов успела отработать графика. Игровой таймер - мультимедийный. Метод имеет погрешность, потому что измерения производит SetTime, который опять таки не соответствует установленному значению. И может болтаться в пределах 16 мс.

P.S.
Для поржать:
Зато я могу вот так, а вам, слабо
Изображения
Тип файла: jpg screen.JPG (11.6 Кб, 37 просмотров)
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru

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

Ulex, я не уставал от темы, ...а разве можно устать от дружественного диалога на хорошую тему, касательно экономии ресурсов? ...да да, именно экономии ресурсов, ...и тест поэтому идет не на варварскую загрузку, а на экономию ресурса процессора на конкретно выбранной частоте обновления кадра. Если программист заложил 30 кадров, он может быть уверен, что старая машина их выдаст, и скорости шины для этого достаточно, передаются же не куски с альфа-каналом, а готовая непрозрачная картинка. Тесту подлежит рисование в ОЗУ, которое совсем не GDI, а быстрые методы, которые нужно оттачивать, и главным и основным инструментом контроля скорости кода станет загрузка CPU, чем она меньше, тем лучше, ...но уверенность есть всегда, что 30 кадров пролезут, даже если загрузка будет 100%, ...тест продолжается с постепенным увеличением объектов, и снижением нагрузки на CPU, всеми доступными методами.

У меня, например, на компах нет winmm.dll, ...это так принято всеми играми пихать в нерезиновую system32 свои потроха? ...разумеется, потом оставляя их навсегда, хоть по каталогам, хоть в реестре.

Цитата:
Сообщение от Ulex
Метод имеет погрешность, потому что измерения производит SetTime, который опять таки не соответствует установленному значению. И может болтаться в пределах 16 мс
Вот и у меня TTimer с одним только счетчиком на GetTickCount показывает 16-17 мс, ...та же самая точность. Вот эта медлительность дает 58-64 fps, ...кстати, у меня видеокарта X3100 дает собственное обновление 64 кадра, как уж Q3 пишет 200 fps я не понимаю.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 19.10.2010, 20:51   #60
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Цитата:
Если программист заложил 30 кадров, он может быть уверен, что старая машина их выдаст, и скорости шины для этого достаточно, передаются же не куски с альфа-каналом, а готовая непрозрачная картинка.
Не не не. Ты про передачу готового кадра уже говоришь (ну, по крайней мере я так понял). Ну а обработка, само формирование этого кадра? DIB-ы они где, правильно, в ОЗУ. А к ОЗУ обращаешься как? Правильно - по шине. А шина у нас что? А шина на этих конфигурациях привязана к памяти (потому что память синхронная SDRAM), а память PC 100. А на некоторых даже PC 66. А процессор в 13 раз быстрее памяти (ну да, он CISC, ну и что?). Я же выдержку где то привёл выше в этой теме Duron vs Celeron. Самый крутой Celeron сливает более слабому Duron_у именно благодаря шине. Процессор может обработать эти данные, но шина не может их ему предоставить. MMX вроде должен спасти, но это максимум в 2.5 раза, благодаря пакетной обработке. И можно ещё надеяться, что эти инструкции просто быстрее. Но то что у меня получалось сделать и потестировать на Celerone - показало, что инструкции блока MMX сами по себе не быстрее целочисленных инструкций CPU, а выигрывают благодаря пакетной обработке и не более. Поэтому я не уверен, пролезут ли эти 30 кадров в секунду с учётом их формирования 30 раз в секунду.

Цитата:
У меня, например, на компах нет winmm.dll, ...это так принято всеми играми пихать в нерезиновую system32 свои потроха? ...разумеется, потом оставляя их навсегда, хоть по каталогам, хоть в реестре.
Странно, у меня на голом двухтоннике, вообще никакие не игрушки не устанавливал, ни проигрыватели, ничего специально не устанавливал, а winmm уже в наличии, то же самое c Win7 было (было, потому что теперь её нет).

Ну и про экономию, вот ты про экономию ресурсов говоришь. Но почему то под экономией ресурсов подразумеваешь только загрузку процессора. А когда я сказал про видеокарту (DX и OGL), то ты как то так возразил интересно - дескать у меня в игре графических данных на 100+ мегабайт, и в видеопамять они просто не влезут. Я чёт сначала внимания этому не придал, ну да, действительно - не влезут. А ты полагаешь, что в ОЗУ на таких конфигурациях они влезут? Вот у меня на этом компе 256М ОЗУ. Сколько то отъедает система, сколько-то другие программы, в системе стоит DrWeb (который любит оптимизировать систему под себя). И чего остаётся игре. Да по всей видимости ничего. Подключается файл подкачки. Если он подключится, то будет вообще Fail. Что там, ATA-33 ?
Может быть имеет смысл оптимизировать не скорость, потому что видеоадаптер на таких конфигурациях - это не самое слабое звено и выдаст тебе твои 30 кадров в секунду, только на ура. Главное, чтобы требуемые поверхности были уже загружены в видеопамять. Ну вот для формирования конечного кадра, тебе же ведь не нужны все 100 Мб графических данных, нужна только их какая-то часть. Вот - простор для оптимизации.
Просто когда разработчик берёт DX или OGL он почему то сразу считает, что тут оптимизировать нечего, карта всё сделает сама.

Цитата:
Вот и у меня TTimer с одним только счетчиком на GetTickCount показывает 16-17 мс, ...та же самая точность. Вот эта медлительность дает 58-64 fps,
Он просто неточный. Погрешность +10 мс. В игре его можно конечно использовать, если угадать его правильный интервал. Ну тоже же всё это - пройденный этап. Угадал, считай повезло, будет работать плавно. Неугадал - будут рывки в графике. А чем тебя MM таймер не устроил? Он хотя бы не врёт.

Цитата:
у меня видеокарта X3100 дает собственное обновление 64 кадра, как уж Q3 пишет 200 fps я не понимаю.
Не понял, что значит собственное обновление видеокарты.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками 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