33f4c89c7846362004ea61a79015cc51db72c143
[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
9 static unsigned int sdr_grid;
10 static Texture *tex_grid;
11
12 static Mesh *mesh_skydome;
13 static unsigned int sdr_skydome;
14
15 static const Vec3 grid_color = Vec3(1.0, 0.3, 1.0);
16 static const Vec3 mid_color = Vec3(0.4, 0.1, 0.8);
17 static const Vec3 horiz_color = Vec3(0.8, 0.1, 1.0);
18 static const Vec3 zenith_color = Vec3(0.2, 0.2, 0.2);
19 static const Vec3 fog_color = Vec3(0.12, 0.12, 0.12);
20
21 bool init_backdrop()
22 {
23         if(!(sdr_grid = create_program_load("sdr/grid.v.glsl", "sdr/grid.p.glsl"))) {
24                 return false;
25         }
26         set_uniform_float3(sdr_grid, "grid_color", grid_color.x, grid_color.y, grid_color.z);
27         set_uniform_float3(sdr_grid, "fog_color", fog_color.x, fog_color.y, fog_color.z);
28
29         if(!(sdr_skydome = create_program_load("sdr/skydome.v.glsl", "sdr/skydome.p.glsl"))) {
30                 return false;
31         }
32         set_uniform_float3(sdr_skydome, "zenith_color", zenith_color.x, zenith_color.y, zenith_color.z);
33         set_uniform_float3(sdr_skydome, "mid_color", mid_color.x, mid_color.y, mid_color.z);
34         set_uniform_float3(sdr_skydome, "horiz_color", horiz_color.x, horiz_color.y, horiz_color.z);
35         set_uniform_float3(sdr_skydome, "fog_color", fog_color.x, fog_color.y, fog_color.z);
36
37         if(!(tex_grid = load_texture("data/grid2.png"))) {
38                 delete tex_grid;
39                 return false;
40         }
41
42         mesh_skydome = new Mesh;
43         gen_sphere(mesh_skydome, 100.0, 32, 16, 1, 0.5);
44         mesh_skydome->flip();
45
46         return true;
47 }
48
49 void cleanup_backdrop()
50 {
51         delete mesh_skydome;
52         delete tex_grid;
53         free_program(sdr_grid);
54 }
55
56 void draw_backdrop()
57 {
58         // draw sky
59         bind_program(sdr_skydome);
60         mesh_skydome->draw();
61
62         // draw grid
63         Mat4 xform;
64         xform.scaling(500.0);
65         glPushMatrix();
66         glMultMatrixf(xform[0]);
67
68         bind_program(sdr_grid);
69         bind_texture(tex_grid);
70
71         glBegin(GL_QUADS);
72         glNormal3f(0, 1, 0);
73         glVertex3f(-1, 0, 1);
74         glVertex3f(1, 0, 1);
75         glVertex3f(1, 0, -1);
76         glVertex3f(-1, 0, -1);
77         glEnd();
78
79         glPopMatrix();
80 }