]> git.tdb.fi Git - libs/gl.git/commitdiff
Pass Tag by value, not by reference
authorMikko Rasa <tdb@tdb.fi>
Fri, 9 Apr 2021 21:40:39 +0000 (00:40 +0300)
committerMikko Rasa <tdb@tdb.fi>
Sat, 10 Apr 2021 00:47:27 +0000 (03:47 +0300)
Since the tag object is small, it can be passed in a register.

Keeping a deprecated version would make it hard to tell which version
is being called.

36 files changed:
source/animation/animatedobject.cpp
source/animation/animatedobject.h
source/effects/effect.cpp
source/effects/effect.h
source/effects/environmentmap.cpp
source/effects/environmentmap.h
source/effects/shadowmap.cpp
source/effects/shadowmap.h
source/materials/technique.cpp
source/materials/technique.h
source/render/instancearray.cpp
source/render/instancearray.h
source/render/instancescene.cpp
source/render/instancescene.h
source/render/object.cpp
source/render/object.h
source/render/objectinstance.cpp
source/render/objectinstance.h
source/render/occludedscene.cpp
source/render/occludedscene.h
source/render/orderedscene.cpp
source/render/orderedscene.h
source/render/pipeline.cpp
source/render/pipeline.h
source/render/renderable.h
source/render/renderer.cpp
source/render/renderer.h
source/render/simplescene.cpp
source/render/simplescene.h
source/render/slot.cpp
source/render/slot.h
source/render/tag.h
source/render/text.cpp
source/render/text.h
source/render/zsortedscene.cpp
source/render/zsortedscene.h

index 390b90b869ce6acc9eb5a5a93a6fbe701776429e..7168062320138599a81db306e983563020fffa6e 100644 (file)
@@ -68,7 +68,7 @@ void AnimatedObject::set_uniform(const string &name, const KeyFrame::AnimatedUni
                throw invalid_argument("AnimatedObject::set_uniform");
 }
 
-void AnimatedObject::setup_render(Renderer &renderer, const Tag &) const
+void AnimatedObject::setup_render(Renderer &renderer, Tag) const
 {
        renderer.transform(matrix);
        if(shdata)
index f9b8824e1832932786189a99a9b2ca8a58eb2f3d..faa9325cb74912a4439788616c5dac4475dc7cc3 100644 (file)
@@ -45,7 +45,7 @@ public:
 
        virtual const Matrix *get_matrix() const { return &matrix; }
 
-       virtual void setup_render(Renderer &, const Tag &) const;
+       virtual void setup_render(Renderer &, Tag) const;
 };
 
 } // namespace GL
index 46a0f2362c0700bdcc47873db7283bbff9724558..e335b46a69dae807d8e0bb3b58f7c55ead2f72f9 100644 (file)
@@ -10,12 +10,12 @@ Effect::Effect(Renderable &r):
        enabled_passes.insert(Tag());
 }
 
-void Effect::enable_for_pass(const Tag &tag)
+void Effect::enable_for_pass(Tag tag)
 {
        enabled_passes.insert(tag);
 }
 
-void Effect::disable_for_pass(const Tag &tag)
+void Effect::disable_for_pass(Tag tag)
 {
        enabled_passes.erase(tag);
 }
index c68bc944f8edd0a8dc2490e74e1234bace23fa12..c43cda3a39303822361f23405b74bedf2dfbc635 100644 (file)
@@ -26,8 +26,8 @@ protected:
 public:
        virtual ~Effect() { }
 
-       void enable_for_pass(const Tag &);
-       void disable_for_pass(const Tag &);
+       void enable_for_pass(Tag);
+       void disable_for_pass(Tag);
 
        virtual const Matrix *get_matrix() const { return renderable.get_matrix(); }
        virtual const Geometry::BoundingSphere<float, 3> *get_bounding_sphere() const { return renderable.get_bounding_sphere(); }
index a20f73bb9567dc84d4c3f2c6c6082a701dfff42a..977822ac710601f6b1333ec82238ae1c05424df5 100644 (file)
@@ -99,7 +99,7 @@ void EnvironmentMap::finish_frame()
        }
 }
 
