X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbasicmaterial.cpp;h=708c8a5b6ccb876cb9124be8cd2d1cc1fecea4b4;hb=f5c631cecb6602ae31287b0eadd699002175cc74;hp=7ba8380c1b47b62db0dad9746d19db1a1ec5413b;hpb=3500f13f51dabadd2e7f06b81820936520cc8115;p=libs%2Fgl.git diff --git a/source/basicmaterial.cpp b/source/basicmaterial.cpp index 7ba8380c..708c8a5b 100644 --- a/source/basicmaterial.cpp +++ b/source/basicmaterial.cpp @@ -5,7 +5,8 @@ using namespace std; namespace Msp { namespace GL { -BasicMaterial::BasicMaterial() +BasicMaterial::BasicMaterial(): + receive_shadows(false) { set_diffuse(Color(1.0f)); set_specular(Color(0.0f)); @@ -14,6 +15,38 @@ BasicMaterial::BasicMaterial() 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"); @@ -84,17 +117,22 @@ void BasicMaterial::set_reflectivity_map(const Texture *tex) reflectivity.texture = tex; } +void BasicMaterial::set_receive_shadows(bool s) +{ + receive_shadows = s; +} + DataFile::Loader::ActionMap BasicMaterial::Loader::shared_actions; BasicMaterial::Loader::Loader(BasicMaterial &m): - DerivedObjectLoader >(m) + DerivedObjectLoader >(m) { set_actions(shared_actions); } BasicMaterial::Loader::Loader(BasicMaterial &m, Collection &c): - DerivedObjectLoader >(m, c) + DerivedObjectLoader >(m, c) { set_actions(shared_actions); } @@ -107,6 +145,7 @@ void BasicMaterial::Loader::init_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