Странная проблема со счетчиком FPS - ограничение до 60 кадров в секунду на более новом компьютере - PullRequest
2 голосов
/ 07 августа 2011

Я использую класс счетчика FPS из проекта с открытым исходным кодом, и у меня странная проблема. Когда я запускаю его на моем Toshiba Satellite (очень быстро), кажется, что счетчик достигает максимальной скорости 60 кадров в секунду. Замечательно. Не проблема. У меня есть другой компьютер, EEE, и он будет синхронизировать FPS с той же скоростью, с которой он будет работать. В некоторых случаях он может получить 132 кадра в секунду, и это намного медленнее компьютера. Это затрудняет проверку увеличения частоты кадров на моем основном компьютере для кодирования.

Таким образом, очевидно, что проблема заключается не в вызовах кода, которые различаются для разных процессоров. Может ли кто-нибудь из вас с острым глазом узнать, что это такое, и предложить альтернативы? Большое вам спасибо!

Заголовок:

#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 Ответ

4 голосов
/ 07 августа 2011

Проверьте, включен ли Vsync на компьютере с 60 FPS.Vsync точно ограничивает частоту кадров до частоты синхронизации motitor.Чтобы получить неограниченный FPS, просто отключите Vsync в панели управления графическими драйверами.

...