]> git.tdb.fi Git - libs/gl.git/blobdiff - source/environmentmap.h
Add an EnvironmentMap effect
[libs/gl.git] / source / environmentmap.h
diff --git a/source/environmentmap.h b/source/environmentmap.h
new file mode 100644 (file)
index 0000000..9c4c4d1
--- /dev/null
@@ -0,0 +1,51 @@
+#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