X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Feffects%2Fenvironmentmap.cpp;h=7590579192b868951014adfa8072f71de493ba1a;hb=7ab8bc0724f40b46d7f5da1bcb05ab6d0cecbb43;hp=b1a50ecc720df131be3226e96cd59b3384680e85;hpb=84e0e55710123e54617d342df852007f8b60af24;p=libs%2Fgl.git diff --git a/source/effects/environmentmap.cpp b/source/effects/environmentmap.cpp index b1a50ecc..75905791 100644 --- a/source/effects/environmentmap.cpp +++ b/source/effects/environmentmap.cpp @@ -13,12 +13,12 @@ using namespace std; namespace Msp { namespace GL { -EnvironmentMap::EnvironmentMap(unsigned s, PixelFormat f, Renderable &r, Renderable &e): - EnvironmentMap(s, f, 1, r, e) +EnvironmentMap::EnvironmentMap(unsigned s, PixelFormat f, Renderable &c, Renderable &e): + EnvironmentMap(s, f, 1, c, e) { } -EnvironmentMap::EnvironmentMap(unsigned s, PixelFormat f, unsigned l, Renderable &r, Renderable &e): - Effect(r), +EnvironmentMap::EnvironmentMap(unsigned s, PixelFormat f, unsigned l, Renderable &c, Renderable &e): + Effect(c), size(s), environment(e), irradiance_shprog(Resources::get_global().get("_envmap_irradiance.glsl.shader")), @@ -52,10 +52,10 @@ EnvironmentMap::EnvironmentMap(unsigned s, PixelFormat f, unsigned l, Renderable if(l>1) { specular_fbos.resize(l-1); - for(unsigned i=1; i face_matrices[6]; @@ -106,7 +106,7 @@ void EnvironmentMap::setup_frame(Renderer &renderer) return; rendered = true; - renderable.setup_frame(renderer); + content.setup_frame(renderer); if(update_delay) { @@ -124,7 +124,7 @@ void EnvironmentMap::setup_frame(Renderer &renderer) center = fixed_position; else { - const Matrix *matrix = renderable.get_matrix(); + const Matrix *matrix = content.get_matrix(); if(!matrix) return; @@ -141,15 +141,17 @@ void EnvironmentMap::setup_frame(Renderer &renderer) environment.render(renderer); } + renderer.set_pipeline_key(this); renderer.set_framebuffer(&irradiance_fbo); renderer.set_shader_program(&irradiance_shprog, &prefilter_shdata); - renderer.set_texture("environment_map", &env_tex, &sampler); + renderer.set_texture("environment_map", &env_tex, 0, &sampler); fullscreen_mesh.draw(renderer); renderer.set_shader_program(&specular_shprog); for(unsigned i=0; i(i+1)/specular_fbos.size())); + renderer.set_pipeline_key(this, 1+i); renderer.set_framebuffer(&specular_fbos[i]); fullscreen_mesh.draw(renderer); } @@ -160,7 +162,7 @@ void EnvironmentMap::finish_frame() if(rendered) { rendered = false; - renderable.finish_frame(); + content.finish_frame(); environment.finish_frame(); } } @@ -170,14 +172,14 @@ void EnvironmentMap::render(Renderer &renderer, Tag tag) const if(in_setup_frame) return; if(!is_enabled_for_method(tag)) - return renderable.render(renderer, tag); + return content.render(renderer, tag); Renderer::Push _push_rend(renderer); renderer.set_texture("environment_map", &env_tex, &mip_sampler); renderer.set_texture("irradiance_map", &irradiance, &sampler); renderer.add_shader_data(shdata); - renderable.render(renderer, tag); + content.render(renderer, tag); } void EnvironmentMap::set_debug_name(const string &name) @@ -216,6 +218,8 @@ EnvironmentMap *EnvironmentMap::Template::create(const map env_map->set_fixed_position(fixed_position); env_map->set_depth_clip(near_clip, far_clip); + create_base(*env_map); + return env_map.release(); }