X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fmaterials%2Fmaterial.h;h=ff7f53c0d3ffdb23acf15f55c649f6aacaa1708d;hb=806f14bc256bfb9dcd435e9985fabac8898e25f6;hp=77e7d44ec29bdedf174d393d5f505aba0cfeb18f;hpb=9813f8711628a0fbe786406e974dc33546dc9cee;p=libs%2Fgl.git diff --git a/source/materials/material.h b/source/materials/material.h index 77e7d44e..ff7f53c0 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: @@ -68,22 +71,28 @@ public: }; protected: - const Sampler *sampler; + const Sampler *sampler = 0; ProgramData shdata; - Material(): sampler(0) { } + Material() = default; 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; }