+++ /dev/null
-#ifndef SHADOWMAP_H_
-#define SHADOWMAP_H_
-
-#include "effect.h"
-#include "framebuffer.h"
-#include "programdata.h"
-#include "texture2d.h"
-#include "vector.h"
-
-namespace Msp {
-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 Light &light;
- mutable Framebuffer fbo;
- mutable Matrix light_matrix;
- mutable Matrix view_matrix;
- mutable Matrix shadow_matrix;
- unsigned unit;
- Texture2D depth_buf;
- Vector3 target;
- float radius;
- float depth_bias;
- mutable ProgramData shdata;
- mutable bool rendered;
-
-public:
- 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);
-
- /** Sets the darkness of shadows. Must be in the range between 0.0 and 1.0,
- inclusive. Only usable with shaders, and provided through the
- shadow_darkness uniform. */
- void set_darkness(float);
-
- /** Sets a distance beyond objects from which the shadow starts. Expressed
- in pixel-sized units. Must be positive; values less than 1.0 are not
- recommended. Larger values produce less depth artifacts, but may prevent
- thin objects from casting shadows on nearby sufraces. */
- void set_depth_bias(float);
-
- /** Sets the texture unit to bind the shadow map to during the rendering
- phase. Provided to shaders through the shadow and shadow_unit uniforms.
- The default is texture unit 3. */
- void set_texture_unit(unsigned);
-
- virtual void setup_frame() const;
- virtual void finish_frame() const;
-
- virtual void render(Renderer &, const Tag &) const;
-};
-
-} // namespace GL
-} // namespace Msp
-
-#endif