OpenGL: Подсчет FPS

В этом уроке мы научимся вычислять FPS и выведем их на экран.
Код для урока взят из предыдущего, «шрифты FTGL».

Все файлы, кроме main.cpp остаются без изменений.
Изменяем main.cpp:

// Добавляем библиотеку, необходимую для использования timeGetTime ():
#pragma comment (lib, «winmm.lib»)// Далее, после обьявления шрифта обьявим глобальную переменную
// для хранения FPS:
float FPS;// Теперь напишем функцию, вычисляющую FPS каждый кадр:
///////////////////////////////// CALCULATE FRAMES PER SECOND \\\\*
/////
/////   Эта функция рассчитывает FPS и выводит их
/////
///////////////////////////////// CALCULATE FRAMES PER SECOND \\\\*

void CalculateFrameRate()
{
//Ниже мы создадим несколько статичных переменных, т.к. хотим, чтобы они сохраняли своё
//значение после завершения работы ф-ии. Мы могли бы сделать их глобальными, но это будет
//излишним.

static float framesPerSecond = 0.0f;    //наши фпс
static float lastTime = 0.0f;           //Тут хранится время, прошедшее с последнего кадра
static char strFrameRate[50] = {0};     //Строка для вывода

//Тут мы получаем текущий tick count и умножаем его на 0.001 для конвертации из миллисекунд в секунды.
float currentTime = timeGetTime() * 0.001f;

//Увеличиваем счетчик кадров
++framesPerSecond;

//Теперь вычтем из текущего времени последнее запомненное время. Если результат больше единицы,
//это значит, что секунда прошла и нужно вывести новый FPS.
if(currentTime lastTime > 1.0f)
{
//Устанавливаем lastTime в текущее время. Теперь оно будет использоватся как предидущее время
//для след. секунды.
lastTime = currentTime;

// Установим FPS для вывода:
FPS=framesPerSecond;

//Сбросим FPS
framesPerSecond = 0;
}
}

// Теперь изменим функцию RenderScene (). Добавим вызов CalculateFrameRate () и
// Участок кода, в котором в прошлом уроке выводилось
// слово «Тест» заменим на следующий:

//*************************************************************************

CalculateFrameRate();

glDisable(GL_DEPTH_TEST);
glColor3f(1.0f,1.0f,1.0f);

// Сформируем строку для вывода:
wchar_t buf[256];
swprintf(buf, sizeof(buf), L«Текущие FPS: %f», FPS);

Font->Print(10,20, buf);  // Выводим текст
glEnable(GL_DEPTH_TEST);

//*************************************************************************

 

Просто, не так ли? Теперь после компиляции в левом верхнем углу
рендерится надпись «Текущие FPS: x»
Красота %)

Исходные коды к уроку

Понравилась статья? Поделиться с друзьями: