#include <msp/gl/extensions/arb_vertex_array_object.h>
+#include <msp/gl/extensions/arb_vertex_buffer_object.h>
#include <msp/gl/extensions/arb_vertex_shader.h>
#include <msp/gl/extensions/nv_primitive_restart.h>
#include "buffer.h"
vbuf = 0;
ibuf = 0;
vao_id = 0;
- defer_buffers = true;
+ defer_buffers = ARB_vertex_buffer_object;
dirty = true;
+ disallow_rendering = false;
winding = 0;
if(rm)
Mesh::~Mesh()
{
+ set_manager(0);
delete vbuf;
delete ibuf;
if(vao_id)
if(!current())
vertices.apply();
- Bind bind_ibuf(ibuf, ELEMENT_ARRAY_BUFFER);
+ BindRestore bind_ibuf(ibuf, ELEMENT_ARRAY_BUFFER);
Bind bind_winding(winding);
for(list<Batch>::const_iterator i=batches.begin(); i!=batches.end(); ++i)
}
renderer.set_mesh(this);
- renderer.set_element_buffer(ibuf);
renderer.set_winding_test(winding);
for(list<Batch>::const_iterator i=batches.begin(); i!=batches.end(); ++i)
if(!vao_id)
{
unbind();
- vertices.apply();
+ vertices.apply(false);
}
else if(set_current(this))
{
glBindVertexArray(0);
}
-Resource::AsyncLoader *Mesh::load(IO::Seekable &io)
+Resource::AsyncLoader *Mesh::load(IO::Seekable &io, const Resources *)
{
return new AsyncLoader(*this, io);
}
phase(0)
{
// Make sure the extension is initialized in the rendering thread.
- (bool)NV_primitive_restart;
+ (void)(bool)NV_primitive_restart;
mesh.disallow_rendering = true;
if(mesh.defer_buffers)
Mesh::AsyncLoader::~AsyncLoader()
{
mesh.disallow_rendering = false;
+ delete vertex_updater;
+ delete index_updater;
}
bool Mesh::AsyncLoader::needs_sync() const
else if(phase==3)
{
delete vertex_updater;
+ vertex_updater = 0;
delete index_updater;
+ index_updater = 0;
}
++phase;