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
	 Grayson Riffe (Desktop)
						Grayson Riffe (Desktop)