]> git.tdb.fi Git - libs/gl.git/blobdiff - source/effects/environmentmap.h
Make ShadowMap's finish_frame run only once per frame
[libs/gl.git] / source / effects / environmentmap.h
index c54968de35d5cfc7bf11be0ee14559c34cf766fc..56c76c459f2b6d84811fb52aeea9cea3c16a4587 100644 (file)
 namespace Msp {
 namespace GL {
 
 namespace Msp {
 namespace GL {
 
-class Renderable;
+class Resources;
 
 /**
 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.
 
 
 /**
 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
 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:
 environment.
 */
 class EnvironmentMap: public Effect
 {
 private:
+       struct Face
+       {
+               Framebuffer fbo;
+               Camera camera;
+       };
+
        unsigned size;
        Renderable &environment;
        TextureCube env_tex;
        Renderbuffer depth_buf;
        unsigned size;
        Renderable &environment;
        TextureCube env_tex;
        Renderbuffer depth_buf;
-       Framebuffer fbo[6];
-       RefPtr<Sampler> sampler;
-       Camera camera;
+       Face faces[6];
+       const Sampler &sampler;
        mutable ProgramData shdata;
        bool rendered;
        unsigned update_interval;
        unsigned update_delay;
 
 public:
        mutable ProgramData shdata;
        bool rendered;
        unsigned update_interval;
        unsigned update_delay;
 
 public:
-       EnvironmentMap(unsigned size, Renderable &rend, Renderable &env);
+       EnvironmentMap(Resources &, unsigned size, Renderable &rend, Renderable &env);
 
        void set_depth_clip(float, float);
        void set_update_interval(unsigned);
 
        void set_depth_clip(float, float);
        void set_update_interval(unsigned);
@@ -49,7 +54,7 @@ public:
        virtual void setup_frame(Renderer &);
        virtual void finish_frame();
 
        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
 };
 
 } // namespace GL