X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fshadowmap.h;h=11407462c3e1922c48cd9bb0b3725829e207f595;hb=8c24084524198e23d65058454001ffb0bf20e94f;hp=17e17ca9ce940344713c558f8339d9c809fdef92;hpb=41339bc44d076569c680b2c24c75b30ef1254c1b;p=libs%2Fgl.git diff --git a/source/shadowmap.h b/source/shadowmap.h index 17e17ca9..11407462 100644 --- a/source/shadowmap.h +++ b/source/shadowmap.h @@ -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