class Sampler;
+/**
+Base class for materials. Subclasses provide different shading models.
+*/
class Material
{
private:
public:
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::string, int> & = std::map<std::string, int>()) const;
protected:
virtual void fill_program_info(std::string &, std::map<std::string, int> &) 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; }