#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"
#include "error.h"
#include "mesh.h"
renderer.draw(*i);
}
+void Mesh::draw_instanced(Renderer &renderer, const VertexSetup &vs, unsigned count) const
+{
+ if(vs.get_vertex_array()!=&vertices)
+ throw invalid_argument("Mesh::draw_instanced");
+
+ if(manager)
+ {
+ manager->resource_used(*this);
+ if(disallow_rendering)
+ return;
+ }
+
+ renderer.set_vertex_setup(&vs);
+ renderer.set_winding_test(winding);
+
+ for(vector<Batch>::const_iterator i=batches.begin(); i!=batches.end(); ++i)
+ renderer.draw_instanced(*i, count);
+}
+
void Mesh::bind() const
{
/* If VAOs are not supported, vtx_setup is zero and set_current won't get
if(!vtx_setup)
{
unbind();
- vertices.apply(false);
+ vertices.apply();
}
else if(set_current(this))
{
index_updater(0),
phase(0)
{
- // Make sure the extension is initialized in the rendering thread.
- (void)(bool)NV_primitive_restart;
-
mesh.disallow_rendering = true;
if(mesh.defer_buffers)
mesh.create_buffers();