renderables.erase(&r);
}
-void Scene::render() const
+void Scene::render(const Tag &tag) const
{
- for(set<const Renderable *>::const_iterator i=renderables.begin(); i!=renderables.end(); ++i)
- (*i)->render();
+ for(set<const Renderable *, Compare>::const_iterator i=renderables.begin(); i!=renderables.end(); ++i)
+ if((*i)->has_pass(tag))
+ (*i)->render(tag);
}
-void Scene::render(const string &pn) const
+
+bool Scene::Compare::operator()(const Renderable *a, const Renderable *b) const
{
- for(set<const Renderable *>::const_iterator i=renderables.begin(); i!=renderables.end(); ++i)
- if((*i)->has_pass(pn))
- (*i)->render(pn);
+ if(a->get_order()!=b->get_order())
+ return a->get_order()<b->get_order();
+ return a<b;
}
} // namespace GL