4

我试图让我的 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 吗?或者是什么 ?

4

3 回答 3

8
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。

于 2015-02-15T03:52:11.277 回答
4

你考虑过这样的事情吗?


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;
  }
}

于 2013-08-23T21:54:14.760 回答
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()来获取一个以 null 结尾的字符串以传递给glfwSetWindowTitle().

于 2013-08-23T21:53:29.337 回答