X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Feffects%2Fsky.cpp;h=0744e7b9adaacda6b02be7cfaf775e9a53e97600;hb=84e0e55710123e54617d342df852007f8b60af24;hp=d9c95b3bd79839fed84d1ad3f06235a4f5ac626e;hpb=6353307898cd397e2bcde13e2448a8a678a60004;p=libs%2Fgl.git diff --git a/source/effects/sky.cpp b/source/effects/sky.cpp index d9c95b3b..0744e7b9 100644 --- a/source/effects/sky.cpp +++ b/source/effects/sky.cpp @@ -1,6 +1,7 @@ #include #include -#include "light.h" +#include "directionallight.h" +#include "error.h" #include "mesh.h" #include "renderer.h" #include "resources.h" @@ -12,7 +13,7 @@ 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, (COLOR_ATTACHMENT,RGB16F)), @@ -97,8 +98,8 @@ 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); @@ -131,6 +132,9 @@ void Sky::render(Renderer &renderer, Tag tag) const { renderable.render(renderer, tag); + if(!is_enabled_for_method(tag)) + return; + Renderer::Push push(renderer); renderer.set_shader_program(&backdrop_shprog, &shdata); @@ -160,7 +164,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() @@ -179,5 +184,29 @@ Sky::Planet Sky::Planet::earth() return planet; } + +Sky *Sky::Template::create(const map &renderables) const +{ + Renderable *content = get_item(renderables, content_name); + if(!content || !sun) + throw invalid_operation("Sky::Template::create"); + return new Sky(*content, *sun); +} + + +DataFile::Loader::ActionMap Sky::Template::Loader::shared_actions; + +Sky::Template::Loader::Loader(Template &t, Collection &c): + DerivedObjectLoader(t, c) +{ + set_actions(shared_actions); +} + +void Sky::Template::Loader::init_actions() +{ + Effect::Template::Loader::init_actions(); + add("sun", &Template::sun); +} + } // namespace GL } // namespace Msp