我正在使用来自开源项目的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的行为方式?
答案 0 :(得分:4)
检查在60 FPS上限的计算机中是否启用了Vsync。 Vsync确实将帧速率限制为运动同步速率。要获得无上限的FPS,只需在图形驱动程序控制面板中禁用Vsync。