X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fenvironmentmap.cpp;h=b55dd2c7c6cca956d000a4823859b102b9513086;hp=1e6f639a3eb8f89bb1037b94f386fe8c59cfaf1d;hb=0f890ce60a560ba2ccc0719229be304bb597d919;hpb=50a0c7fd661fe6bfa3f929ad66e47cfab4a0fb87 diff --git a/source/environmentmap.cpp b/source/environmentmap.cpp index 1e6f639a..b55dd2c7 100644 --- a/source/environmentmap.cpp +++ b/source/environmentmap.cpp @@ -25,24 +25,31 @@ EnvironmentMap::EnvironmentMap(unsigned s, Renderable &r, Renderable &e): // XXX Make the depth range configurable camera.set_field_of_view(Geometry::Angle::right()); - camera.set_aspect(1); + camera.set_aspect_ratio(1); camera.set_depth_clip(0.1, 100); } -void EnvironmentMap::setup_frame() const +void EnvironmentMap::setup_frame(Renderer &renderer) { if(rendered) return; rendered = true; - renderable.setup_frame(); - environment.setup_frame(); + renderable.setup_frame(renderer); + environment.setup_frame(renderer); - Renderer env_renderer(0); const Matrix *matrix = renderable.get_matrix(); - Vector3 position = (*matrix)*Vector3(); - camera.set_position(position); + if(!matrix) + return; + + Renderer::Push push(renderer); + Renderer::Exclude exclude1(renderer, renderable); + Renderer::Exclude exclude2(renderer, *this); + + camera.set_position(matrix->column(3).slice<3>(0)); + + BindRestore bind_fbo(fbo[0]); for(unsigned i=0; i<6; ++i) { TextureCubeFace face = TextureCube::enumerate_faces(i); @@ -50,15 +57,12 @@ 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)); - env_renderer.begin(&camera); - env_renderer.exclude(renderable); - env_renderer.exclude(*this); - env_renderer.render(environment); + renderer.set_camera(camera); + renderer.render(environment); } - Framebuffer::unbind(); } -void EnvironmentMap::finish_frame() const +void EnvironmentMap::finish_frame() { if(rendered) {