]> git.tdb.fi Git - libs/gl.git/blobdiff - source/mesh.cpp
Remove support for legacy OpenGL features
[libs/gl.git] / source / mesh.cpp
index a463ba7fb7c7a1414ee42ed116264d672730f514..a8129d9bdc70ec426519f01289f667b8ba39f58f 100644 (file)
@@ -1,7 +1,6 @@
 #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"
@@ -175,6 +174,25 @@ void Mesh::draw(Renderer &renderer) const
                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
@@ -182,7 +200,7 @@ void Mesh::bind() const
        if(!vtx_setup)
        {
                unbind();
-               vertices.apply(false);
+               vertices.apply();
        }
        else if(set_current(this))
        {
@@ -271,9 +289,6 @@ Mesh::AsyncLoader::AsyncLoader(Mesh &m, IO::Seekable &i):
        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();