ae916258d9959aa2a9e504f4d21c333effe08674
[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         t_loc = sprog->get_uniform_location("t");
34
35         /* uniform locations for matrices */
36
37         mmviewproj_loc = sprog->get_uniform_location("mmviewproj");
38         mview_loc = sprog->get_uniform_location("mview");
39
40         return true;
41 }
42
43 void MorphRenderer::draw() const
44 {
45         if(!camera || !scene)
46                 return;
47
48         if(!sprog->link())
49                 return;
50
51         sprog->use();
52
53         for(size_t i=0; i<scene->objects.size(); i++) {
54                 draw_object(scene->objects[i]);
55         }
56 }
57
58 void MorphRenderer::draw_object(Object *object) const
59 {
60         float t =  (sin(time_sec) + 1) * 0.5;
61
62         if(t_loc != -1)
63                 sprog->set_uniformf(t_loc, t);
64
65         Renderer::draw_object(object);
66 }