#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;
SequenceTemplate::~SequenceTemplate()
{
+ for(const Renderable &r: renderables)
+ delete r.effect_template;
for(const PostProcessor &p: postprocessors)
delete p.postprocessor_template;
}
return registry;
}
+template<>
+SequenceTemplate::TemplateRegistry<Effect> &SequenceTemplate::get_registry<Effect>()
+{
+ static TemplateRegistry<Effect> registry;
+ static bool initialized = false;
+ if(!initialized)
+ {
+ registry.register_type<EnvironmentMap::Template>("environment_map");
+ registry.register_type<ShadowMap::Template>("shadow_map");
+ registry.register_type<Sky::Template>("sky");
+ initialized = true;
+ }
+ return registry;
+}
+
SequenceTemplate::PostProcessor::PostProcessor(GL::PostProcessor::Template *ppt):
postprocessor_template(ppt)
{ }
+DataFile::Loader::ActionMap SequenceTemplate::Loader::shared_actions;
+
SequenceTemplate::Loader::Loader(SequenceTemplate &t, Collection &c):
CollectionObjectLoader<SequenceTemplate>(t, &c)
+{
+ set_actions(shared_actions);
+}
+
+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);
}
obj.clear_enabled = true;
}
+void SequenceTemplate::Loader::effect(const string &slot)
+{
+ TemplateLoader<Effect> 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;
obj.renderables.push_back(rend);
}
+void SequenceTemplate::Loader::sequence(const string &slot, const string &name)
+{
+ Renderable rend;
+ rend.sequence_template = &get_collection().get<SequenceTemplate>(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;
}
+DataFile::Loader::ActionMap SequenceTemplate::ClearLoader::shared_actions;
+
SequenceTemplate::ClearLoader::ClearLoader(SequenceTemplate &t):
ObjectLoader<SequenceTemplate>(t)
+{
+ set_actions(shared_actions);
+}
+
+void SequenceTemplate::ClearLoader::init_actions()
{
add("color", &ClearLoader::color);
add("depth", &ClearLoader::depth);
void SequenceTemplate::ClearLoader::color(float r, float g, float b, float a)
{
- obj.clear_colors.push_back(Color(r, g, b, a));
+ obj.clear_colors.emplace_back(r, g, b, a);
}
void SequenceTemplate::ClearLoader::depth(float d)
}
+DataFile::Loader::ActionMap SequenceTemplate::SequenceLoader::shared_actions;
+
+SequenceTemplate::SequenceLoader::SequenceLoader(Renderable &r):
+ ObjectLoader<Renderable>(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):
DataFile::CollectionObjectLoader<Step>(p, &c)
+{
+ set_actions(shared_actions);
+}
+
+void SequenceTemplate::Step::Loader::init_actions()
{
add("depth_test", &Loader::depth_test);
add("depth_test", &Loader::depth_compare);