#include "Application.h" #include "Exception.h" #include "Util.h" Application::Application(int width, int height) : m_screen_size(width, height) { if (width < 0 || height < 0) throw EXCEPTION("Invalid screen dimensions"); if (!glfwInit()) throw EXCEPTION("Unable to Initialize GLFW"); m_p_window = glfwCreateWindow(width, height, "OpenGLEngine", NULL, NULL); if (!m_p_window) { glfwTerminate(); throw EXCEPTION("Unable to Create GLFW Window"); } glfwSwapInterval(1); glfwMakeContextCurrent(m_p_window); glewExperimental = GL_TRUE; GLenum glew_err = glewInit(); if (glew_err != GLEW_OK) { glfwTerminate(); throw EXCEPTION("Unable to Initialize GLEW: " + std::string((char*)glewGetErrorString(glew_err))); } // Output Version Information OutputDebugString("\nOpenGL Version Information:\nRenderer: "); OutputDebugString((char*)glGetString(GL_RENDERER)); OutputDebugString("\nOpenGL Version: "); OutputDebugString((char*)glGetString(GL_VERSION)); OutputDebugString("\n\n"); // TODO: Mouse Movement, Mouse Scroll m_glfw_input_manager.init(m_p_window); glfwSetKeyCallback(m_p_window, &GLFWInputManager::key_callback); m_fps.prepare(); } int Application::run() { try { init(); while (!glfwWindowShouldClose(m_p_window)) { // Handle all messages m_glfw_input_manager.mark(); glfwPollEvents(); float delta_time = m_fps.mark(); clock_t clock = m_fps.get_clock(); update(delta_time, clock); prerender(); render(); CHECK_GL_ERR(); glfwSwapBuffers(m_p_window); } return 0; } catch (Exception& e) { glfwTerminate(); throw e; } } void Application::base_close() { close(); }