]> git.tdb.fi Git - libs/gl.git/blobdiff - source/builders/sequencetemplate.cpp
Use default member initializers for simple types
[libs/gl.git] / source / builders / sequencetemplate.cpp
index 13534d75d28e99f61d648e35f57f5c744dcb0676..e8e451fc9a54d78a5b6d1d1bfc415a64ffef90be 100644 (file)
@@ -1,5 +1,6 @@
 #include <msp/core/maputils.h>
 #include <msp/datafile/collection.h>
+#include <msp/strings/format.h>
 #include "ambientocclusion.h"
 #include "blend.h"
 #include "bloom.h"
@@ -15,17 +16,10 @@ using namespace std;
 namespace Msp {
 namespace GL {
 
-SequenceTemplate::SequenceTemplate():
-       hdr(false),
-       alpha(false),
-       required_multisample(0),
-       max_multisample(0)
-{ }
-
 SequenceTemplate::~SequenceTemplate()
 {
-       for(PostProcessorArray::iterator i=postprocessors.begin(); i!=postprocessors.end(); ++i)
-               delete i->postprocessor_template;
+       for(const PostProcessor &p: postprocessors)
+               delete p.postprocessor_template;
 }
 
 
@@ -44,10 +38,6 @@ SequenceTemplate::PostProcessorRegistry &SequenceTemplate::get_postprocessor_reg
 }
 
 
-SequenceTemplate::Step::~Step()
-{ }
-
-
 SequenceTemplate::PostProcessor::PostProcessor(GL::PostProcessor::Template *ppt):
        postprocessor_template(ppt)
 { }
@@ -64,6 +54,7 @@ SequenceTemplate::Loader::Loader(SequenceTemplate &t, Collection &c):
 {
        add("hdr", &SequenceTemplate::hdr);
        add("alpha", &SequenceTemplate::alpha);
+       add("clear", &Loader::clear);
        add("multisample", &Loader::multisample);
        add("multisample", &Loader::multisample_range);
        add("postprocessor", &Loader::postprocessor);
@@ -79,6 +70,13 @@ void SequenceTemplate::Loader::postprocessor_loaded()
        obj.postprocessors.push_back(get_postprocessor_template());
 }
 
+void SequenceTemplate::Loader::clear()
+{
+       ClearLoader ldr(obj);
+       load_sub_with(ldr);
+       obj.clear_enabled = true;
+}
+
 void SequenceTemplate::Loader::multisample(unsigned samples)
 {
        obj.required_multisample = samples;
@@ -111,32 +109,40 @@ void SequenceTemplate::Loader::step_with_slot(const string &tag, const string &r
        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);
+       Step::Loader ldr(stp, *coll);
+       ldr.set_inline_base_name(format("%s/%d.step", get_source(), obj.steps.size()));
+       load_sub_with(ldr);
 
        obj.steps.push_back(stp);
 }
 
 
-SequenceTemplate::Step::Loader::Loader(Step &p):
-       DataFile::CollectionObjectLoader<Step>(p, 0)
+SequenceTemplate::ClearLoader::ClearLoader(SequenceTemplate &t):
+       ObjectLoader<SequenceTemplate>(t)
 {
-       init();
+       add("color", &ClearLoader::color);
+       add("depth", &ClearLoader::depth);
+       add("stencil", &ClearLoader::stencil);
 }
 
-SequenceTemplate::Step::Loader::Loader(Step &p, Collection &c):
-       DataFile::CollectionObjectLoader<Step>(p, &c)
+void SequenceTemplate::ClearLoader::color(float r, float g, float b, float a)
+{
+       obj.clear_colors.push_back(Color(r, g, b, a));
+}
+
+void SequenceTemplate::ClearLoader::depth(float d)
 {
-       init();
+       obj.clear_depth = d;
 }
 
-void SequenceTemplate::Step::Loader::init()
+void SequenceTemplate::ClearLoader::stencil(int s)
+{
+       obj.clear_stencil = s;
+}
+
+
+SequenceTemplate::Step::Loader::Loader(Step &p, Collection &c):
+       DataFile::CollectionObjectLoader<Step>(p, &c)
 {
        add("blend", &Loader::blend);
        add("blend", &Loader::blend_factors);
@@ -177,7 +183,7 @@ void SequenceTemplate::Step::Loader::depth_compare(Predicate c)
 void SequenceTemplate::Step::Loader::lighting_inline()
 {
        RefPtr<Lighting> lightn = new Lighting;
-       load_sub(*lightn);
+       load_sub(*lightn, get_collection());
        get_collection().add(inline_base_name+".lightn", lightn.get());
        obj.lighting = lightn.release();
 }