]> git.tdb.fi Git - libs/gl.git/blobdiff - source/render/zsortedscene.h
Check the flat qualifier from the correct member
[libs/gl.git] / source / render / zsortedscene.h
index cb21061bae301db5f7851c54130112d29e04c011..a498164cd6bea37806419ed92b59d6aa5cc01ef2 100644 (file)
@@ -10,46 +10,47 @@ namespace GL {
 
 enum SortOrder
 {
-       FRONT_TO_BACK,
-       BACK_TO_FRONT
+       FRONT_TO_BACK = 0,
+       BACK_TO_FRONT = 1
 };
 
 enum DepthReference
 {
-       CLOSEST,
-       CENTER,
-       FURTHEST
+       CLOSEST = 0,
+       CENTER = 1,
+       FURTHEST = 2
 };
 
 /**
-Sorts renderables by their distance from the camera before rendering.  Requires
-renderables to have a matrix.
+A scene which sorts renderables by their distance from the camera before
+rendering.
+
+Renderables must have valid model matrices to be sorted.  Those without a
+matrix are sorted as closest to the camera.
 */
 class ZSortedScene: public Scene
 {
+public:
+       using Scene::Loader;
+
 private:
        struct SortedRenderable
        {
                Renderable *renderable;
-               bool in_frustum;
-               float depth;
+               bool in_frustum = false;
+               float depth = 0.0f;
 
-               SortedRenderable(Renderable *);
+               SortedRenderable(Renderable *r): renderable(r) { }
 
                bool operator<(const SortedRenderable &o) const { return depth<o.depth; }
        };
 
-       typedef std::set<Renderable *> RenderableSet;
-       typedef std::vector<SortedRenderable> SortedArray;
-
-       RenderableSet renderables;
-       SortOrder order;
-       DepthReference reference;
-       mutable SortedArray sorted_cache;
+       std::vector<Renderable *> content;
+       SortOrder order = BACK_TO_FRONT;
+       DepthReference reference = FURTHEST;
+       mutable std::map<const Camera *, std::vector<SortedRenderable> > sorted_cache;
 
 public:
-       ZSortedScene();
-
        virtual void add(Renderable &);
        virtual void remove(Renderable &);
 
@@ -59,14 +60,10 @@ public:
        /// Sets the reference point for sorting.  Default is furthest from camera.
        void set_reference(DepthReference);
 
-private:
-       void populate_cache() const;
-
-public:
        virtual void setup_frame(Renderer &);
        virtual void finish_frame();
 
-       virtual void render(Renderer &, const Tag & = Tag()) const;
+       virtual void render(Renderer &, Tag = Tag()) const;
 };
 
 } // namespace GL