X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fbuilders%2Fsequencetemplate.cpp;h=a768d6bd8bc39ddca833735d7c248198631c9c98;hp=c125823eb8344da53d4013a6137a44f6897b5f46;hb=f44366c8785eb7a88755cd71250a8b85289eeed2;hpb=f19366d32cc29287a2730cfba90893e407754081 diff --git a/source/builders/sequencetemplate.cpp b/source/builders/sequencetemplate.cpp index c125823e..a768d6bd 100644 --- a/source/builders/sequencetemplate.cpp +++ b/source/builders/sequencetemplate.cpp @@ -16,55 +16,35 @@ using namespace std; namespace Msp { namespace GL { -SequenceTemplate::SequenceTemplate(): - hdr(false), - alpha(false), - required_multisample(0), - max_multisample(0), - clear_enabled(false), - clear_depth(1.0f), - clear_stencil(0) -{ } - SequenceTemplate::~SequenceTemplate() { for(const PostProcessor &p: postprocessors) delete p.postprocessor_template; } - -SequenceTemplate::PostProcessorRegistry &SequenceTemplate::get_postprocessor_registry() +template<> +SequenceTemplate::TemplateRegistry &SequenceTemplate::get_registry() { - static PostProcessorRegistry registry; + static TemplateRegistry registry; static bool initialized = false; if(!initialized) { - registry.register_type("ambient_occlusion"); - registry.register_type("bloom"); - registry.register_type("colorcurve"); + registry.register_type("ambient_occlusion"); + registry.register_type("bloom"); + registry.register_type("colorcurve"); initialized = true; } return registry; } -SequenceTemplate::Step::~Step() -{ } - - SequenceTemplate::PostProcessor::PostProcessor(GL::PostProcessor::Template *ppt): postprocessor_template(ppt) { } -SequenceTemplate::PostProcLoader::PostProcLoader() -{ - get_postprocessor_registry().invoke_all(*this); -} - - SequenceTemplate::Loader::Loader(SequenceTemplate &t, Collection &c): - DataFile::CollectionObjectLoader(t, &c) + CollectionObjectLoader(t, &c) { add("hdr", &SequenceTemplate::hdr); add("alpha", &SequenceTemplate::alpha); @@ -72,16 +52,10 @@ SequenceTemplate::Loader::Loader(SequenceTemplate &t, Collection &c): 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("step", &Loader::step); - add("step", &Loader::step_with_slot); - - // Deprecated - add("pass", &Loader::step_with_slot); -} - -void SequenceTemplate::Loader::postprocessor_loaded() -{ - obj.postprocessors.push_back(get_postprocessor_template()); } void SequenceTemplate::Loader::clear() @@ -103,34 +77,44 @@ void SequenceTemplate::Loader::multisample_range(unsigned req, unsigned max) obj.max_multisample = max; } -void SequenceTemplate::Loader::postprocessor(const string &slot) +void SequenceTemplate::Loader::postprocessor() { - PostProcLoader ldr; + postprocessor_with_slot(string()); +} + +void SequenceTemplate::Loader::postprocessor_with_slot(const string &slot) +{ + TemplateLoader ldr(get_collection()); load_sub_with(ldr); PostProcessor pp; - pp.postprocessor_template = ldr.get_postprocessor_template(); + pp.postprocessor_template = ldr.get_object(); pp.slot_name = slot; obj.postprocessors.push_back(pp); } -void SequenceTemplate::Loader::step(const string &tag) +void SequenceTemplate::Loader::renderable(const string &slot) { - step_with_slot(tag, string()); + Renderable rend; + rend.slot_name = slot; + obj.renderables.push_back(rend); } -void SequenceTemplate::Loader::step_with_slot(const string &tag, const string &rend) +void SequenceTemplate::Loader::renderable_with_default(const string &slot, const string &name) +{ + Renderable rend; + rend.renderable = &get_collection().get(name); + rend.slot_name = slot; + obj.renderables.push_back(rend); +} + +void SequenceTemplate::Loader::step(const string &tag, const string &rend) { Step stp; stp.tag = tag; - stp.slot_name = rend; - if(coll) - { - Step::Loader ldr(stp, *coll); - ldr.set_inline_base_name(format("%s/%d.step", get_source(), obj.steps.size())); - load_sub_with(ldr); - } - else - load_sub(stp); + stp.renderable_name = rend; + Step::Loader ldr(stp, get_collection()); + ldr.set_inline_base_name(format("%s/%d.step", get_source(), obj.steps.size())); + load_sub_with(ldr); obj.steps.push_back(stp); } @@ -160,17 +144,13 @@ void SequenceTemplate::ClearLoader::stencil(int s) } -SequenceTemplate::Step::Loader::Loader(Step &p, Collection *c): - DataFile::CollectionObjectLoader(p, c) +SequenceTemplate::Step::Loader::Loader(Step &p, Collection &c): + DataFile::CollectionObjectLoader(p, &c) { - add("blend", &Loader::blend); - add("blend", &Loader::blend_factors); add("depth_test", &Loader::depth_test); add("depth_test", &Loader::depth_compare); add("lighting", &Loader::lighting); add("lighting", &Loader::lighting_inline); - add("object", &Loader::object); - add("scene", &Loader::scene); add("stencil_test", &Loader::stencil_test); } @@ -179,16 +159,6 @@ void SequenceTemplate::Step::Loader::set_inline_base_name(const string &n) inline_base_name = n; } -void SequenceTemplate::Step::Loader::blend() -{ - load_sub(obj.blend); -} - -void SequenceTemplate::Step::Loader::blend_factors(BlendFactor src, BlendFactor dest) -{ - obj.blend = Blend(src, dest); -} - void SequenceTemplate::Step::Loader::depth_test() { load_sub(obj.depth_test); @@ -202,7 +172,7 @@ void SequenceTemplate::Step::Loader::depth_compare(Predicate c) void SequenceTemplate::Step::Loader::lighting_inline() { RefPtr lightn = new Lighting; - load_sub(*lightn); + load_sub(*lightn, get_collection()); get_collection().add(inline_base_name+".lightn", lightn.get()); obj.lighting = lightn.release(); } @@ -212,16 +182,6 @@ void SequenceTemplate::Step::Loader::lighting(const string &name) obj.lighting = &get_collection().get(name); } -void SequenceTemplate::Step::Loader::object(const string &name) -{ - obj.default_renderable = &get_collection().get(name); -} - -void SequenceTemplate::Step::Loader::scene(const string &name) -{ - obj.default_renderable = &get_collection().get(name); -} - void SequenceTemplate::Step::Loader::stencil_test() { load_sub(obj.stencil_test);