X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fbuilders%2Fsequencetemplate.h;h=c49b2d43dfa95c8ea30a56c521863430f4332348;hp=12ccd91d949cb138bac42171cd604e3a6a0c4c02;hb=5bb193f930fb8738d099d630c4d625d82c1215b5;hpb=c63285753b51215c030b226d66f9662287713f01 diff --git a/source/builders/sequencetemplate.h b/source/builders/sequencetemplate.h index 12ccd91d..c49b2d43 100644 --- a/source/builders/sequencetemplate.h +++ b/source/builders/sequencetemplate.h @@ -6,14 +6,16 @@ #include #include #include "blend.h" +#include "depthtest.h" #include "postprocessor.h" -#include "predicate.h" +#include "resources.h" +#include "stenciltest.h" namespace Msp { namespace GL { -class DepthTest; class Lighting; +class Renderable; class SequenceTemplate { @@ -52,38 +54,49 @@ public: Loader(SequenceTemplate &, Collection &); virtual void postprocessor_loaded(); + void clear(); void multisample(unsigned); void multisample_range(unsigned, unsigned); void postprocessor(const std::string &); - void step(const std::string &, const std::string &); + void step(const std::string &); + void step_with_slot(const std::string &, const std::string &); }; struct Step { class Loader: public DataFile::CollectionObjectLoader { + private: + std::string inline_base_name; + public: Loader(Step &); Loader(Step &, Collection &); private: void init(); - void blend(BlendFactor, BlendFactor); - void blend_predefined(const std::string &); - void depth_test(Predicate); - void depth_test_predefined(const std::string &); + public: + void set_inline_base_name(const std::string &); + + private: + void blend(); + void blend_factors(BlendFactor, BlendFactor); + void depth_test(); + void depth_compare(Predicate); void lighting(const std::string &); void lighting_inline(); - // TODO requires support for scenes in Resources - //void scene(const std::string &); + void object(const std::string &); + void scene(const std::string &); + void stencil_test(); }; std::string tag; - RefPtr lighting; - RefPtr depth_test; - RefPtr blend; + const Lighting *lighting; + DepthTest depth_test; + StencilTest stencil_test; + Blend blend; std::string slot_name; - //Renderable *default_renderable; + Renderable *default_renderable; ~Step(); }; @@ -96,30 +109,45 @@ public: PostProcessor(GL::PostProcessor::Template * = 0); }; - typedef std::vector PostProcessorArray; - private: + class ClearLoader: public DataFile::ObjectLoader + { + public: + ClearLoader(SequenceTemplate &); + + private: + void color(float, float, float, float); + void depth(float); + void stencil(int); + }; + typedef TypeRegistry PostProcessorRegistry; - Resources *resources; bool hdr; bool alpha; unsigned required_multisample; unsigned max_multisample; std::vector steps; - PostProcessorArray postprocessors; + std::vector postprocessors; + bool clear_enabled; + std::vector clear_colors; + float clear_depth; + int clear_stencil; public: SequenceTemplate(); ~SequenceTemplate(); - Resources &get_resources() const; bool get_hdr() const { return hdr; } bool get_alpha() const { return alpha; } unsigned get_required_multisample() const { return required_multisample; } unsigned get_maximum_multisample() const { return max_multisample; } const std::vector &get_steps() const { return steps; } - const PostProcessorArray &get_postprocessors() const { return postprocessors; } + const std::vector &get_postprocessors() const { return postprocessors; } + bool is_clear_enabled() const { return clear_enabled; } + const std::vector &get_clear_colors() const { return clear_colors; } + float get_clear_depth() const { return clear_depth; } + int get_clear_stencil() const { return clear_stencil; } template static void register_postprocessor(const std::string &);