]> git.tdb.fi Git - libs/gl.git/blobdiff - source/effects/environmentmap.h
Use default member initializers for simple types
[libs/gl.git] / source / effects / environmentmap.h
index 1aaa26b7e68f425b29a4fe7f2e3a442cd9792eb6..f9f4cf5306e3af142be170b3714ad84c91800e8e 100644 (file)
@@ -1,56 +1,82 @@
 #ifndef MSP_GL_ENVIRONMENTMAP_H_
 #define MSP_GL_ENVIRONMENTMAP_H_
 
 #ifndef MSP_GL_ENVIRONMENTMAP_H_
 #define MSP_GL_ENVIRONMENTMAP_H_
 
+#include <vector>
 #include "camera.h"
 #include "effect.h"
 #include "framebuffer.h"
 #include "camera.h"
 #include "effect.h"
 #include "framebuffer.h"
-#include "matrix.h"
 #include "programdata.h"
 #include "programdata.h"
-#include "renderbuffer.h"
+#include "texture2d.h"
 #include "texturecube.h"
 #include "texturecube.h"
-#include "vector.h"
 
 namespace Msp {
 namespace GL {
 
 
 namespace Msp {
 namespace GL {
 
-class Renderable;
-class Resources;
+class Mesh;
+class Sampler;
 
 /**
 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;
        unsigned size;
        Renderable &environment;
        TextureCube env_tex;
-       Renderbuffer depth_buf;
-       Framebuffer fbo[6];
+       Texture2D depth_buf;
+       Face faces[6];
+       Vector3 fixed_position;
+       bool use_fixed_pos = false;
+
+       TextureCube irradiance;
+       const Program &irradiance_shprog;
+       Framebuffer irradiance_fbo;
+       const Program &specular_shprog;
+       std::vector<Framebuffer> specular_fbos;
+       ProgramData prefilter_shdata;
+       const Mesh &fullscreen_mesh;
+
        const Sampler &sampler;
        const Sampler &sampler;
-       Camera camera;
-       mutable ProgramData shdata;
-       bool rendered;
-       unsigned update_interval;
-       unsigned update_delay;
+       const Sampler &mip_sampler;
+       ProgramData shdata;
+       bool rendered = false;
+       unsigned update_interval = 1;
+       unsigned update_delay = 0;
 
 public:
 
 public:
-       EnvironmentMap(Resources &, unsigned size, Renderable &rend, Renderable &env);
+       EnvironmentMap(unsigned size, PixelFormat, Renderable &rend, Renderable &env);
+       EnvironmentMap(unsigned size, PixelFormat, unsigned, Renderable &rend, Renderable &env);
+
+       void set_fixed_position(const Vector3 &);
 
        void set_depth_clip(float, float);
 
        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);
        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();
 
        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;
+
+       virtual void set_debug_name(const std::string &);
 };
 
 } // namespace GL
 };
 
 } // namespace GL