1 #ifndef MSP_GL_OCCLUDEDSCENE_H_
2 #define MSP_GL_OCCLUDEDSCENE_H_
18 A scene that performs occlusion queries on renderables to skip those that are
19 entirely occluded by others.
21 class OccludedScene: public Scene
27 struct OccludedRenderable
29 Renderable *renderable = 0;
30 const Geometry::BoundingSphere<float, 3> *bounding_sphere = 0;
31 bool in_frustum = false;
32 bool occluder = false;
35 const Mesh &bounding_mesh;
36 const Program &bounding_shader;
38 DepthTest no_depth_write = { LEQUAL, false };
39 std::set<Renderable *> renderables;
40 float occluder_min_size = 0.25f;
41 mutable QueryPool queries;
42 mutable std::vector<OccludedRenderable> occluded_cache;
43 mutable bool cache_dirty = false;
48 virtual void add(Renderable &);
49 virtual void remove(Renderable &);
52 void populate_cache() const;
55 virtual void setup_frame(Renderer &);
56 virtual void finish_frame();
58 virtual void render(Renderer &, Tag = Tag()) const;