X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Frenderer.cpp;h=46df5bf52777564ea62b9d995693c57f7e0d5fa9;hb=6c2cb15dca6c24642f5026b06e6168c0d820355f;hp=bfd446e9f42ccc30aa47306d26f6d535fe1b4ea9;hpb=90a26a1740d5843b60d07d9c39d8567bfed5189c;p=libs%2Fgl.git diff --git a/source/renderer.cpp b/source/renderer.cpp index bfd446e9..46df5bf5 100644 --- a/source/renderer.cpp +++ b/source/renderer.cpp @@ -16,6 +16,7 @@ Distributed under the LGPL #include "texture.h" #include "texturing.h" #include "vertexarray.h" +#include "windingtest.h" using namespace std; @@ -54,6 +55,7 @@ Renderer::~Renderer() Material::unbind(); Program::unbind(); Buffer::unbind_from(ELEMENT_ARRAY_BUFFER); + WindingTest::unbind(); } void Renderer::set_texture(const Texture *t) @@ -101,6 +103,11 @@ void Renderer::set_element_buffer(const Buffer *b) element_buffer = b; } +void Renderer::set_winding_test(const WindingTest *w) +{ + state->winding_test = w; +} + void Renderer::push_state() { state_stack.push_back(state_stack.back()); @@ -134,7 +141,10 @@ void Renderer::draw(const Batch &batch) // Until VertexArray acquires VAO support and becomes Bindable if(vertex_array_changed) + { vertex_array->apply(); + vertex_array_changed = false; + } if(element_buffer) element_buffer->bind_to(ELEMENT_ARRAY_BUFFER); @@ -173,6 +183,11 @@ void Renderer::apply_state() else Program::unbind(); + if(state->winding_test) + state->winding_test->bind(); + else + WindingTest::unbind(); + if(mtx_changed) { MatrixStack::modelview() = mtx_stack.top(); @@ -185,7 +200,8 @@ Renderer::State::State(): texture(0), texturing(0), material(0), - shprog(0) + shprog(0), + winding_test(0) { }