]> git.tdb.fi Git - libs/gl.git/blob - source/instancescene.h
Add a resource collection class
[libs/gl.git] / source / instancescene.h
1 #ifndef MSP_GL_INSTANCESCENE_H_
2 #define MSP_GL_INSTANCESCENE_H_
3
4 #include <map>
5 #include <set>
6 #include "scene.h"
7
8 namespace Msp {
9 namespace GL {
10
11 /**
12 A Scene optimized for rendering instanced Renderables, such as ObjectInstances.
13 All Renderables with the same instance key are rendered consecutively; within
14 the same key rendering order is unspecified.
15 */
16 class InstanceScene: public Scene
17 {
18 private:
19         typedef std::set<const Renderable *> RenderableSet;
20         typedef std::map<long, RenderableSet> InstanceMap;
21
22         InstanceMap renderables;
23
24 public:
25         virtual void add(const Renderable &);
26         virtual void remove(const Renderable &);
27
28         virtual void setup_frame() const;
29         virtual void finish_frame() const;
30
31         using Scene::render;
32         virtual void render(Renderer &, const Tag &tag = Tag()) const;
33 };
34
35 } // namespace GL
36 } // namespace Msp
37
38 #endif