+++ /dev/null
-#ifndef MSP_GL_MATERIAL_H_
-#define MSP_GL_MATERIAL_H_
-
-#include <msp/datafile/objectloader.h>
-#include "color.h"
-#include "programdata.h"
-
-namespace Msp {
-namespace GL {
-
-/**
-Stores basic material properties. This includes color and reflection
-parameters, but does not include texturing. Materials interact with light
-sources and ambient lighting to produce the base color of a surface. Textures
-can be used to add detail.
-
-Material provides a set of uniform variables for use with shaders.
-*/
-class Material
-{
-public:
- class Loader: public DataFile::CollectionObjectLoader<Material>
- {
- private:
- bool srgb;
-
- public:
- Loader(Material &);
- Loader(Material &, Collection &);
- private:
- void init();
-
- Color make_color(float, float, float, float);
- void ambient(float, float, float, float);
- void diffuse(float, float, float, float);
- void specular(float, float, float, float);
- void emission(float, float, float, float);
- void shininess(float);
- void reflectivity(float);
- };
-
-private:
- Color ambient;
- Color diffuse;
- Color specular;
- Color emission;
- float shininess;
- float reflectivity;
- ProgramData shdata;
-
-public:
- Material();
-
- /** Sets the ambient color of the material. Provided to shaders with the
- name material.ambient. */
- void set_ambient(const Color &);
-
- /** Sets the diffuse (direction-independent) color of the material.
- Provided to shaders with the name material.diffuse. */
- void set_diffuse(const Color &);
-
- /** Sets the specular (direction-dependent) color of the material. Provided
- to shaders with the name material.specular. */
- void set_specular(const Color &);
- void set_emission(const Color &);
-
- /** Sets the specular exponent of the material. Provided to shaders with
- the name material.shininess. */
- void set_shininess(float);
-
- /** Sets the reflectivity of the material. Provided to shaders with the
- name reflectivity. Has no effect when shaders are not used. */
- void set_reflectivity(float);
-
- const Color &get_ambient() const { return ambient; }
- const Color &get_diffuse() const { return diffuse; }
- const Color &get_specular() const { return specular; }
- const Color &get_emission() const { return emission; }
- float get_shininess() const { return shininess; }
- float get_reflectivity() const { return reflectivity; }
-
- /** Returns the uniforms for the material. */
- const ProgramData &get_shader_data() const { return shdata; }
-};
-
-} // namespace GL
-} // namespace Msp
-
-#endif