X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Frender%2Foccludedscene.cpp;h=bfe17349fd13ee836234c9297ec5476e6039d9f7;hb=be6ffe96ecb4707599fe1a6f620c348760213d46;hp=edd45c47ac81f855f06e826c1daf95a6ee536524;hpb=8323eb754769cb6db7e02f4226cc9eedc5e614cf;p=libs%2Fgl.git diff --git a/source/render/occludedscene.cpp b/source/render/occludedscene.cpp index edd45c47..bfe17349 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(renderables, &r); + if(i==renderables.end() || *i!=&r) + { + renderables.insert(i, &r); + cache_dirty = true; + } } void OccludedScene::remove(Renderable &r) { - renderables.erase(&r); - cache_dirty = true; + auto i = lower_bound(renderables, &r); + if(i!=renderables.end() && *i==&r) + { + renderables.erase(i); + cache_dirty = true; + } } void OccludedScene::populate_cache() const @@ -77,7 +85,7 @@ void OccludedScene::render(Renderer &renderer, Tag tag) const if(!camera) { for(const OccludedRenderable &o: occluded_cache) - renderer.render(*o.renderable, tag); + o.renderable->render(renderer, tag); return; } @@ -107,7 +115,7 @@ void OccludedScene::render(Renderer &renderer, Tag tag) const i->occluder = true; if(i->occluder) - renderer.render(*i->renderable, tag); + i->renderable->render(renderer, tag); } // Move all objects within the frustum to the beginning of the array @@ -145,7 +153,7 @@ void OccludedScene::render(Renderer &renderer, Tag tag) const // Render anything that has a chance of being visible for(auto i=occluded_cache.begin(); (i!=occluded_cache.end() && i->in_frustum); ++i) if(!i->occluder && queries.get_result(i-occluded_cache.begin())) - renderer.render(*i->renderable, tag); + i->renderable->render(renderer, tag); } } // namespace GL