]> git.tdb.fi Git - libs/gl.git/blobdiff - source/render/simplescene.cpp
Check the flat qualifier from the correct member
[libs/gl.git] / source / render / simplescene.cpp
index bcc4af21dc1779f086348c1b054883733cf01425..e78b4709b49be463b6c8eed8b8d505e3b73d1323 100644 (file)
@@ -1,3 +1,5 @@
+#include <msp/core/algorithm.h>
+#include "camera.h"
 #include "renderer.h"
 #include "simplescene.h"
 
@@ -6,52 +8,42 @@ 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(content, &r);
+       if(i==content.end() || *i!=&r)
+               content.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(content, &r);
+       if(i!=content.end())
+               content.erase(i);
 }
 
 void SimpleScene::setup_frame(Renderer &renderer)
 {
-       populate_cache();
-       for(Renderable *r: cache)
+       for(Renderable *r: content)
                r->setup_frame(renderer);
 }
 
 void SimpleScene::finish_frame()
 {
-       for(Renderable *r: cache)
+       for(Renderable *r: content)
                r->finish_frame();
 }
 
 void SimpleScene::render(Renderer &renderer, Tag tag) const
 {
-       populate_cache();
-       if(setup_frustum(renderer))
+       if(const Camera *camera = renderer.get_camera())
        {
-               for(Renderable *r: cache)
-                       if(!frustum_cull(*r))
-                               renderer.render(*r, tag);
+               for(Renderable *r: content)
+                       if(camera->is_in_frustum(*r))
+                               r->render(renderer, tag);
        }
        else
        {
-               for(Renderable *r: cache)
-                       renderer.render(*r, tag);
+               for(Renderable *r: content)
+                       r->render(renderer, tag);
        }
 }