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