charcoal/OpenGLEngine/Application.cpp
elipzer b494f68d0c A Working Triangle
Now using GLFW3 instead of the custom window class. This library
looks like it will make development much simpler and will make it
so that I am less worried about my windows code breaking. Currently
setup the http://antongerdelan.net/opengl/hellotriangle.html
tutorial in the MySimpleScene. Will probably create another scene
file to try to get the object oriented stuff working.
2018-09-05 16:26:50 -04:00

87 lines
1.6 KiB
C++

#include "Application.h"
#include "Exception.h"
Application::Application(const char* class_name, HINSTANCE h_instance)
: m_client_size(1280, 720)
{
base_init();
}
Application::~Application()
{
}
int Application::run()
{
try
{
init();
GLenum gl_err;
while (!glfwWindowShouldClose(m_p_window))
{
// Handle all messages
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;
}
}
void Application::close()
{
}
void Application::base_init()
{
if (!glfwInit())
{
throw EXCEPTION("Unable to Initialize GLFW");
}
m_p_window = glfwCreateWindow(m_client_size.x, m_client_size.y, "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");
m_fps.prepare();
}
void Application::base_close()
{
close();
}