]> git.tdb.fi Git - libs/gl.git/blobdiff - source/effects/environmentmap.h
Implement image-based lighting in PbrMaterial
[libs/gl.git] / source / effects / environmentmap.h
index ff3d6c425414c97ddce3d41e0ebbaf29abee90dc..b671c91b10ee067d8de7e44b24fe2e5aa8d5a58b 100644 (file)
@@ -13,7 +13,7 @@
 namespace Msp {
 namespace GL {
 
-class Resources;
+class Mesh;
 
 /**
 Creates a cube map texture of the surroundings of the renderable.  This texture
@@ -38,15 +38,30 @@ private:
        TextureCube env_tex;
        Renderbuffer depth_buf;
        Face faces[6];
+
+       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;
-       mutable ProgramData shdata;
+       const Sampler &mip_sampler;
+       ProgramData shdata;
        bool rendered;
        unsigned update_interval;
        unsigned update_delay;
 
 public:
-       EnvironmentMap(Resources &, unsigned size, Renderable &rend, Renderable &env);
+       EnvironmentMap(unsigned size, Renderable &rend, Renderable &env);
+       EnvironmentMap(unsigned size, PixelFormat, Renderable &rend, Renderable &env);
+       EnvironmentMap(unsigned size, PixelFormat, unsigned, Renderable &rend, Renderable &env);
+private:
+       void init(unsigned, PixelFormat, unsigned);
 
+public:
        void set_depth_clip(float, float);
 
        /** Sets the interval in frames between environment map updates.  A value of