#include "demo.h"
#include "part.h"
#include "sdr.h"
+#include "texture.h"
+#include "post.h"
+#include "imtk.h"
static int init(void);
static void destroy(void);
mbutton, mmotion
};
-static float cam_theta, cam_phi, cam_dist = 8;
+static float cam_theta, cam_phi, cam_dist = 6;
static int bnstate[8];
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)
if(!(sdr = create_program_load("sdr/whitted.v.glsl", "sdr/whitted.p.glsl"))) {
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)
static void draw(long tm)
{
+ static float vgn_offset = 0.47;
+ static float vgn_sharp = 3.1;
+
+ glDisable(GL_DEPTH_TEST);
+
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
/*
glTranslatef(0, 0, cam_dist);
glUseProgram(sdr);
+ glUniform1f(uloc_aspect, win_aspect);
glBegin(GL_QUADS);
glTexCoord2f(0, 0);
glTexCoord2f(0, 1);
glVertex2f(-1, 1);
glEnd();
+
+ vignette(0.15, 0.05, 0.15, vgn_offset, vgn_sharp);
+
+ if(dbgtex && dbg_alpha > 0.0) {
+ glUseProgram(0);
+ glMatrixMode(GL_TEXTURE);
+ glLoadIdentity();
+ glScalef(1, -1, 1);
+ overlay_tex(dbgtex, dbg_alpha);
+ glMatrixMode(GL_TEXTURE);
+ glLoadIdentity();
+ }
+
+ if(dbgui) {
+ glUseProgram(0);
+
+ imtk_begin();
+ imtk_layout_start(10, 20);
+ imtk_layout_spacing(10);
+
+ imtk_layout_dir(IMTK_HORIZONTAL);
+
+ imtk_label("offset:", IMTK_AUTO, IMTK_AUTO);
+ vgn_offset = imtk_slider(IMUID, vgn_offset, 0.0, 1.5, IMTK_AUTO, IMTK_AUTO);
+ imtk_layout_newline();
+
+ imtk_label("sharpness:", IMTK_AUTO, IMTK_AUTO);
+ vgn_sharp = imtk_slider(IMUID, vgn_sharp, 0, 10, IMTK_AUTO, IMTK_AUTO);
+ imtk_layout_newline();
+ imtk_end();
+ }
}
static void mbutton(int bn, int st, int x, int y)
bnstate[bn] = st;
mouse_x = x;
mouse_y = y;
+
+ switch(bn) {
+ case 0:
+ if(imtk_layout_contains(x, y)) {
+ imtk_inp_mouse(bn, st);
+ }
+ break;
+ 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)
if(!(dx | dy)) return;
+ if(imtk_layout_contains(x, y)) {
+ imtk_inp_motion(x, y);
+ return;
+ }
+
if(bnstate[0]) {
cam_theta += dx * 0.5;
cam_phi += dy * 0.5;