fix indentation,style
[demo] / src / morph_renderer.cc
1 #include "global.h"
2 #include "morph_renderer.h"
3 #include "object.h"
4 #include "scene.h"
5 #include "shader.h"
6 #include "shader_manager.h"
7 #include "texture.h"
8
9 MorphRenderer::MorphRenderer()
10 {
11         scene = 0;
12         camera = 0;
13         sprog = 0;
14
15         /* we won't use them */
16         skytex = 0;
17         dskytex = 0;
18
19         fog_density = 0;
20 }
21
22 MorphRenderer::~MorphRenderer()
23 {
24 }
25
26 bool MorphRenderer::create()
27 {
28         if(!(sprog = sdr_man->create_shader_program("morphing.v.glsl", "morphing.f.glsl"))) {
29                 return false;
30         }
31
32         /* getting material uniform locations: diffuse, specular, specular exponent (strength) */
33
34         diff_loc = sprog->get_uniform_location("diffuse");
35         spec_loc = sprog->get_uniform_location("specular");
36         shin_loc = sprog->get_uniform_location("shininess");
37         t_loc = sprog->get_uniform_location("t");
38         fog_loc = sprog->get_uniform_location("fog_density");
39
40         /* uniform locations for matrices */
41
42         mmviewproj_loc = sprog->get_uniform_location("mmviewproj");
43         mview_loc = sprog->get_uniform_location("mview");
44         mmod_loc = sprog->get_uniform_location("mmod");
45
46         dstex_loc = sprog->get_uniform_location("dstex");
47         if(dstex_loc != -1)
48                 sprog->set_uniformi(dstex_loc, 1);
49
50         return true;
51 }
52
53 void MorphRenderer::draw() const
54 {
55         if(!camera || !scene)
56                 return;
57
58         if(!sprog->link())
59                 return;
60
61         if(dskytex) {
62                 dskytex->bind(1);
63         }
64
65         sprog->use();
66
67         for(size_t i=0; i<scene->objects.size(); i++) {
68                 float t = (sin(time_sec + 7.3 * noise(i * M_PI)) + 1) * 0.5;
69                 if(t_loc != -1)
70                         sprog->set_uniformf(t_loc, t);
71
72                 if(mmod_loc != -1)
73                         sprog->set_uniform_matrix(mmod_loc, scene->objects[i]->transform.upper3x3());
74
75                 draw_object(scene->objects[i]);
76         }
77 }