|  |  | @ -1,12 +1,14 @@ | 
			
		
	
		
		
			
				
					
					|  |  |  | #include <cstdio> // printf |  |  |  | #include <memory> // unique_ptr | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | #include <glad/glad.h> |  |  |  | #include <glad/glad.h> | 
			
		
	
		
		
			
				
					
					|  |  |  | #include <GLFW/glfw3.h> |  |  |  | #include <GLFW/glfw3.h> | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | #include "inferno/application.h" |  |  |  | #include "inferno/application.h" | 
			
		
	
		
		
			
				
					
					|  |  |  | #include "inferno/core.h" |  |  |  | #include "inferno/core.h" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | #include "inferno/event/applicationevent.h" | 
			
		
	
		
		
			
				
					
					|  |  |  | #include "inferno/event/event.h" |  |  |  | #include "inferno/event/event.h" | 
			
		
	
		
		
			
				
					
					|  |  |  | #include "inferno/log.h" |  |  |  | #include "inferno/log.h" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | #include "inferno/window.h" | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | namespace Inferno { |  |  |  | namespace Inferno { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -24,47 +26,49 @@ namespace Inferno { | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 	void Application::run() |  |  |  | 	void Application::run() | 
			
		
	
		
		
			
				
					
					|  |  |  | 	{ |  |  |  | 	{ | 
			
		
	
		
		
			
				
					
					|  |  |  | 		NF_CORE_LOG("Startup!"); |  |  |  | 		NF_CORE_LOG("Application startup!"); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		Event event; |  |  |  | 		m_window = std::make_unique<Window>(); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		m_window->setEventCallback(NF_BIND_EVENT(Application::onEvent)); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		glfwInit(); |  |  |  | 		while(!glfwWindowShouldClose(m_window->getWindow())) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		glfwWindowHint(GLFW_RESIZABLE, GL_FALSE); |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		GLFWwindow* window = glfwCreateWindow(1280, 720, "Inferno", NULL, NULL); |  |  |  | 			if(glfwGetKey(m_window->getWindow(), GLFW_KEY_ESCAPE) == GLFW_PRESS) { | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 		if (window == NULL) { |  |  |  | 				glfwSetWindowShouldClose(m_window->getWindow(), GL_TRUE); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 			NF_CORE_DANGER("Failed to create GLFW window"); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 			glfwTerminate(); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 			return;// -1;
 |  |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 			} |  |  |  | 			} | 
			
		
	
		
		
			
				
					
					|  |  |  | 		glfwMakeContextCurrent(window); |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) { |  |  |  | 			glClearColor(0.2f, 0.3f, 0.3f, 1.0f); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 			NF_CORE_DANGER("Failed to initialize GLAD"); |  |  |  | 			glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 			return;// -1;
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 		} |  |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		glViewport(0, 0, 1280, 720); |  |  |  | 			m_window->update(); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		} | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		while(!glfwWindowShouldClose(window)) { |  |  |  | 		NF_CORE_LOG("Application shutdown!"); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 			if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) { |  |  |  | 	void Application::onEvent(Event &e) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 				glfwSetWindowShouldClose(window, GL_TRUE); |  |  |  | 	{ | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		EventDispatcher dispatcher(e); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		dispatcher.dispatch<WindowCloseEvent>(NF_BIND_EVENT(Application::onWindowClose)); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		dispatcher.dispatch<WindowResizeEvent>(NF_BIND_EVENT(Application::onWindowResize)); | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 			glClearColor(0.2f, 0.3f, 0.3f, 1.0f); |  |  |  | 	bool Application::onWindowClose(WindowCloseEvent &e) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 			glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); |  |  |  | 	{ | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		(void)e; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		NF_CORE_INFO("WindowCloseEvent triggered"); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 			glfwPollEvents(); |  |  |  | 		glfwSetWindowShouldClose(m_window->getWindow(), GL_TRUE); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | 			glfwSwapBuffers(window); |  |  |  | 
 | 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		return true; | 
			
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		glfwTerminate(); |  |  |  | 	bool Application::onWindowResize(WindowResizeEvent &e) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	{ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		(void)e; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		NF_CORE_INFO("WindowResizeEvent %dx%d triggered", e.getWidth(), e.getHeight()); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 		NF_CORE_LOG("Shutdown!"); |  |  |  | 		return true; | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 	} |  |  |  | 	} | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
	
		
		
			
				
					|  |  | 
 |