final changes before dropping
[ld37_one_room] / src / app.cc
index 4b2ff2b..c98b779 100644 (file)
@@ -4,6 +4,7 @@
 #include "app.h"
 #include "opengl.h"
 #include "sdr.h"
+#include "ubersdr.h"
 #include "texture.h"
 #include "mesh.h"
 #include "meshgen.h"
@@ -21,6 +22,7 @@
 static void draw_scene();
 static void toggle_flight();
 static void calc_framerate();
+static void prebake_shaders();
 
 long time_msec;
 int win_width, win_height;
@@ -61,7 +63,7 @@ static unsigned int sdr_post_gamma;
 static long prev_msec;
 
 static BlobExhibit *blobs;
-static bool show_blobs = 1;
+static bool show_blobs;
 
 
 bool app_init(int argc, char **argv)
@@ -97,10 +99,11 @@ bool app_init(int argc, char **argv)
        glEnable(GL_CULL_FACE);
        glEnable(GL_LIGHTING);
        glEnable(GL_NORMALIZE);
+       glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR);
 
        Mesh::use_custom_sdr_attr = false;
 
-       float ambient[] = {0.0, 0.0, 0.0, 0.0};
+       float ambient[] = {0.02, 0.02, 0.02, 0.0};
        glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient);
 
        glClearColor(0.1, 0.1, 0.1, 1.0);
@@ -120,13 +123,20 @@ bool app_init(int argc, char **argv)
        blobs->node = new SceneNode;
        blobs->init();
        blobs->node->set_position(Vec3(0, 1, 0));
+       blobs->node->set_scaling(Vec3(0.1, 0.1, 0.1));
        blobs->node->update(0);
 
+       if(uber_init("sdr/uber.v.glsl", "sdr/uber.p.glsl") == -1) {
+               return false;
+       }
+       prebake_shaders();
+       /*
        if(!(sdr_shadow_notex = create_program_load("sdr/shadow.v.glsl", "sdr/shadow-notex.p.glsl"))) {
                return false;
        }
        set_uniform_int(sdr_shadow_notex, "shadowmap", 1);
        set_uniform_int(sdr_shadow_notex, "envmap", 2);
+       */
 
        if(!fb_srgb) {
                sdr_post_gamma = create_program_load("sdr/post_gamma.v.glsl", "sdr/post_gamma.p.glsl");
@@ -281,6 +291,8 @@ static void set_light(int idx, const Vec3 &pos, const Vec3 &color)
        glLightfv(lt, GL_POSITION, posv);
        glLightfv(lt, GL_DIFFUSE, colv);
        glLightfv(lt, GL_SPECULAR, colv);
+
+       uber_enable_light(idx);
 }
 
 void app_display()
@@ -318,7 +330,7 @@ void app_display()
        } else {
                glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 
-               proj_matrix.perspective(deg_to_rad(50.0), win_aspect, NEAR_CLIP, FAR_CLIP);
+               proj_matrix.perspective(deg_to_rad(60.0), win_aspect, NEAR_CLIP, FAR_CLIP);
                glMatrixMode(GL_PROJECTION);
                glLoadMatrixf(proj_matrix[0]);
 
@@ -587,3 +599,22 @@ static void calc_framerate()
                ++nframes;
        }
 }
+
+static void prebake_shaders()
+{
+       unsigned int prog;
+
+       uber_clear();
+       uber_enable_light(0);
+       uber_enable_light(1);
+       uber_enable_light(2);
+       if((prog = uber_program())) {
+       }
+
+       uber_enable_texmap();
+       if((prog = uber_program())) {
+               set_uniform_int(prog, "texmap", MTL_TEX_DIFFUSE);
+       }
+
+       uber_clear();
+}