]> git.lizzy.rs Git - dragonblocks3d-lua.git/blob - modules/RenderEngine/src/init.lua
Yaw & Pitch bound to mouse input
[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.Mesh = RenderEngine:run("mesh")
7 RenderEngine.camera = RenderEngine:run("camera")
8
9 function RenderEngine:init()
10         self:init_glfw()
11         self:create_window()
12         self:init_glew()
13         self:load_shaders()
14         self:set_sky("#FFFFFF")
15         self:add_render_task()
16 end
17
18 function RenderEngine:init_glew()
19         gl.init()
20 end
21
22 function RenderEngine:add_render_task()
23         Dragonblocks:add_task(function()
24                 self:render_loop()
25         end)
26 end
27
28 function RenderEngine:render_loop()
29         self.last_time = glfw.get_time()
30         repeat
31                 self:render()
32                 --coroutine.yield()
33         until glfw.window_should_close(self.window)
34 end
35
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))
38 end
39
40 function RenderEngine:update_view_matrix()
41         gl.uniform_matrix4f(gl.get_uniform_location(self.shaders, "view"), true, self.camera:get_view_matrix())
42 end
43
44 function RenderEngine:render()
45         local dtime = glfw.get_time() - self.last_time
46         self.last_time = glfw.get_time()
47         
48         self:process_input(dtime)
49         
50         gl.clear_color(self.sky)
51         gl.enable("depth test")
52         gl.clear("color", "depth")
53         
54         gl.use_program(self.shaders)    
55         
56         RenderEngine:update_view_matrix()
57         
58         for _, mesh in ipairs(self.Mesh.list) do
59                 mesh:render(dtime)
60         end
61         
62         glfw.swap_buffers(self.window)
63         glfw.poll_events()
64 end
65
66 function RenderEngine:set_sky(htmlcolor)
67         local r, g, b = hex2rgb(htmlcolor)
68         self.sky = {r, g, b, 1.0}
69 end
70
71 function RenderEngine:set_wireframe(v)
72         gl.polygon_mode("front and back", (v and "line" or "fill"))
73 end