Refactored game loop to use less CPU
This commit is contained in:
parent
c3dd5a22b1
commit
e238e35bb2
@ -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<double> 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;
|
||||
|
@ -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 {
|
||||
|
@ -1,4 +1,3 @@
|
||||
//TODO: File IO functions
|
||||
#include <Windows.h>
|
||||
|
||||
#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);
|
||||
|
@ -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<double> 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;
|
||||
|
@ -6,6 +6,7 @@
|
||||
|
||||
namespace nf {
|
||||
class Application;
|
||||
|
||||
class Renderer {
|
||||
public:
|
||||
Renderer(Application* app);
|
||||
|
Reference in New Issue
Block a user