Отображение FPS в заголовке окна GLFW?

Я пытаюсь получить мой FPS для отображения в заголовке окна, но моя программа просто не имеет этого.

мой код FPS

void showFPS()
{ // Measure speed ****** currentTime = glfwGetTime(); nbFrames++; if ( currentTime - lastTime >= 1.0 ){ // If last cout was more than 1 sec ago cout << 1000.0/******(nbFrames) << endl; nbFrames = 0; lastTime += 1.0; }
}

и я хочу, чтобы он тоже пошел сразу после версии здесь

window = glfwCreateWindow(640, 480, GAME_NAME " " VERSION " ", NULL, NULL);

но я не могу просто вызвать void ii, чтобы преобразовать его тоже char? или что?

3 ответа

Всегда istringstream трюк:

template< typename T >
std::string ToString( const T& val )
{ std::istringstream iss; iss << val; return iss.str();
}

Или boost.lexical_cast.

Вы можете использовать std::string::c_str() чтобы получить строку с glfwSetWindowTitle() чтобы перейти к glfwSetWindowTitle().


Вы считали что-то вроде этого?

void
setWindowFPS (GLFWwindow* win)
{ // Measure speed ****** currentTime = glfwGetTime (); nbFrames++; if ( currentTime - lastTime >= 1.0 ){ // If last cout was more than 1 sec ago char title [256]; title [255] = '\0'; snprintf ( title, 255, "%s %s - [FPS: %3.2f]", GAME_NAME, VERSION, 1000.0f / (float)nbFrames ); glfwSetWindowTitle (win, title); nbFrames = 0; lastTime += 1.0; }
}


void showFPS(GLFWwindow *pWindow)
{ // Measure speed ****** currentTime = glfwGetTime(); ****** delta = currentTime - lastTime; nbFrames++; if ( delta >= 1.0 ){ // If last cout was more than 1 sec ago cout << 1000.0/******(nbFrames) << endl; ****** fps = ******(nbFrames) / delta; std::stringstream ss; ss << GAME_NAME << " " << VERSION << " [" << fps << " FPS]"; glfwSetWindowTitle(pWindow, ss.str().c_str()); nbFrames = 0; lastTime = currentTime; }
}

Только примечание, cout << 1000.0/******(nbFrames) << endl; не даст вам "кадров в секунду" (FPS), но даст вам "миллисекунды за кадры" , а скорее всего 16.666, если вы находитесь на скорости 60 кадров в секунду.

licensed under cc by-sa 3.0 with attribution.