1 RenderEngine:run("camera")
2 RenderEngine:run("shaders")
3 RenderEngine:run("textures")
4 RenderEngine:run("window")
6 RenderEngine.Mesh = RenderEngine:run("mesh")
8 function RenderEngine:init()
13 self:set_sky("#FFFFFF")
14 self:add_render_task()
17 function RenderEngine:init_glew()
21 function RenderEngine:add_render_task()
22 Dragonblocks:add_task(function()
27 function RenderEngine:render_loop()
28 self.last_time = glfw.get_time()
32 until glfw.window_should_close(self.window)
35 function RenderEngine:render()
36 local dtime = glfw.get_time() - self.last_time
37 self.last_time = glfw.get_time()
39 gl.clear_color(self.sky)
40 gl.enable("depth test")
41 gl.clear("color", "depth")
43 gl.use_program(self.shaders)
45 local view_matrix = glm.translate(self.camera_pos)
46 local projection_matrix = glm.perspective(math.rad(self.fov), self.window_width / self.window_height, 0.1, 100)
48 gl.uniform_matrix4f(self.projection_matix_location, true, projection_matrix)
49 gl.uniform_matrix4f(self.view_matix_location, true, view_matrix)
51 for _, mesh in ipairs(self.Mesh.list) do
55 glfw.swap_buffers(self.window)
61 function RenderEngine:clear_removed_meshes()
62 local remove_indices = {}
63 for index, mesh in pairs(self.meshes) do
65 table.insert(remove_indices, index)
68 for i, index in pairs(remove_indices)
69 table.remove(self.meshes, index - i + 1)
73 function RenderEngine:set_sky(htmlcolor)
74 local r, g, b = hex2rgb(htmlcolor)
75 self.sky = {r, g, b, 1.0}
78 function RenderEngine:set_wireframe(v)
79 gl.polygon_mode("front and back", (v and "line" or "fill"))