]> git.tdb.fi Git - libs/gl.git/blob - source/scene.h
Add a Loader for Scene, and a matching Blender exporter
[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
8 namespace Msp {
9 namespace GL {
10
11 class Culler;
12
13 /**
14 Scenes are containers for other Renderables.  This is a base class that can't
15 be instantiated.  Examples of available Scene types are SimpleScene,
16 InstancedScene and OrderedScene.
17 */
18 class Scene: public Renderable
19 {
20 public:
21         class Loader: public DataFile::CollectionObjectLoader<Scene>
22         {
23         public:
24                 Loader(Scene &, Collection &);
25
26         private:
27                 void object(const std::string &);
28         };
29
30 protected:
31         std::list<Renderable *> owned_data;
32         std::list<Culler *> cullers;
33
34         Scene() { }
35 private:
36         Scene(const Scene &);
37         Scene &operator=(const Scene &);
38 public:
39         virtual ~Scene();
40
41         virtual void add(const Renderable &) = 0;
42         virtual void remove(const Renderable &) = 0;
43
44         void add_culler(Culler &);
45         void remove_culler(Culler &);
46
47         using Renderable::render;
48         virtual void render(const Tag & = Tag()) const;
49
50 protected:
51         virtual void setup_cullers(const Renderer &) const;
52         virtual bool cull(const Renderer &, const Renderable &) const;
53 };
54
55 } // namespace GL
56 } // namespace Msp
57
58 #endif