fixed scale in VR
[vrfileman] / src / backdrop.cc
1 #include "opengl.h"
2 #include "gmath/gmath.h"
3 #include "sdr.h"
4 #include "texture.h"
5 #include "mesh.h"
6 #include "meshgen.h"
7 #include "backdrop.h"
8 #include "app.h"
9 #include "color.h"
10
11 static unsigned int sdr_grid;
12 static Texture *tex_grid;
13
14 static Mesh *mesh_skydome;
15 static unsigned int sdr_skydome;
16
17 static Vec3 grid_color;
18 static int uloc_grid_color;
19
20 bool init_backdrop()
21 {
22         grid_color = color(1.0, 0.07, 1.0);
23         Vec3 mid_color = color(0.133, 0.006, 0.612);
24         Vec3 horiz_color = color(0.612, 0.006, 1.0);
25         Vec3 zenith_color = color(0.029, 0.029, 0.029);
26         Vec3 fog_color = color(0.01, 0.01, 0.01);
27
28         if(!(sdr_grid = create_program_load("sdr/grid.v.glsl", "sdr/grid.p.glsl"))) {
29                 return false;
30         }
31         uloc_grid_color = get_uniform_loc(sdr_grid, "grid_color");
32         set_uniform_float3(sdr_grid, "grid_color", grid_color.x, grid_color.y, grid_color.z);
33         set_uniform_float3(sdr_grid, "fog_color", fog_color.x, fog_color.y, fog_color.z);
34
35         if(!(sdr_skydome = create_program_load("sdr/skydome.v.glsl", "sdr/skydome.p.glsl"))) {
36                 return false;
37         }
38         set_uniform_float3(sdr_skydome, "zenith_color", zenith_color.x, zenith_color.y, zenith_color.z);
39         set_uniform_float3(sdr_skydome, "mid_color", mid_color.x, mid_color.y, mid_color.z);
40         set_uniform_float3(sdr_skydome, "horiz_color", horiz_color.x, horiz_color.y, horiz_color.z);
41         set_uniform_float3(sdr_skydome, "fog_color", fog_color.x, fog_color.y, fog_color.z);
42
43         if(!(tex_grid = load_texture("data/grid2.png"))) {
44                 delete tex_grid;
45                 return false;
46         }
47         tex_grid->set_anisotropy(glcaps.max_aniso);
48
49         mesh_skydome = new Mesh;
50         gen_sphere(mesh_skydome, 100.0, 32, 16, 1, 0.5);
51         mesh_skydome->flip();
52
53         glClearColor(fog_color.x, fog_color.y, fog_color.z, 1.0);
54
55         return true;
56 }
57
58 void cleanup_backdrop()
59 {
60         delete mesh_skydome;
61         delete tex_grid;
62         free_program(sdr_grid);
63 }
64
65 void draw_backdrop()
66 {
67         // draw sky
68         Mat4 view_mat_inf = view_matrix.upper3x3();
69         glPushMatrix();
70         glLoadMatrixf(view_mat_inf[0]);
71
72         glDisable(GL_DEPTH_TEST);
73         glDepthMask(0);
74
75         bind_program(sdr_skydome);
76         mesh_skydome->draw();
77
78         glEnable(GL_DEPTH_TEST);
79         glDepthMask(1);
80
81         glPopMatrix();
82
83         // draw grid
84         Mat4 xform;
85         xform.scaling(500.0);
86         glPushMatrix();
87         glMultMatrixf(xform[0]);
88
89         bind_program(sdr_grid);
90         float pulse = 1.0 + sin(time_sec * 3.0) * 0.25;
91         glUniform3f(uloc_grid_color, grid_color.x * pulse, grid_color.y * pulse, grid_color.z * pulse);
92         bind_texture(tex_grid);
93
94         glBegin(GL_QUADS);
95         glNormal3f(0, 1, 0);
96         glVertex3f(-1, 0, 1);
97         glVertex3f(1, 0, 1);
98         glVertex3f(1, 0, -1);
99         glVertex3f(-1, 0, -1);
100         glEnd();
101
102         glPopMatrix();
103 }