vkmEngine 1.0.0
A C++ game engine · vkmengine.com
Loading...
Searching...
No Matches
frame_limiter.h
1#pragma once
2
3#include <chrono>
4
5namespace Vkm::Engine {
6
13 public:
21
22 FrameLimiter(const FrameLimiter& other) = delete;
23 FrameLimiter& operator=(const FrameLimiter& other) = delete;
24
25 FrameLimiter(FrameLimiter && other) = delete;
26 FrameLimiter& operator=(FrameLimiter && other) = delete;
27
28 public:
32 void beginFrame();
33
37 void endFrame();
38
44 void setTargetFramerate(int framerate) { m_targetFramerate = framerate > 0 ? framerate : 0; }
45
51 int targetFramerate() const { return m_targetFramerate; }
52
53 private:
62 void sleepFor(std::chrono::steady_clock::duration span);
63
64 private:
65 int m_targetFramerate = 0;
66 std::chrono::steady_clock::time_point m_frameStart;
67
69 std::chrono::steady_clock::time_point m_deadline;
70
71 void* m_timer = nullptr;
72};
73
74} // namespace Vkm::Engine
void endFrame()
Marks the end of a frame and waits as necessary to match the target framerate.
FrameLimiter()
Ask Windows for a 1 ms scheduler tick for as long as the limiter lives.
void beginFrame()
Marks the start of a frame, before any work is done.
int targetFramerate() const
The cap in effect, in frames per second.
Definition frame_limiter.h:51
void setTargetFramerate(int framerate)
Set the desired target framerate (frames per second).
Definition frame_limiter.h:44