]> git.tdb.fi Git - libs/gl.git/blobdiff - source/renderer.cpp
Add vertex setup state to Renderer
[libs/gl.git] / source / renderer.cpp
index 19811146235ec6622c0917a1536190490597bff8..c213f0a987218f579fbc4991fc6722bece0e083a 100644 (file)
@@ -14,6 +14,7 @@
 #include "texturing.h"
 #include "texunit.h"
 #include "vertexarray.h"
 #include "texturing.h"
 #include "texunit.h"
 #include "vertexarray.h"
+#include "vertexsetup.h"
 #include "windingtest.h"
 
 using namespace std;
 #include "windingtest.h"
 
 using namespace std;
@@ -142,6 +143,11 @@ void Renderer::set_mesh(const Mesh *m)
        state->mesh = m;
 }
 
        state->mesh = m;
 }
 
+void Renderer::set_vertex_setup(const VertexSetup *vs)
+{
+       state->vertex_setup = vs;
+}
+
 void Renderer::set_winding_test(const WindingTest *w)
 {
        state->winding_test = w;
 void Renderer::set_winding_test(const WindingTest *w)
 {
        state->winding_test = w;
@@ -221,6 +227,7 @@ void Renderer::end()
        Lighting::unbind();
        Clipping::unbind();
        Program::unbind();
        Lighting::unbind();
        Clipping::unbind();
        Program::unbind();
+       VertexSetup::unbind();
        Buffer::unbind_from(ELEMENT_ARRAY_BUFFER);
        WindingTest::unbind();
 
        Buffer::unbind_from(ELEMENT_ARRAY_BUFFER);
        WindingTest::unbind();
 
@@ -374,8 +381,15 @@ void Renderer::apply_state()
                        state->mesh->bind();
        }
        else
                        state->mesh->bind();
        }
        else
+       {
                Mesh::unbind();
 
                Mesh::unbind();
 
+               if(state->vertex_setup)
+                       state->vertex_setup->bind();
+               else
+                       VertexSetup::unbind();
+       }
+
        if(state->winding_test)
        {
                if(state->reverse_winding)
        if(state->winding_test)
        {
                if(state->reverse_winding)
@@ -421,6 +435,7 @@ Renderer::State::State():
        shprog(0),
        shdata_count(0),
        mesh(0),
        shprog(0),
        shdata_count(0),
        mesh(0),
+       vertex_setup(0),
        winding_test(0),
        reverse_winding(false)
 { }
        winding_test(0),
        reverse_winding(false)
 { }