added IBR lighting from irradiance maps
[demo] / src / morph_renderer.cc
index 601c335..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()
 {
@@ -39,6 +41,11 @@ bool MorphRenderer::create()
 
        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;
 }
@@ -51,19 +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++) {
-               draw_object(scene->objects[i]);
-       }
-}
-
-void MorphRenderer::draw_object(Object *object) const
-{
-       float t =  (sin(time_sec) + 1) * 0.5;
+               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(t_loc != -1)
-               sprog->set_uniformf(t_loc, t);
+               if(mmod_loc != -1)
+                       sprog->set_uniform_matrix(mmod_loc, scene->objects[i]->transform.upper3x3());
 
-       Renderer::draw_object(object);
+               draw_object(scene->objects[i]);
+       }
 }
\ No newline at end of file