namespace Msp {
namespace GL {
-BasicMaterial::BasicMaterial()
+BasicMaterial::BasicMaterial():
+ receive_shadows(false)
{
set_diffuse(Color(1.0f));
set_specular(Color(0.0f));
set_reflectivity(0.0f);
}
+string BasicMaterial::create_program_source() const
+{
+ string source = "import phong;\n";
+ if(diffuse.texture)
+ source += "const bool use_diffuse_map = true;\n";
+ if(specular.texture || specular.value.r || specular.value.g || specular.value.b)
+ {
+ source += "const bool use_specular = true;\n";
+ if(specular.texture)
+ source += "const bool use_specular_map = true;\n";
+ if(shininess.texture)
+ source += "const bool use_shininess_map = true;\n";
+ }
+ if(normal.texture)
+ source += "const bool use_normal_map = true;\n";
+ if(emission.texture || emission.value.r || emission.value.g || emission.value.b)
+ {
+ source += "const bool use_emission = true;\n";
+ if(emission.texture)
+ source += "const bool use_emission_map = true;\n";
+ }
+ if(reflectivity.value || reflectivity.texture)
+ {
+ source += "const bool use_reflectivity = true;\n";
+ if (reflectivity.texture)
+ source += "const bool use_reflectivity_map = true;\n";
+ }
+ if(receive_shadows)
+ source += "const bool use_shadow_map = true;\n";
+ return source;
+}
+
void BasicMaterial::attach_textures_to(Texturing &texturing, ProgramData &tex_shdata) const
{
attach_texture_to(diffuse.texture, texturing, tex_shdata, "diffuse_map");
reflectivity.texture = tex;
}
+void BasicMaterial::set_receive_shadows(bool s)
+{
+ receive_shadows = s;
+}
+
DataFile::Loader::ActionMap BasicMaterial::Loader::shared_actions;
add_property("emission", &BasicMaterial::set_emission, &BasicMaterial::set_emission_map, false);
add_property("shininess", &BasicMaterial::set_shininess, &BasicMaterial::set_shininess_map);
add_property("reflectivity", &BasicMaterial::set_reflectivity, &BasicMaterial::set_reflectivity_map);
+ add("receive_shadows", &BasicMaterial::receive_shadows);
}
} // namespace GL