controls for fog to select params
[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         fog_density = 0;
18 }
19
20 MorphRenderer::~MorphRenderer()
21 {
22 }
23
24 bool MorphRenderer::create()
25 {
26         if(!(sprog = sdr_man->create_shader_program("morphing.v.glsl", "morphing.f.glsl"))) {
27                 return false;
28         }
29
30         /* getting material uniform locations: diffuse, specular, specular exponent (strength) */
31
32         diff_loc = sprog->get_uniform_location("diffuse");
33         spec_loc = sprog->get_uniform_location("specular");
34         shin_loc = sprog->get_uniform_location("shininess");
35         t_loc = sprog->get_uniform_location("t");
36
37         /* uniform locations for matrices */
38
39         mmviewproj_loc = sprog->get_uniform_location("mmviewproj");
40         mview_loc = sprog->get_uniform_location("mview");
41
42         return true;
43 }
44
45 void MorphRenderer::draw() const
46 {
47         if(!camera || !scene)
48                 return;
49
50         if(!sprog->link())
51                 return;
52
53         sprog->use();
54
55         for(size_t i=0; i<scene->objects.size(); i++) {
56                 draw_object(scene->objects[i]);
57         }
58 }
59
60 void MorphRenderer::draw_object(Object *object) const
61 {
62         float t =  (sin(time_sec) + 1) * 0.5;
63
64         if(t_loc != -1)
65                 sprog->set_uniformf(t_loc, t);
66
67         Renderer::draw_object(object);
68 }