]> git.tdb.fi Git - libs/gl.git/blob - source/render/orderedscene.cpp
Redesign InstanceArray
[libs/gl.git] / source / render / orderedscene.cpp
1 #include <msp/core/algorithm.h>
2 #include "camera.h"
3 #include "orderedscene.h"
4 #include "renderer.h"
5
6 namespace Msp {
7 namespace GL {
8
9 void OrderedScene::add(Renderable &r)
10 {
11         content.push_back(&r);
12 }
13
14 void OrderedScene::remove(Renderable &r)
15 {
16         auto end = std::remove(content.begin(), content.end(), &r);
17         content.erase(end, content.end());
18 }
19
20 void OrderedScene::prepend(Renderable &r)
21 {
22         content.insert(content.begin(), &r);
23 }
24
25 void OrderedScene::insert(unsigned index, Renderable &r)
26 {
27         auto i = content.begin();
28         for(; (i!=content.end() && index); ++i, --index) ;
29         content.insert(i, &r);
30 }
31
32 void OrderedScene::insert_after(Renderable &after, Renderable &r)
33 {
34         auto i = find(content, &after);
35         content.insert(i, &r);
36 }
37
38 void OrderedScene::setup_frame(Renderer &renderer)
39 {
40         for(Renderable *r: content)
41                 r->setup_frame(renderer);
42 }
43
44 void OrderedScene::finish_frame()
45 {
46         for(Renderable *r: content)
47                 r->finish_frame();
48 }
49
50 void OrderedScene::render(Renderer &renderer, Tag tag) const
51 {
52         if(const Camera *camera = renderer.get_camera())
53         {
54                 for(Renderable *r: content)
55                         if(camera->is_in_frustum(*r))
56                                 r->render(renderer, tag);
57         }
58         else
59         {
60                 for(Renderable *r: content)
61                         r->render(renderer, tag);
62         }
63 }
64
65 } // namespace GL
66 } // namespace Msp