storage(f);
}
+Mesh::Mesh(Mesh &&other):
+ Resource(move(other)),
+ vertices(move(other.vertices)),
+ batches(move(other.batches)),
+ vbuf(other.vbuf),
+ ibuf(other.ibuf),
+ vtx_setup(move(other.vtx_setup)),
+ dirty(other.dirty),
+ disallow_rendering(other.disallow_rendering),
+ face_winding(other.face_winding),
+ debug_name(move(other.debug_name))
+{
+ other.vbuf = 0;
+ other.ibuf = 0;
+}
+
Mesh::~Mesh()
{
set_manager(0);
return vertices.modify(i);
}
-void Mesh::add_batch(const Batch &b)
+void Mesh::add_batch(Batch &&b)
{
if(batches.empty())
{
- batches.push_back(b);
+ batches.emplace_back(move(b));
if(ibuf)
batches.back().use_buffer(ibuf);
}
}
Batch *prev = &batches.back();
- batches.push_back(b);
+ batches.emplace_back(move(b));
if(reallocate)
{
prev = 0;
void Mesh::resize_buffers() const
{
if(dirty&VERTEX_BUFFER)
- vbuf->storage(vertices.get_required_buffer_size());
+ vbuf->storage(vertices.get_required_buffer_size(), STATIC);
if((dirty&INDEX_BUFFER) && !batches.empty())
- ibuf->storage(batches.front().get_required_buffer_size());
+ ibuf->storage(batches.front().get_required_buffer_size(), STATIC);
dirty = 0;
}
}
-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);
{
Batch btc(p);
load_sub(btc);
- obj.add_batch(btc);
+ obj.add_batch(move(btc));
}
{
// 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)