]> git.tdb.fi Git - libs/gl.git/commitdiff
Store Renderables as non-const pointers or references
authorMikko Rasa <tdb@tdb.fi>
Mon, 5 Dec 2016 16:35:22 +0000 (18:35 +0200)
committerMikko Rasa <tdb@tdb.fi>
Mon, 5 Dec 2016 17:50:12 +0000 (19:50 +0200)
It's irked me for a while how some renderables (mostly effects) need to
do internal updates in setup_frame, but it's const so I end up with a ton
of mutables.  Since almost all of my use cases actually pass in non-const
Renderables anyway, I'm just going to change this.

19 files changed:
source/effect.cpp
source/effect.h
source/instancescene.cpp
source/instancescene.h
source/occludedscene.cpp
source/occludedscene.h
source/orderedscene.cpp
source/orderedscene.h
source/pipeline.cpp
source/pipeline.h
source/scene.h
source/shadowmap.cpp
source/shadowmap.h
source/simplescene.cpp
source/simplescene.h
source/view.cpp
source/view.h
source/zsortedscene.cpp
source/zsortedscene.h

index c1be70f10de710ed4f09924dbf43c73721795629..36a50bc38aceb7f95c4974e62582d4854e48e9a8 100644 (file)
@@ -3,7 +3,7 @@
 namespace Msp {
 namespace GL {
 
-Effect::Effect(const Renderable &r):
+Effect::Effect(Renderable &r):
        renderable(r)
 {
        enabled_passes.insert(Tag());
index e99bc2576d9eb97220faed58f214b790779ab085..1211c3b5094dee3ba14c73aed6f258b39d0aabd8 100644 (file)
@@ -15,10 +15,10 @@ the wrapped Renderable's render method, and clean up after itself.
 class Effect: public Renderable
 {
 protected:
-       const Renderable &renderable;
+       Renderable &renderable;
        std::set<Tag> enabled_passes;
 
-       Effect(const Renderable &);
+       Effect(Renderable &);
 public:
        virtual ~Effect() { }
 
index b3a89f338a42cfff32500ccace3256e0b1e7727b..bbaf49ed29731da8a2f94ea9093ebea0b6745366 100644 (file)
@@ -6,12 +6,12 @@
 namespace Msp {
 namespace GL {
 
-void InstanceScene::add(const Renderable &r)
+void InstanceScene::add(Renderable &r)
 {
        renderables[r.get_instance_key()].insert(&r);
 }
 
-void InstanceScene::remove(const Renderable &r)
+void InstanceScene::remove(Renderable &r)
 {
        InstanceMap::iterator i = renderables.find(r.get_instance_key());
        if(i!=renderables.end())
index ecbd63df8d1413cfa1e8669672624f92000fd320..d23fbb1f4001043379f3bc564a7eab23796618b0 100644 (file)
@@ -16,14 +16,14 @@ the same key rendering order is unspecified.
 class InstanceScene: public Scene
 {
 private:
-       typedef std::set<const Renderable *> RenderableSet;
+       typedef std::set<Renderable *> RenderableSet;
        typedef std::map<long, RenderableSet> InstanceMap;
 
        InstanceMap renderables;
 
 public:
-       virtual void add(const Renderable &);
-       virtual void remove(const Renderable &);
+       virtual void add(Renderable &);
+       virtual void remove(Renderable &);
 
        virtual void setup_frame() const;
        virtual void finish_frame() const;
index 3d540a72ac8739e6b780ff7e7cc19845104741fc..2e140a534537c076b54b804dd0a09db16d7878bc 100644 (file)
@@ -36,13 +36,13 @@ OccludedScene::~OccludedScene()
        glDeleteQueries(queries.size(), &queries[0]);
 }
 
-void OccludedScene::add(const Renderable &r)
+void OccludedScene::add(Renderable &r)
 {
        renderables.insert(&r);
        cache_dirty = true;
 }
 
-void OccludedScene::remove(const Renderable &r)
+void OccludedScene::remove(Renderable &r)
 {
        renderables.erase(&r);
        cache_dirty = true;
index 3f8ca76ce4dcbfe40dc3edaa5553f92785640acb..4d26483a26bd0bbf7cec514181f06e40b30ec8ac 100644 (file)
@@ -19,7 +19,7 @@ class OccludedScene: public Scene
 private:
        struct OccludedRenderable
        {
-               const Renderable *renderable;
+               Renderable *renderable;
                const Geometry::BoundingSphere<float, 3> *bounding_sphere;
                bool in_frustum;
                bool occluder;
@@ -28,7 +28,7 @@ private:
                OccludedRenderable();
        };
 
-       typedef std::set<const Renderable *> RenderableSet;
+       typedef std::set<Renderable *> RenderableSet;
        typedef std::vector<OccludedRenderable> OccludedArray;
 
        Mesh bounding_mesh;
@@ -42,8 +42,8 @@ public:
        OccludedScene();
        ~OccludedScene();
 
-       virtual void add(const Renderable &);
-       virtual void remove(const Renderable &);
+       virtual void add(Renderable &);
+       virtual void remove(Renderable &);
 
        virtual void render(Renderer &, const Tag &) const;
 };
index 965300cc25500d2f069f0d20e5c8da5bbd5b84f4..f104562f3de9f2d0255aa2d6a1d4829c372002fd 100644 (file)
@@ -5,30 +5,30 @@
 namespace Msp {
 namespace GL {
 
-void OrderedScene::add(const Renderable &r)
+void OrderedScene::add(Renderable &r)
 {
        renderables.push_back(&r);
 }
 
-void OrderedScene::remove(const Renderable &r)
+void OrderedScene::remove(Renderable &r)
 {
        RenderableList::iterator end = std::remove(renderables.begin(), renderables.end(), &r);
        renderables.erase(end, renderables.end());
 }
 
-void OrderedScene::prepend(const Renderable &r)
+void OrderedScene::prepend(Renderable &r)
 {
        renderables.push_front(&r);
 }
 
-void OrderedScene::insert(unsigned index, const Renderable &r)
+void OrderedScene::insert(unsigned index, Renderable &r)
 {
        RenderableList::iterator i = renderables.begin();
        for(; (i!=renderables.end() && index); ++i, --index) ;
        renderables.insert(i, &r);
 }
 
-void OrderedScene::insert_after(const Renderable &after, const Renderable &r)
+void OrderedScene::insert_after(Renderable &after, Renderable &r)
 {
        RenderableList::iterator i = renderables.begin();
        for(; (i!=renderables.end() && *i!=&after); ++i) ;
index 340ecedab3b52c5cd307119ec104b6a5a37436ae..ee06dfaebb1f8addfaeec06bffc211c2506b0759 100644 (file)
@@ -14,16 +14,16 @@ in the middle and removing them are O(N) operations.
 class OrderedScene: public Scene
 {
 private:
-       typedef std::list<const Renderable *> RenderableList;
+       typedef std::list<Renderable *> RenderableList;
 
        RenderableList renderables;
 
 public:
-       virtual void add(const Renderable &);
-       virtual void remove(const Renderable &);
-       void prepend(const Renderable &);
-       void insert(unsigned, const Renderable &);
-       void insert_after(const Renderable &, const Renderable &);
+       virtual void add(Renderable &);
+       virtual void remove(Renderable &);
+       void prepend(Renderable &);
+       void insert(unsigned, Renderable &);
+       void insert_after(Renderable &, Renderable &);
 
        virtual void setup_frame() const;
        virtual void finish_frame() const;
index 0469cb773643da9d7e11825c9de81cfaf6163963..ce9c8f689a0feecd55214590f2dff25c3851850a 100644 (file)
@@ -81,7 +81,7 @@ Pipeline::Pass &Pipeline::add_pass(const Tag &tag)
        return passes.back();
 }
 
-void Pipeline::add_renderable(const Renderable &r)
+void Pipeline::add_renderable(Renderable &r)
 {
        for(vector<Slot>::iterator i=renderables.begin(); i!=renderables.end(); ++i)
                if(i->renderable==&r)
@@ -93,7 +93,7 @@ void Pipeline::add_renderable(const Renderable &r)
        renderables.push_back(&r);
 }
 
-void Pipeline::add_renderable_for_pass(const Renderable &r, const Tag &tag)
+void Pipeline::add_renderable_for_pass(Renderable &r, const Tag &tag)
 {
        for(vector<Slot>::iterator i=renderables.begin(); i!=renderables.end(); ++i)
                if(i->renderable==&r)
@@ -106,7 +106,7 @@ void Pipeline::add_renderable_for_pass(const Renderable &r, const Tag &tag)
        renderables.back().passes.insert(tag);
 }
 
-void Pipeline::remove_renderable(const Renderable &r)
+void Pipeline::remove_renderable(Renderable &r)
 {
        for(vector<Slot>::iterator i=renderables.begin(); i!=renderables.end(); ++i)
                if(i->renderable==&r)
@@ -116,7 +116,7 @@ void Pipeline::remove_renderable(const Renderable &r)
                }
 }
 
-Pipeline::Pass &Pipeline::add_pass(const Tag &tag, const Renderable &r)
+Pipeline::Pass &Pipeline::add_pass(const Tag &tag, Renderable &r)
 {
        passes.push_back(Pass(tag, &r));
        return passes.back();
@@ -256,7 +256,7 @@ void Pipeline::create_targets(unsigned recreate)
 }
 
 
-Pipeline::Pass::Pass(const Tag &t, const Renderable *r):
+Pipeline::Pass::Pass(const Tag &t, Renderable *r):
        tag(t),
        lighting(0),
        depth_test(0),
@@ -286,7 +286,7 @@ void Pipeline::Pass::set_clipping(const Clipping *c)
 }
 
 
-Pipeline::Slot::Slot(const Renderable *r):
+Pipeline::Slot::Slot(Renderable *r):
        renderable(r)
 { }
 
index f6a4ab3371e7317dd904c66b3e7d3547c02a28c5..b450d0a5864ab76adcde1f92c1442a94b37fac89 100644 (file)
@@ -43,10 +43,10 @@ public:
                const DepthTest *depth_test;
                const Blend *blend;
                const Clipping *clipping;
-               const Renderable *renderable;
+               Renderable *renderable;
 
        public:
-               Pass(const Tag &, const Renderable *);
+               Pass(const Tag &, Renderable *);
 
                const Tag &get_tag() const { return tag; }
 
@@ -58,16 +58,16 @@ public:
                const DepthTest *get_depth_test() const { return depth_test; }
                const Blend *get_blend() const { return blend; }
                const Clipping *get_clipping() const { return clipping; }
-               const Renderable *get_renderable() const { return renderable; }
+               Renderable *get_renderable() const { return renderable; }
        };
 
 private:
        struct Slot
        {
-               const Renderable *renderable;
+               Renderable *renderable;
                std::set<Tag> passes;
 
-               Slot(const Renderable *);
+               Slot(Renderable *);
        };
 
        typedef std::list<Pass> PassList;
@@ -93,13 +93,13 @@ public:
        // Deprecated
        void set_camera(const Camera *);
        Pass &add_pass(const Tag &tag);
-       void add_renderable(const Renderable &);
-       void add_renderable_for_pass(const Renderable &, const Tag &);
-       void remove_renderable(const Renderable &);
+       void add_renderable(Renderable &);
+       void add_renderable_for_pass(Renderable &, const Tag &);
+       void remove_renderable(Renderable &);
 
        /** Adds a pass to the pipeline.  It's permissible to add the same
        Renderable multiple times. */
-       Pass &add_pass(const Tag &, const Renderable &);
+       Pass &add_pass(const Tag &, Renderable &);
 
        /** Adds a postprocessor to the pipeline. */
        void add_postprocessor(PostProcessor &);
index 9e2da3dfe97b620bf0f9008dc36ca2b22fbe7532..e6e337b907388591ea82f8a769cb9f163b819f0f 100644 (file)
@@ -39,8 +39,8 @@ private:
 public:
        virtual ~Scene();
 
-       virtual void add(const Renderable &) = 0;
-       virtual void remove(const Renderable &) = 0;
+       virtual void add(Renderable &) = 0;
+       virtual void remove(Renderable &) = 0;
 
 protected:
        bool setup_frustum(const Renderer &) const;
index 4ad192cad1d737cb90dc464f4e9ca7b639ca8d70..d8853d9e3e229f5eff23631e437fc20eaea8ffd0 100644 (file)
@@ -15,7 +15,7 @@ using namespace std;
 namespace Msp {
 namespace GL {
 
-ShadowMap::ShadowMap(unsigned s, const Renderable &r, const Light &l):
+ShadowMap::ShadowMap(unsigned s, Renderable &r, const Light &l):
        Effect(r),
        size(s),
        light(l),
index 119d369c1eb6db052048d941008c18f7b3d58560..658b59a91a58a196b92063bc283f80686cdc26e8 100644 (file)
@@ -34,7 +34,7 @@ private:
        mutable bool rendered;
 
 public:
-       ShadowMap(unsigned, const Renderable &, const Light &);
+       ShadowMap(unsigned, Renderable &, const Light &);
 
        /** Sets the ShadowMap target point and radius.  The transformation matrix is
        computed so that a sphere with the specified parameters will be completely
index b8c90517082ece5db4e1159d6f25dfaf8aef7c7e..137873dad8808b99a0717b31721e4fb67db5b1f5 100644 (file)
@@ -4,14 +4,14 @@
 namespace Msp {
 namespace GL {
 
-void SimpleScene::add(const Renderable &r)
+void SimpleScene::add(Renderable &r)
 {
        // Add to cache as well if the cache is valid
        if(renderables.insert(&r).second && !cache.empty())
                cache.push_back(&r);
 }
 
-void SimpleScene::remove(const Renderable &r)
+void SimpleScene::remove(Renderable &r)
 {
        renderables.erase(&r);
        cache.clear();
index fd834111354635a3c34d29d9158a3faf45042b1a..8b91150ce2199e43142f4d60573718e32a72fc0c 100644 (file)
@@ -13,15 +13,15 @@ A simple yet efficient scene.  Rendering order is unspecified.
 class SimpleScene: public Scene
 {
 private:
-       typedef std::set<const Renderable *> RenderableSet;
-       typedef std::vector<const Renderable *> RenderableArray;
+       typedef std::set<Renderable *> RenderableSet;
+       typedef std::vector<Renderable *> RenderableArray;
 
        RenderableSet renderables;
        mutable RenderableArray cache;
 
 public:
-       virtual void add(const Renderable &);
-       virtual void remove(const Renderable &);
+       virtual void add(Renderable &);
+       virtual void remove(Renderable &);
 
 private:
        void populate_cache() const;
index 6548c7f1e98fd9d38168de8579ad5f5ade983b86..759e90be1f6c0bc0d48a37c8d5d7819313f7654b 100644 (file)
@@ -23,7 +23,7 @@ void View::set_camera(Camera *c)
        camera = c;
 }
 
-void View::set_content(const Renderable *r)
+void View::set_content(Renderable *r)
 {
        content = r;
 }
index bd39e8ff7f11c6835b07a62a233b858b60472735..f7f47fc7b48fd7d37f349f73823fee017a3d5ad5 100644 (file)
@@ -23,7 +23,7 @@ private:
        Graphics::GLContext &context;
        Framebuffer &target;
        Camera *camera;
-       const Renderable *content;
+       Renderable *content;
        std::list<Camera *> synced_cameras;
 
 public:
@@ -36,7 +36,7 @@ public:
        float get_aspect() const { return static_cast<float>(get_width())/get_height(); }
 
        void set_camera(Camera *);
-       void set_content(const Renderable *);
+       void set_content(Renderable *);
 
        // Deprecated
        void synchronize_camera_aspect(Camera &);
index f40903dd63375878e4466405dc3a154733ce621a..fe60803a54d8e3ff323a33f5e6f23d654044e6d8 100644 (file)
@@ -12,13 +12,13 @@ ZSortedScene::ZSortedScene():
        reference(FURTHEST)
 { }
 
-void ZSortedScene::add(const Renderable &r)
+void ZSortedScene::add(Renderable &r)
 {
        if(renderables.insert(&r).second && !sorted_cache.empty())
                sorted_cache.push_back(&r);
 }
 
-void ZSortedScene::remove(const Renderable &r)
+void ZSortedScene::remove(Renderable &r)
 {
        renderables.erase(&r);
        sorted_cache.clear();
@@ -104,7 +104,7 @@ void ZSortedScene::render(Renderer &renderer, const Tag &tag) const
 }
 
 
-ZSortedScene::SortedRenderable::SortedRenderable(const Renderable *r):
+ZSortedScene::SortedRenderable::SortedRenderable(Renderable *r):
        renderable(r),
        in_frustum(false),
        depth(0.0f)
index b032cbcdf01f08e228846aebb32b3c5b96c60d37..d417777e0a9c8f37c3de1b5c4b778df17a0aa61f 100644 (file)
@@ -30,16 +30,16 @@ class ZSortedScene: public Scene
 private:
        struct SortedRenderable
        {
-               const Renderable *renderable;
+               Renderable *renderable;
                bool in_frustum;
                float depth;
 
-               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;
@@ -50,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);