]> git.tdb.fi Git - libs/gl.git/blobdiff - source/effects/sky.cpp
Set a sane default value for ground albedo in Sky::Planet
[libs/gl.git] / source / effects / sky.cpp
index 9a5f73bc73f8d1b6405c810935721b220b53804d..855509d15a3c1affb3dcc61dd41986f4decd3ae4 100644 (file)
@@ -1,9 +1,10 @@
 #include <msp/geometry/hypersphere.h>
 #include <msp/geometry/ray.h>
-#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<Program>("_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<Program>("_sky_distant.glsl.shader")),
        fullscreen_mesh(Resources::get_global().get<Mesh>("_fullscreen_quad.mesh")),
        backdrop_shprog(Resources::get_global().get<Program>("_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);
@@ -137,6 +141,17 @@ void Sky::render(Renderer &renderer, Tag tag) const
        fullscreen_mesh.draw(renderer);
 }
 
+void Sky::set_debug_name(const string &name)
+{
+#ifdef DEBUG
+       transmittance_lookup.set_debug_name(name+" [RT:transmittance]");
+       distant.set_debug_name(name+" [RT:distant]");
+       shdata.set_debug_name(name+" [UBO]");
+#else
+       (void)name;
+#endif
+}
+
 
 Sky::Planet::Planet():
        rayleigh_scatter(0.0f),
@@ -148,7 +163,8 @@ Sky::Planet::Planet():
        ozone_band_center(1e4f),
        ozone_band_extent(1e2f),
        atmosphere_thickness(2e4f),
-       planet_radius(1e6f)
+       planet_radius(1e6f),
+       ground_albedo(0.2f)
 { }
 
 Sky::Planet Sky::Planet::earth()