1 local Mesh = Dragonblocks.create_class()
6 Mesh.CUBE = RenderEngine:run("cube")
9 function Mesh:set_size(size)
13 function Mesh:set_pos(pos)
17 function Mesh:set_texture(texture)
18 self.texture = texture
21 function Mesh:set_effect(effect, after)
24 (effect == Mesh.EFFECT_GROW) and RenderEngine.mesh_effect_grow_time
26 (effect == Mesh.EFFECT_FLYIN) and RenderEngine.mesh_effect_flyin_time
27 self.after_effect = after
30 function Mesh:add_to_scene()
32 self.created = glfw.get_time()
34 table.insert(Mesh.list, self)
37 function Mesh:remove_from_scene()
38 local i = table.indexof(Mesh.list, self)
40 table.remove(Mesh.list, i)
44 function Mesh:make_cube()
45 self:apply_vertices(Mesh.CUBE)
48 function Mesh:apply_vertices(vertices)
49 self.vao = gl.gen_vertex_arrays(1)
50 self.vbo = gl.gen_buffers(1)
52 gl.bind_vertex_array(self.vao)
54 gl.bind_buffer("array", self.vbo)
55 gl.buffer_data("array", gl.pack("float", vertices), "static draw")
57 local fsize = gl.sizeof("float")
59 local stride = 5 * fsize
61 gl.vertex_attrib_pointer(0, 3, "float", false, stride, 0)
62 gl.enable_vertex_attrib_array(0)
63 gl.vertex_attrib_pointer(1, 2, "float", false, stride, 3 * fsize)
64 gl.enable_vertex_attrib_array(1)
66 gl.unbind_buffer("array")
67 gl.unbind_vertex_array()
72 function Mesh:render(dtime)
73 local pos, size = self.pos, self.size
76 if self.effect_lasts then
77 self.effect_lasts = self.effect_lasts - dtime
78 if self.effect_lasts < 0 then
79 if self.after_effect then
83 self.effect_lasts = nil
84 self.after_effect = nil
88 if self.effect == Mesh.EFFECT_GROW then
89 size = size * math.pow(1 - self.effect_lasts / RenderEngine.mesh_effect_grow_time, 1)
90 elseif self.effect == Mesh.EFFECT_FLYIN then
91 pos = pos - glm.vec3(0, RenderEngine.mesh_effect_flyin_offset * self.effect_lasts / RenderEngine.mesh_effect_flyin_time, 0)
97 local model_matrix = 1
101 gl.uniform_matrix4f(gl.get_uniform_location(RenderEngine.shaders, "model"), true, model_matrix)
103 gl.bind_texture("2d", self.texture)
104 gl.bind_vertex_array(self.vao)
105 gl.draw_arrays("triangles", 0, 36)
106 gl.unbind_vertex_array()
107 gl.unbind_texture("2d")