]> git.tdb.fi Git - libs/gl.git/blobdiff - source/zsortedscene.h
Support the sample sampling qualifier
[libs/gl.git] / source / zsortedscene.h
index 5c876697cae9ee3a878c42be2fc48156471ee9ce..cb21061bae301db5f7851c54130112d29e04c011 100644 (file)
@@ -1,7 +1,9 @@
 #ifndef MSP_GL_ZSORTEDSCENE_H_
 #define MSP_GL_ZSORTEDSCENE_H_
 
-#include "simplescene.h"
+#include <set>
+#include <vector>
+#include "scene.h"
 
 namespace Msp {
 namespace GL {
@@ -28,16 +30,16 @@ class ZSortedScene: public Scene
 private:
        struct SortedRenderable
        {
+               Renderable *renderable;
                bool in_frustum;
                float depth;
-               const Renderable *renderable;
 
-               SortedRenderable(const Renderable *);
+               SortedRenderable(Renderable *);
 
                bool operator<(const SortedRenderable &o) const { return depth<o.depth; }
        };
 
-       typedef std::set<const Renderable *> RenderableSet;
+       typedef std::set<Renderable *> RenderableSet;
        typedef std::vector<SortedRenderable> SortedArray;
 
        RenderableSet renderables;
@@ -48,8 +50,8 @@ private:
 public:
        ZSortedScene();
 
-       virtual void add(const Renderable &);
-       virtual void remove(const Renderable &);
+       virtual void add(Renderable &);
+       virtual void remove(Renderable &);
 
        /// Sets the sort order.  Default is back to front.
        void set_order(SortOrder);
@@ -57,7 +59,14 @@ public:
        /// Sets the reference point for sorting.  Default is furthest from camera.
        void set_reference(DepthReference);
 
-       virtual void render(Renderer &, const Tag &) const;
+private:
+       void populate_cache() const;
+
+public:
+       virtual void setup_frame(Renderer &);
+       virtual void finish_frame();
+
+       virtual void render(Renderer &, const Tag & = Tag()) const;
 };
 
 } // namespace GL