]> git.lizzy.rs Git - dragonblocks3d.git/blob - src/render_engine.cpp
Set antialiasing to 8
[dragonblocks3d.git] / src / render_engine.cpp
1 #include <stdexcept>
2 #include <glm/gtc/matrix_transform.hpp>
3 #include "FrustumCull.h"
4 #include "camera.hpp"
5 #include "input_handler.hpp"
6 #include "render_engine.hpp"
7 #include "scene.hpp"
8 #include "shader_program.hpp"
9 #include "window.hpp"
10
11 using namespace std;
12 using namespace glm;
13 using namespace dragonblocks;
14
15 void RenderEngine::render(double dtime)
16 {
17         glClearColor(sky.r, sky.g, sky.b, 1.0); CHECKERR
18
19         /*
20                 glEnable(GL_CULL_FACE); CHECKERR
21                 glCullFace(GL_BACK); CHECKERR
22                 glFrontFace(GL_CW); CHECKERR
23         */
24
25         glEnable(GL_DEPTH_TEST); CHECKERR
26         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); CHECKERR
27
28
29         dvec2 window_size = window->getSize();
30         mat4 projection_matrix = perspective(radians(fov), window_size.x / window_size.y, 0.01, render_distance);
31
32         mat4 view_matrix = camera->getViewMatrix();
33
34         Frustum frustum(projection_matrix * view_matrix);
35
36         scene->render(dtime, &frustum, projection_matrix, view_matrix, sky);
37
38         window->swapBuffers(); CHECKERR
39         glfwPollEvents(); CHECKERR
40 }
41
42 bool RenderEngine::running()
43 {
44         return ! window->shouldClose();
45 }
46
47 RenderEngine::RenderEngine()
48 {
49         if (! glfwInit()) {
50                 throw runtime_error("Failed to initialize GLFW");
51         }
52
53         glfwWindowHint(GLFW_SAMPLES, 8);
54         glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
55         glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
56         glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
57
58         window = Window::create(this);
59         camera = new Camera;
60         scene = new Scene;
61
62         GLenum glew_init_err = glewInit();
63         if (glew_init_err != GLEW_OK) {
64                 throw runtime_error("Failed to initialize GLEW");
65         }
66 }
67
68 RenderEngine::~RenderEngine()
69 {
70         delete window;
71         delete camera;
72         delete scene;
73 }