]> git.tdb.fi Git - libs/gl.git/blobdiff - source/effects/environmentmap.h
Access builtin resources through a global instance
[libs/gl.git] / source / effects / environmentmap.h
index c54968de35d5cfc7bf11be0ee14559c34cf766fc..f22a5b4b8fea673e658cb7cf01ccea1aeada2760 100644 (file)
 namespace Msp {
 namespace GL {
 
-class Renderable;
-
 /**
 Creates a cube map texture of the surroundings of the renderable.  This texture
 can then be used to implement effects such as reflections or refractions.
 
-If the EnvironmentMap is used in a Pipeline, it's worth noting that the cube
+If the EnvironmentMap is used in a Sequence, it's worth noting that the cube
 map will be prepared outside of any rendering pass.  It's recommended to use
-another Pipeline to define which passes should be used to render the
+another Sequence to define which passes should be used to render the
 environment.
 */
 class EnvironmentMap: public Effect
 {
 private:
+       struct Face
+       {
+               Framebuffer fbo;
+               Camera camera;
+       };
+
        unsigned size;
        Renderable &environment;
        TextureCube env_tex;
        Renderbuffer depth_buf;
-       Framebuffer fbo[6];
-       RefPtr<Sampler> sampler;
-       Camera camera;
-       mutable ProgramData shdata;
+       Face faces[6];
+       const Sampler &sampler;
+       ProgramData shdata;
        bool rendered;
        unsigned update_interval;
        unsigned update_delay;
 
 public:
        EnvironmentMap(unsigned size, Renderable &rend, Renderable &env);
+       EnvironmentMap(unsigned size, PixelFormat, Renderable &rend, Renderable &env);
+private:
+       void init(unsigned, PixelFormat);
 
+public:
        void set_depth_clip(float, float);
+
+       /** Sets the interval in frames between environment map updates.  A value of
+       0 means an update is only done when manually requested. */
        void set_update_interval(unsigned);
+
+       /** Request that the environment map is updated on the next frame. */
        void queue_update();
 
        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