]> git.tdb.fi Git - libs/gl.git/blobdiff - source/zsortedscene.h
Use a persistent sorted array in ZSortedScene
[libs/gl.git] / source / zsortedscene.h
index f9f6f7eed40bd9cfa527540c5417c6fbce3ae75e..5c876697cae9ee3a878c42be2fc48156471ee9ce 100644 (file)
@@ -23,25 +23,34 @@ enum DepthReference
 Sorts renderables by their distance from the camera before rendering.  Requires
 renderables to have a matrix.
 */
-class ZSortedScene: public SimpleScene
+class ZSortedScene: public Scene
 {
 private:
-       struct DepthRenderable
+       struct SortedRenderable
        {
+               bool in_frustum;
                float depth;
                const Renderable *renderable;
 
-               DepthRenderable(float, const Renderable *);
+               SortedRenderable(const Renderable *);
 
-               bool operator<(const DepthRenderable &o) const { return depth<o.depth; }
+               bool operator<(const SortedRenderable &o) const { return depth<o.depth; }
        };
 
+       typedef std::set<const Renderable *> RenderableSet;
+       typedef std::vector<SortedRenderable> SortedArray;
+
+       RenderableSet renderables;
        SortOrder order;
        DepthReference reference;
+       mutable SortedArray sorted_cache;
 
 public:
        ZSortedScene();
 
+       virtual void add(const Renderable &);
+       virtual void remove(const Renderable &);
+
        /// Sets the sort order.  Default is back to front.
        void set_order(SortOrder);