X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fzsortedscene.h;h=f7a7f6a25227102c40716d2a99c435cfac49ed1a;hp=5c876697cae9ee3a878c42be2fc48156471ee9ce;hb=0807680edd94a7f14560831db4dd52e4e48d0d19;hpb=af0077ac71c51aeed63bc0222fe4650d5077478a diff --git a/source/zsortedscene.h b/source/zsortedscene.h index 5c876697..f7a7f6a2 100644 --- a/source/zsortedscene.h +++ b/source/zsortedscene.h @@ -1,7 +1,9 @@ #ifndef MSP_GL_ZSORTEDSCENE_H_ #define MSP_GL_ZSORTEDSCENE_H_ -#include "simplescene.h" +#include +#include +#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 RenderableSet; + typedef std::set RenderableSet; typedef std::vector 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,6 +59,13 @@ 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 &) const; };