]> git.tdb.fi Git - libs/gl.git/blobdiff - source/effects/shadowmap.h
Use default member initializers for simple types
[libs/gl.git] / source / effects / shadowmap.h
index 9fc0f4497ac1f160d18062c54bcdf616f80dd99c..611f56f51040a2204055e29f37d0e67a68d48b7c 100644 (file)
@@ -1,17 +1,19 @@
 #ifndef MSP_GL_SHADOWMAP_H_
 #define MSP_GL_SHADOWMAP_H_
 
+#include "camera.h"
 #include "effect.h"
 #include "framebuffer.h"
 #include "programdata.h"
+#include "rect.h"
 #include "texture2d.h"
 #include "vector.h"
 
 namespace Msp {
 namespace GL {
 
+class DirectionalLight;
 class Light;
-class Resources;
 
 /**
 Creates shadows on a renderable through a shadow map texture.  In the setup
@@ -22,20 +24,36 @@ texture coordinate generation to determine whether each fragment is lit.
 class ShadowMap: public Effect
 {
 private:
-       unsigned size;
-       const Light &light;
+       struct ShadowedLight
+       {
+               const Light *light;
+               unsigned index;
+               Rect region;
+               Camera shadow_camera;
+       };
+
+       unsigned width;
+       unsigned height;
+       const Lighting *lighting;
+       std::vector<ShadowedLight> lights;
+       Renderable &shadow_caster;
        Framebuffer fbo;
-       Matrix shadow_matrix;
        Texture2D depth_buf;
        const Sampler &sampler;
        Vector3 target;
-       float radius;
-       float depth_bias;
-       mutable ProgramData shdata;
-       bool rendered;
+       float radius = 1.0f;
+       float depth_bias = 4.0f;
+       float darkness = 1.0f;
+       ProgramData shdata;
+       bool rendered = false;
+       std::string debug_name;
 
+       ShadowMap(unsigned, unsigned, Renderable &, const Lighting *, Renderable &);
 public:
-       ShadowMap(Resources &, unsigned, Renderable &, const Light &);
+       ShadowMap(unsigned, Renderable &, const DirectionalLight &, Renderable &);
+       ShadowMap(unsigned, unsigned, Renderable &, const Lighting &, Renderable &);
+
+       void add_light(const DirectionalLight &, unsigned);
 
        /** Sets the ShadowMap target point and radius.  The transformation matrix is
        computed so that a sphere with the specified parameters will be completely
@@ -54,12 +72,13 @@ public:
        void set_depth_bias(float);
 
        const Texture2D &get_depth_texture() const { return depth_buf; }
-       const Matrix &get_shadow_matrix() const { return shadow_matrix; }
 
        virtual void setup_frame(Renderer &);
        virtual void finish_frame();
 
        virtual void render(Renderer &, Tag = Tag()) const;
+
+       virtual void set_debug_name(const std::string &);
 };
 
 } // namespace GL