]> git.tdb.fi Git - libs/gl.git/commitdiff
Allow Renderables in a Scene to specify ordering
authorMikko Rasa <tdb@tdb.fi>
Wed, 27 Feb 2008 14:09:02 +0000 (14:09 +0000)
committerMikko Rasa <tdb@tdb.fi>
Wed, 27 Feb 2008 14:09:02 +0000 (14:09 +0000)
source/renderable.h
source/scene.cpp
source/scene.h

index 00b8b9012d32d927c2ac1506484db86aa63ba834..aeee1666dc34f54ba441da0793607d786ea1cb28 100644 (file)
@@ -17,6 +17,7 @@ namespace GL {
 class Renderable
 {
 public:
+       virtual int get_order() const { return 0; }
        virtual bool has_pass(const Tag &tag) const =0;
 
        virtual void render(const Tag &tag=Tag()) const =0;
index 20399daff01256e35de5bc87dedeec852dd49131..607166d5d32f285e35879ff62134891a9c8e5a42 100644 (file)
@@ -24,10 +24,18 @@ void Scene::remove(const Renderable &r)
 
 void Scene::render(const Tag &tag) const
 {
-       for(set<const Renderable *>::const_iterator i=renderables.begin(); i!=renderables.end(); ++i)
+       for(set<const Renderable *, Compare>::const_iterator i=renderables.begin(); i!=renderables.end(); ++i)
                if((*i)->has_pass(tag))
                        (*i)->render(tag);
 }
 
+
+bool Scene::Compare::operator()(const Renderable *a, const Renderable *b) const
+{
+       if(a->get_order()!=b->get_order())
+               return a->get_order()<b->get_order();
+       return a<b;
+}
+
 } // namespace GL
 } // namespace Msp
index 6bfad812e517ecc45216216ed2aa0a37c50e3789..9766ab21a0292a4a217e76c086fcefae4d77a4a8 100644 (file)
@@ -17,7 +17,12 @@ namespace GL {
 class Scene: public Renderable
 {
 private:
-       std::set<const Renderable *> renderables;
+       struct Compare
+       {
+               bool operator()(const Renderable *, const Renderable *) const;
+       };
+
+       std::set<const Renderable *, Compare> renderables;
 
 public:
        void add(const Renderable &);