X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Fmaterials%2Fmaterial.h;h=2f8f38ab7ce183c40492b3d75f2b11c2904939a6;hb=da85eb77172dbd62f764a63b45c79fc059af563b;hp=571f4cb027c4da3a41e8d317e1e4c042603a2706;hpb=7aaec9a70b8d7733429bec043f8e33e02956f266;p=libs%2Fgl.git diff --git a/source/materials/material.h b/source/materials/material.h index 571f4cb0..2f8f38ab 100644 --- a/source/materials/material.h +++ b/source/materials/material.h @@ -1,8 +1,8 @@ #ifndef MSP_GL_MATERIAL_H_ #define MSP_GL_MATERIAL_H_ +#include #include -#include #include #include "color.h" #include "programdata.h" @@ -64,7 +64,7 @@ public: template struct AddType { - static void add(GenericLoader &ldr, const std::string &kw) { ldr.add(kw, &GenericLoader::typed_material); } + void operator()(const std::string &kw, GenericLoader &ldr) const { ldr.add(kw, &GenericLoader::typed_material); } }; DataFile::Collection *coll; @@ -86,7 +86,7 @@ public: }; private: - typedef DataFile::LoadableTypeRegistry MaterialRegistry; + typedef TypeRegistry MaterialRegistry; protected: const Sampler *sampler; @@ -96,19 +96,22 @@ protected: public: virtual ~Material() { } - virtual Program *create_compatible_shader() const; virtual const Program *create_compatible_shader(DataFile::Collection &) const; protected: - virtual std::string create_program_source() const = 0; + virtual void fill_program_info(std::string &, std::map &) const = 0; public: /** Returns the uniforms for the material. */ const ProgramData &get_shader_data() const { return shdata; } protected: - void attach_texture_to(const Texture *, Texturing &, ProgramData &, const std::string &) const; + DEPRECATED void attach_texture_to(const Texture *, Texturing &, ProgramData &, const std::string &) const; public: - virtual void attach_textures_to(Texturing &, ProgramData &) const = 0; + DEPRECATED virtual void attach_textures_to(Texturing &, ProgramData &) const = 0; + + virtual const Tag *get_texture_tags() const = 0; + virtual const Texture *get_texture(Tag) const = 0; + const Sampler *get_sampler() const { return sampler; } template static void register_type(const std::string &); @@ -127,7 +130,8 @@ template void Material::PropertyLoader::add_property(const std::string &kw, void (C::*set_value)(float), void (C::*set_texture)(const Texture *)) { add(kw, &PropertyLoader::property_value_scalar, set_value); - add(kw+"_map", &PropertyLoader::property_texture, set_texture); + if(set_texture) + add(kw+"_map", &PropertyLoader::property_texture, set_texture); } template @@ -140,7 +144,8 @@ void Material::PropertyLoader::add_property(const std::string &kw, void (C::* add(kw, &PropertyLoader::property_value_rgba, set_value); add(kw+"_srgb", &PropertyLoader::property_value_srgb_alpha, set_value); } - add(kw+"_map", &PropertyLoader::property_texture, set_texture); + if(set_texture) + add(kw+"_map", &PropertyLoader::property_texture, set_texture); } template