buffer allocation
[demo] / src / opengl / mesh-gl.cc
index f0956b4..531ac78 100644 (file)
@@ -69,10 +69,15 @@ MeshGL::~MeshGL()
 
        vertices.clear();
        normals.clear();
+       tex_coords.clear();
+       indices.clear();
 }
 
 void MeshGL::draw() const
 {
+       if(!vdata_valid) {
+               ((MeshGL *)this)->update_vertex_data();
+       }
        glBindVertexArray(vao);
 
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);
@@ -90,12 +95,11 @@ void MeshGL::draw_normals(float scale) const
 
                glGenBuffers(1, &nvbo);
                glBindBuffer(GL_ARRAY_BUFFER, nvbo);
-               
+
                glBufferData(GL_ARRAY_BUFFER, normals.size() * sizeof(Vec3) * 2, 0, GL_STATIC_DRAW);
                Vec3 *data = (Vec3 *)glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
 
-               for (size_t i = 0; i < normals.size(); i++)
-               {
+               for(size_t i = 0; i < normals.size(); i++) {
                        *data++ = vertices[i];
                        *data++ = vertices[i] + normals[i] * scale;
                }
@@ -104,7 +108,8 @@ void MeshGL::draw_normals(float scale) const
                glVertexAttribPointer(MESH_VERTEX, 3, GL_FLOAT, GL_FALSE, sizeof(Vec3), 0);
                glEnableVertexAttribArray(MESH_VERTEX);
                glBindBuffer(GL_ARRAY_BUFFER, 0);
-       } else {
+       }
+       else {
                glBindVertexArray(nvao);
        }
 
@@ -112,9 +117,10 @@ void MeshGL::draw_normals(float scale) const
        glBindVertexArray(0);
 }
 
-void MeshGL::update_vertex_data()
+bool MeshGL::update_vertex_data()
 {
        update_vbo();
+       return true;
 }
 
 void MeshGL::update_vbo()
@@ -201,11 +207,11 @@ void MeshGL::destroy_vbo()
                glDeleteBuffers(1, &vbo_tex_coords);
        if(ibo)
                glDeleteBuffers(1, &ibo);
-       if (vao)
+       if(vao)
                glDeleteVertexArrays(1, &vao);
 
        if(nvbo)
                glDeleteBuffers(1, &nvbo);
        if(nvao)
                glDeleteVertexArrays(1, &nvao);
-}
\ No newline at end of file
+}