1 RenderEngine:run("inputhandler")
2 RenderEngine:run("shaders")
3 RenderEngine:run("textures")
4 RenderEngine:run("window")
6 RenderEngine.Mesh = RenderEngine:run("mesh")
7 RenderEngine.camera = RenderEngine:run("camera")
9 function RenderEngine:init()
14 self:set_sky("#FFFFFF")
15 self:add_render_task()
18 function RenderEngine:init_glew()
22 function RenderEngine:add_render_task()
23 Dragonblocks:add_task(function()
28 function RenderEngine:render_loop()
29 self.last_time = glfw.get_time()
33 until glfw.window_should_close(self.window)
36 function RenderEngine:update_projection_matrix()
37 gl.uniform_matrix4f(gl.get_uniform_location(self.shaders, "projection"), true, glm.perspective(math.rad(self.fov), self.window_width / self.window_height, 0.1, 100))
40 function RenderEngine:update_view_matrix()
41 gl.uniform_matrix4f(gl.get_uniform_location(self.shaders, "view"), true, self.camera:get_view_matrix())
44 function RenderEngine:render()
45 local dtime = glfw.get_time() - self.last_time
46 self.last_time = glfw.get_time()
48 self:process_input(dtime)
50 gl.clear_color(self.sky)
51 gl.enable("depth test")
52 gl.clear("color", "depth")
54 gl.use_program(self.shaders)
56 RenderEngine:update_view_matrix()
58 for _, mesh in ipairs(self.Mesh.list) do
62 glfw.swap_buffers(self.window)
66 function RenderEngine:set_sky(htmlcolor)
67 local r, g, b = hex2rgb(htmlcolor)
68 self.sky = {r, g, b, 1.0}
71 function RenderEngine:set_wireframe(v)
72 gl.polygon_mode("front and back", (v and "line" or "fill"))