]> git.tdb.fi Git - libs/gl.git/blobdiff - source/effects/environmentmap.cpp
Overhaul texture management in rendering classes
[libs/gl.git] / source / effects / environmentmap.cpp
index 3902eb8c95b240434036bdd0915e9433cd373149..1448c49cfd844165770b5c330b2091f1b437ef49 100644 (file)
@@ -2,6 +2,7 @@
 #include <cmath>
 #include "environmentmap.h"
 #include "renderer.h"
+#include "resources.h"
 #include "texunit.h"
 
 using namespace std;
@@ -9,11 +10,11 @@ using namespace std;
 namespace Msp {
 namespace GL {
 
-EnvironmentMap::EnvironmentMap(unsigned s, Renderable &r, Renderable &e):
+EnvironmentMap::EnvironmentMap(Resources &resources, unsigned s, Renderable &r, Renderable &e):
        Effect(r),
        size(s),
        environment(e),
-       sampler(get_linear_sampler()),
+       sampler(resources.get<Sampler>("_linear_clamp.samp")),
        rendered(false),
        update_interval(1),
        update_delay(0)
@@ -98,21 +99,17 @@ void EnvironmentMap::finish_frame()
        }
 }
 
-void EnvironmentMap::render(Renderer &renderer, const Tag &tag) const
+void EnvironmentMap::render(Renderer &renderer, Tag tag) const
 {
        if(!enabled_passes.count(tag))
                return renderer.render(renderable, tag);
 
        Renderer::Push _push_rend(renderer);
 
-       unsigned unit = renderer.allocate_effect_texunit();
-       shdata.uniform("environment", static_cast<int>(unit));
-       Bind _bind_sampler(*sampler, unit);
-       Bind _bind_env(env_tex, unit);
-
        const Matrix &camera_matrix = renderer.get_camera()->get_object_matrix();
        shdata.uniform("env_eye_matrix", camera_matrix.block<3, 3>(0, 0));
 
+       renderer.set_texture("environment_map", &env_tex, &sampler);
        renderer.add_shader_data(shdata);
        renderer.render(renderable, tag);
 }