X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Feffects%2Fshadowmap.cpp;h=74dad5e78b74fb6d32505008ca2ecf15d262600b;hp=bfb053421440d98bdd3164a6e16d092e1479aa47;hb=cdedbb34eff07f188c536167592958e315d53a9b;hpb=867c4e8c34fe24146f4f8cf6bd0b27a6d99aa1a2 diff --git a/source/effects/shadowmap.cpp b/source/effects/shadowmap.cpp index bfb05342..74dad5e7 100644 --- a/source/effects/shadowmap.cpp +++ b/source/effects/shadowmap.cpp @@ -11,12 +11,11 @@ using namespace std; namespace Msp { namespace GL { -ShadowMap::ShadowMap(unsigned w, unsigned h, Renderable &r, const Lighting *l, Renderable &c): +ShadowMap::ShadowMap(unsigned w, unsigned h, Renderable &r, const Lighting *l): Effect(r), width(w), height(h), lighting(l), - shadow_caster(c), sampler(Resources::get_global().get("_linear_clamp_shadow.samp")) { depth_buf.storage(DEPTH_COMPONENT32F, width, height, 1); @@ -35,16 +34,16 @@ ShadowMap::ShadowMap(unsigned w, unsigned h, Renderable &r, const Lighting *l, R } ShadowMap::ShadowMap(unsigned s, Renderable &r, const DirectionalLight &l, Renderable &c): - ShadowMap(s, s, r, 0, c) + ShadowMap(s, s, r, 0) { - add_light(l, s); + add_light(l, s, c); } -ShadowMap::ShadowMap(unsigned w, unsigned h, Renderable &r, const Lighting &l, Renderable &c): - ShadowMap(w, h, r, &l, c) +ShadowMap::ShadowMap(unsigned w, unsigned h, Renderable &r, const Lighting &l): + ShadowMap(w, h, r, &l) { } -void ShadowMap::add_light(const DirectionalLight &light, unsigned s) +void ShadowMap::add_light(const DirectionalLight &light, unsigned s, Renderable &c) { if(!lighting && !lights.empty()) throw invalid_operation("ShadowMap::add_light"); @@ -90,6 +89,7 @@ void ShadowMap::add_light(const DirectionalLight &light, unsigned s) sl.light = &light; sl.index = index; sl.region = region; + sl.shadow_caster = &c; string base = format("shadows[%d]", index); shdata.uniform(base+".enabled", 1); @@ -138,7 +138,8 @@ void ShadowMap::setup_frame(Renderer &renderer) rendered = true; renderable.setup_frame(renderer); - shadow_caster.setup_frame(renderer); + for(const ShadowedLight &l: lights) + l.shadow_caster->setup_frame(renderer); for(ShadowedLight &l: lights) { @@ -163,7 +164,7 @@ void ShadowMap::setup_frame(Renderer &renderer) renderer.set_scissor(&l.region); renderer.set_camera(l.shadow_camera); - renderer.render(shadow_caster); + renderer.render(*light.shadow_caster); } }