FPS计数器的奇怪问题 - 在新计算机上限制为60fps

时间:2011-08-07 04:29:29

标签: c++ opengl counter frame-rate

我正在使用来自开源项目的FPS计数器类,我遇到了一个奇怪的问题。当我在我的东芝Satellite(非常快)上运行它时,计数器似乎最大速度为60fps。那很棒。不是问题。我确实有另一台计算机,一台电子电气设备,它将为FPS提供尽可能高的时钟。在某些情况下,它可以获得132fps,这是一个慢得多的计算机。这使我很难在主编码计算机上测试帧率增加。

显然,问题是代码调用的不同处理器之间的问题。你们中的任何人都能敏锐地发现它是什么并建议替代方案吗?非常感谢你!

头:

#ifndef FPS_COUNTER_H
#define FPS_COUNTER_H

class FPS_COUNTER
{
public:
    void Update(void);                                  //updates counter - call once per frame
    void Shutdown(void);                                //send max, min, average to log
    float GetFps(void)  {       return fps;     }

    FPS_COUNTER() : fps(0.0f), lastTime(0.0f), frames(0L), time(0.0f) 
    {}
    ~FPS_COUNTER()  {}

protected:
    float fps;

    float lastTime;
    long frames;
    float time;
};

#endif  //FPS_COUNTER_H

CPP

#include <windows.h>
#include "LOG.h"
#include "FPS_COUNTER.h"

extern LOG errorLog;

void FPS_COUNTER::Update(void)
{
    //keep track of time lapse and frame count
    time = timeGetTime()*0.001f;                            //get current time in seconds
    ++frames;                                               //increase frame count

    if(time-lastTime>1.0f)                                  //if it has been 1 second
    {
        fps     = frames/(time-lastTime);                   //update fps number
        lastTime= time;                                     //set beginning count
        frames  = 0L;                                       //reset frames this second
    }

}

编辑:我认为它是在对timeGetTime()的调用中 - 是否有任何方法可以使其在任何处理器上对我的EER的行为方式?

1 个答案:

答案 0 :(得分:4)

检查在60 FPS上限的计算机中是否启用了Vsync。 Vsync确实将帧速率限制为运动同步速率。要获得无上限的FPS,只需在图形驱动程序控制面板中禁用Vsync。