X-Git-Url: http://git.mutantstargoat.com?a=blobdiff_plain;f=src%2Fopengl%2Fmesh-gl.cc;h=531ac7888181513e6d7ff348ff4cf976590df53e;hb=d90ed8aef9e3547eee75ad793c352ee022d35050;hp=f0956b4470295a593c9b6feef30ed3d7b3a2f8fd;hpb=243eb502c5dc70e586a9e81815234069bf623480;p=demo diff --git a/src/opengl/mesh-gl.cc b/src/opengl/mesh-gl.cc index f0956b4..531ac78 100644 --- a/src/opengl/mesh-gl.cc +++ b/src/opengl/mesh-gl.cc @@ -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 +}