From f19edacadfd124dae0d6666a86fb1b6ca4df8969 Mon Sep 17 00:00:00 2001 From: John Tsiombikas Date: Wed, 27 Jul 2016 08:02:38 +0300 Subject: [PATCH] pulsing grid --- src/app.cc | 2 ++ src/app.h | 1 + src/backdrop.cc | 7 ++++++- src/main.cc | 1 + src/sdr.c | 14 ++++++++++++++ src/sdr.h | 2 ++ 6 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/app.cc b/src/app.cc index 730302e..aaee8cb 100644 --- a/src/app.cc +++ b/src/app.cc @@ -12,6 +12,7 @@ int win_width, win_height; float win_aspect; long time_msec; +double time_sec; Mat4 view_matrix; static bool should_swap; @@ -128,6 +129,7 @@ void app_draw() draw_backdrop(); app_swap_buffers(); + app_redraw(); // since we added animation we need to redisplay even in non-VR mode } assert(glGetError() == GL_NO_ERROR); } diff --git a/src/app.h b/src/app.h index aecf645..93f5f37 100644 --- a/src/app.h +++ b/src/app.h @@ -6,6 +6,7 @@ extern int win_width, win_height; extern float win_aspect; extern long time_msec; +extern double time_sec; extern Mat4 view_matrix; diff --git a/src/backdrop.cc b/src/backdrop.cc index 91c709a..2a11c97 100644 --- a/src/backdrop.cc +++ b/src/backdrop.cc @@ -14,10 +14,12 @@ static Texture *tex_grid; static Mesh *mesh_skydome; static unsigned int sdr_skydome; +static Vec3 grid_color; +static int uloc_grid_color; bool init_backdrop() { - Vec3 grid_color = color(1.0, 0.07, 1.0); + grid_color = color(1.0, 0.07, 1.0); Vec3 mid_color = color(0.133, 0.006, 0.612); Vec3 horiz_color = color(0.612, 0.006, 1.0); Vec3 zenith_color = color(0.029, 0.029, 0.029); @@ -26,6 +28,7 @@ bool init_backdrop() if(!(sdr_grid = create_program_load("sdr/grid.v.glsl", "sdr/grid.p.glsl"))) { return false; } + uloc_grid_color = get_uniform_loc(sdr_grid, "grid_color"); 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); @@ -84,6 +87,8 @@ void draw_backdrop() glMultMatrixf(xform[0]); bind_program(sdr_grid); + float pulse = 1.0 + sin(time_sec * 3.0) * 0.25; + glUniform3f(uloc_grid_color, grid_color.x * pulse, grid_color.y * pulse, grid_color.z * pulse); bind_texture(tex_grid); glBegin(GL_QUADS); diff --git a/src/main.cc b/src/main.cc index d7dea97..ae84abd 100644 --- a/src/main.cc +++ b/src/main.cc @@ -55,6 +55,7 @@ int main(int argc, char **argv) } time_msec = app_get_msec(); + time_sec = (double)time_msec / 1000.0; while(SDL_PollEvent(&ev)) { process_event(&ev); if(quit) goto break_evloop; diff --git a/src/sdr.c b/src/sdr.c index 7103fb0..5ccf7fe 100644 --- a/src/sdr.c +++ b/src/sdr.c @@ -302,6 +302,20 @@ int bind_program(unsigned int prog) } \ return loc == -1 ? -1 : 0 +int get_uniform_loc(unsigned int prog, const char *name) +{ + int loc, curr_prog; + glGetIntegerv(GL_CURRENT_PROGRAM, &curr_prog); + if((unsigned int)curr_prog != prog && bind_program(prog) == -1) { + return -1; + } + loc = glGetUniformLocation(prog, name); + if((unsigned int)curr_prog != prog) { + bind_program(curr_prog); + } + return loc; +} + int set_uniform_int(unsigned int prog, const char *name, int val) { BEGIN_UNIFORM_CODE { diff --git a/src/sdr.h b/src/sdr.h index df23bcd..d411202 100644 --- a/src/sdr.h +++ b/src/sdr.h @@ -34,6 +34,8 @@ void attach_shader(unsigned int prog, unsigned int sdr); int link_program(unsigned int prog); int bind_program(unsigned int prog); +int get_uniform_loc(unsigned int prog, const char *name); + int set_uniform_int(unsigned int prog, const char *name, int val); int set_uniform_float(unsigned int prog, const char *name, float val); int set_uniform_float2(unsigned int prog, const char *name, float x, float y); -- 1.7.10.4