FPS:发布模式版本低于调试版本

时间:2012-07-17 07:55:55

标签: opengl graphics 3d

我使用OpenGL,Qt,C ++编写了一个3D模型显示程序。但是我发现了一些奇怪的东西。那就是Release模式版本中的FPS(每秒帧数)低于调试模式版本。现在我发布他们的FPS:< / p>

左边是调试模式版本,右边是发布模式版本:

enter image description here enter image description here

我用来计算FPS的函数是

void displayFPS()
{
    static float framesPerSecond    = 0.0f;       // This will store our fps
    static float lastTime   = 0.0f;       // This will hold the time from the last frame
    float currentTime = GetTickCount() * 0.001f;    
    ++framesPerSecond;
    if( currentTime - lastTime > 1.0f )
    {
        framesPerSecond/=currentTime - lastTime;
        char strFrameRate[256];
        lastTime = currentTime;
        sprintf_s(strFrameRate,256, "FPS : %f", framesPerSecond);
        cout << strFrameRate << endl;
        framesPerSecond = 0;
    }
}

我想知道怎么会发生这种情况?发布模式不应该比调试模式更快吗?有人可以告诉我为什么吗?

1 个答案:

答案 0 :(得分:1)

根据this GetTickCount()的准确性要比毫秒差。它甚至可以达到55毫秒!使用更可靠的方法来测量时间间隔,如下所示:

#include <windows.h>
#include <cstdint>

typedef std::int64_t int64;

// get duration of a single "clock" in microseconds
double
get_clock_duration()
{
  LARGE_INTEGER f;
  QueryPerformanceFrequency(&f);
  return 1000000.0 / double(f.QuadPart);
}

// get number of elapsed clocks from program start
int64
clocks()
{  
  LARGE_INTEGER t;
  QueryPerformanceCounter(&t);
  return t.QuadPart;
}

// convert a duration in clocks to a duration in milliseconds
double
milliseconds(int64 t)
{
  return get_clock_duration() * double(t) * 0.001;
}