#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;
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")),
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);
{
renderable.render(renderer, tag);
+ if(!enabled_methods.count(tag))
+ return;
+
Renderer::Push push(renderer);
renderer.set_shader_program(&backdrop_shprog, &shdata);
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),
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()