]> git.tdb.fi Git - libs/gl.git/blob - source/render/simplescene.h
Add a registry-based generic loader to Scene
[libs/gl.git] / source / render / simplescene.h
1 #ifndef MSP_GL_SIMPLESCENE_H_
2 #define MSP_GL_SIMPLESCENE_H_
3
4 #include <set>
5 #include "scene.h"
6
7 namespace Msp {
8 namespace GL {
9
10 /**
11 A simple yet efficient scene.  Rendering order is unspecified.
12 */
13 class SimpleScene: public Scene
14 {
15 public:
16         using Scene::Loader;
17
18 private:
19         typedef std::set<Renderable *> RenderableSet;
20         typedef std::vector<Renderable *> RenderableArray;
21
22         RenderableSet renderables;
23         mutable RenderableArray cache;
24
25 public:
26         virtual void add(Renderable &);
27         virtual void remove(Renderable &);
28
29 private:
30         void populate_cache() const;
31
32 public:
33         virtual void setup_frame(Renderer &);
34         virtual void finish_frame();
35
36         virtual void render(Renderer &, Tag = Tag()) const;
37 };
38
39 } // namespace GL
40 } // namespace Msp
41
42 #endif