2 #include <glm/gtc/matrix_transform.hpp>
5 #include "input_handler.hpp"
6 #include "mesh_gen_mgr.hpp"
7 #include "render_engine.hpp"
9 #include "shader_program.hpp"
14 using namespace dragonblocks;
16 void RenderEngine::render()
18 double dtime = glfwGetTime() - last_time;
19 last_time = glfwGetTime();
21 input_handler->processInput(dtime);
23 glEnable(GL_DEPTH_TEST); CHECKERR
24 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); CHECKERR
26 updateViewMatrix(); CHECKERR
28 scene->render(dtime, shader_program);
30 window->swapBuffers(); CHECKERR
31 glfwPollEvents(); CHECKERR
34 bool RenderEngine::running()
36 return ! window->shouldClose();
39 void RenderEngine::updateProjectionMatrix()
41 dvec2 bounds = window->getSize();
42 mat4 projection_matrix = perspective(radians(fov), bounds.x / bounds.y, 0.01, render_distance);
43 shader_program->set("projection", projection_matrix); CHECKERR
46 void RenderEngine::updateViewMatrix()
48 shader_program->set("view", camera->getViewMatrix()); CHECKERR
51 void RenderEngine::setSky(vec3 sky)
53 glClearColor(sky.r, sky.g, sky.b, 1.0); CHECKERR
54 shader_program->set("sky", sky); CHECKERR
57 void RenderEngine::setRenderDistance(double d)
60 updateProjectionMatrix();
63 void RenderEngine::setFov(double f)
66 updateProjectionMatrix();
69 void RenderEngine::startMeshGenMgr()
71 mesh_gen_mgr->start();
74 RenderEngine::RenderEngine()
77 throw runtime_error("Failed to initialize GLFW");
78 glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
79 glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
80 glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
82 window = Window::create(this);
84 input_handler = new InputHandler(window);
85 mesh_gen_mgr = new MeshGenMgr;
88 GLenum glew_init_err = glewInit();
89 if (glew_init_err != GLEW_OK)
90 throw runtime_error("Failed to initialize GLEW");
92 shader_program = new ShaderProgram("shaders");
94 setSky(vec3(1.0, 1.0, 1.0));
95 setRenderDistance(16);
98 last_time = glfwGetTime();
101 RenderEngine::~RenderEngine()
105 delete input_handler;
108 delete shader_program;