Счетчик кадров в секунду (FPS)
В графике реального времени важно следить за производительностью. Хорошая практика: выбрать целевой FPS (обычно 60 или 30) и сделать все возможное, чтобы придерживаться его.
Счетчик FPS выглядит так :
double lastTime = glfwGetTime();
int nbFrames = 0;
do{
// Measure speed
double currentTime = glfwGetTime();
nbFrames++;
if ( currentTime - lastTime >= 1.0 ){ // If last prinf() was more than 1 sec ago
// printf and reset timer
printf("%f ms/frame\n", 1000.0/double(nbFrames));
nbFrames = 0;
lastTime += 1.0;
}
... rest of the main loop
В этом коде есть странная вещь. Он отображает время в миллисекундах, необходимое для отрисовки кадра (усредненного на 1 секунду) вместо количества кадров, которое было нарисовано за последнюю секунду.
Это на самом деле намного лучше. Не полагайтесь на FPS. Никогда. FramesPerSecond = 1 / SecondsPerFrame, так что это обратная связь, и мы, люди, плохо понимаем это отношение. Давайте рассмотрим пример.
Вы пишете отличную функцию рендеринга, которая работает при 1000 FPS (1 мс/кадр). Но вы забыли небольшое вычисление в шейдере, что добавляет дополнительную расходы в 0,1 мс. И бум, 1 / 0.0011 = 900. Вы просто потеряли 100FPS. Мораль: никогда не использовать FPS для анализа производительности.
Если вы хотите сделать игру с 60 кадрами в секунду, ваша цель - 16.6666 мс; Если вы хотите сделать игру с 30 fps, ваша цель - 33.3333 мс. Это все, что вам нужно знать.
Этот код доступен во всех учебниках, начиная с Tutorial 9 : VBO indexing; см. tutorial09_vbo_indexing/tutorial09.cpp . Другие инструменты производительности доступны в Tools - Debuggers.