X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Frender%2Foccludedscene.cpp;h=0d8a5b857698d17d3a67e91e2367d674424eec05;hb=42c44db6aa2961cffea6263f337adbd9d161c59c;hp=5d85b5d5bf762d43f056d114e383cd613ef67198;hpb=0fa506250545acb83bc86f1734826544d6f1eda6;p=libs%2Fgl.git diff --git a/source/render/occludedscene.cpp b/source/render/occludedscene.cpp index 5d85b5d5..0d8a5b85 100644 --- a/source/render/occludedscene.cpp +++ b/source/render/occludedscene.cpp @@ -1,4 +1,4 @@ -#include +#include #include "camera.h" #include "mesh.h" #include "occludedscene.h" @@ -21,14 +21,22 @@ OccludedScene::OccludedScene(): void OccludedScene::add(Renderable &r) { - renderables.insert(&r); - cache_dirty = true; + auto i = lower_bound(content, &r); + if(i==content.end() || *i!=&r) + { + content.insert(i, &r); + cache_dirty = true; + } } void OccludedScene::remove(Renderable &r) { - renderables.erase(&r); - cache_dirty = true; + auto i = lower_bound(content, &r); + if(i!=content.end() && *i==&r) + { + content.erase(i); + cache_dirty = true; + } } void OccludedScene::populate_cache() const @@ -36,13 +44,13 @@ void OccludedScene::populate_cache() const if(!cache_dirty) return; - if(queries.get_size()renderable = r; for(; j!=occluded_cache.end(); ++j) { @@ -68,7 +76,7 @@ void OccludedScene::finish_frame() void OccludedScene::render(Renderer &renderer, Tag tag) const { - if(renderables.empty()) + if(content.empty()) return; populate_cache(); @@ -111,7 +119,7 @@ void OccludedScene::render(Renderer &renderer, Tag tag) const } // Move all objects within the frustum to the beginning of the array - for(auto i=occluded_cache.begin(), j=i+renderables.size()-1; i!=j; ) + for(auto i=occluded_cache.begin(), j=i+content.size()-1; i!=j; ) { if(i->in_frustum) ++i;