]> git.tdb.fi Git - libs/gl.git/blobdiff - source/render/zsortedscene.cpp
Use a sorted vector in place of set for small data
[libs/gl.git] / source / render / zsortedscene.cpp
index dd5f1f3ac701f727cd81b67b44f153eaa99d6282..af3c5b86140823968a12cc19cf36a747fe3b5c1c 100644 (file)
@@ -1,3 +1,4 @@
+#include <msp/core/algorithm.h>
 #include "camera.h"
 #include "renderer.h"
 #include "zsortedscene.h"
@@ -9,14 +10,23 @@ namespace GL {
 
 void ZSortedScene::add(Renderable &r)
 {
-       if(renderables.insert(&r).second && !sorted_cache.empty())
-               sorted_cache.push_back(&r);
+       auto i = lower_bound(renderables, &r);
+       if(i==renderables.end() || *i!=&r)
+       {
+               renderables.insert(i, &r);
+               if(!sorted_cache.empty())
+                       sorted_cache.push_back(&r);
+       }
 }
 
 void ZSortedScene::remove(Renderable &r)
 {
-       renderables.erase(&r);
-       sorted_cache.clear();
+       auto i = lower_bound(renderables, &r);
+       if(i!=renderables.end() && *i==&r)
+       {
+               renderables.erase(i);
+               sorted_cache.clear();
+       }
 }
 
 void ZSortedScene::set_order(SortOrder o)