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
-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:
+ struct Face
+ {
+ Framebuffer fbo;
+ Camera camera;
+ };
+
unsigned size;
Renderable &environment;
TextureCube env_tex;
Renderbuffer depth_buf;
- Framebuffer fbo[6];
+ Face faces[6];
const Sampler &sampler;
- Camera camera;
- mutable ProgramData shdata;
+ ProgramData shdata;
bool rendered;
unsigned update_interval;
unsigned update_delay;
public:
EnvironmentMap(Resources &, unsigned size, Renderable &rend, Renderable &env);
+ EnvironmentMap(Resources &, unsigned size, PixelFormat, Renderable &rend, Renderable &env);
+private:
+ void init(unsigned, PixelFormat);
+public:
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 &, const Tag & = Tag()) const;
+ virtual void render(Renderer &, Tag = Tag()) const;
};
} // namespace GL