-void EnvironmentMap::render(Renderer &renderer, const Tag &tag) const
+void EnvironmentMap::render(Renderer &renderer, Tag tag) const
 {
        if(!enabled_passes.count(tag))
                return renderer.render(renderable, tag);
index db97d1d80040a3c9749129e076789ef8c9efc9fd..bd6800a6f16da78b299b1cec3af3435fd678b97b 100644 (file)
@@ -49,7 +49,7 @@ public:
        virtual void setup_frame(Renderer &);
        virtual void finish_frame();
 
-       virtual void render(Renderer &, const Tag & = Tag()) const;
+       virtual void render(Renderer &, Tag = Tag()) const;
 };
 
 } // namespace GL
index c2e1f2957a63f4de2a623d2db1af26f58529f5bf..e43e9bdeb97392f8439e22c2351b3fa8bc7fa787 100644 (file)
@@ -88,7 +88,7 @@ void ShadowMap::finish_frame()
        rendered = false;
 }
 
-void ShadowMap::render(Renderer &renderer, const Tag &tag) const
+void ShadowMap::render(Renderer &renderer, Tag tag) const
 {
        if(!enabled_passes.count(tag))
                return renderer.render(renderable, tag);
index 5f6c5c15e3822cf80df88b3d3b2ae9378ebc5e12..9fc0f4497ac1f160d18062c54bcdf616f80dd99c 100644 (file)
@@ -59,7 +59,7 @@ public:
        virtual void setup_frame(Renderer &);
        virtual void finish_frame();
 
-       virtual void render(Renderer &, const Tag & = Tag()) const;
+       virtual void render(Renderer &, Tag = Tag()) const;
 };
 
 } // namespace GL
index 09799acee8841ac3eefe9d3fe1cfb5fa08801283..22f8f3b63a0752ce547863a35eafa455f2e4f3ee 100644 (file)
@@ -13,22 +13,22 @@ using namespace std;
 namespace Msp {
 namespace GL {
 
-RenderPass &Technique::add_pass(const Tag &tag)
+RenderPass &Technique::add_pass(Tag tag)
 {
        return insert_unique(passes, tag, RenderPass())->second;
 }
 
-bool Technique::has_pass(const Tag &tag) const
+bool Technique::has_pass(Tag tag) const
 {
        return passes.count(tag);
 }
 
-const RenderPass &Technique::get_pass(const Tag &tag) const
+const RenderPass &Technique::get_pass(Tag tag) const
 {
        return get_item(passes, tag);
 }
 
-const RenderPass *Technique::find_pass(const Tag &tag) const
+const RenderPass *Technique::find_pass(Tag tag) const
 {
        PassMap::const_iterator i = passes.find(tag);
        return (i!=passes.end() ? &i->second : 0);
index 762b98f4f9afe1d977e4c663397617c6d6d2205f..c3b5245357180a8e1993fb63a831efbc60db72c0 100644 (file)
@@ -47,10 +47,10 @@ private:
        PassMap passes;
 
 public:
-       RenderPass &add_pass(const Tag &);
-       bool has_pass(const Tag &) const;
-       const RenderPass &get_pass(const Tag &) const;
-       const RenderPass *find_pass(const Tag &) const;
+       RenderPass &add_pass(Tag);
+       bool has_pass(Tag) const;
+       const RenderPass &get_pass(Tag) const;
+       const RenderPass *find_pass(Tag) const;
        const PassMap &get_passes() const { return passes; }
        bool replace_texture(const std::string &, const Texture &);
        bool replace_material(const std::string &, const Material &);
index bef6ec1772228984b7b09fed7fe1aeec9c693598..4287700f0eeb768c4bbaf145fb3e463350a14786 100644 (file)
@@ -112,7 +112,7 @@ void InstanceArray::update_instance_matrix(unsigned index)
                d[matrix_offset+i] = m(i/4, i%4);
 }
 
-void InstanceArray::render(Renderer &renderer, const Tag &tag) const
+void InstanceArray::render(Renderer &renderer, Tag tag) const
 {
        if(instances.empty())
                return;
index 627051f75b123a973ef878546fddd762708afe59..6a598b5854f3183e290896eb052708f32c0f98a6 100644 (file)
@@ -59,7 +59,7 @@ private:
 public:
        void remove(ObjectInstance &);
 
-       virtual void render(Renderer &, const Tag &) const;
+       virtual void render(Renderer &, Tag) const;
 };
 
 template<typename T>
index b533bae5fac75e843bf23604004e7169676a0513..20ac0f688a24ce4e1ac811b4c72247c9dd0be217 100644 (file)
@@ -36,7 +36,7 @@ void InstanceScene::finish_frame()
                        (*j)->finish_frame();
 }
 
-void InstanceScene::render(Renderer &renderer, const Tag &tag) const
+void InstanceScene::render(Renderer &renderer, Tag tag) const
 {
        if(setup_frustum(renderer))
        {
index a5ac2cd1c743e9fd250d5489d3e13c5902d552a7..85ec3794493e1d27fedb1094a917d7f33dd66eb3 100644 (file)
@@ -29,7 +29,7 @@ public:
        virtual void setup_frame(Renderer &);
        virtual void finish_frame();
 
-       virtual void render(Renderer &, const Tag &tag = Tag()) const;
+       virtual void render(Renderer &, Tag tag = Tag()) const;
 };
 
 } // namespace GL
index dc1f4f3f1a7996bd55008732df21c0c826f27af5..afd514987ec2455970a95798496ab2ec7ee7e95b 100644 (file)
@@ -134,7 +134,7 @@ const Technique *Object::get_technique(unsigned i) const
        return lods[i].technique.get();
 }
 
