class fps_timer
{
private:
float resolution;
bool performance_timer;
unsigned long mm_timer_start, mm_timer_elapsed;
__int64 frequency, performance_timer_start, performance_timer_elapsed;
public:
fps_timer()
{
ZeroMemory( this, sizeof( fps_timer ) );
if (!QueryPerformanceFrequency( (LARGE_INTEGER *)&frequency ))
{
performance_timer = false;
mm_timer_start = timeGetTime();
resolution = 1.f / 1000.f;
frequency = 1000;
mm_timer_elapsed = mm_timer_start;
}
else
{
QueryPerformanceCounter( (LARGE_INTEGER *)&performance_timer_start );
performance_timer = true;
resolution = (float)(((double)1.0) / ((double)frequency));
performance_timer_elapsed = performance_timer_start;
}
}
~fps_timer()
{
}
float TimerGetTime()
{
__int64 time;
if (performance_timer)
{
QueryPerformanceCounter((LARGE_INTEGER *) &time);
return ((float)(time - performance_timer_start) * resolution) * 1000.f;
}
return ((float)(timeGetTime() - mm_timer_start) * resolution) * 1000.f;
}
};
FPS на OpenGL
Или хотя-бы дайте ссылки на инфу, примеры кода, хоть что-то, что помогло-бы помочь получить правильное значение этого параметра.
:)
Цитата: user1
Подскажите пожалуста - как получить численное значение FPS на OpenGL.
Или хотя-бы дайте ссылки на инфу, примеры кода, хоть что-то, что помогло-бы помочь получить правильное значение этого параметра.
:)
Или хотя-бы дайте ссылки на инфу, примеры кода, хоть что-то, что помогло-бы помочь получить правильное значение этого параметра.
:)
Структура для счетчика:
Код:
Применение:
Код:
...
fps_timer fps;
#define MAX_COUNT 15
int fcount = 0;
DWORD fr = 0, curfr = 0;
void update_scene()
{
...
float f = fps.TimerGetTime();
... тут прорисовка сцены ...
if(fcount < MAX_COUNT)
{
fr += (DWORD)((1000.f - ((fps.TimerGetTime() - f) * 10.f)) - 500.f);
fcount++;
}
else
{
curfr = fr / MAX_COUNT;
fr = fcount = 0;
}
// тут curfr показывает текущее значение FPS
...
}
fps_timer fps;
#define MAX_COUNT 15
int fcount = 0;
DWORD fr = 0, curfr = 0;
void update_scene()
{
...
float f = fps.TimerGetTime();
... тут прорисовка сцены ...
if(fcount < MAX_COUNT)
{
fr += (DWORD)((1000.f - ((fps.TimerGetTime() - f) * 10.f)) - 500.f);
fcount++;
}
else
{
curfr = fr / MAX_COUNT;
fr = fcount = 0;
}
// тут curfr показывает текущее значение FPS
...
}
Давно писал, не помню уже откуда идею брал...
Нет ну все таки хотелось-бы уточнить:
fr += (DWORD)((1000.f - ((fps.TimerGetTime() - f) * 10.f)) - 500.f);
что значит каждая из этих цифр ?
я так понял функция update_scene() вызывается при прорисовке
сцены(draw) и при простоях(idle) ?
Отображает совершенно неверные значения - от 200 до 500 числа ;(
Ну и функции
QueryPerformanceFrequency
QueryPerformanceCounter
я никогда не использовал, поэтому хотелось бы тоже уточнить что они делают.