added morph_renderer
[demo] / src / morph_renderer.cc
1 #include "global.h"
2 #include "morph_renderer.h"
3 #include "scene.h"
4 #include "shader.h"
5 #include "shader_manager.h"
6
7 MorphRenderer::MorphRenderer()
8 {
9         scene = 0;
10         camera = 0;
11         sprog = 0;
12
13         /* we won't use them */
14         skytex = 0;
15         dskytex = 0;
16 }
17
18 MorphRenderer::~MorphRenderer()
19 {
20 }
21
22 bool MorphRenderer::create()
23 {
24         if(!(sprog = sdr_man->create_shader_program("morphing.v.glsl", "morphing.f.glsl"))) {
25                 return false;
26         }
27
28         /* getting material uniform locations: diffuse, specular, specular exponent (strength) */
29
30         diff_loc = sprog->get_uniform_location("diffuse");
31         spec_loc = sprog->get_uniform_location("specular");
32         shin_loc = sprog->get_uniform_location("shininess");
33
34         /* uniform locations for matrices */
35
36         mmviewproj_loc = sprog->get_uniform_location("mmviewproj");
37         mview_loc = sprog->get_uniform_location("mview");
38
39         return true;
40 }
41
42 void MorphRenderer::draw() const
43 {
44         if(!camera || !scene)
45                 return;
46
47         if(!sprog->link())
48                 return;
49
50         sprog->use();
51
52         for(size_t i=0; i<scene->objects.size(); i++) {
53                 draw_object(scene->objects[i]);
54         }
55 }