]> git.lizzy.rs Git - dragonblocks3d-lua.git/blob - modules/RenderEngine/src/init.lua
Refactoring
[dragonblocks3d-lua.git] / modules / RenderEngine / src / init.lua
1 RenderEngine:run("camera")
2 RenderEngine:run("shaders")
3 RenderEngine:run("textures")
4 RenderEngine:run("window")
5
6 RenderEngine.Mesh = RenderEngine:run("mesh")
7
8 function RenderEngine:init()
9         self:init_glfw()
10         self:create_window()
11         self:init_glew()
12         self:load_shaders()
13         self:set_sky("#FFFFFF")
14         self:add_render_task()
15 end
16
17 function RenderEngine:init_glew()
18         gl.init()
19 end
20
21 function RenderEngine:add_render_task()
22         Dragonblocks:add_task(function()
23
24         end)
25 end
26
27 function RenderEngine:render_loop()
28         self.last_time = glfw.get_time()
29         repeat
30                 self:render()
31                 --coroutine.yield()
32         until glfw.window_should_close(self.window)
33 end
34
35 function RenderEngine:render()
36         local dtime = glfw.get_time() - self.last_time
37         self.last_time = glfw.get_time()
38         
39         gl.clear_color(self.sky)
40         gl.enable("depth test")
41         gl.clear("color", "depth")
42         
43         gl.use_program(self.shaders)
44         
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) 
47         
48         gl.uniform_matrix4f(self.projection_matix_location, true, projection_matrix)
49         gl.uniform_matrix4f(self.view_matix_location, true, view_matrix)
50         
51         for _, mesh in ipairs(self.Mesh.list) do
52                 mesh:render(dtime)
53         end
54         
55         glfw.swap_buffers(self.window)
56         glfw.poll_events()
57 end
58
59
60 --[[
61 function RenderEngine:clear_removed_meshes()
62         local remove_indices = {} 
63         for index, mesh in pairs(self.meshes) do
64                 if mesh.removed then
65                         table.insert(remove_indices, index)
66                 end
67         end
68         for i, index in pairs(remove_indices)
69                 table.remove(self.meshes, index - i + 1)
70         end
71 end
72 ]]--
73 function RenderEngine:set_sky(htmlcolor)
74         local r, g, b = hex2rgb(htmlcolor)
75         self.sky = {r, g, b, 1.0}
76 end
77
78 function RenderEngine:set_wireframe(v)
79         gl.polygon_mode("front and back", (v and "line" or "fill"))
80 end