]> git.tdb.fi Git - libs/gl.git/blob - source/scene.h
Remove the culler abstraction and move frustum culling to Scene
[libs/gl.git] / source / scene.h
1 #ifndef MSP_GL_SCENE_H_
2 #define MSP_GL_SCENE_H_
3
4 #include <list>
5 #include <msp/datafile/objectloader.h>
6 #include "renderable.h"
7 #include "vector.h"
8
9 namespace Msp {
10 namespace GL {
11
12 /**
13 Scenes are containers for other Renderables.  This is a base class that can't
14 be instantiated.  Examples of available Scene types are SimpleScene,
15 InstancedScene and OrderedScene.
16 */
17 class Scene: public Renderable
18 {
19 public:
20         class Loader: public DataFile::CollectionObjectLoader<Scene>
21         {
22         public:
23                 Loader(Scene &, Collection &);
24
25         private:
26                 void object(const std::string &);
27         };
28
29 protected:
30         std::list<Renderable *> owned_data;
31         mutable Vector3 frustum_edges[4];
32
33         Scene() { }
34 private:
35         Scene(const Scene &);
36         Scene &operator=(const Scene &);
37 public:
38         virtual ~Scene();
39
40         virtual void add(const Renderable &) = 0;
41         virtual void remove(const Renderable &) = 0;
42
43         using Renderable::render;
44         virtual void render(const Tag & = Tag()) const;
45
46 protected:
47         void setup_frustum(const Renderer &) const;
48         bool frustum_cull(const Renderer &, const Renderable &) const;
49 };
50
51 } // namespace GL
52 } // namespace Msp
53
54 #endif