]> git.tdb.fi Git - libs/gl.git/blobdiff - source/core/pipelinestate.cpp
Create a class for issuing drawing commands
[libs/gl.git] / source / core / pipelinestate.cpp
index 167e7de05bfb0c629ba08327b72c5a7d3085317d..0d91f759e055bb9d5a7febf80445899f2db59ff0 100644 (file)
@@ -5,6 +5,7 @@
 #include <msp/gl/extensions/arb_shader_objects.h>
 #include <msp/gl/extensions/arb_uniform_buffer_object.h>
 #include <msp/gl/extensions/arb_vertex_array_object.h>
+#include <msp/gl/extensions/msp_primitive_restart.h>
 #include "blend.h"
 #include "buffer.h"
 #include "deviceinfo.h"
@@ -25,6 +26,7 @@ namespace GL {
 
 const PipelineState *PipelineState::last_applied = 0;
 vector<int> PipelineState::bound_tex_targets;
+unsigned PipelineState::restart_index = 0;
 
 PipelineState::PipelineState():
        framebuffer(0),
@@ -198,7 +200,19 @@ void PipelineState::apply(unsigned mask) const
        {
                glBindVertexArray(vertex_setup ? vertex_setup->get_id() : 0);
                if(vertex_setup)
+               {
+                       static Require _req(MSP_primitive_restart);
+
                        vertex_setup->refresh();
+                       unsigned ri = (vertex_setup->get_index_type()==UNSIGNED_INT ? 0xFFFFFFFF : 0xFFFF);
+                       if(ri!=restart_index)
+                       {
+                               if(!restart_index)
+                                       glEnable(GL_PRIMITIVE_RESTART);
+                               glPrimitiveRestartIndex(ri);
+                               restart_index = ri;
+                       }
+               }
        }
 
        if(mask&FACE_CULL)