2 #include <glm/gtc/matrix_transform.hpp>
3 #include "FrustumCull.h"
5 #include "input_handler.hpp"
6 #include "render_engine.hpp"
8 #include "shader_program.hpp"
13 using namespace dragonblocks;
15 void RenderEngine::render(double dtime)
17 glClearColor(sky.r, sky.g, sky.b, 1.0); CHECKERR
20 glEnable(GL_CULL_FACE); CHECKERR
21 glCullFace(GL_BACK); CHECKERR
22 glFrontFace(GL_CW); CHECKERR
25 glEnable(GL_DEPTH_TEST); CHECKERR
26 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); CHECKERR
29 dvec2 window_size = window->getSize();
30 mat4 projection_matrix = perspective(radians(fov), window_size.x / window_size.y, 0.01, render_distance);
32 mat4 view_matrix = camera->getViewMatrix();
34 Frustum frustum(projection_matrix * view_matrix);
36 scene->render(dtime, &frustum, projection_matrix, view_matrix, sky);
38 window->swapBuffers(); CHECKERR
39 glfwPollEvents(); CHECKERR
42 bool RenderEngine::running()
44 return ! window->shouldClose();
47 RenderEngine::RenderEngine()
50 throw runtime_error("Failed to initialize GLFW");
53 glfwWindowHint(GLFW_SAMPLES, 4);
54 glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
55 glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
56 glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
58 window = Window::create(this);
62 GLenum glew_init_err = glewInit();
63 if (glew_init_err != GLEW_OK) {
64 throw runtime_error("Failed to initialize GLEW");
68 RenderEngine::~RenderEngine()