]> git.tdb.fi Git - libs/gl.git/blobdiff - source/basicmaterial.cpp
Give materials the capability to automatically create a suitable shader
[libs/gl.git] / source / basicmaterial.cpp
index 7ba8380c1b47b62db0dad9746d19db1a1ec5413b..858c65daf56e8a31e5cdb9c22f1ab0da3f43ae57 100644 (file)
@@ -14,6 +14,36 @@ 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";
+       }
+       return source;
+}
+
 void BasicMaterial::attach_textures_to(Texturing &texturing, ProgramData &tex_shdata) const
 {
        attach_texture_to(diffuse.texture, texturing, tex_shdata, "diffuse_map");