You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
1.6 KiB
78 lines
1.6 KiB
#pragma once
|
|
|
|
#include <wrl.h>
|
|
|
|
// Helper class for basic timing.
|
|
ref class BasicTimer sealed
|
|
{
|
|
public:
|
|
// Initializes internal timer values.
|
|
BasicTimer()
|
|
{
|
|
if (!QueryPerformanceFrequency(&m_frequency)) {
|
|
throw ref new Platform::FailureException();
|
|
}
|
|
Reset();
|
|
}
|
|
|
|
// Reset the timer to initial values.
|
|
void Reset()
|
|
{
|
|
Update();
|
|
m_startTime = m_currentTime;
|
|
m_total = 0.0f;
|
|
m_delta = 1.0f / 60.0f;
|
|
}
|
|
|
|
// Update the timer's internal values.
|
|
void Update()
|
|
{
|
|
if (!QueryPerformanceCounter(&m_currentTime)) {
|
|
throw ref new Platform::FailureException();
|
|
}
|
|
|
|
m_total = static_cast<float>(
|
|
static_cast<double>(m_currentTime.QuadPart - m_startTime.QuadPart) /
|
|
static_cast<double>(m_frequency.QuadPart));
|
|
|
|
if (m_lastTime.QuadPart == m_startTime.QuadPart) {
|
|
// If the timer was just reset, report a time delta equivalent to 60Hz
|
|
// frame time.
|
|
m_delta = 1.0f / 60.0f;
|
|
} else {
|
|
m_delta = static_cast<float>(
|
|
static_cast<double>(m_currentTime.QuadPart - m_lastTime.QuadPart) /
|
|
static_cast<double>(m_frequency.QuadPart));
|
|
}
|
|
|
|
m_lastTime = m_currentTime;
|
|
}
|
|
|
|
// Duration in seconds between the last call to Reset() and the last call to
|
|
// Update().
|
|
property float Total
|
|
{
|
|
float get()
|
|
{
|
|
return m_total;
|
|
}
|
|
}
|
|
|
|
// Duration in seconds between the previous two calls to Update().
|
|
property float Delta
|
|
{
|
|
float get()
|
|
{
|
|
return m_delta;
|
|
}
|
|
}
|
|
|
|
private:
|
|
LARGE_INTEGER m_frequency;
|
|
LARGE_INTEGER m_currentTime;
|
|
LARGE_INTEGER m_startTime;
|
|
LARGE_INTEGER m_lastTime;
|
|
float m_total;
|
|
float m_delta;
|
|
};
|