]> git.tdb.fi Git - libs/gl.git/blob - source/render/simplescene.cpp
Use constructor delegation instead of init functions when possible
[libs/gl.git] / source / render / 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(Renderable *r: cache)
33                 r->setup_frame(renderer);
34 }
35
36 void SimpleScene::finish_frame()
37 {
38         for(Renderable *r: cache)
39                 r->finish_frame();
40 }
41
42 void SimpleScene::render(Renderer &renderer, Tag tag) const
43 {
44         populate_cache();
45         if(setup_frustum(renderer))
46         {
47                 for(Renderable *r: cache)
48                         if(!frustum_cull(*r))
49                                 renderer.render(*r, tag);
50         }
51         else
52         {
53                 for(Renderable *r: cache)
54                         renderer.render(*r, tag);
55         }
56 }
57
58 } // namespace GL
59 } // namespace Msp