83 lines
1.7 KiB
C++
83 lines
1.7 KiB
C++
#include "Application.h"
|
|
|
|
#include "Exception.h"
|
|
|
|
#include "Util.h"
|
|
|
|
namespace charcoal
|
|
{
|
|
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();
|
|
}
|
|
} |