class C_Fps
{
enum{FrameCount=64};
typedef unsigned __int64 UI64;
UI64 m_pc;
UI64 m_pf;
UI64 m_Frames[FrameCount];
int m_pos;
UI64 m_LFps;
double m_Fps;
public:
C_Fps()
:m_pos(0)
,m_Fps(0)
,m_LFps(0)
{
QueryPerformanceFrequency((LARGE_INTEGER*)&m_pf);
QueryPerformanceCounter((LARGE_INTEGER*)&m_pc);
for(int i=0;i<FrameCount;i++)
m_Frames[i]=0;
m_LFps=0;
};
void Lock(){}//:-))
void UnLock()
{
QueryPerformanceCounter((LARGE_INTEGER*)&m_pc);
}
void Frame()
{
UI64 d=m_pc;
QueryPerformanceCounter((LARGE_INTEGER*)&m_pc);
d=m_pc-d;
m_LFps+=d-m_Frames[m_pos];
m_Frames[m_pos++]=d;
if(m_pos>=FrameCount)m_pos=0;
m_Fps=(m_pf*FrameCount)/(double)m_LFps;
}
double Fps()
{
return m_Fps;
}
};
... << RSDN@Home 1.0 alpha 12 >>