|
一个Timer类 原封不动的从一个框架下拷到DXUT里 fps在原来的框架有1000左右 到DXUT里只有59左右
原来以为是线程安全的问题,把DXUT中g_bThreadSafe = false
依然如此= =
类定义如下
class CGameTime
{
private:
INT64 m_frequency;
INT64 m_curTime;
INT64 m_lastTime;
INT64 m_lastUpdate;
INT64 m_FPSUpdateInterval;
UINT m_numFrames;
float m_runTime;
float m_timeElapsed;
float m_fps;
BOOL m_bStop;
public:
CGameTime(void);
~CGameTime(void);
void StartTime();
void StopTime();
void UpdateTime();
BOOL IsStopped() { return m_bStop; }
float GetFPS() { return m_fps; }
float GetRunTime() { return m_runTime; }
float GetElapsedTime() { return m_bStop ? 0.0f : m_timeElapsed; }
};
///cpp
#include ".\gametime.h"
CGameTime::CGameTime(void)
{
QueryPerformanceFrequency( (LARGE_INTEGER *)&m_frequency );
m_curTime = 0;
m_lastTime = 0;
m_lastUpdate = 0;
m_numFrames = 0;
m_runTime = 0;
m_timeElapsed = 0;
m_fps = 0.0f;
m_FPSUpdateInterval = m_frequency >> 1;
m_bStop = TRUE;
}
CGameTime::~CGameTime(void)
{
}
void CGameTime::StartTime()
{
if ( !m_bStop )
{
return;
}
QueryPerformanceCounter( (LARGE_INTEGER *)&m_lastTime );
m_bStop = FALSE;
}
void CGameTime::StopTime()
{
if ( m_bStop )
{
return;
}
INT64 stopTime = 0;
QueryPerformanceCounter( (LARGE_INTEGER *)&stopTime );
m_runTime += (float)(stopTime - m_lastTime) / (float)m_frequency;
m_bStop = TRUE;
}
void CGameTime::UpdateTime()
{
if ( m_bStop )
{
return;
}
// Get the current time
QueryPerformanceCounter( (LARGE_INTEGER *)&m_curTime );
m_timeElapsed = (float)(m_curTime - m_lastTime) / (float)m_frequency;
m_runTime += m_timeElapsed;
// Update FPS
m_numFrames++;
if ( m_curTime - m_lastUpdate >= m_FPSUpdateInterval )
{
float currentTime = (float)m_curTime / (float)m_frequency;
float lastTime = (float)m_lastUpdate / (float)m_frequency;
m_fps = (float)m_numFrames / (currentTime - lastTime);
m_lastUpdate = m_curTime;
m_numFrames = 0;
}
m_lastTime = m_curTime;
}
|
|