-void Object::render(Renderer &renderer, const Tag &tag) const
+void Object::render(Renderer &renderer, Tag tag) const
 {
        const RenderPass *pass = get_pass(tag, 0);
        if(!pass)
@@ -152,7 +152,7 @@ void Object::render(Renderer &renderer, const Tag &tag) const
        finish_render(renderer, tag);
 }
 
-void Object::render(Renderer &renderer, const ObjectInstance &inst, const Tag &tag) const
+void Object::render(Renderer &renderer, const ObjectInstance &inst, Tag tag) const
 {
        unsigned lod = min<unsigned>(inst.get_level_of_detail(renderer), lods.size()-1);
        const RenderPass *pass = get_pass(tag, lod);
@@ -173,7 +173,7 @@ void Object::render(Renderer &renderer, const ObjectInstance &inst, const Tag &t
        finish_render(renderer, tag);
 }
 
-const RenderPass *Object::get_pass(const Tag &tag, unsigned lod) const
+const RenderPass *Object::get_pass(Tag tag, unsigned lod) const
 {
        const Technique *tech = lods[lod].technique.get();
        if(!tech)
index 48e3045930559fd354af6d868a935100a2fab09d..c97e951c16d04d7186d8c6bdeca2902041e05669 100644 (file)
@@ -110,18 +110,18 @@ public:
        virtual const Matrix *get_matrix() const { return &identity_matrix; }
        virtual const Geometry::BoundingSphere<float, 3> *get_bounding_sphere() const { return &bounding_sphere; }
 
-       virtual void render(Renderer &, const Tag & = Tag()) const;
+       virtual void render(Renderer &, Tag = Tag()) const;
 
        /** Renders an instance of the object.  The instance's hook functions are
        called before and after drawing the mesh. */
-       virtual void render(Renderer &, const ObjectInstance &, const Tag & = Tag()) const;
+       virtual void render(Renderer &, const ObjectInstance &, Tag = Tag()) const;
 
 protected:
-       virtual void setup_render(Renderer &, const Tag &) const { }
-       virtual void finish_render(Renderer &, const Tag &) const { }
+       virtual void setup_render(Renderer &, Tag) const { }
+       virtual void finish_render(Renderer &, Tag) const { }
 
 private:
-       const RenderPass *get_pass(const Tag &, unsigned) const;
+       const RenderPass *get_pass(Tag, unsigned) const;
 
        virtual void resource_loaded(Resource &);
        virtual void resource_removed(Resource &);
index dbbb85bf45838b8af1529f91c2b92cc2218262db..bdbdffd17938a0408b190923b4056081bcc7dbd9 100644 (file)
@@ -11,12 +11,12 @@ ObjectInstance::ObjectInstance(const Object &obj):
        object(obj)
 { }
 
-void ObjectInstance::render(Renderer &renderer, const Tag &tag) const
+void ObjectInstance::render(Renderer &renderer, Tag tag) const
 {
        object.render(renderer, *this, tag);
 }
 
-void ObjectInstance::setup_render(Renderer &renderer, const Tag &) const
+void ObjectInstance::setup_render(Renderer &renderer, Tag) const
 {
        renderer.transform(matrix);
 }
index 4d3e858b75e0915fe106ce320309855cca778154..c3128877728eb1b7623c41b7f1212527de8f94ae 100644 (file)
@@ -36,16 +36,16 @@ public:
 
        virtual const Geometry::BoundingSphere<float, 3> *get_bounding_sphere() const { return object.get_bounding_sphere(); }
 
-       virtual void render(Renderer &, const Tag & = Tag()) const;
+       virtual void render(Renderer &, Tag = Tag()) const;
 
        /** Hook function, called from Object just before rendering the mesh.
        Renderer state will have been pushed before this is called. */
-       virtual void setup_render(Renderer &, const Tag &) const;
+       virtual void setup_render(Renderer &, Tag) const;
 
        /** Hook function, called from Object right after rendering the mesh.  Since
        Object takes care of pushing Renderer state, this rarely needs to do
        anything. */
-       virtual void finish_render(Renderer &, const Tag &) const { }
+       virtual void finish_render(Renderer &, Tag) const { }
 
        virtual unsigned get_level_of_detail(const Renderer &) const;
 };
index b3346385a3a9525765fd8c727ec5cb140d541e45..b2e7ab3297d1decee09573fad21974e823b8391a 100644 (file)
@@ -83,7 +83,7 @@ void OccludedScene::finish_frame()
                i->renderable->finish_frame();
 }
 
