我正在使用开源项目中的 FPS 计数器类,但遇到了一个奇怪的问题。当我在东芝卫星上运行它时(速度非常快),计数器似乎达到了 60 fps 的最大值。那太棒了。不是问题。我确实有另一台计算机,一台 EEE,它会将 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 上表现得一样?
最佳答案
检查计算机中是否启用了垂直同步(上限为 60 FPS)。 Vsync 确实将帧速率限制为运动同步速率。要获得不受限制的 FPS,只需在图形驱动程序控制面板中禁用垂直同步即可。
关于c++ - FPS 计数器的奇怪问题 - 在较新的计算机上限制为 60fps,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6970745/