]> git.tdb.fi Git - libs/gl.git/blobdiff - source/render/simplescene.cpp
Use a sorted vector in place of set for small data
[libs/gl.git] / source / render / simplescene.cpp
index 4ddbeca6732d78a90695cb76833ae8b8b2dd037c..fbdb004f9a0e8f8917b5ae42a8a2554d84b54d22 100644 (file)
@@ -1,3 +1,4 @@
+#include <msp/core/algorithm.h>
 #include "renderer.h"
 #include "simplescene.h"
 
@@ -6,51 +7,41 @@ namespace GL {
 
 void SimpleScene::add(Renderable &r)
 {
-       // Add to cache as well if the cache is valid
-       if(renderables.insert(&r).second && !cache.empty())
-               cache.push_back(&r);
+       auto i = lower_bound(renderables, &r);
+       if(i==renderables.end() || *i!=&r)
+               renderables.insert(i, &r);
 }
 
 void SimpleScene::remove(Renderable &r)
 {
-       renderables.erase(&r);
-       cache.clear();
-}
-
-void SimpleScene::populate_cache() const
-{
-       if(cache.empty() && !renderables.empty())
-       {
-               cache.reserve(renderables.size());
-               cache.insert(cache.end(), renderables.begin(), renderables.end());
-       }
+       auto i = find(renderables, &r);
+       if(i!=renderables.end())
+               renderables.erase(i);
 }
 
 void SimpleScene::setup_frame(Renderer &renderer)
 {
-       populate_cache();
-       for(Renderable *r: cache)
+       for(Renderable *r: renderables)
                r->setup_frame(renderer);
 }
 
 void SimpleScene::finish_frame()
 {
-       for(Renderable *r: cache)
+       for(Renderable *r: renderables)
                r->finish_frame();
 }
 
 void SimpleScene::render(Renderer &renderer, Tag tag) const
 {
-       populate_cache();
        if(setup_frustum(renderer))
        {
-               for(Renderable *r: cache)
+               for(Renderable *r: renderables)
                        if(!frustum_cull(*r))
                                r->render(renderer, tag);
        }
        else
        {
-               for(Renderable *r: cache)
+               for(Renderable *r: renderables)
                        r->render(renderer, tag);
        }
 }