-void OccludedScene::render(Renderer &renderer, const Tag &tag) const
+void OccludedScene::render(Renderer &renderer, Tag tag) const
 {
        if(renderables.empty())
                return;
index 000673ddfbb3740f76f9cf511c4606d7a5ec8d0e..78e3d3ca696f7ef091d68738ed375c8764478b26 100644 (file)
@@ -52,7 +52,7 @@ public:
        virtual void setup_frame(Renderer &);
        virtual void finish_frame();
 
-       virtual void render(Renderer &, const Tag & = Tag()) const;
+       virtual void render(Renderer &, Tag = Tag()) const;
 };
 
 } // namespace GL
index ab1ba454a7d495ee553847acf161fb42249d59c3..4386d3e79058f2ac7559f2f30ee1bcc92bce60d4 100644 (file)
@@ -47,7 +47,7 @@ void OrderedScene::finish_frame()
                (*i)->finish_frame();
 }
 
-void OrderedScene::render(Renderer &renderer, const Tag &tag) const
+void OrderedScene::render(Renderer &renderer, Tag tag) const
 {
        if(setup_frustum(renderer))
        {
index 53f7b008bd4965c61ca5f28291b10993b0b251c8..c41282b4df0b87ddbfe7fd6330e4483d4088c008 100644 (file)
@@ -29,7 +29,7 @@ public:
        virtual void finish_frame();
 
        using Scene::render;
-       virtual void render(Renderer &, const Tag & = Tag()) const;
+       virtual void render(Renderer &, Tag = Tag()) const;
 };
 
 } // namespace GL
index a7f4130bbab1fffd2605521426f562dbf42a92bf..21f9e85e76238ea2ccfd2c03b16855511d0503fe 100644 (file)
@@ -106,7 +106,7 @@ void Pipeline::set_multisample(unsigned s)
        }
 }
 
