X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcore%2Fmesh.cpp;h=467f35448382e4d02744cbc3a6ccf36fef657984;hb=8092f757684a97e338794525b52a1154bd996e0e;hp=1e811b5b2b135725db55ebb54f7bd2e9909afb5b;hpb=ef650a483b4201a1e9727f9a86e59894344d30e8;p=libs%2Fgl.git diff --git a/source/core/mesh.cpp b/source/core/mesh.cpp index 1e811b5b..467f3544 100644 --- a/source/core/mesh.cpp +++ b/source/core/mesh.cpp @@ -9,16 +9,7 @@ using namespace std; namespace Msp { namespace GL { -Mesh::Mesh(): - vbuf(0), - ibuf(0), - dirty(0), - disallow_rendering(false), - face_winding(NON_MANIFOLD) -{ } - -Mesh::Mesh(const VertexFormat &f): - Mesh() +Mesh::Mesh(const VertexFormat &f) { storage(f); } @@ -38,6 +29,8 @@ void Mesh::storage(const VertexFormat &fmt) vertices.set_format(fmt); vtx_setup.set_format(fmt); + if(vbuf) + vtx_setup.set_vertex_array(vertices); } void Mesh::clear() @@ -56,7 +49,8 @@ void Mesh::check_buffers(unsigned mask) delete vbuf; vbuf = new Buffer; vertices.use_buffer(vbuf); - vtx_setup.set_vertex_array(vertices); + if(!vertices.get_format().empty()) + vtx_setup.set_vertex_array(vertices); dirty |= VERTEX_BUFFER; #ifdef DEBUG @@ -88,12 +82,12 @@ void Mesh::check_buffers(unsigned mask) } } -unsigned Mesh::get_n_vertices() const +size_t Mesh::get_n_vertices() const { return vertices.size(); } -char *Mesh::modify_vertex(unsigned i) +char *Mesh::modify_vertex(size_t i) { if(vertices.get_format().empty()) throw invalid_operation("Mesh::modify_vertex"); @@ -294,10 +288,7 @@ void Mesh::Loader::batch(PrimitiveType p) Mesh::AsyncLoader::AsyncLoader(Mesh &m, IO::Seekable &i): mesh(m), - io(i), - vertex_updater(0), - index_updater(0), - phase(0) + io(i) { mesh.disallow_rendering = true; mesh.check_buffers(VERTEX_BUFFER|INDEX_BUFFER);