X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Frenderer.cpp;h=442728135274576129ff0da16c82531ae9837b07;hb=44ac1183d7a4d54088561cc7ce8fe5f3120c4b35;hp=fd4dc576d09ba12c526a38d0638f9f6437693a25;hpb=99c9abad967dc2925f8603fd0d202d9b6df092ed;p=libs%2Fgl.git diff --git a/source/renderer.cpp b/source/renderer.cpp index fd4dc576..44272813 100644 --- a/source/renderer.cpp +++ b/source/renderer.cpp @@ -5,6 +5,7 @@ #include "material.h" #include "program.h" #include "programdata.h" +#include "renderable.h" #include "renderer.h" #include "texture.h" #include "texturing.h" @@ -22,7 +23,6 @@ Renderer::Renderer(const Camera *c): camera(c), state_stack(1), vertex_array(0), - vertex_array_changed(false), element_buffer(0) { state_stack.reserve(16); @@ -91,7 +91,6 @@ void Renderer::add_shader_data(const ProgramData &d) void Renderer::set_vertex_array(const VertexArray *a) { - vertex_array_changed = (a!=vertex_array); vertex_array = a; } @@ -132,6 +131,22 @@ void Renderer::escape() Buffer::unbind_from(ELEMENT_ARRAY_BUFFER); } +void Renderer::exclude(const Renderable &renderable) +{ + excluded.insert(&renderable); +} + +void Renderer::include(const Renderable &renderable) +{ + excluded.erase(&renderable); +} + +void Renderer::render(const Renderable &renderable, const Tag &tag) +{ + if(!excluded.count(&renderable)) + renderable.render(*this, tag); +} + void Renderer::draw(const Batch &batch) { if(!vertex_array) @@ -139,12 +154,7 @@ void Renderer::draw(const Batch &batch) apply_state(); - // Until VertexArray acquires VAO support and becomes Bindable - if(vertex_array_changed) - { - vertex_array->apply(); - vertex_array_changed = false; - } + vertex_array->apply(); if(element_buffer) element_buffer->bind_to(ELEMENT_ARRAY_BUFFER);