From e238e35bb20bccaf2bb5255a6d36fa2a6cea7b42 Mon Sep 17 00:00:00 2001 From: "Grayson Riffe (Desktop)" Date: Mon, 23 Aug 2021 01:13:53 -0500 Subject: [PATCH] Refactored game loop to use less CPU --- NothinFancy/src/Application.cpp | 15 ++++++++------- NothinFancy/src/Renderer/IndexBuffer.cpp | 2 +- NothinFancy/src/Utility.cpp | 3 +-- NothinFancy/src/include/Application.h | 5 ++--- NothinFancy/src/include/Renderer.h | 1 + 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/NothinFancy/src/Application.cpp b/NothinFancy/src/Application.cpp index 12471bd..f5f1882 100644 --- a/NothinFancy/src/Application.cpp +++ b/NothinFancy/src/Application.cpp @@ -140,8 +140,11 @@ namespace nf { void Application::startMainThread() { m_renderer = new Renderer(this); startIntroState(); + std::chrono::steady_clock::time_point start_time = std::chrono::steady_clock::now(); + const std::chrono::duration wait_time = std::chrono::nanoseconds(1000000000 / 60); + auto next_time = start_time + wait_time; while (m_running) { - m_deltaTime = m_fpsDuration.count(); + start_time = std::chrono::steady_clock::now(); m_currentState->update(); m_currentState->render(); m_renderer->doFrame(); @@ -149,16 +152,14 @@ namespace nf { m_fpsClock2 = std::chrono::steady_clock::now(); m_fpsDuration = m_fpsClock2 - m_fpsClock1; if (m_fpsDuration.count() >= 1.0) { - m_fpsClock1 = std::chrono::steady_clock::now(); m_FPS = m_frames; m_frames = 0; Log("FPS: " + std::to_string(m_FPS)); + m_fpsClock1 = std::chrono::steady_clock::now(); } - m_fpsDuration = std::chrono::steady_clock::now() - m_frameClock; - while (m_fpsDuration.count() < m_minFrametime) { - m_fpsDuration = std::chrono::steady_clock::now() - m_frameClock; - } - m_frameClock = std::chrono::steady_clock::now(); + std::this_thread::sleep_until(next_time); + m_deltaTime = (std::chrono::steady_clock::now() - start_time).count(); + next_time += wait_time; } m_currentState->onExit(); delete m_renderer; diff --git a/NothinFancy/src/Renderer/IndexBuffer.cpp b/NothinFancy/src/Renderer/IndexBuffer.cpp index 047992b..6382133 100644 --- a/NothinFancy/src/Renderer/IndexBuffer.cpp +++ b/NothinFancy/src/Renderer/IndexBuffer.cpp @@ -5,7 +5,7 @@ namespace nf { m_count = count; glGenBuffers(1, &m_id); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_id); - glBufferData(GL_ELEMENT_ARRAY_BUFFER, count * sizeof(unsigned int), data, GL_STATIC_DRAW);//TODO: See if I need to change this to dynamic + glBufferData(GL_ELEMENT_ARRAY_BUFFER, count * sizeof(unsigned int), data, GL_STATIC_DRAW); } void IndexBuffer::bind() const { diff --git a/NothinFancy/src/Utility.cpp b/NothinFancy/src/Utility.cpp index 2347400..2a66909 100644 --- a/NothinFancy/src/Utility.cpp +++ b/NothinFancy/src/Utility.cpp @@ -1,4 +1,3 @@ -//TODO: File IO functions #include #include "Utility.h" @@ -72,7 +71,7 @@ namespace nf { out.close(); return true; } - + //TODO: XOR encryption std::string readFile(const char* filename) { std::ifstream in; in.open(filename); diff --git a/NothinFancy/src/include/Application.h b/NothinFancy/src/include/Application.h index 2de15cc..e38df10 100644 --- a/NothinFancy/src/include/Application.h +++ b/NothinFancy/src/include/Application.h @@ -50,11 +50,10 @@ namespace nf { LONG m_defaultWindowStyle; WINDOWPLACEMENT m_wndPlacement; - std::chrono::steady_clock::time_point m_frameClock = std::chrono::steady_clock::now(); std::chrono::duration m_fpsDuration; double m_deltaTime; - std::chrono::steady_clock::time_point m_fpsClock1 = m_frameClock; - std::chrono::steady_clock::time_point m_fpsClock2 = m_frameClock; + std::chrono::steady_clock::time_point m_fpsClock1 = std::chrono::steady_clock::now(); + std::chrono::steady_clock::time_point m_fpsClock2 = m_fpsClock1; int m_frames; const int m_targetFPS = 60; const double m_minFrametime = 1.0 / m_targetFPS; diff --git a/NothinFancy/src/include/Renderer.h b/NothinFancy/src/include/Renderer.h index aa4b769..65a39aa 100644 --- a/NothinFancy/src/include/Renderer.h +++ b/NothinFancy/src/include/Renderer.h @@ -6,6 +6,7 @@ namespace nf { class Application; + class Renderer { public: Renderer(Application* app);