X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Feffects%2Fsky.cpp;h=158606f845305dcbef7f206fc706328faf01bfe9;hb=ed8e639ee3d03e6303df31e31625099e70f598a5;hp=19fb526b1bdaa83b911954ef6f26b7c37c241c4b;hpb=1863f17c5c5563be8492d7f01e5c613a740ea1e9;p=libs%2Fgl.git diff --git a/source/effects/sky.cpp b/source/effects/sky.cpp index 19fb526b..158606f8 100644 --- a/source/effects/sky.cpp +++ b/source/effects/sky.cpp @@ -1,9 +1,10 @@ #include #include -#include "light.h" +#include "directionallight.h" #include "mesh.h" #include "renderer.h" #include "resources.h" +#include "texture2d.h" #include "sky.h" using namespace std; @@ -11,13 +12,13 @@ using namespace std; namespace Msp { namespace GL { -Sky::Sky(Renderable &r, Light &s): +Sky::Sky(Renderable &r, DirectionalLight &s): Effect(r), sun(s), - transmittance_lookup(128, 64, (RENDER_COLOR, RGB16F)), + transmittance_lookup(128, 64, (COLOR_ATTACHMENT,RGB16F)), transmittance_shprog(Resources::get_global().get("_sky_transmittance.glsl.shader")), transmittance_lookup_dirty(true), - distant(256, 128, (RENDER_COLOR, RGB16F)), + distant(256, 128, (COLOR_ATTACHMENT,RGB16F)), distant_shprog(Resources::get_global().get("_sky_distant.glsl.shader")), fullscreen_mesh(Resources::get_global().get("_fullscreen_quad.mesh")), backdrop_shprog(Resources::get_global().get("_sky_backdrop.glsl.shader")), @@ -96,20 +97,20 @@ void Sky::setup_frame(Renderer &renderer) rendered = true; shdata.uniform("light_color", sun.get_color()); - shdata.uniform("light_dir", sun.get_position().slice<3>(0)); - sun.set_transmittance(get_transmittance(normalize(sun.get_position().slice<3>(0)))); + shdata.uniform("light_dir", -sun.get_direction()); + sun.set_transmittance(get_transmittance(-sun.get_direction())); Renderer::Push push(renderer); if(transmittance_lookup_dirty) { transmittance_lookup_dirty = false; - Bind bind_fbo(transmittance_lookup.get_framebuffer()); + renderer.set_framebuffer(&transmittance_lookup.get_framebuffer()); renderer.set_shader_program(&transmittance_shprog, &shdata); fullscreen_mesh.draw(renderer); } - Bind bind_fbo(distant.get_framebuffer()); + renderer.set_framebuffer(&distant.get_framebuffer()); renderer.set_shader_program(&distant_shprog, &shdata); renderer.set_texture("transmittance_lookup", &transmittance_lookup.get_target_texture(0), &sampler); fullscreen_mesh.draw(renderer); @@ -130,6 +131,9 @@ void Sky::render(Renderer &renderer, Tag tag) const { renderable.render(renderer, tag); + if(!enabled_methods.count(tag)) + return; + Renderer::Push push(renderer); renderer.set_shader_program(&backdrop_shprog, &shdata);