]> 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 a13bea3faeeea6eaea41e1d594700c48437a16b1..f9f4cf5306e3af142be170b3714ad84c91800e8e 100644 (file)
@@ -1,19 +1,19 @@
 #ifndef MSP_GL_ENVIRONMENTMAP_H_
 #define MSP_GL_ENVIRONMENTMAP_H_
 
+#include <vector>
 #include "camera.h"
 #include "effect.h"
 #include "framebuffer.h"
-#include "matrix.h"
 #include "programdata.h"
-#include "renderbuffer.h"
+#include "texture2d.h"
 #include "texturecube.h"
-#include "vector.h"
 
 namespace Msp {
 namespace GL {
 
-class Resources;
+class Mesh;
+class Sampler;
 
 /**
 Creates a cube map texture of the surroundings of the renderable.  This texture
@@ -27,29 +27,56 @@ 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];
+       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;
-       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:
-       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);
+
+       /** 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 &, Tag = Tag()) const;
+
+       virtual void set_debug_name(const std::string &);
 };
 
 } // namespace GL