-#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/khr_debug.h>
#include "buffer.h"
#include "error.h"
#include "mesh.h"
#include "renderer.h"
#include "resourcemanager.h"
-#include "vertexsetup.h"
using namespace std;
namespace Msp {
namespace GL {
-Mesh::Mesh(ResourceManager *rm)
+Mesh::Mesh(const VertexFormat &f)
{
- init(rm);
-}
-
-Mesh::Mesh(const VertexFormat &f, ResourceManager *rm)
-{
- init(rm);
storage(f);
}
-void Mesh::init(ResourceManager *rm)
-{
- vbuf = 0;
- ibuf = 0;
- dirty = 0;
- disallow_rendering = false;
- face_winding = NON_MANIFOLD;
-
- if(rm)
- set_manager(rm);
-}
-
Mesh::~Mesh()
{
set_manager(0);
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::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);