// Добавляем библиотеку, необходимую для использования 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);
//*************************************************************************