]> git.tdb.fi Git - libs/gl.git/blobdiff - source/effects/shadowmap.cpp
Load various built-in things through Resources
[libs/gl.git] / source / effects / shadowmap.cpp
index eaf6e1373cb126a387d535e9e2b1352199eed2e7..c2e1f2957a63f4de2a623d2db1af26f58529f5bf 100644 (file)
@@ -3,6 +3,7 @@
 #include "camera.h"
 #include "light.h"
 #include "renderer.h"
+#include "resources.h"
 #include "scene.h"
 #include "shadowmap.h"
 #include "tests.h"
@@ -12,25 +13,15 @@ using namespace std;
 namespace Msp {
 namespace GL {
 
-WeakPtr<Sampler> ShadowMap::shadow_sampler;
-
-ShadowMap::ShadowMap(unsigned s, Renderable &r, const Light &l):
+ShadowMap::ShadowMap(Resources &resources, unsigned s, Renderable &r, const Light &l):
        Effect(r),
        size(s),
        light(l),
+       sampler(resources.get<Sampler>("_linear_clamp_shadow.samp")),
        radius(1),
        depth_bias(4),
        rendered(false)
 {
-       sampler = shadow_sampler;
-       if(!sampler)
-       {
-               sampler = new Sampler;
-               sampler->set_filter(LINEAR);
-               sampler->set_compare(LEQUAL);
-               sampler->set_wrap(CLAMP_TO_EDGE);
-               shadow_sampler = sampler;
-       }
        depth_buf.storage(DEPTH_COMPONENT32F, size, size, 1);
        fbo.attach(DEPTH_ATTACHMENT, depth_buf, 0);
        fbo.require_complete();
@@ -108,7 +99,7 @@ void ShadowMap::render(Renderer &renderer, const Tag &tag) const
        int iunit = unit;
        shdata.uniform("shadow_map", iunit);
 
-       Bind _bind_sampler(*sampler, unit);
+       Bind _bind_sampler(sampler, unit);
        Bind _bind_depth(depth_buf, unit);
 
        if(const Camera *camera = renderer.get_camera())