X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fenvironmentmap.cpp;h=1cc589143e78da5cc1d47cf456f2f6360613d2ac;hp=9ca4d45253580134e59a060a7936a9f04c6fbbf2;hb=HEAD;hpb=0991ffd3091d4002fe6e2811219f3a4dae2c41d1 diff --git a/source/environmentmap.cpp b/source/environmentmap.cpp deleted file mode 100644 index 9ca4d452..00000000 --- a/source/environmentmap.cpp +++ /dev/null @@ -1,94 +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); - -} - -void EnvironmentMap::setup_frame(Renderer &renderer) -{ - if(rendered) - return; - - rendered = true; - renderable.setup_frame(renderer); - environment.setup_frame(renderer); - - const Matrix *matrix = renderable.get_matrix(); - if(!matrix) - return; - - Renderer::Push push(renderer); - Renderer::Exclude exclude1(renderer, renderable); - Renderer::Exclude exclude2(renderer, *this); - - camera.set_position(*matrix*Vector3()); - - BindRestore bind_fbo(fbo[0]); - 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.set_camera(camera); - renderer.render(environment); - } -} - -void EnvironmentMap::finish_frame() -{ - 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); - - 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 &camera_matrix = renderer.get_camera()->get_object_matrix(); - shdata.uniform("env_eye_matrix", camera_matrix.block<3, 3>(0, 0)); - - renderer.add_shader_data(shdata); - renderer.render(renderable, tag); -} - -} // namespace GL -} // namespace Msp