X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fenvironmentmap.cpp;h=1cc589143e78da5cc1d47cf456f2f6360613d2ac;hp=b55dd2c7c6cca956d000a4823859b102b9513086;hb=d5c26741ed3952dd54c8a7f43ad42ba79bf2d977;hpb=7cf5ebbc9d91d09d0664598d3fb88606c3307deb diff --git a/source/environmentmap.cpp b/source/environmentmap.cpp index b55dd2c7..1cc58914 100644 --- a/source/environmentmap.cpp +++ b/source/environmentmap.cpp @@ -1,8 +1,11 @@ +#include #include #include "environmentmap.h" #include "renderer.h" #include "texunit.h" +using namespace std; + namespace Msp { namespace GL { @@ -10,9 +13,11 @@ EnvironmentMap::EnvironmentMap(unsigned s, Renderable &r, Renderable &e): Effect(r), size(s), environment(e), - rendered(false) + rendered(false), + update_interval(1), + update_delay(0) { - env_tex.storage(RGB, size); + env_tex.storage(RGB, size, 1); env_tex.set_wrap(CLAMP_TO_EDGE); env_tex.set_min_filter(LINEAR); depth_buf.storage(DEPTH_COMPONENT, size, size); @@ -23,13 +28,28 @@ EnvironmentMap::EnvironmentMap(unsigned s, Renderable &r, Renderable &e): fbo[i].require_complete(); } - // XXX Make the depth range configurable camera.set_field_of_view(Geometry::Angle::right()); camera.set_aspect_ratio(1); camera.set_depth_clip(0.1, 100); } +void EnvironmentMap::set_depth_clip(float n, float f) +{ + camera.set_depth_clip(n, f); +} + +void EnvironmentMap::set_update_interval(unsigned i) +{ + update_interval = i; + update_delay = min(update_delay, update_interval-1); +} + +void EnvironmentMap::queue_update() +{ + update_delay = 0; +} + void EnvironmentMap::setup_frame(Renderer &renderer) { if(rendered) @@ -37,6 +57,14 @@ void EnvironmentMap::setup_frame(Renderer &renderer) rendered = true; renderable.setup_frame(renderer); + + if(update_delay) + { + if(update_interval) + --update_delay; + return; + } + update_delay = update_interval-1; environment.setup_frame(renderer); const Matrix *matrix = renderable.get_matrix();