]> git.lizzy.rs Git - dragonblocks3d-lua.git/blob - modules/RenderEngine/src/init.lua
4b060abc38219d2be7b46a3b41bfe78a9a356a66
[dragonblocks3d-lua.git] / modules / RenderEngine / src / init.lua
1 RenderEngine:run("inputhandler")
2 RenderEngine:run("shaders")
3 RenderEngine:run("textures")
4 RenderEngine:run("window")
5
6 RenderEngine.cube_vertices = RenderEngine:run("cube_vertices")
7 RenderEngine.Mesh = RenderEngine:run("mesh")
8 RenderEngine.ChunkMesh = RenderEngine:run("chunk_mesh")
9 RenderEngine.camera = RenderEngine:run("camera")
10
11 function RenderEngine:init()
12         self:init_glfw()
13         self:create_window()
14         self:init_glew()
15         self:load_shaders()
16         self:set_sky("#FFFFFF")
17         self:add_render_task()
18 end
19
20 function RenderEngine:init_glew()
21         gl.init()
22 end
23
24 function RenderEngine:add_render_task()
25         Dragonblocks:add_task(function()
26                 self:render_loop()
27         end)
28 end
29
30 function RenderEngine:render_loop(is_only_task)
31         self.last_time = glfw.get_time()
32         repeat
33                 self:render()
34                 if not is_only_task then
35                         coroutine.yield()
36                 end
37         until glfw.window_should_close(self.window)
38         os.exit()
39 end
40
41 function RenderEngine:update_projection_matrix()
42         gl.uniform_matrix4f(gl.get_uniform_location(self.shaders, "projection"), true, glm.perspective(math.rad(self.fov), self.window_width / self.window_height, 0.0001, 100))
43 end
44
45 function RenderEngine:update_view_matrix()
46         gl.uniform_matrix4f(gl.get_uniform_location(self.shaders, "view"), true, self.camera:get_view_matrix())
47 end
48
49 function RenderEngine:render()
50         local dtime = glfw.get_time() - self.last_time
51         self.last_time = glfw.get_time()
52         
53         self:process_input(dtime)
54         
55         gl.clear_color(self.sky)
56         gl.enable("depth test")
57         gl.clear("color", "depth")
58         
59         gl.use_program(self.shaders)    
60         
61         self:update_view_matrix()
62         
63         for _, mesh in ipairs(self.Mesh.list) do
64                 mesh:render(dtime)
65         end
66         
67         glfw.swap_buffers(self.window)
68         glfw.poll_events()
69 end
70
71 function RenderEngine:set_sky(htmlcolor)
72         local r, g, b = hex2rgb(htmlcolor)
73         self.sky = {r, g, b, 1.0}
74 end
75
76 function RenderEngine:set_wireframe(v)
77         gl.polygon_mode("front and back", (v and "line" or "fill"))
78 end