X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fmesh.cpp;h=a8129d9bdc70ec426519f01289f667b8ba39f58f;hb=a40fc85277dba5c34402a0e703d038efd30cc57b;hp=a463ba7fb7c7a1414ee42ed116264d672730f514;hpb=f3ee640033ec6367915b51a3beaf2330f39d75ac;p=libs%2Fgl.git diff --git a/source/mesh.cpp b/source/mesh.cpp index a463ba7f..a8129d9b 100644 --- a/source/mesh.cpp +++ b/source/mesh.cpp @@ -1,7 +1,6 @@ #include #include #include -#include #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::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();