X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fmaterials%2Fmaterial.h;h=ff7f53c0d3ffdb23acf15f55c649f6aacaa1708d;hp=77e7d44ec29bdedf174d393d5f505aba0cfeb18f;hb=HEAD;hpb=9813f8711628a0fbe786406e974dc33546dc9cee diff --git a/source/materials/material.h b/source/materials/material.h index 77e7d44e..3210c966 100644 --- a/source/materials/material.h +++ b/source/materials/material.h @@ -13,6 +13,9 @@ namespace GL { class Sampler; +/** +Base class for materials. Subclasses provide different shading models. +*/ class Material { private: @@ -24,6 +27,8 @@ private: virtual void init_actions(); private: + void alpha_cutoff(float); + void alpha_cutoff_feather(float, float); void sampler(const std::string &); }; @@ -68,25 +73,38 @@ public: }; protected: - const Sampler *sampler; + const Sampler *sampler = 0; + float alpha_cutoff = 0.0f; + float alpha_feather = 1.0f; ProgramData shdata; - Material(): sampler(0) { } + Material(); public: - virtual ~Material() { } + virtual ~Material() = default; + /** Returns a shader appropriate for this material. The same shader is + returned for materials with the same set of features. Additional + specialization values can be passed in to customize the shader. */ virtual const Program *create_compatible_shader(const std::map & = std::map()) const; protected: virtual void fill_program_info(std::string &, std::map &) const = 0; public: - /** Returns the uniforms for the material. */ + /** Returns the uniform values for the material. */ const ProgramData &get_shader_data() const { return shdata; } + /** Returns texture tags used by the material. The returned array is + terminated by an empty tag. */ virtual const Tag *get_texture_tags() const = 0; + virtual const Texture *get_texture(Tag) const = 0; virtual const Sampler *get_sampler(Tag) const { return sampler; } + void set_alpha_cutoff(float); + void set_alpha_feather(float); + float get_alpha_cutoff() const { return alpha_cutoff; } + float get_alpha_feather() const { return alpha_feather; } + void set_debug_name(const std::string &); template