X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fpipelinetemplate.h;h=d98633539e06dff0dac89b3ef71d5f1478243676;hp=56c4da19a0e9efb6eb28b9b4519195a3d0779933;hb=81e0e39fefd8f50ae2367fe821d58af6273bcea2;hpb=18240e2bb031551e9c72a55c7d974904d209760a diff --git a/source/pipelinetemplate.h b/source/pipelinetemplate.h index 56c4da19..d9863353 100644 --- a/source/pipelinetemplate.h +++ b/source/pipelinetemplate.h @@ -3,6 +3,7 @@ #include #include +#include #include #include "blend.h" #include "postprocessor.h" @@ -19,6 +20,13 @@ class PipelineTemplate public: class Loader: public DataFile::CollectionObjectLoader { + private: + template + struct AddPostProc + { + static void add(Loader &ldr, const std::string &kw) { ldr.add(kw, &Loader::postprocessor); } + }; + public: Loader(PipelineTemplate &); Loader(PipelineTemplate &, Collection &); @@ -31,6 +39,8 @@ public: template void postprocessor(); + + friend class PipelineTemplate; }; struct Pass @@ -67,6 +77,8 @@ public: typedef std::vector PostProcessorArray; private: + typedef DataFile::LoadableTypeRegistry PostProcessorRegistry; + bool hdr; unsigned required_multisample; unsigned max_multisample; @@ -75,14 +87,34 @@ private: public: PipelineTemplate(); + ~PipelineTemplate(); bool get_hdr() const { return hdr; } unsigned get_required_multisample() const { return required_multisample; } unsigned get_maximum_multisample() const { return max_multisample; } const PassArray &get_passes() const { return passes; } const PostProcessorArray &get_postprocessors() const { return postprocessors; } + + template + static void register_postprocessor(const std::string &); +private: + static PostProcessorRegistry &get_postprocessor_registry(); }; +template +void PipelineTemplate::register_postprocessor(const std::string &kw) +{ + get_postprocessor_registry().register_type(kw); +} + +template +void PipelineTemplate::Loader::postprocessor() +{ + RefPtr postproc = new typename T::Template; + load_sub(*postproc); + obj.postprocessors.push_back(postproc.release()); +} + } // namespace GL } // namespace Msp