12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- #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;
- };
|