--- /dev/null
+#ifndef MSP_GL_BASICMATERIAL_H_
+#define MSP_GL_BASICMATERIAL_H_
+
+#include "material.h"
+
+namespace Msp {
+namespace GL {
+
+class BasicMaterial: public Material
+{
+public:
+ class Loader: public DataFile::DerivedObjectLoader<BasicMaterial, Material::PropertyLoader<BasicMaterial> >
+ {
+ private:
+ static ActionMap shared_actions;
+
+ public:
+ Loader(BasicMaterial &);
+ Loader(BasicMaterial &, Collection &);
+
+ private:
+ virtual void init_actions();
+ };
+
+private:
+ Property<Color> diffuse;
+ Property<Color> specular;
+ Property<float> shininess;
+ Property<Vector3> normal;
+ Property<Color> emission;
+ Property<float> reflectivity;
+ bool receive_shadows;
+
+public:
+ BasicMaterial();
+
+protected:
+ virtual std::string create_program_source() const;
+
+public:
+ virtual void attach_textures_to(Texturing &, ProgramData &) const;
+
+ void set_diffuse(const Color &);
+ void set_diffuse_map(const Texture *);
+ void set_specular(const Color &);
+ void set_specular_map(const Texture *);
+ void set_normal_map(const Texture *);
+ void set_emission(const Color &);
+ void set_emission_map(const Texture *);
+ void set_shininess(float);
+ void set_shininess_map(const Texture *);
+ void set_reflectivity(float);
+ void set_reflectivity_map(const Texture *);
+ void set_receive_shadows(bool);
+};
+
+} // namespace GL
+} // namespace Msp
+
+#endif