-no-srgb option
[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
18 bool init_backdrop()
19 {
20         Vec3 grid_color = color(1.0, 0.07, 1.0);
21         Vec3 mid_color = color(0.133, 0.006, 0.612);
22         Vec3 horiz_color = color(0.612, 0.006, 1.0);
23         Vec3 zenith_color = color(0.029, 0.029, 0.029);
24         Vec3 fog_color = color(0.01, 0.01, 0.01);
25
26         if(!(sdr_grid = create_program_load("sdr/grid.v.glsl", "sdr/grid.p.glsl"))) {
27                 return false;
28         }
29         set_uniform_float3(sdr_grid, "grid_color", grid_color.x, grid_color.y, grid_color.z);
30         set_uniform_float3(sdr_grid, "fog_color", fog_color.x, fog_color.y, fog_color.z);
31
32         if(!(sdr_skydome = create_program_load("sdr/skydome.v.glsl", "sdr/skydome.p.glsl"))) {
33                 return false;
34         }
35         set_uniform_float3(sdr_skydome, "zenith_color", zenith_color.x, zenith_color.y, zenith_color.z);
36         set_uniform_float3(sdr_skydome, "mid_color", mid_color.x, mid_color.y, mid_color.z);
37         set_uniform_float3(sdr_skydome, "horiz_color", horiz_color.x, horiz_color.y, horiz_color.z);
38         set_uniform_float3(sdr_skydome, "fog_color", fog_color.x, fog_color.y, fog_color.z);
39
40         if(!(tex_grid = load_texture("data/grid2.png"))) {
41                 delete tex_grid;
42                 return false;
43         }
44         tex_grid->set_anisotropy(glcaps.max_aniso);
45
46         mesh_skydome = new Mesh;
47         gen_sphere(mesh_skydome, 500.0, 32, 16, 1, 0.5);
48         mesh_skydome->flip();
49
50         glClearColor(fog_color.x, fog_color.y, fog_color.z, 1.0);
51
52         return true;
53 }
54
55 void cleanup_backdrop()
56 {
57         delete mesh_skydome;
58         delete tex_grid;
59         free_program(sdr_grid);
60 }
61
62 void draw_backdrop()
63 {
64         // draw sky
65         Mat4 view_mat_inf = view_matrix.upper3x3();
66         glPushMatrix();
67         glLoadMatrixf(view_mat_inf[0]);
68
69         glDisable(GL_DEPTH_TEST);
70         glDepthMask(0);
71
72         bind_program(sdr_skydome);
73         mesh_skydome->draw();
74
75         glEnable(GL_DEPTH_TEST);
76         glDepthMask(1);
77
78         glPopMatrix();
79
80         // draw grid
81         Mat4 xform;
82         xform.scaling(500.0);
83         glPushMatrix();
84         glMultMatrixf(xform[0]);
85
86         bind_program(sdr_grid);
87         bind_texture(tex_grid);
88
89         glBegin(GL_QUADS);
90         glNormal3f(0, 1, 0);
91         glVertex3f(-1, 0, 1);
92         glVertex3f(1, 0, 1);
93         glVertex3f(1, 0, -1);
94         glVertex3f(-1, 0, -1);
95         glEnd();
96
97         glPopMatrix();
98 }