1 #ifndef SEQUENCETEMPLATE_H_
2 #define SEQUENCETEMPLATE_H_
6 #include <msp/core/typeregistry.h>
7 #include <msp/datafile/dynamicobjectloader.h>
8 #include <msp/datafile/objectloader.h>
10 #include "postprocessor.h"
11 #include "resources.h"
12 #include "stenciltest.h"
20 class SequenceTemplate
24 class TemplateLoader: public DataFile::DynamicObjectLoader<typename T::Template>
26 friend class SequenceTemplate;
29 TemplateLoader(typename DataFile::DynamicObjectLoader<typename T::Template>::Collection &c): DataFile::DynamicObjectLoader<typename T::Template>(&c) { }
32 virtual typename DataFile::DynamicObjectLoader<typename T::Template>::TypeRegistry &get_type_registry() const { return get_registry<T>(); }
36 using TemplateRegistry = typename TemplateLoader<T>::TypeRegistry;
39 class Loader: public DataFile::CollectionObjectLoader<SequenceTemplate>
42 Loader(SequenceTemplate &, Collection &);
46 void multisample(unsigned);
47 void multisample_range(unsigned, unsigned);
49 void postprocessor_with_slot(const std::string &);
50 void renderable(const std::string &);
51 void renderable_with_default(const std::string &, const std::string &);
52 void step(const std::string &, const std::string &);
57 GL::Renderable *renderable = 0;
58 std::string slot_name;
63 class Loader: public DataFile::CollectionObjectLoader<Step>
66 std::string inline_base_name;
69 Loader(Step &, Collection &);
71 void set_inline_base_name(const std::string &);
75 void depth_compare(Predicate);
76 void lighting(const std::string &);
77 void lighting_inline();
82 const Lighting *lighting = 0;
84 StencilTest stencil_test;
85 std::string renderable_name;
90 GL::PostProcessor::Template *postprocessor_template;
91 std::string slot_name;
93 PostProcessor(GL::PostProcessor::Template * = 0);
97 class ClearLoader: public DataFile::ObjectLoader<SequenceTemplate>
100 ClearLoader(SequenceTemplate &);
103 void color(float, float, float, float);
110 unsigned required_multisample = 0;
111 unsigned max_multisample = 0;
112 std::vector<Renderable> renderables;
113 std::vector<Step> steps;
114 std::vector<PostProcessor> postprocessors;
115 bool clear_enabled = false;
116 std::vector<Color> clear_colors;
117 float clear_depth = 1.0f;
118 int clear_stencil = 0;
123 bool get_hdr() const { return hdr; }
124 bool get_alpha() const { return alpha; }
125 unsigned get_required_multisample() const { return required_multisample; }
126 unsigned get_maximum_multisample() const { return max_multisample; }
127 const std::vector<Renderable> &get_renderables() const { return renderables; }
128 const std::vector<Step> &get_steps() const { return steps; }
129 const std::vector<PostProcessor> &get_postprocessors() const { return postprocessors; }
130 bool is_clear_enabled() const { return clear_enabled; }
131 const std::vector<Color> &get_clear_colors() const { return clear_colors; }
132 float get_clear_depth() const { return clear_depth; }
133 int get_clear_stencil() const { return clear_stencil; }
136 static void register_postprocessor(const std::string &);
140 static TemplateRegistry<T> &get_registry();
144 void SequenceTemplate::register_postprocessor(const std::string &kw)
146 get_registry<GL::PostProcessor>().register_type<typename T::Template>(kw);