X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fpipelinetemplate.h;h=fb24ea29df547f468ff05ba142631c7bd215107d;hp=a18eead4836401020a7a0e87d7abcaa2fbeee7cb;hb=HEAD;hpb=e85d8669d6c389ded738c7b536f83ea54176662f diff --git a/source/pipelinetemplate.h b/source/pipelinetemplate.h deleted file mode 100644 index a18eead4..00000000 --- a/source/pipelinetemplate.h +++ /dev/null @@ -1,151 +0,0 @@ -#ifndef PIPELINETEMPLATE_H_ -#define PIPELINETEMPLATE_H_ - -#include -#include -#include -#include -#include "blend.h" -#include "postprocessor.h" -#include "predicate.h" - -namespace Msp { -namespace GL { - -class DepthTest; -class Lighting; - -class PipelineTemplate -{ -private: - class PostProcLoader: virtual public DataFile::Loader - { - private: - template - struct AddPostProc - { - static void add(PostProcLoader &ldr, const std::string &kw) { ldr.add(kw, &PostProcLoader::postprocessor); } - }; - - protected: - RefPtr postproc; - - public: - PostProcLoader(); - - PostProcessor::Template *get_postprocessor_template() { return postproc.release(); } - - protected: - virtual void postprocessor_loaded() { } - - private: - template - void postprocessor(); - - friend class PipelineTemplate; - }; - -public: - class Loader: public DataFile::CollectionObjectLoader, public PostProcLoader - { - public: - Loader(PipelineTemplate &); - Loader(PipelineTemplate &, Collection &); - private: - void init(); - - virtual void postprocessor_loaded(); - void multisample(unsigned); - void multisample_range(unsigned, unsigned); - void pass(const std::string &, const std::string &); - void postprocessor(const std::string &); - }; - - struct Pass - { - class Loader: public DataFile::CollectionObjectLoader - { - public: - Loader(Pass &); - Loader(Pass &, 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 &); - void lighting(const std::string &); - void lighting_inline(); - // TODO requires support for scenes in Resources - //void scene(const std::string &); - }; - - std::string tag; - RefPtr lighting; - RefPtr depth_test; - RefPtr blend; - std::string renderable_name; - //Renderable *default_renderable; - - ~Pass(); - }; - - struct PostProcessor - { - GL::PostProcessor::Template *postprocessor_template; - std::string slot_name; - - PostProcessor(GL::PostProcessor::Template * = 0); - }; - - typedef std::vector PassArray; - typedef std::vector PostProcessorArray; - -private: - typedef DataFile::LoadableTypeRegistry PostProcessorRegistry; - - bool hdr; - unsigned required_multisample; - unsigned max_multisample; - PassArray passes; - PostProcessorArray postprocessors; - -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::PostProcLoader::postprocessor() -{ - if(postproc) - throw std::logic_error("Only one postprocessor allowed per slot"); - RefPtr pp = new typename T::Template; - load_sub(*pp); - postproc = pp; - pp = 0; - postprocessor_loaded(); -} - -} // namespace GL -} // namespace Msp - -#endif