opengl 是否在GLFW窗口标题中显示FPS?

mitkmikd  于 2022-11-04  发布在  其他
关注(0)|答案(3)|浏览(300)

我试图让我的FPS显示在窗口标题,但我的程序只是没有它。
我FPS代码

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

我也希望它在这里的版本之后

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

但是我不能只叫void,我必须把它也转换成char,或者什么?

rwqw0loc

rwqw0loc1#

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

         double fps = double(nbFrames) / delta;

         std::stringstream ss;
         ss << GAME_NAME << " " << VERSION << " [" << fps << " FPS]";

         glfwSetWindowTitle(pWindow, ss.str().c_str());

         nbFrames = 0;
         lastTime = currentTime;
     }
}

请注意,cout << 1000.0/double(nbFrames) << endl;不会给予你“每秒帧数”(FPS),而是给你“每帧毫秒数”,如果你是60 fps,最有可能是16.666。

xuo3flqw

xuo3flqw2#

你考虑过这样的事情吗?

void
setWindowFPS (GLFWwindow* win)
{
  // Measure speed
  double 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;
  }
}
new9mtju

new9mtju3#

总是有stringstream技巧:

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

或者boost.lexical_cast
您可以使用std::string::c_str()来取得以null结尾的字串,以传入glfwSetWindowTitle()

相关问题