ubershaders and path stripping in metascene
[ld37_one_room] / src / material.cc
index 189b6ad..f345204 100644 (file)
@@ -4,6 +4,7 @@
 #include "material.h"
 #include "sdr.h"
 #include "app.h"
+#include "ubersdr.h"
 
 Material::Material()
        : diffuse(1.0f, 1.0f, 1.0f)
@@ -22,16 +23,29 @@ void Material::setup() const
        glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, ks);
        glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, shininess);
 
-       int ntex = std::min((int)textures.size(), 8);   // TODO: use max texture units
-       for(int i=0; i<ntex; i++) {
-               bind_texture(textures[i], i);
+       for(int i=0; i<NUM_MTL_TEXTURES; i++) {
+               bind_texture(stdtex[i], i);
        }
 
-       /*
-       if(stdtex[MTL_TEX_LIGHTMAP]) {
-               bind_program(stdtex[MTL_TEX_DIFFUSE] ? sdr_ltmap : sdr_ltmap_notex);
+       if(stdtex[MTL_TEX_DIFFUSE]) {
+               uber_enable_texmap();
+       } else {
+               uber_disable_texmap();
+       }
+       if(stdtex[MTL_TEX_ENVMAP] && stdtex[MTL_TEX_ENVMAP]->get_type() == TEX_CUBE) {
+               uber_enable_cubemap();
+       } else {
+               uber_disable_cubemap();
        }
-       */
+       if(stdtex[MTL_TEX_ENVMAP] && stdtex[MTL_TEX_ENVMAP]->get_type() == TEX_2D) {
+               uber_enable_sphmap();
+       } else {
+               uber_disable_sphmap();
+       }
+       /* TODO shadows */
+
+       unsigned int sdrprog = uber_program();
+       bind_program(sdrprog);
 }
 
 void Material::add_texture(Texture *tex, int type)