#include "bloom.h"
#include "colorcurve.h"
#include "lighting.h"
+#include "object.h"
#include "resources.h"
+#include "scene.h"
#include "sequencetemplate.h"
-#include "tests.h"
using namespace std;
namespace GL {
SequenceTemplate::SequenceTemplate():
- resources(0),
hdr(false),
alpha(false),
required_multisample(0),
SequenceTemplate::~SequenceTemplate()
{
- for(PostProcessorArray::iterator i=postprocessors.begin(); i!=postprocessors.end(); ++i)
- delete i->postprocessor_template;
-}
-
-Resources &SequenceTemplate::get_resources() const
-{
- if(!resources)
- throw logic_error("no resources");
- return *resources;
+ for(const PostProcessor &p: postprocessors)
+ delete p.postprocessor_template;
}
add("multisample", &Loader::multisample_range);
add("postprocessor", &Loader::postprocessor);
add("step", &Loader::step);
+ add("step", &Loader::step_with_slot);
// Deprecated
- add("pass", &Loader::step);
-
- obj.resources = &c;
+ add("pass", &Loader::step_with_slot);
}
void SequenceTemplate::Loader::postprocessor_loaded()
obj.postprocessors.push_back(pp);
}
-void SequenceTemplate::Loader::step(const string &tag, const string &rend)
+void SequenceTemplate::Loader::step(const string &tag)
+{
+ step_with_slot(tag, string());
+}
+
+void SequenceTemplate::Loader::step_with_slot(const string &tag, const string &rend)
{
Step stp;
stp.tag = tag;
- stp.renderable_name = rend;
+ stp.slot_name = rend;
if(coll)
- load_sub(stp, *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);
void SequenceTemplate::Step::Loader::init()
{
add("blend", &Loader::blend);
- add("blend", &Loader::blend_predefined);
+ add("blend", &Loader::blend_factors);
add("depth_test", &Loader::depth_test);
- add("depth_test", &Loader::depth_test_predefined);
+ 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);
}
-void SequenceTemplate::Step::Loader::blend_predefined(const string &name)
+void SequenceTemplate::Step::Loader::set_inline_base_name(const string &n)
{
- const Blend *bln = 0;
- if(name=="alpha")
- bln = &Blend::alpha();
- else if(name=="additive")
- bln = &Blend::additive();
- else if(name=="additive_alpha")
- bln = &Blend::additive_alpha();
- else
- throw key_error(name);
-
- obj.blend = bln;
- obj.blend.keep();
+ inline_base_name = n;
}
-void SequenceTemplate::Step::Loader::blend(BlendFactor src, BlendFactor dest)
+void SequenceTemplate::Step::Loader::blend()
{
- obj.blend = new Blend(src, dest);
+ load_sub(obj.blend);
}
-void SequenceTemplate::Step::Loader::depth_test_predefined(const string &name)
+void SequenceTemplate::Step::Loader::blend_factors(BlendFactor src, BlendFactor dest)
{
- const DepthTest *dtest = 0;
- if(name=="lequal")
- dtest = &DepthTest::lequal();
- else
- throw key_error(name);
+ obj.blend = Blend(src, dest);
+}
- obj.depth_test = dtest;
- obj.depth_test.keep();
+void SequenceTemplate::Step::Loader::depth_test()
+{
+ load_sub(obj.depth_test);
}
-void SequenceTemplate::Step::Loader::depth_test(Predicate pred)
+void SequenceTemplate::Step::Loader::depth_compare(Predicate c)
{
- obj.depth_test = new DepthTest(pred);
+ obj.depth_test = DepthTest(c);
}
void SequenceTemplate::Step::Loader::lighting_inline()
{
RefPtr<Lighting> lightn = new Lighting;
load_sub(*lightn);
- obj.lighting = lightn;
+ get_collection().add(inline_base_name+".lightn", lightn.get());
+ obj.lighting = lightn.release();
}
void SequenceTemplate::Step::Loader::lighting(const string &name)
{
obj.lighting = &get_collection().get<Lighting>(name);
- obj.lighting.keep();
}
-/*void SequenceTemplate::Step::Loader::scene(const string &name)
+void SequenceTemplate::Step::Loader::object(const string &name)
+{
+ obj.default_renderable = &get_collection().get<GL::Object>(name);
+}
+
+void SequenceTemplate::Step::Loader::scene(const string &name)
{
- obj.default_renderable = get_collection().get<Scene>(name);
-}*/
+ obj.default_renderable = &get_collection().get<Scene>(name);
+}
+
+void SequenceTemplate::Step::Loader::stencil_test()
+{
+ load_sub(obj.stencil_test);
+}
} // namespace GL
} // namespace Msp