]> git.tdb.fi Git - libs/gl.git/blob - source/simplescene.cpp
Cache renderables in SimpleScene into a vector
[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(const Renderable &r)
8 {
9         renderables.insert(&r);
10         cache.clear();
11 }
12
13 void SimpleScene::remove(const Renderable &r)
14 {
15         renderables.erase(&r);
16         cache.clear();
17 }
18
19 void SimpleScene::populate_cache() const
20 {
21         if(cache.empty() && !renderables.empty())
22         {
23                 cache.reserve(renderables.size());
24                 cache.insert(cache.end(), renderables.begin(), renderables.end());
25         }
26 }
27
28 void SimpleScene::setup_frame() const
29 {
30         populate_cache();
31         for(RenderableArray::const_iterator i=cache.begin(); i!=cache.end(); ++i)
32                 (*i)->setup_frame();
33 }
34
35 void SimpleScene::finish_frame() const
36 {
37         for(RenderableArray::const_iterator i=cache.begin(); i!=cache.end(); ++i)
38                 (*i)->finish_frame();
39 }
40
41 void SimpleScene::render(Renderer &renderer, const Tag &tag) const
42 {
43         populate_cache();
44         if(setup_frustum(renderer))
45         {
46                 for(RenderableArray::const_iterator i=cache.begin(); i!=cache.end(); ++i)
47                         if(!frustum_cull(**i))
48                                 renderer.render(**i, tag);
49         }
50         else
51         {
52                 for(RenderableArray::const_iterator i=cache.begin(); i!=cache.end(); ++i)
53                         renderer.render(**i, tag);
54         }
55 }
56
57 } // namespace GL
58 } // namespace Msp