Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

"Вертикальная синхронизация" [Delphi, ogl]


Страницы:   1 2 3 4 5

Зм1й ©   (2006-07-16 21:13:00) 

Как её програмно (и вообще) отключить? И ещё вопрос: что она на самом деле из себя представляет? :)


Зм1й   (2006-07-18 18:18:00) [41]

Нашёл, выключил синхронизацию, стало 400-500 fps (тоже не шибко много, но всё же :)), однако теперь хотелось бы сделать это програмно...


@!!ex   (2006-07-18 18:11:00) [42]

Зм1й
Тебе же в самом начале дали код функции.
И даже с описанием загрузки функции из dll.


cyborg   (2006-07-18 18:11:00) [43]

> [42] ancara ©   (18.07.06 18:06)

Совесть есть такую картинку в 183 кило выкладывать? Я её в gif спокойно в 33 килобайта сконвертил.


ancara   (2006-07-18 18:06:00) [44]

у меня это выглядит так http://img117.imageshack.us/img117/6666/vsyncpr3.jpg


Зм1й   (2006-07-18 17:53:00) [45]


> ancara ©   (18.07.06 17:48) [39]

GeForce4 Ti 4200 with AGP8X


grisme   (2006-07-18 17:52:00) [46]

Обычно это в настройках экрана(Правый_щелчок_на_десктопе->свойства->параметры->дополнительно) где-то там, все зависит от твоей карты..


ancara   (2006-07-18 17:48:00) [47]

GetTickCount очень неточно тики показывает.
см. MSDN: If you need a higher resolution timer, use a multimedia timer or a high-resolution timer.

Если в цикле вызывать GetTickCount его значение будет изменятся скачками, по 55 кажись, непомню...
Так что мерить FPS надо как и полагается его сутью: считать количество кадров отрендеренных за посленюю секунду. В каждом кадре увеличивай счетчик, и каждую секунду показывай значение. Надо только хороший таймер организовать, чтоб РОВНО через секнду срабатывал.

А если стабильно показывает 75 fps - на 95% уверен, что включена верт. синхр.
Какая видюха у тебя кстати? У меня щас на работе GF2MX400 имеет опции вкл. выкл. и "определяется приложением", т.е. ее можно принудительно выключить. Дома на Радеоне 9600 та же история.


Зм1й   (2006-07-18 17:48:00) [48]


> grisme ©   (18.07.06 17:39) [36]

А как хотя бы вручную отключить эту синхронизацию?


cyborg   (2006-07-18 17:46:00) [49]

[33] Зм1й ©   (18.07.06 17:01)
Только у тебя здесь всё равно с ошибкой считает (хотя это не относится к решению вопроса). Например вдург время межэду расчётами прошло не 1 секунда, а две грубо говоря.

Нужно так:
ФПС=кадры* 1000 / прошедшее время.


grisme   (2006-07-18 17:39:00) [50]

Да, теперь к-во кадров совпадает с частотой вертикальной развертки твоего экрана..если это не меняется даже в случае описанных выше примеров, то скорее всего, включена принудительная верт.синхронизация..как быть в этом случае, описывалось у С.Гайдукова "OpenGL проф.программрование 3d графики на C++"..


Зм1й   (2006-07-18 17:21:00) [51]

Вот допустим у меня по методу cyborg'а теперь 75 к/с. Значит всё-таки дело в синхронизации?


@!!ex   (2006-07-18 17:12:00) [52]

cyborg ©
поршу прощения. не обратил внимания. Вы были права.


Зм1й   (2006-07-18 17:01:00) [53]


> cyborg ©   (18.07.06 16:49) [31]

если сделать так

 Inc (GlobalCntr);
 if GetTickCount - LastTickCntr >= 1000 then
 begin
  FPS := GlobalCntr;
  LastTickCntr := GetTickCount;
  GlobalCntr := 0;
 end;

то fps = 75 :((


> @!!ex ©   (18.07.06 16:54) [32]

такой же результат (62,66)


@!!ex   (2006-07-18 16:54:00) [54]

cyborg ©
все у него хватает.

Зм1й
я имел ввиду, отрисовывай FPS не раз в 20 кадров, а каждый кадр.


cyborg   (2006-07-18 16:49:00) [55]

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


Зм1й   (2006-07-18 16:45:00) [56]


> Попробуй отрисовывать не раз в 20 кадров. А каждый кадр.
>  Какой результат будет?

Как это раз? DrawGame вызывается каждый кадр, а вот обновление текстовой строки с fps - каждый двадцатый


@!!ex   (2006-07-18 16:40:00) [57]

Упс. Прошу прощения. Зм1й уже ответил.


@!!ex   (2006-07-18 16:39:00) [58]

>>GetTickCount - GlobalCntr
Время которое заняла отрисовка предидущего кадра

>>FPS := 1000 / (GetTickCount - GlobalCntr);
Делим 1000 на длительность прорисовки одного кадра. Получаем, сколько кадров за секунду отрисуеться при такой скорости отрисовки одного кадра.
Это не реальное FPS. Это предполагаемое FPS.

Зм1й
Попробуй отрисовывать не раз в 20 кадров. А каждый кадр. Какой результат будет?


Зм1й   (2006-07-18 16:36:00) [59]

GlobalCntr - последнее замеченное время
GetTickCount - GlobalCntr - врямя, которое уходит на одну процедуру Rendering
1000 / (GetTickCount - GlobalCntr) - сколько таких процедур можно выполнить за одну секунду


cyborg   (2006-07-18 16:30:00) [60]

Что это такое?
FPS := 1000 / (GetTickCount - GlobalCntr);
GlobalCntr := GetTickCount;

Где тут кол-во кадров?


Страницы:   1 2 3 4 5

Наверх

Титульная страница Поиск, карта сайта Написать письмо