X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Frender%2Fzsortedscene.h;h=778b097e801fdf913c418b85e403ff3030237791;hp=319cd8c35dfe2b17e93a84b836def3a23427409b;hb=HEAD;hpb=83ab54cf1339fcac560daa90496e6d4e956f7367 diff --git a/source/render/zsortedscene.h b/source/render/zsortedscene.h index 319cd8c3..a498164c 100644 --- a/source/render/zsortedscene.h +++ b/source/render/zsortedscene.h @@ -10,20 +10,23 @@ 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 { @@ -34,25 +37,20 @@ 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 RenderableSet; - typedef std::vector SortedArray; - - RenderableSet renderables; - SortOrder order; - DepthReference reference; - mutable SortedArray sorted_cache; + std::vector content; + SortOrder order = BACK_TO_FRONT; + DepthReference reference = FURTHEST; + mutable std::map > sorted_cache; public: - ZSortedScene(); - virtual void add(Renderable &); virtual void remove(Renderable &); @@ -62,10 +60,6 @@ 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();