X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fmaterials%2Ftechnique.h;fp=source%2Fmaterials%2Ftechnique.h;h=762b98f4f9afe1d977e4c663397617c6d6d2205f;hb=7aaec9a70b8d7733429bec043f8e33e02956f266;hp=0000000000000000000000000000000000000000;hpb=bec07999d95b76f4b47cffcc564d0cd0afc0435e;p=libs%2Fgl.git diff --git a/source/materials/technique.h b/source/materials/technique.h new file mode 100644 index 00000000..762b98f4 --- /dev/null +++ b/source/materials/technique.h @@ -0,0 +1,64 @@ +#ifndef MSP_GL_TECHNIQUE_H_ +#define MSP_GL_TECHNIQUE_H_ + +#include "renderpass.h" +#include "tag.h" + +namespace Msp { +namespace GL { + +class Material; +class Texture; + +/** +Ties multiple tagged render passes together. +*/ +class Technique +{ +public: + class Loader: public Msp::DataFile::CollectionObjectLoader + { + public: + Loader(Technique &); + Loader(Technique &, Collection &); + + private: + void init(); + void inherit(const std::string &); + void pass(const std::string &); + }; + +private: + class InheritLoader: public Msp::DataFile::CollectionObjectLoader + { + public: + InheritLoader(Technique &, Collection &); + + private: + void material(const std::string &, const std::string &); + void texture(const std::string &, const std::string &); + void uniforms(); + }; + +public: + typedef std::map PassMap; + +private: + PassMap passes; + +public: + RenderPass &add_pass(const Tag &); + bool has_pass(const Tag &) const; + const RenderPass &get_pass(const Tag &) const; + const RenderPass *find_pass(const Tag &) const; + const PassMap &get_passes() const { return passes; } + bool replace_texture(const std::string &, const Texture &); + bool replace_material(const std::string &, const Material &); + bool replace_uniforms(const ProgramData &); + bool has_shaders() const; +}; + +} // namespace GL +} // namespace Msp + +#endif