]> git.tdb.fi Git - libs/gl.git/blobdiff - source/renderer.cpp
Add WindingTest and support for it in Mesh and Renderer
[libs/gl.git] / source / renderer.cpp
index bfd446e9f42ccc30aa47306d26f6d535fe1b4ea9..2680d9022e9edcfe128cffec1ba246397902cd72 100644 (file)
@@ -16,6 +16,7 @@ Distributed under the LGPL
 #include "texture.h"
 #include "texturing.h"
 #include "vertexarray.h"
+#include "windingtest.h"
 
 using namespace std;
 
@@ -30,7 +31,8 @@ Renderer::Renderer(const Camera *c):
        state(&state_stack.back()),
        vertex_array(0),
        vertex_array_changed(false),
-       element_buffer(0)
+       element_buffer(0),
+       winding_test(0)
 {
        MatrixStack::modelview().push();
        if(camera)
@@ -101,6 +103,11 @@ void Renderer::set_element_buffer(const Buffer *b)
        element_buffer = b;
 }
 
+void Renderer::set_winding_test(const WindingTest *w)
+{
+       winding_test = w;
+}
+
 void Renderer::push_state()
 {
        state_stack.push_back(state_stack.back());
@@ -123,6 +130,7 @@ void Renderer::escape()
 {
        apply_state();
        Buffer::unbind_from(ELEMENT_ARRAY_BUFFER);
+       WindingTest::unbind();
 }
 
 void Renderer::draw(const Batch &batch)
@@ -141,6 +149,11 @@ void Renderer::draw(const Batch &batch)
        else
                Buffer::unbind_from(ELEMENT_ARRAY_BUFFER);
 
+       if(winding_test)
+               winding_test->bind();
+       else
+               WindingTest::unbind();
+
        batch.draw();
 }