#ifndef MSP_GL_ZSORTEDSCENE_H_
#define MSP_GL_ZSORTEDSCENE_H_
-#include "simplescene.h"
+#include <set>
+#include <vector>
+#include "scene.h"
namespace Msp {
namespace GL {
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;
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);
/// 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