charcoal/OpenGLEngine/Application.cpp

92 lines
1.6 KiB
C++
Raw Normal View History

2018-09-04 19:25:54 +00:00
#include "Application.h"
#include "Exception.h"
2018-09-04 19:25:54 +00:00
Application::Application()
2018-09-04 19:25:54 +00:00
{
base_init();
2018-09-04 19:25:54 +00:00
}
Application::~Application()
{
}
int Application::run()
{
try
{
init();
GLenum gl_err;
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);
render();
gl_err = glGetError();
if (gl_err != GL_NO_ERROR)
{
throw EXCEPTION("Caught OpenGL Error: " + std::to_string(gl_err));
}
glfwSwapBuffers(m_p_window);
}
return 0;
}
catch (Exception& e)
{
glfwTerminate();
throw e;
2018-09-04 19:25:54 +00:00
}
}
void Application::close()
{
}
void Application::base_init()
2018-09-04 19:25:54 +00:00
{
if (!glfwInit())
{
throw EXCEPTION("Unable to Initialize GLFW");
}
m_p_window = glfwCreateWindow(1280, 720, "OpenGLEngine", NULL, NULL);
if (!m_p_window)
{
glfwTerminate();
throw EXCEPTION("Unable to Create GLFW Window");
}
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");
2018-09-04 19:25:54 +00:00
m_glfw_input_manager.init(m_p_window);
glfwSetKeyCallback(m_p_window, &GLFWInputManager::key_callback);
2018-09-04 19:25:54 +00:00
m_fps.prepare();
}
void Application::base_close()
{
close();
}