10#ifndef UTIL_FRAME_TIMER_HEADER
11#define UTIL_FRAME_TIMER_HEADER
19#define FRAME_TIMER_BUSY_WAITING 0
37 void set_max_fps (std::size_t fps);
40 std::size_t get_max_fps (
void)
const;
46 float get_time_sec (
void)
const;
52 std::size_t get_time (
void)
const;
55 std::size_t get_frame_count (
void)
const;
58 void next_frame (
void);
61 std::size_t now (
void)
const;
62 std::size_t delay (std::size_t ms)
const;
66 std::size_t last_time;
69 std::size_t frame_count;
77FrameTimer::FrameTimer (
void)
79 this->cur_time = now();
80 this->last_time = this->cur_time;
82 this->frame_count = 0;
86FrameTimer::set_max_fps (std::size_t fps)
92FrameTimer::get_max_fps (
void)
const
98FrameTimer::get_time (
void)
const
100 return this->cur_time;
104FrameTimer::get_time_sec (
void)
const
106 return (1.0f / 1000.0f) * (float)this->cur_time;
110FrameTimer::get_frame_count (
void)
const
112 return this->frame_count;
116FrameTimer::next_frame (
void)
118 this->last_time = this->cur_time;
119 this->cur_time = this->now();
121 if (this->max_fps != 0)
123 std::size_t diff = this->cur_time - this->last_time;
124 std::size_t frame_ms = 1000 / this->max_fps;
127 this->cur_time = delay(frame_ms - diff);
130 this->frame_count += 1;
134FrameTimer::now (
void)
const
136 return this->timer.get_elapsed();
140FrameTimer::delay (std::size_t ms)
const
142 std::size_t curTime = this->cur_time;
144#if FRAME_TIMER_BUSY_WAITING
145 std::size_t endTime = cur_time + ms;
146 while (curTime < endTime)
A timer class for frame-based applications.
Cross-platform high-resolution real-time timer.
#define UTIL_NAMESPACE_BEGIN
#define UTIL_NAMESPACE_END