]> git.tdb.fi Git - libs/gl.git/blobdiff - source/core/mesh.cpp
Avoid incorrect access to VertexSetup while async loading Mesh
[libs/gl.git] / source / core / mesh.cpp
index 981a59e8002c46585f498887da1c32f00429b7ce..467f35448382e4d02744cbc3a6ccf36fef657984 100644 (file)
@@ -9,19 +9,7 @@ using namespace std;
 namespace Msp {
 namespace GL {
 
-Mesh::Mesh(ResourceManager *rm):
-       vbuf(0),
-       ibuf(0),
-       dirty(0),
-       disallow_rendering(false),
-       face_winding(NON_MANIFOLD)
-{
-       if(rm)
-               set_manager(rm);
-}
-
-Mesh::Mesh(const VertexFormat &f, ResourceManager *rm):
-       Mesh(rm)
+Mesh::Mesh(const VertexFormat &f)
 {
        storage(f);
 }
@@ -41,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()
@@ -59,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
@@ -91,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");
@@ -297,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);