X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fmesh.cpp;h=dba8a9915489aede7906f8a684b9d59e288428b5;hp=3569e1c38badaac3a1f705769bfd4e6e625ff3e0;hb=bec07999d95b76f4b47cffcc564d0cd0afc0435e;hpb=5f78db03b3285c977760a41da1e3927720e50352 diff --git a/source/mesh.cpp b/source/mesh.cpp index 3569e1c3..dba8a991 100644 --- a/source/mesh.cpp +++ b/source/mesh.cpp @@ -40,6 +40,7 @@ void Mesh::init(ResourceManager *rm) Mesh::~Mesh() { set_manager(0); + batches.clear(); delete vbuf; delete ibuf; } @@ -54,35 +55,28 @@ void Mesh::check_buffers(unsigned mask) { if(mask&VERTEX_BUFFER) { - if(!vbuf) + unsigned req_size = vertices.get_required_buffer_size(); + if(!vbuf || (vbuf->get_size()>0 && vbuf->get_size()get_size()get_size()>0 && ibuf->get_size()get_size()data(vertices.get_required_buffer_size(), 0); + vbuf->storage(vertices.get_required_buffer_size()); if(dirty&INDEX_BUFFER) - ibuf->data(batches.front().get_required_buffer_size(), 0); + ibuf->storage(batches.front().get_required_buffer_size()); dirty = 0; } @@ -215,8 +209,9 @@ void Mesh::unload() } -Mesh::Loader::Loader(Mesh &m): - DataFile::ObjectLoader(m) +Mesh::Loader::Loader(Mesh &m, bool g): + DataFile::ObjectLoader(m), + allow_gl_calls(g) { add("batch", &Loader::batch); add("vertices", &Loader::vertices); @@ -233,7 +228,11 @@ void Mesh::Loader::vertices(const vector &c) fmt = (fmt, *i); obj.vertices.reset(fmt); load_sub(obj.vertices); - obj.check_buffers(VERTEX_BUFFER); + if(allow_gl_calls) + { + obj.check_buffers(VERTEX_BUFFER); + obj.vtx_setup.refresh(); + } } void Mesh::Loader::batch(PrimitiveType p) @@ -281,12 +280,13 @@ bool Mesh::AsyncLoader::process() { // TODO use correct filename DataFile::Parser parser(io, "async"); - Loader loader(mesh); + Loader loader(mesh, false); loader.load(parser); } else if(phase==1) { mesh.resize_buffers(); + mesh.vtx_setup.refresh(); vertex_updater = mesh.vertices.refresh_async(); if(!mesh.batches.empty()) index_updater = mesh.batches.front().refresh_async();