added morph_renderer
[demo] / src / morph_renderer.cc
diff --git a/src/morph_renderer.cc b/src/morph_renderer.cc
new file mode 100644 (file)
index 0000000..f31b8fe
--- /dev/null
@@ -0,0 +1,55 @@
+#include "global.h"
+#include "morph_renderer.h"
+#include "scene.h"
+#include "shader.h"
+#include "shader_manager.h"
+
+MorphRenderer::MorphRenderer()
+{
+       scene = 0;
+       camera = 0;
+       sprog = 0;
+
+       /* we won't use them */
+       skytex = 0;
+       dskytex = 0;
+}
+
+MorphRenderer::~MorphRenderer()
+{
+}
+
+bool MorphRenderer::create()
+{
+       if(!(sprog = sdr_man->create_shader_program("morphing.v.glsl", "morphing.f.glsl"))) {
+               return false;
+       }
+
+       /* getting material uniform locations: diffuse, specular, specular exponent (strength) */
+
+       diff_loc = sprog->get_uniform_location("diffuse");
+       spec_loc = sprog->get_uniform_location("specular");
+       shin_loc = sprog->get_uniform_location("shininess");
+
+       /* uniform locations for matrices */
+
+       mmviewproj_loc = sprog->get_uniform_location("mmviewproj");
+       mview_loc = sprog->get_uniform_location("mview");
+
+       return true;
+}
+
+void MorphRenderer::draw() const
+{
+       if(!camera || !scene)
+               return;
+
+       if(!sprog->link())
+               return;
+
+       sprog->use();
+
+       for(size_t i=0; i<scene->objects.size(); i++) {
+               draw_object(scene->objects[i]);
+       }
+}
\ No newline at end of file