X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Frender%2Foccludedscene.h;h=6efb354e37706cdcf4bece658678638f28f382ff;hp=000673ddfbb3740f76f9cf511c4606d7a5ec8d0e;hb=38712d8ecc57d043a2419ffbaeeb57f7a6586f14;hpb=9a63244c1342337915c4610401a24c09fa72cc3d diff --git a/source/render/occludedscene.h b/source/render/occludedscene.h index 000673dd..6efb354e 100644 --- a/source/render/occludedscene.h +++ b/source/render/occludedscene.h @@ -3,44 +3,47 @@ #include #include -#include "mesh.h" -#include "program.h" +#include "blend.h" +#include "depthtest.h" +#include "query.h" #include "scene.h" namespace Msp { namespace GL { +class Mesh; +class Program; + /** A scene that performs occlusion queries on renderables to skip those that are entirely occluded by others. */ class OccludedScene: public Scene { +public: + using Scene::Loader; + private: struct OccludedRenderable { - Renderable *renderable; - const Geometry::BoundingSphere *bounding_sphere; - bool in_frustum; - bool occluder; - unsigned query; - - OccludedRenderable(); + Renderable *renderable = 0; + const Geometry::BoundingSphere *bounding_sphere = 0; + bool in_frustum = false; + bool occluder = false; }; - typedef std::set RenderableSet; - typedef std::vector OccludedArray; - const Mesh &bounding_mesh; const Program &bounding_shader; - RenderableSet renderables; - float occluder_min_size; - mutable OccludedArray occluded_cache; - mutable bool cache_dirty; + Blend no_color_write; + DepthTest no_depth_write = { LEQUAL, false }; + std::set renderables; + float occluder_min_size = 0.25f; + mutable QueryPool queries; + mutable std::vector occluded_cache; + mutable bool cache_dirty = false; public: - OccludedScene(Resources &); - ~OccludedScene(); + OccludedScene(); virtual void add(Renderable &); virtual void remove(Renderable &); @@ -52,7 +55,7 @@ public: virtual void setup_frame(Renderer &); virtual void finish_frame(); - virtual void render(Renderer &, const Tag & = Tag()) const; + virtual void render(Renderer &, Tag = Tag()) const; }; } // namespace GL