]> git.tdb.fi Git - libs/gl.git/blobdiff - source/effects/sky.cpp
Split the Light class into subclasses by light type
[libs/gl.git] / source / effects / sky.cpp
index 19fb526b1bdaa83b911954ef6f26b7c37c241c4b..fcb465b8bb71960fc480086ff263baeb73119fd7 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);