first half-assed attempt at old wahsed-out post effect failed
[demo_prior] / src / part_whitted.c
index be0152c..eb0fe5b 100644 (file)
@@ -2,6 +2,8 @@
 #include "demo.h"
 #include "part.h"
 #include "sdr.h"
+#include "texture.h"
+#include "post.h"
 
 static int init(void);
 static void destroy(void);
@@ -23,7 +25,7 @@ static struct demo_part part = {
        mbutton, mmotion
 };
 
-static float cam_theta, cam_phi = 15, cam_dist = 6;
+static float cam_theta, cam_phi, cam_dist = 6;
 
 static int bnstate[8];
 static int mouse_x, mouse_y;
@@ -31,6 +33,9 @@ static int mouse_x, mouse_y;
 static unsigned int sdr;
 static int uloc_aspect;
 
+static struct texture *dbgtex;
+static float dbg_alpha;
+
 
 void reg_whitted(void)
 {
@@ -44,11 +49,15 @@ static int init(void)
                return -1;
        }
        uloc_aspect = get_uniform_loc(sdr, "aspect");
+
+       dbgtex = load_texture("data/dbg_whitted.jpg");
+
        return 0;
 }
 
 static void destroy(void)
 {
+       free_texture(dbgtex);
 }
 
 static void start(void)
@@ -61,6 +70,8 @@ static void stop(void)
 
 static void draw(long tm)
 {
+       glDisable(GL_DEPTH_TEST);
+
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
        /*
@@ -72,6 +83,9 @@ static void draw(long tm)
        glRotatef(-cam_phi, 1, 0, 0);
        glTranslatef(0, 0, cam_dist);
 
+       glBindFramebuffer(GL_FRAMEBUFFER, post_fbo[0]);
+       glClear(GL_COLOR_BUFFER_BIT);
+
        glUseProgram(sdr);
        glUniform1f(uloc_aspect, win_aspect);
 
@@ -85,6 +99,15 @@ static void draw(long tm)
        glTexCoord2f(0, 1);
        glVertex2f(-1, 1);
        glEnd();
+
+       glBindFramebuffer(GL_FRAMEBUFFER, 0);
+       glUseProgram(post_sdr[POST_OLDFIG]);
+       overlay_tex(post_fbtex, 1.0);
+
+       if(dbgtex) {
+               glUseProgram(0);
+               overlay_tex(dbgtex, dbg_alpha);
+       }
 }
 
 static void mbutton(int bn, int st, int x, int y)
@@ -92,6 +115,16 @@ static void mbutton(int bn, int st, int x, int y)
        bnstate[bn] = st;
        mouse_x = x;
        mouse_y = y;
+
+       switch(bn) {
+       case 3:
+               dbg_alpha += 0.1;
+               if(dbg_alpha > 1.0) dbg_alpha = 1.0;
+               break;
+       case 4:
+               dbg_alpha -= 0.1;
+               if(dbg_alpha < 0.0) dbg_alpha = 0.0;
+       }
 }
 
 static void mmotion(int x, int y)