]> git.tdb.fi Git - libs/gl.git/blobdiff - source/effects/sky.cpp
Check the flat qualifier from the correct member
[libs/gl.git] / source / effects / sky.cpp
index fc6d49fd37385e908ca57e4480b1ec61f6190e8f..be4896fbbd9e725632d5d1dfd8f3fdf0fd9df140 100644 (file)
@@ -25,6 +25,7 @@ Sky::Sky(Renderable &c, DirectionalLight &s):
        backdrop_shprog(Resources::get_global().get<Program>("_sky_backdrop.glsl.shader")),
        sampler(Resources::get_global().get<Sampler>("_linear_clamp.samp")),
        wrap_sampler(Resources::get_global().get<Sampler>("_linear_clamp_v.samp")),
+       dummy_texture(Resources::get_global().get<Texture>("_placeholder.png")),
        rendered(false)
 {
        shdata.uniform("n_steps", 50);
@@ -101,21 +102,28 @@ void Sky::setup_frame(Renderer &renderer)
        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;
-               renderer.set_framebuffer(&transmittance_lookup.get_framebuffer());
-               renderer.set_shader_program(&transmittance_shprog, &shdata);
+               Renderer::Push push(renderer);
+
+               renderer.add_shader_data(shdata);
+
+               if(transmittance_lookup_dirty)
+               {
+                       transmittance_lookup_dirty = false;
+                       renderer.set_pipeline_key(this);
+                       renderer.set_framebuffer(&transmittance_lookup.get_framebuffer());
+                       renderer.set_shader_program(&transmittance_shprog);
+                       renderer.set_texture("transmittance_lookup", &dummy_texture, &sampler);
+                       fullscreen_mesh.draw(renderer);
+               }
+
+               renderer.set_pipeline_key(this, 1);
+               renderer.set_framebuffer(&distant.get_framebuffer());
+               renderer.set_shader_program(&distant_shprog);
+               renderer.set_texture("transmittance_lookup", &transmittance_lookup.get_target_texture(0), &sampler);
                fullscreen_mesh.draw(renderer);
        }
 
-       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);
-
        content.setup_frame(renderer);
 }
 
@@ -137,6 +145,7 @@ void Sky::render(Renderer &renderer, Tag tag) const
 
        Renderer::Push push(renderer);
 
+       renderer.set_pipeline_key(this, 2);
        renderer.set_shader_program(&backdrop_shprog, &shdata);
        renderer.set_texture("distant", &distant.get_target_texture(0), &wrap_sampler);
        fullscreen_mesh.draw(renderer);
@@ -190,7 +199,11 @@ Sky *Sky::Template::create(const map<string, Renderable *> &renderables) const
        Renderable *content = get_item(renderables, content_name);
        if(!content || !sun)
                throw invalid_operation("Sky::Template::create");
-       return new Sky(*content, *sun);
+
+       RefPtr<Sky> sky = new Sky(*content, *sun);
+       create_base(*sky);
+
+       return sky.release();
 }