cyberenv
[vrfileman] / src / backdrop.cc
diff --git a/src/backdrop.cc b/src/backdrop.cc
new file mode 100644 (file)
index 0000000..33f4c89
--- /dev/null
@@ -0,0 +1,80 @@
+#include "opengl.h"
+#include "gmath/gmath.h"
+#include "sdr.h"
+#include "texture.h"
+#include "mesh.h"
+#include "meshgen.h"
+#include "backdrop.h"
+
+static unsigned int sdr_grid;
+static Texture *tex_grid;
+
+static Mesh *mesh_skydome;
+static unsigned int sdr_skydome;
+
+static const Vec3 grid_color = Vec3(1.0, 0.3, 1.0);
+static const Vec3 mid_color = Vec3(0.4, 0.1, 0.8);
+static const Vec3 horiz_color = Vec3(0.8, 0.1, 1.0);
+static const Vec3 zenith_color = Vec3(0.2, 0.2, 0.2);
+static const Vec3 fog_color = Vec3(0.12, 0.12, 0.12);
+
+bool init_backdrop()
+{
+       if(!(sdr_grid = create_program_load("sdr/grid.v.glsl", "sdr/grid.p.glsl"))) {
+               return false;
+       }
+       set_uniform_float3(sdr_grid, "grid_color", grid_color.x, grid_color.y, grid_color.z);
+       set_uniform_float3(sdr_grid, "fog_color", fog_color.x, fog_color.y, fog_color.z);
+
+       if(!(sdr_skydome = create_program_load("sdr/skydome.v.glsl", "sdr/skydome.p.glsl"))) {
+               return false;
+       }
+       set_uniform_float3(sdr_skydome, "zenith_color", zenith_color.x, zenith_color.y, zenith_color.z);
+       set_uniform_float3(sdr_skydome, "mid_color", mid_color.x, mid_color.y, mid_color.z);
+       set_uniform_float3(sdr_skydome, "horiz_color", horiz_color.x, horiz_color.y, horiz_color.z);
+       set_uniform_float3(sdr_skydome, "fog_color", fog_color.x, fog_color.y, fog_color.z);
+
+       if(!(tex_grid = load_texture("data/grid2.png"))) {
+               delete tex_grid;
+               return false;
+       }
+
+       mesh_skydome = new Mesh;
+       gen_sphere(mesh_skydome, 100.0, 32, 16, 1, 0.5);
+       mesh_skydome->flip();
+
+       return true;
+}
+
+void cleanup_backdrop()
+{
+       delete mesh_skydome;
+       delete tex_grid;
+       free_program(sdr_grid);
+}
+
+void draw_backdrop()
+{
+       // draw sky
+       bind_program(sdr_skydome);
+       mesh_skydome->draw();
+
+       // draw grid
+       Mat4 xform;
+       xform.scaling(500.0);
+       glPushMatrix();
+       glMultMatrixf(xform[0]);
+
+       bind_program(sdr_grid);
+       bind_texture(tex_grid);
+
+       glBegin(GL_QUADS);
+       glNormal3f(0, 1, 0);
+       glVertex3f(-1, 0, 1);
+       glVertex3f(1, 0, 1);
+       glVertex3f(1, 0, -1);
+       glVertex3f(-1, 0, -1);
+       glEnd();
+
+       glPopMatrix();
+}