-Pipeline::Pass &Pipeline::add_pass(const Tag &tag, Renderable &r)
+Pipeline::Pass &Pipeline::add_pass(Tag tag, Renderable &r)
 {
        passes.push_back(Pass(tag, &r));
        return passes.back();
@@ -156,7 +156,7 @@ void Pipeline::finish_frame()
                i->renderable->finish_frame();
 }
 
-void Pipeline::render(Renderer &renderer, const Tag &tag) const
+void Pipeline::render(Renderer &renderer, Tag tag) const
 {
        if(tag.id)
                return;
@@ -249,7 +249,7 @@ void Pipeline::create_targets(unsigned recreate)
 }
 
 
-Pipeline::Pass::Pass(const Tag &t, Renderable *r):
+Pipeline::Pass::Pass(Tag t, Renderable *r):
        tag(t),
        lighting(0),
        depth_test(0),
index dd80ef3bb1563d475e1ab9d606444187047b4b6d..91996186e3eb1296f6be4e8117d64748313af5be 100644 (file)
@@ -47,9 +47,9 @@ public:
                Renderable *renderable;
 
        public:
-               Pass(const Tag &, Renderable *);
+               Pass(Tag, Renderable *);
 
-               const Tag &get_tag() const { return tag; }
+               Tag get_tag() const { return tag; }
 
                void set_lighting(const Lighting *);
                void set_depth_test(const DepthTest *);
@@ -111,7 +111,7 @@ public:
 
        /** Adds a pass to the pipeline.  It's permissible to add the same
        Renderable multiple times. */
-       Pass &add_pass(const Tag &, Renderable &);
+       Pass &add_pass(Tag, Renderable &);
 
        /** Adds a postprocessor to the pipeline. */
        void add_postprocessor(PostProcessor &);
@@ -128,7 +128,7 @@ public:
        virtual void setup_frame(Renderer &);
        virtual void finish_frame();
 
-       virtual void render(Renderer &, const Tag &tag = Tag()) const;
+       virtual void render(Renderer &, Tag tag = Tag()) const;
 
 private:
        void create_targets(unsigned);
index 80fe172eb7435b44f147d4324294b6c72b5d5fd2..8af524fd64de0d73613001c7ad7ac877acb23612 100644 (file)
@@ -55,7 +55,7 @@ public:
 
        /** Renders the Renderable.  Implementors should take care to return the
        renderer to the state it was in, for example by using Renderer::Push. */
-       virtual void render(Renderer &, const Tag & = Tag()) const = 0;
+       virtual void render(Renderer &, Tag = Tag()) const = 0;
 };
 
 } // namespace Msp
index 416a0fc89ced4827147982f234ca009fb94576c0..ad7ba5a78e173bbfe7d13a62cfa87d3b66e01a42 100644 (file)
@@ -252,7 +252,7 @@ void Renderer::include(const Renderable &renderable)
        excluded.erase(&renderable);
 }
 
-void Renderer::render(const Renderable &renderable, const Tag &tag)
+void Renderer::render(const Renderable &renderable, Tag tag)
 {
        if(!excluded.count(&renderable))
                renderable.render(*this, tag);
index 2854bc8ff181f3ead7f0f19ec9b0ec56d79b0470..f8d297289085557c31cfc866ed1e1b2b2d5d952d 100644 (file)
@@ -167,7 +167,7 @@ public:
        void exclude(const Renderable &);
        void include(const Renderable &);
 
-       void render(const Renderable &, const Tag & = Tag());
+       void render(const Renderable &, Tag = Tag());
        void draw(const Batch &);
        void draw_instanced(const Batch &, unsigned);
 
index d1fd3c1cea2a4c4ad0349fb1a30017cfa2b52920..af2b366fa61c55c2bcb0852f2185f8441a4d6ddc 100644 (file)
@@ -39,7 +39,7 @@ void SimpleScene::finish_frame()
                (*i)->finish_frame();
 }
 
