--- /dev/null
+#ifndef MSP_GL_ENVIRONMENTMAP_H_
+#define MSP_GL_ENVIRONMENTMAP_H_
+
+#include "camera.h"
+#include "effect.h"
+#include "framebuffer.h"
+#include "matrix.h"
+#include "programdata.h"
+#include "renderbuffer.h"
+#include "texturecube.h"
+#include "vector.h"
+
+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
+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
+environment.
+*/
+class EnvironmentMap: public Effect
+{
+private:
+ unsigned size;
+ Renderable &environment;
+ TextureCube env_tex;
+ Renderbuffer depth_buf;
+ mutable Framebuffer fbo[6];
+ mutable Camera camera;
+ mutable ProgramData shdata;
+ mutable bool rendered;
+
+public:
+ EnvironmentMap(unsigned size, Renderable &rend, Renderable &env);
+
+ virtual void setup_frame() const;
+ virtual void finish_frame() const;
+
+ virtual void render(Renderer &, const Tag &) const;
+};
+
+} // namespace GL
+} // namespace Msp
+
+#endif