X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Fenvironmentmap.cpp;h=1cc589143e78da5cc1d47cf456f2f6360613d2ac;hb=HEAD;hp=8a1dfe399acfae7260c79aa33022a2662337f7b9;hpb=60ca0094db80ea88ad546c98866f73a8d152e02b;p=libs%2Fgl.git diff --git a/source/environmentmap.cpp b/source/environmentmap.cpp deleted file mode 100644 index 8a1dfe39..00000000 --- a/source/environmentmap.cpp +++ /dev/null @@ -1,101 +0,0 @@ -#include -#include "environmentmap.h" -#include "renderer.h" -#include "texunit.h" - -namespace Msp { -namespace GL { - -EnvironmentMap::EnvironmentMap(unsigned s, Renderable &r, Renderable &e): - Effect(r), - size(s), - environment(e), - rendered(false) -{ - env_tex.storage(RGB, size); - env_tex.set_wrap(CLAMP_TO_EDGE); - env_tex.set_min_filter(LINEAR); - depth_buf.storage(DEPTH_COMPONENT, size, size); - for(unsigned i=0; i<6; ++i) - { - fbo[i].attach(COLOR_ATTACHMENT0, env_tex, TextureCube::enumerate_faces(i), 0); - fbo[i].attach(DEPTH_ATTACHMENT, depth_buf); - fbo[i].require_complete(); - } - - // XXX Make the depth range configurable - camera.set_field_of_view(Geometry::Angle::right()); - camera.set_aspect(1); - camera.set_depth_clip(0.1, 100); - - shdata.uniform("environment", 4); -} - -void EnvironmentMap::setup_frame() const -{ - if(rendered) - return; - - rendered = true; - renderable.setup_frame(); - environment.setup_frame(); - - const Matrix *matrix = renderable.get_matrix(); - Vector3 position = (*matrix)*Vector3(); - camera.set_position(position); - for(unsigned i=0; i<6; ++i) - { - TextureCubeFace face = TextureCube::enumerate_faces(i); - fbo[i].bind(); - 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.exclude(renderable); - env_renderer.render(environment); - } - Framebuffer::unbind(); -} - -void EnvironmentMap::finish_frame() const -{ - if(rendered) - { - rendered = false; - renderable.finish_frame(); - environment.finish_frame(); - } -} - -void EnvironmentMap::render(Renderer &renderer, const Tag &tag) const -{ - if(!enabled_passes.count(tag)) - return renderer.render(renderable, tag); - - const Matrix &view_matrix = renderer.get_camera()->get_matrix(); - // XXX The camera should maybe have store its own object matrix - float env_mdata[9]; - env_mdata[0] = view_matrix[0]; - env_mdata[1] = view_matrix[4]; - env_mdata[2] = view_matrix[8]; - env_mdata[3] = view_matrix[1]; - env_mdata[4] = view_matrix[5]; - env_mdata[5] = view_matrix[9]; - env_mdata[6] = view_matrix[2]; - env_mdata[7] = view_matrix[6]; - 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 -} // namespace Msp