- sequence.set_hdr(tmpl.get_hdr());
- sequence.set_alpha(tmpl.get_alpha());
- unsigned samples = min(tmpl.get_maximum_multisample(), Renderbuffer::get_max_samples());
- if(samples<tmpl.get_required_multisample())
- throw invalid_operation("SequenceBuilder::build");
+#ifdef DEBUG
+ if(!debug_name.empty())
+ sequence.set_debug_name(debug_name);
+#endif
+
+ map<string, Renderable *> final_renderables = renderables;
+ vector<const SequenceTemplate::Renderable *> sequences;
+ for(const SequenceTemplate::Renderable &r: tmpl.get_renderables())
+ {
+ Renderable *&ptr = final_renderables[r.slot_name];
+ if(!ptr)
+ {
+ if(r.effect_template)
+ {
+ Effect *effect = r.effect_template->create(final_renderables);
+#ifdef DEBUG
+ if(!debug_name.empty())
+ effect->set_debug_name(format("%s/%s", debug_name, r.slot_name));
+#endif
+ ptr = effect;
+ }
+ else if(r.sequence_template)
+ {
+ Sequence *seq = new Sequence;
+#ifdef DEBUG
+ if(!debug_name.empty())
+ seq->set_debug_name(format("%s/%s", debug_name, r.slot_name));
+#endif
+ ptr = seq;
+ sequences.push_back(&r);
+ }
+ else
+ throw invalid_operation("SequenceBuilder::build");