]> git.tdb.fi Git - libs/gl.git/commitdiff
Drop Renderable::has_pass; renderables are now expected to ignore unknown passes
authorMikko Rasa <tdb@tdb.fi>
Thu, 4 Feb 2010 07:59:12 +0000 (07:59 +0000)
committerMikko Rasa <tdb@tdb.fi>
Thu, 4 Feb 2010 07:59:12 +0000 (07:59 +0000)
Note: compatibility-breaking change.  Major version bump in next release.

source/object.cpp
source/object.h
source/objectinstance.cpp
source/objectinstance.h
source/pipeline.cpp
source/pipeline.h
source/renderable.h
source/scene.cpp
source/scene.h

index a23aa433b92a8a2611b938af84342c9fce082400..d5d5231bab47dbdd9358a489ea975841298c4a87 100644 (file)
@@ -34,16 +34,11 @@ Object::~Object()
 {
 }
 
-bool Object::has_pass(const Tag &tag) const
-{
-       if(technique)
-               return technique->has_pass(tag);
-       else
-               return tag.id==0;
-}
-
 void Object::render(const Tag &tag) const
 {
+       if(!can_render(tag))
+               return;
+
        const ObjectPass *pass=get_pass(tag);
        setup_render(pass);
        meshes[0]->draw();
@@ -52,6 +47,9 @@ void Object::render(const Tag &tag) const
 
 void Object::render(const ObjectInstance &inst, const Tag &tag) const
 {
+       if(!can_render(tag))
+               return;
+
        const ObjectPass *pass=get_pass(tag);
        setup_render(pass);
        render_instance(inst, tag);
@@ -59,6 +57,14 @@ void Object::render(const ObjectInstance &inst, const Tag &tag) const
        finish_render(pass);
 }
 
+bool Object::can_render(const Tag &tag) const
+{
+       if(technique)
+               return technique->has_pass(tag);
+       else
+               return tag.id==0;
+}
+
 const ObjectPass *Object::get_pass(const Tag &tag) const
 {
        if(technique)
index 9c1ea7f7fbbf9533afab934b8d20d4df24263230..fff1e4cf281d770adf207fada79e156ca016b6e6 100644 (file)
@@ -70,8 +70,6 @@ public:
 
        const Technique *get_technique() const { return technique; }
 
-       virtual bool has_pass(const Tag &) const;
-
        /**
        Renders the object.  A tag can be provided to render a non-default pass.
        */
@@ -93,6 +91,9 @@ public:
        template<typename Iter>
        void render(Iter begin, Iter end, const Tag &tag=Tag()) const
        {
+               if(!can_render(tag))
+                       return;
+
                const ObjectPass *pass=get_pass(tag);
                setup_render(pass);
                for(Iter i=begin; i!=end; ++i)
@@ -100,6 +101,7 @@ public:
                finish_render(pass);
        }
 private:
+       bool can_render(const Tag &) const;
        const ObjectPass *get_pass(const Tag &) const;
        void setup_render(const ObjectPass *) const;
        void finish_render(const ObjectPass *) const;
index 7552cc937f54f30b6ffb9c654f8db8bb3d9e525d..666d90056774d4fc963fd7d38248f5e19f61f9f7 100644 (file)
@@ -18,11 +18,6 @@ ObjectInstance::ObjectInstance(const Object &obj):
        object(obj)
 { }
 
-bool ObjectInstance::has_pass(const Tag &tag) const
-{
-       return object.has_pass(tag);
-}
-
 void ObjectInstance::render(const Tag &tag) const
 {
        object.render(*this, tag);
index dbb8c627163562a4cc8211cf41ff8e2086ab2895..602cbc24d80a50989a4faee48db6e0319bda9cdc 100644 (file)
@@ -35,8 +35,6 @@ public:
 
        const Object &get_object() const { return object; }
 
-       virtual bool has_pass(const Tag &tag) const;
-
        virtual void render(const Tag &tag=Tag()) const;
 
        /**
index ea8b56a30763d74b2f98c93aec18e8a4f8173b5f..5969246ba7010f37b976eef4972a81a11ad7eff6 100644 (file)
@@ -61,11 +61,6 @@ const PipelinePass &Pipeline::get_pass(const Tag &tag) const
        return i->second;
 }
 
-bool Pipeline::has_pass(const Tag &tag) const
-{
-       return passes.count(tag.id);
-}
-
 void Pipeline::add_renderable(const Renderable &r)
 {
        renderables.push_back(&r);
index 19bea10a641d9664992013758b1c17a5ec709243..afa9ed5ed525f1ecce5caaab550b1afcacf22c67 100644 (file)
@@ -43,7 +43,6 @@ public:
        PipelinePass &add_pass(const Tag &tag);
        PipelinePass &get_pass(const Tag &tag);
        const PipelinePass &get_pass(const Tag &tag) const;
-       virtual bool has_pass(const Tag &tag) const;
 
        void add_renderable(const Renderable &);
        void add_effect(Effect &);
index b83fdb0dfc59747400d63434372299188015cec1..6e433d3e9eb5b489a99a99464f9b9d0983b4e253 100644 (file)
@@ -21,7 +21,6 @@ protected:
 public:
        virtual ~Renderable() { }
 
-       virtual bool has_pass(const Tag &tag) const =0;
        virtual void render(const Tag &tag=Tag()) const =0;
 };
 
index 59f3041187d29a13b40315a4f3a0eaf70e3fc5f9..c28192d407fe529ae2e258700d32243cee654e32 100644 (file)
@@ -41,12 +41,10 @@ void Scene::remove(const Renderable &r)
 void Scene::render(const Tag &tag) const
 {
        for(map<const Object *, set<const ObjectInstance *> >::const_iterator i=objects.begin(); i!=objects.end(); ++i)
-               if(i->first->has_pass(tag))
-                       i->first->render(i->second.begin(), i->second.end(), tag);
+               i->first->render(i->second.begin(), i->second.end(), tag);
 
        for(set<const Renderable *>::const_iterator i=renderables.begin(); i!=renderables.end(); ++i)
-               if((*i)->has_pass(tag))
-                       (*i)->render(tag);
+               (*i)->render(tag);
 }
 
 } // namespace GL
index e6de1c23e6becb3a94103a06e7d905832173534e..05c5b6785b3bf53cb2de92c2d45ee180c85bbc0e 100644 (file)
@@ -28,7 +28,6 @@ public:
        void add(const Renderable &);
        void remove(const Renderable &);
 
-       virtual bool has_pass(const Tag &) const { return true; }
        virtual void render(const Tag &tag=Tag()) const;
 };