]> git.tdb.fi Git - libs/gl.git/blobdiff - source/shadowmap.h
Get all blocks for the program before applying them
[libs/gl.git] / source / shadowmap.h
index 17e17ca9ce940344713c558f8339d9c809fdef92..11407462c3e1922c48cd9bb0b3725829e207f595 100644 (file)
@@ -1,10 +1,3 @@
-/* $Id$
-
-This file is part of libmspgl
-Copyright © 2009  Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
 #ifndef SHADOWMAP_H_
 #define SHADOWMAP_H_
 
@@ -19,24 +12,36 @@ namespace GL {
 class Light;
 class Scene;
 
+/**
+Creates shadows on a Scene through a shadow map texture.  In the preparation
+phase, the scene is rendered to a depth texture from the point of view of the
+lightsource.  This texture is then used in the rendering phase together with
+texture coordinate generation to determine whether each fragment is lit.
+*/
 class ShadowMap: public Effect
 {
 private:
        unsigned size;
-       const Scene &scene;
        const Light &light;
-       Framebuffer fbo;
-public:
+       mutable Framebuffer fbo;
+       unsigned unit;
        Texture2D depth_buf;
-private:
        Vector3 target;
        float radius;
 
 public:
-       ShadowMap(unsigned, const Scene &, const Light &);
+       ShadowMap(unsigned, const Renderable &, const Light &);
+
+       /** Sets the ShadowMap target point and radius.  The transformation matrix is
+       computed so that a sphere with the specified parameters will be completely
+       covered by the ShadowMap. */
        void set_target(const Vector3 &, float);
-       virtual void prepare();
-       virtual void cleanup();
+
+       /** Sets the texture unit to bind the shadow map to during the rendering
+       phase.  The default is texture unit 3. */
+       void set_texture_unit(unsigned);
+
+       virtual void render(Renderer &, const Tag &) const;
 };
 
 } // namespace GL