]> git.tdb.fi Git - libs/gl.git/blob - source/scene.cpp
Require mspgbase now that Image was moved there
[libs/gl.git] / source / scene.cpp
1 /* $Id$
2
3 This file is part of libmspgl
4 Copyright © 2007  Mikko Rasa, Mikkosoft Productions
5 Distributed under the LGPL
6 */
7
8 #include "object.h"
9 #include "objectinstance.h"
10 #include "scene.h"
11
12 using namespace std;
13
14 namespace Msp {
15 namespace GL {
16
17 void Scene::add(const Renderable &r)
18 {
19         if(const ObjectInstance *oi=dynamic_cast<const ObjectInstance *>(&r))
20                 objects[&oi->get_object()].insert(oi);
21         else
22                 renderables.insert(&r);
23 }
24
25 void Scene::remove(const Renderable &r)
26 {
27         if(const ObjectInstance *oi=dynamic_cast<const ObjectInstance *>(&r))
28         {
29                 map<const Object *, set<const ObjectInstance *> >::iterator i=objects.find(&oi->get_object());
30                 if(i!=objects.end())
31                 {
32                         i->second.erase(oi);
33                         if(i->second.empty())
34                                 objects.erase(i);
35                 }
36         }
37         else
38                 renderables.erase(&r);
39 }
40
41 void Scene::render(const Tag &tag) const
42 {
43         for(map<const Object *, set<const ObjectInstance *> >::const_iterator i=objects.begin(); i!=objects.end(); ++i)
44                 if(i->first->has_pass(tag))
45                         i->first->render(i->second.begin(), i->second.end(), tag);
46
47         for(set<const Renderable *>::const_iterator i=renderables.begin(); i!=renderables.end(); ++i)
48                 if((*i)->has_pass(tag))
49                         (*i)->render(tag);
50 }
51
52 } // namespace GL
53 } // namespace Msp