-void SimpleScene::render(Renderer &renderer, const Tag &tag) const
+void SimpleScene::render(Renderer &renderer, Tag tag) const
 {
        populate_cache();
        if(setup_frustum(renderer))
index e56aeb0c982592b5e8995f5ac2d78b47fc972091..04d466d791033290921663b97e3f4a48927d0ad9 100644 (file)
@@ -30,7 +30,7 @@ public:
        virtual void setup_frame(Renderer &);
        virtual void finish_frame();
 
-       virtual void render(Renderer &, const Tag & = Tag()) const;
+       virtual void render(Renderer &, Tag = Tag()) const;
 };
 
 } // namespace GL
index 07dabf0755c1cb9053596771aca953e9e34dbccd..6e811bdec2c9faa514b448dee64e9b8c57af5f84 100644 (file)
@@ -35,7 +35,7 @@ void Slot::finish_frame()
                renderable->finish_frame();
 }
 
-void Slot::render(Renderer &renderer, const Tag &tag) const
+void Slot::render(Renderer &renderer, Tag tag) const
 {
        if(renderable)
                renderer.render(*renderable, tag);
index ad8630172308c71356db7a9ec9beab388628b7de..9129869ed8fcc46ff9992995d34d78cd8907243c 100644 (file)
@@ -25,7 +25,7 @@ public:
        virtual const Geometry::BoundingSphere<float, 3> *get_bounding_sphere() const;
        virtual void setup_frame(Renderer &);
        virtual void finish_frame();
-       virtual void render(Renderer &, const Tag &) const;
+       virtual void render(Renderer &, Tag) const;
 };
 
 } // namespace GL
index 28b4fa010e8b0f12980df476f7ac8160a2c922fb..938089899277ba3ee196f2ba4279bece666057dd 100644 (file)
@@ -18,8 +18,8 @@ struct Tag
        Tag(const char *);
        Tag(const std::string &s);
 
-       bool operator<(const Tag &t) const { return id<t.id; }
-       bool operator==(const Tag &t) const { return id==t.id; }
+       bool operator<(Tag t) const { return id<t.id; }
+       bool operator==(Tag t) const { return id==t.id; }
 };
 
 } // namespace GL
index 639beac142e1d66f85edfaa2bef2354074344f78..210411a5eeedca8f233b92fcf053d0947ff24b66 100644 (file)
@@ -110,7 +110,7 @@ void Text::set_alignment(float h, float v)
        }
 }
 
-void Text::render(Renderer &renderer, const Tag &tag) const
+void Text::render(Renderer &renderer, Tag tag) const
 {
        object.render(renderer, tag);
 }
index cbcef957f8be9b0293f687732e6dfec72660a00c..916d6d7b8d1c02e74dfa2dfca8dfd054c77e79ef 100644 (file)
@@ -77,7 +77,7 @@ public:
 
        float get_width() const { return width; }
 
-       virtual void render(Renderer &, const Tag & = Tag()) const;
+       virtual void render(Renderer &, Tag = Tag()) const;
 
        operator const Object &() const { return object; }
 };
index 46b14dbb6a672dbfd044b1ffa7463695e9212244..2e57afd57cb04dd36b9fa2e9b466993d571546a5 100644 (file)
@@ -56,7 +56,7 @@ void ZSortedScene::finish_frame()
                i->renderable->finish_frame();
 }
 
-void ZSortedScene::render(Renderer &renderer, const Tag &tag) const
+void ZSortedScene::render(Renderer &renderer, Tag tag) const
 {
        if(renderables.empty())
                return;
index cb21061bae301db5f7851c54130112d29e04c011..24e06a6bd8f96ff56ce319a811d1cdcdea57db44 100644 (file)
@@ -66,7 +66,7 @@ public:
        virtual void setup_frame(Renderer &);
        virtual void finish_frame();
 
-       virtual void render(Renderer &, const Tag & = Tag()) const;
+       virtual void render(Renderer &, Tag = Tag()) const;
 };
 
 } // namespace GL