]> git.tdb.fi Git - libs/gl.git/blobdiff - demos/desertpillars/source/desertpillars.cpp
Use asynchronous resource loading in desertpillars
[libs/gl.git] / demos / desertpillars / source / desertpillars.cpp
index 432c91663dbb4b7b53446a66b00be9ba2e391c0d..53f0a86c72cee3c957b66c0f174a10036b983eab 100644 (file)
@@ -25,6 +25,7 @@ DesertPillars::DesertPillars(int, char **):
        window(display, opts.wnd_opts),
        gl_ctx(window, opts.gl_opts),
        keyboard(window),
+       resources(&res_mgr),
        view(window, gl_ctx),
        camera(resources.get<GL::Camera>("Camera.camera")),
        lighting(resources.get<GL::Lighting>("Desert.lightn")),
@@ -42,43 +43,15 @@ DesertPillars::DesertPillars(int, char **):
        window.signal_close.connect(sigc::bind(sigc::mem_fun(this, &DesertPillars::exit), 0));
        keyboard.signal_button_press.connect(sigc::bind_return(sigc::mem_fun(this, &DesertPillars::key_press), false));
 
-       env_seq = make_unique<GL::Sequence>();
-       env_seq->set_clear_enabled(true);
-       env_seq->set_debug_name("Environment sequence");
-
-       global_env = make_unique<GL::EnvironmentMap>(32, GL::RGB16F, 2, content, *env_seq);
-       global_env->set_fixed_position(GL::Vector3(0.0f, 0.0f, 0.0f));
-       global_env->set_debug_name("Global environment");
-
-       sky = make_unique<GL::Sky>(*global_env, sun);
-       sky->set_debug_name("Sky");
-
-       shadow_seq = make_unique<GL::Sequence>();
-       shadow_seq->set_clear_enabled(true);
-       shadow_seq->set_debug_name("Shadow sequence");
-       GL::Sequence::Step *step = &shadow_seq->add_step("shadow", content);
-       step->set_depth_test(GL::LEQUAL);
-
-       shadow_seq_thsm = make_unique<GL::Sequence>();
-       shadow_seq_thsm->set_clear_enabled(true);
-       shadow_seq_thsm->set_debug_name("Shadow sequence");
-       step = &shadow_seq_thsm->add_step("shadow_thsm", content);
-       step->set_depth_test(GL::LEQUAL);
-
-       shadow_map = make_unique<GL::ShadowMap>(6144, 4096, *sky, lighting);
-       shadow_map->set_debug_name("Shadow map");
-       shadow_map->add_light(sun, 4096, *shadow_seq);
-       shadow_map->add_light(resources.get<GL::PointLight>("Wisp.light"), 2048, *shadow_seq_thsm);
-       shadow_map->set_target(GL::Vector3(0.0f, 0.0f, 0.0f), 20.0f);
-
        GL::SequenceBuilder seq_bld(resources.get<GL::SequenceTemplate>("Desert.seq"));
-       seq_bld.set_renderable("content", *shadow_map);
+       seq_bld.set_renderable("content", content);
        seq_bld.set_debug_name("Main sequence");
        sequence.reset(seq_bld.build(view));
 
-       step = &env_seq->add_step("", *shadow_map);
-       step->set_lighting(&lighting);
-       step->set_depth_test(GL::LEQUAL);
+       GL::SequenceBuilder env_bld(resources.get<GL::SequenceTemplate>("Desert_environment.seq"));
+       env_bld.set_renderable("content", *sequence->get_steps().front().get_renderable());
+       env_bld.set_debug_name("Environment sequence");
+       env_seq.reset(env_bld.build());
 
        env_map = make_unique<GL::EnvironmentMap>(256, GL::RGB16F, 7, sphere, *env_seq);
        env_map->set_debug_name("Environment map");
@@ -151,6 +124,7 @@ void DesertPillars::tick()
        flare.set_matrix(GL::Matrix::translation(p));
 
        display.tick();
+       res_mgr.tick();
        view.render();
 }
 
@@ -167,13 +141,15 @@ void DesertPillars::key_press(unsigned key)
 }
 
 
-DesertPillars::Resources::Resources()
+DesertPillars::Resources::Resources(GL::ResourceManager *rm)
 {
        FS::Path base_dir = FS::get_sys_data_dir()/"demos"/"desertpillars"/"data";
        source.add_directory(base_dir);
        source.add_directory(base_dir/"textures");
        source.add_directory(base_dir/"exported");
        add_source(source);
+
+       set_resource_manager(rm);
 }