X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Feffects%2Fenvironmentmap.cpp;h=782a3d2ab0845b4815520852de8436b8b86c0fb5;hb=5542f100cd82561aae4605dfca5a58b0eec8e2ae;hp=315390b1ca81664c47a2a5c940ef445ee94faa97;hpb=f19366d32cc29287a2730cfba90893e407754081;p=libs%2Fgl.git diff --git a/source/effects/environmentmap.cpp b/source/effects/environmentmap.cpp index 315390b1..782a3d2a 100644 --- a/source/effects/environmentmap.cpp +++ b/source/effects/environmentmap.cpp @@ -17,6 +17,7 @@ EnvironmentMap::EnvironmentMap(unsigned s, PixelFormat f, Renderable &r, Rendera EnvironmentMap::EnvironmentMap(unsigned s, PixelFormat f, unsigned l, Renderable &r, Renderable &e): Effect(r), + size(s), environment(e), irradiance_shprog(Resources::get_global().get("_envmap_irradiance.glsl.shader")), specular_shprog(Resources::get_global().get("_envmap_specular.glsl.shader")), @@ -27,11 +28,6 @@ EnvironmentMap::EnvironmentMap(unsigned s, PixelFormat f, unsigned l, Renderable if(!l || (1U<<(l-1))>=s) throw invalid_argument("EnvironmentMap::EnvironmentMap"); - size = s; - rendered = false; - update_interval = 1; - update_delay = 0; - env_tex.storage(f, size, l); depth_buf.storage(DEPTH_COMPONENT32F, size, size, 1); for(unsigned i=0; i<6; ++i) @@ -79,6 +75,12 @@ EnvironmentMap::EnvironmentMap(unsigned s, PixelFormat f, unsigned l, Renderable shdata.uniform("env_world_matrix", LinAl::SquareMatrix::identity()); } +void EnvironmentMap::set_fixed_position(const Vector3 &p) +{ + fixed_position = p; + use_fixed_pos = true; +} + void EnvironmentMap::set_depth_clip(float n, float f) { for(unsigned i=0; i<6; ++i) @@ -113,16 +115,22 @@ void EnvironmentMap::setup_frame(Renderer &renderer) update_delay = update_interval-1; environment.setup_frame(renderer); - const Matrix *matrix = renderable.get_matrix(); - if(!matrix) - return; + Vector3 center; + if(use_fixed_pos) + center = fixed_position; + else + { + const Matrix *matrix = renderable.get_matrix(); + if(!matrix) + return; + + center = matrix->column(3).slice<3>(0); + } Renderer::Push push(renderer); Renderer::Exclude exclude1(renderer, renderable); Renderer::Exclude exclude2(renderer, *this); - Vector3 center = matrix->column(3).slice<3>(0); - for(unsigned i=0; i<6; ++i) { faces[i].camera.set_position(center); @@ -157,7 +165,7 @@ void EnvironmentMap::finish_frame() void EnvironmentMap::render(Renderer &renderer, Tag tag) const { - if(!enabled_passes.count(tag)) + if(!enabled_methods.count(tag)) return renderer.render(renderable, tag); Renderer::Push _push_rend(renderer); @@ -171,7 +179,7 @@ void EnvironmentMap::render(Renderer &renderer, Tag tag) const void EnvironmentMap::set_debug_name(const string &name) { #ifdef DEBUG - env_tex.set_debug_name(name+"/environment.texcb"); + env_tex.set_debug_name(name+"/environment.tex"); depth_buf.set_debug_name(name+"/environment_depth.rbuf"); static const char *const face_names[] = { "X+", "X-", "Y+", "Y-", "Z+", "Z-" }; for(unsigned i=0; i<6; ++i) @@ -180,7 +188,7 @@ void EnvironmentMap::set_debug_name(const string &name) faces[i].camera.set_debug_name(format("%s/%s.camera", name, face_names[i])); } - irradiance.set_debug_name(name+"/irradiance.texcb"); + irradiance.set_debug_name(name+"/irradiance.tex"); irradiance_fbo.set_debug_name(name+" [FBO:irradiance]"); for(unsigned i=0; i