X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fenvironmentmap.cpp;h=ec406d157681baec5689ef07538f44f6e6f2dd82;hb=c225025178a397a6ec7c21b686e3758f5f5d3cb6;hp=8a1dfe399acfae7260c79aa33022a2662337f7b9;hpb=60ca0094db80ea88ad546c98866f73a8d152e02b;p=libs%2Fgl.git diff --git a/source/environmentmap.cpp b/source/environmentmap.cpp index 8a1dfe39..ec406d15 100644 --- a/source/environmentmap.cpp +++ b/source/environmentmap.cpp @@ -28,7 +28,6 @@ EnvironmentMap::EnvironmentMap(unsigned s, Renderable &r, Renderable &e): camera.set_aspect(1); camera.set_depth_clip(0.1, 100); - shdata.uniform("environment", 4); } void EnvironmentMap::setup_frame() const @@ -40,6 +39,7 @@ void EnvironmentMap::setup_frame() const renderable.setup_frame(); environment.setup_frame(); + Renderer env_renderer(0); const Matrix *matrix = renderable.get_matrix(); Vector3 position = (*matrix)*Vector3(); camera.set_position(position); @@ -50,8 +50,9 @@ void EnvironmentMap::setup_frame() const fbo[i].clear(COLOR_BUFFER_BIT|DEPTH_BUFFER_BIT); camera.set_look_direction(env_tex.get_face_direction(face)); camera.set_up_direction(env_tex.get_t_direction(face)); - Renderer env_renderer(&camera); + env_renderer.begin(&camera); env_renderer.exclude(renderable); + env_renderer.exclude(*this); env_renderer.render(environment); } Framebuffer::unbind(); @@ -72,6 +73,12 @@ void EnvironmentMap::render(Renderer &renderer, const Tag &tag) const if(!enabled_passes.count(tag)) return renderer.render(renderable, tag); + Renderer::Push _push_rend(renderer); + + unsigned unit = renderer.allocate_effect_texunit(); + shdata.uniform("environment", static_cast(unit)); + Bind _bind_env(env_tex, unit); + const Matrix &view_matrix = renderer.get_camera()->get_matrix(); // XXX The camera should maybe have store its own object matrix float env_mdata[9]; @@ -86,15 +93,8 @@ void EnvironmentMap::render(Renderer &renderer, const Tag &tag) const env_mdata[8] = view_matrix[10]; shdata.uniform_matrix3("env_eye_matrix", env_mdata); - env_tex.bind_to(4); - TexUnit::activate(0); - - Renderer::Push _push_rend(renderer); renderer.add_shader_data(shdata); renderer.render(renderable, tag); - - env_tex.unbind_from(4); - TexUnit::activate(0); } } // namespace GL