added IBR lighting from irradiance maps
[demo] / src / morph_renderer.cc
index f31b8fe..7535171 100644 (file)
@@ -1,8 +1,10 @@
 #include "global.h"
 #include "morph_renderer.h"
+#include "object.h"
 #include "scene.h"
 #include "shader.h"
 #include "shader_manager.h"
+#include "texture.h"
 
 MorphRenderer::MorphRenderer()
 {
@@ -13,6 +15,8 @@ MorphRenderer::MorphRenderer()
        /* we won't use them */
        skytex = 0;
        dskytex = 0;
+
+       fog_density = 0;
 }
 
 MorphRenderer::~MorphRenderer()
@@ -30,11 +34,18 @@ bool MorphRenderer::create()
        diff_loc = sprog->get_uniform_location("diffuse");
        spec_loc = sprog->get_uniform_location("specular");
        shin_loc = sprog->get_uniform_location("shininess");
+       t_loc = sprog->get_uniform_location("t");
+       fog_loc = sprog->get_uniform_location("fog_density");
 
        /* uniform locations for matrices */
 
        mmviewproj_loc = sprog->get_uniform_location("mmviewproj");
        mview_loc = sprog->get_uniform_location("mview");
+       mmod_loc = sprog->get_uniform_location("mmod");
+
+       dstex_loc = sprog->get_uniform_location("dstex");
+       if(dstex_loc != -1)
+               sprog->set_uniformi(dstex_loc, 1);
 
        return true;
 }
@@ -47,9 +58,20 @@ void MorphRenderer::draw() const
        if(!sprog->link())
                return;
 
+       if(dskytex) {
+               dskytex->bind(1);
+       }
+
        sprog->use();
 
        for(size_t i=0; i<scene->objects.size(); i++) {
+               float t = (sin(time_sec + 7.3 * noise(i * M_PI)) + 1) * 0.5;
+               if (t_loc != -1)
+                       sprog->set_uniformf(t_loc, t);
+
+               if(mmod_loc != -1)
+                       sprog->set_uniform_matrix(mmod_loc, scene->objects[i]->transform.upper3x3());
+
                draw_object(scene->objects[i]);
        }
 }
\ No newline at end of file