]> git.tdb.fi Git - libs/gl.git/blob - source/simplescene.cpp
Some cleanup for View and WindowView
[libs/gl.git] / source / simplescene.cpp
1 #include "renderer.h"
2 #include "simplescene.h"
3
4 namespace Msp {
5 namespace GL {
6
7 void SimpleScene::add(Renderable &r)
8 {
9         // Add to cache as well if the cache is valid
10         if(renderables.insert(&r).second && !cache.empty())
11                 cache.push_back(&r);
12 }
13
14 void SimpleScene::remove(Renderable &r)
15 {
16         renderables.erase(&r);
17         cache.clear();
18 }
19
20 void SimpleScene::populate_cache() const
21 {
22         if(cache.empty() && !renderables.empty())
23         {
24                 cache.reserve(renderables.size());
25                 cache.insert(cache.end(), renderables.begin(), renderables.end());
26         }
27 }
28
29 void SimpleScene::setup_frame(Renderer &renderer)
30 {
31         populate_cache();
32         for(RenderableArray::const_iterator i=cache.begin(); i!=cache.end(); ++i)
33                 (*i)->setup_frame(renderer);
34 }
35
36 void SimpleScene::finish_frame()
37 {
38         for(RenderableArray::const_iterator i=cache.begin(); i!=cache.end(); ++i)
39                 (*i)->finish_frame();
40 }
41
42 void SimpleScene::render(Renderer &renderer, const Tag &tag) const
43 {
44         populate_cache();
45         if(setup_frustum(renderer))
46         {
47                 for(RenderableArray::const_iterator i=cache.begin(); i!=cache.end(); ++i)
48                         if(!frustum_cull(**i))
49                                 renderer.render(**i, tag);
50         }
51         else
52         {
53                 for(RenderableArray::const_iterator i=cache.begin(); i!=cache.end(); ++i)
54                         renderer.render(**i, tag);
55         }
56 }
57
58 } // namespace GL
59 } // namespace Msp