screen-relative events
[andemo] / src / scr / testb.c
1 #include "demo.h"
2 #include "noise.h"
3 #include "cgmath/cgmath.h"
4
5 static int init(void);
6 static void destroy(void);
7 static void draw(void);
8
9 static unsigned int sdr_foo;
10
11 static struct demoscreen scr = { "testb", init, destroy, 0, 0, 0, 0, draw };
12
13 void regscr_testb(void)
14 {
15         dsys_add_screen(&scr);
16 }
17
18 static int init(void)
19 {
20         if(!(sdr_foo = get_sdrprog("sdr/foo.v.glsl", "sdr/foo-notex.p.glsl"))) {
21                 return -1;
22         }
23         return 0;
24 }
25
26 static void destroy(void)
27 {
28 }
29
30 #define NX      16
31 #define NY      10
32
33 static void draw(void)
34 {
35         int i, j;
36         float x, y, xr, yr, sz;
37         float t = dsys.tmsec / 700.0f;
38         float foo = dsys_value("testb.hueflash");
39
40         glUseProgram(sdr_foo);
41         gl_begin(GL_QUADS);
42         for(i=0; i<NY; i++) {
43                 y = (i + 0.5f) / (NY/2.0f) - 1.0f;
44                 for(j=0; j<NX; j++) {
45                         x = (j + 0.5f) / (NX/2.0f) - 1.0f;
46                         sz = cgm_lerp(1.0f, noise2(x * 5.0f, t) * noise2(y * 5.0f, t) * 2.5f, scr.vis);
47                         if(sz < 0.0f) sz = 0.0f;
48                         if(sz > 1.0f) sz = 1.0f;
49                         xr = sz / NX;
50                         yr = sz / NY;
51
52                         gl_color3f(1, cgm_lerp(1, 0.7, foo), cgm_lerp(1, 0.3, foo));
53                         gl_vertex2f(x - xr, y - yr);
54                         gl_vertex2f(x + xr, y - yr);
55                         gl_vertex2f(x + xr, y + yr);
56                         gl_vertex2f(x - xr, y + yr);
57                 }
58         }
59         gl_end();
60 }