1 local Mesh = Dragonblocks.create_class()
8 function Mesh:set_size(size)
12 function Mesh:set_pos(pos)
16 function Mesh:set_texture(texture)
17 self.textures = {texture}
20 function Mesh:set_effect(effect, after)
23 (effect == Mesh.EFFECT_GROW) and RenderEngine.mesh_effect_grow_time
25 (effect == Mesh.EFFECT_FLYIN) and RenderEngine.mesh_effect_flyin_time
26 self.after_effect = after
29 function Mesh:add_to_scene()
31 self.created = glfw.get_time()
33 table.insert(Mesh.list, self)
36 function Mesh:remove_from_scene()
37 local i = table.indexof(Mesh.list, self)
39 table.remove(Mesh.list, i)
43 function Mesh:apply_vertices(vertices)
44 self.vertex_blob_count = #vertices / 5 / self.vertex_blob_size
46 self.vao = gl.gen_vertex_arrays(1)
47 self.vbo = gl.gen_buffers(1)
49 gl.bind_vertex_array(self.vao)
51 gl.bind_buffer("array", self.vbo)
52 gl.buffer_data("array", gl.pack("float", vertices), "static draw")
54 local fsize = gl.sizeof("float")
56 local stride = 5 * fsize
58 gl.vertex_attrib_pointer(0, 3, "float", false, stride, 0)
59 gl.enable_vertex_attrib_array(0)
60 gl.vertex_attrib_pointer(1, 2, "float", false, stride, 3 * fsize)
61 gl.enable_vertex_attrib_array(1)
63 gl.unbind_buffer("array")
64 gl.unbind_vertex_array()
69 function Mesh:render(dtime)
70 local pos, size = self.pos, self.size
73 if self.effect_lasts then
74 self.effect_lasts = self.effect_lasts - dtime
75 if self.effect_lasts < 0 then
76 if self.after_effect then
80 self.effect_lasts = nil
81 self.after_effect = nil
85 if self.effect == Mesh.EFFECT_GROW then
86 size = size * math.pow(1 - self.effect_lasts / RenderEngine.mesh_effect_grow_time, 1)
87 elseif self.effect == Mesh.EFFECT_FLYIN then
88 pos = pos - glm.vec3(0, RenderEngine.mesh_effect_flyin_offset * self.effect_lasts / RenderEngine.mesh_effect_flyin_time, 0)
94 local model_matrix = 1
98 gl.uniform_matrix4f(gl.get_uniform_location(RenderEngine.shaders, "model"), true, model_matrix)
100 gl.bind_vertex_array(self.vao)
101 for i = 1, self.vertex_blob_count do
102 gl.bind_texture("2d", self.textures[i])
103 gl.draw_arrays("triangles", (i - 1) * self.vertex_blob_size, self.vertex_blob_size)
105 gl.unbind_vertex_array()
106 gl.unbind_texture("2d")