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);
}
vertices.set_format(fmt);
vtx_setup.set_format(fmt);
+ if(vbuf)
+ vtx_setup.set_vertex_array(vertices);
}
void Mesh::clear()
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
}
}
-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");
}
-Mesh::Loader::Loader(Mesh &m, bool g):
- DataFile::ObjectLoader<Mesh>(m),
- allow_gl_calls(g)
+Mesh::Loader::Loader(Mesh &m):
+ DataFile::ObjectLoader<Mesh>(m)
{
add("batch", &Loader::batch);
add("storage", &Loader::storage);
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);
{
// TODO use correct filename
DataFile::Parser parser(io, "async");
- Loader loader(mesh, false);
+ Loader loader(mesh);
+ loader.allow_gl_calls = false;
loader.load(parser);
}
else if(phase==1)