X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fbuilders%2Fsequencetemplate.cpp;h=999d2ae7693baaeea5e0c37229dd54d5b84f5a75;hp=03c8c7fe1cafa0b26f3fc20e37080e94c8fafe0a;hb=083a8227715fa32c841fc2b8126e4ab8d2840ba0;hpb=54fdd850d1e657bc357d859a532497905ded741a diff --git a/source/builders/sequencetemplate.cpp b/source/builders/sequencetemplate.cpp index 03c8c7fe..999d2ae7 100644 --- a/source/builders/sequencetemplate.cpp +++ b/source/builders/sequencetemplate.cpp @@ -5,11 +5,14 @@ #include "blend.h" #include "bloom.h" #include "colorcurve.h" +#include "environmentmap.h" #include "lighting.h" #include "object.h" #include "resources.h" #include "scene.h" #include "sequencetemplate.h" +#include "shadowmap.h" +#include "sky.h" using namespace std; @@ -18,6 +21,8 @@ namespace GL { SequenceTemplate::~SequenceTemplate() { + for(const Renderable &r: renderables) + delete r.effect_template; for(const PostProcessor &p: postprocessors) delete p.postprocessor_template; } @@ -37,6 +42,21 @@ SequenceTemplate::TemplateRegistry &SequenceTemplate::get_reg return registry; } +template<> +SequenceTemplate::TemplateRegistry &SequenceTemplate::get_registry() +{ + static TemplateRegistry registry; + static bool initialized = false; + if(!initialized) + { + registry.register_type("environment_map"); + registry.register_type("shadow_map"); + registry.register_type("sky"); + initialized = true; + } + return registry; +} + SequenceTemplate::PostProcessor::PostProcessor(GL::PostProcessor::Template *ppt): postprocessor_template(ppt) @@ -56,12 +76,14 @@ void SequenceTemplate::Loader::init_actions() add("hdr", &SequenceTemplate::hdr); add("alpha", &SequenceTemplate::alpha); add("clear", &Loader::clear); + add("effect", &Loader::effect); add("multisample", &Loader::multisample); add("multisample", &Loader::multisample_range); add("postprocessor", &Loader::postprocessor); add("postprocessor", &Loader::postprocessor_with_slot); add("renderable", &Loader::renderable); add("renderable", &Loader::renderable_with_default); + add("sequence", &Loader::sequence); add("step", &Loader::step); } @@ -72,6 +94,16 @@ void SequenceTemplate::Loader::clear() obj.clear_enabled = true; } +void SequenceTemplate::Loader::effect(const string &slot) +{ + TemplateLoader ldr(get_collection()); + load_sub_with(ldr); + Renderable rend; + rend.slot_name = slot; + rend.effect_template = ldr.get_object(); + obj.renderables.push_back(rend); +} + void SequenceTemplate::Loader::multisample(unsigned samples) { obj.required_multisample = samples; @@ -114,6 +146,16 @@ void SequenceTemplate::Loader::renderable_with_default(const string &slot, const obj.renderables.push_back(rend); } +void SequenceTemplate::Loader::sequence(const string &slot, const string &name) +{ + Renderable rend; + rend.sequence_template = &get_collection().get(name); + rend.slot_name = slot; + SequenceLoader ldr(rend); + load_sub_with(ldr); + obj.renderables.push_back(rend); +} + void SequenceTemplate::Loader::step(const string &tag, const string &rend) { Step stp; @@ -158,6 +200,25 @@ void SequenceTemplate::ClearLoader::stencil(int s) } +DataFile::Loader::ActionMap SequenceTemplate::SequenceLoader::shared_actions; + +SequenceTemplate::SequenceLoader::SequenceLoader(Renderable &r): + ObjectLoader(r) +{ + set_actions(shared_actions); +} + +void SequenceTemplate::SequenceLoader::init_actions() +{ + add("renderable", &SequenceLoader::renderable); +} + +void SequenceTemplate::SequenceLoader::renderable(const string &slot, const string &name) +{ + obj.sequence_renderables[slot] = name; +} + + DataFile::Loader::ActionMap SequenceTemplate::Step::Loader::shared_actions; SequenceTemplate::Step::Loader::Loader(Step &p, Collection &c):