]> git.tdb.fi Git - libs/gl.git/blob - source/scene.cpp
Add interfaces for culling
[libs/gl.git] / source / scene.cpp
1 #include "culler.h"
2 #include "renderer.h"
3 #include "scene.h"
4
5 using namespace std;
6
7 namespace Msp {
8 namespace GL {
9
10 void Scene::add_culler(Culler &c)
11 {
12         cullers.push_back(&c);
13 }
14
15 void Scene::remove_culler(Culler &c)
16 {
17         list<Culler *>::iterator i = find(cullers.begin(), cullers.end(), &c);
18         if(i!=cullers.end())
19                 cullers.erase(i);
20 }
21
22 void Scene::render(const Tag &tag) const
23 {
24         Renderer renderer(0);
25         render(renderer, tag);
26 }
27
28 void Scene::setup_cullers(const Renderer &renderer) const
29 {
30         for(list<Culler *>::const_iterator i=cullers.begin(); i!=cullers.end(); ++i)
31                 (*i)->setup_frame(renderer);
32 }
33
34 bool Scene::cull(const Renderer &renderer, const Renderable &renderable) const
35 {
36         for(list<Culler *>::const_iterator i=cullers.begin(); i!=cullers.end(); ++i)
37                 if((*i)->cull(renderer, renderable))
38                         return true;
39         return false;
40 }
41
42 } // namespace GL
43 } // namespace Msp