3205680062
Also added a required prerender function to scene and application. This function is intended to be used as a way to prepare the scene to be rendered in its current state. For that reason, the delta time and the current clock tick are not passed to it.
81 lines
1.6 KiB
C++
81 lines
1.6 KiB
C++
#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();
|
|
}
|