diff --git a/include/render.hpp b/include/render.hpp index affd8ca..480cf46 100644 --- a/include/render.hpp +++ b/include/render.hpp @@ -22,6 +22,7 @@ extern "C" { uint uniform_normal_trans, uint uniform_base_color, uint uniform_light_pos, + uint uniform_time, struct game_state * state); void render_balls(struct mesh ball_mesh, diff --git a/src/main.c b/src/main.c index 0c1575c..10eb4f2 100644 --- a/src/main.c +++ b/src/main.c @@ -162,6 +162,7 @@ int main() uint block__uniform_normal_trans = glGetUniformLocation(block_program, "normal_trans"); uint block__uniform_base_color = glGetUniformLocation(block_program, "base_color"); uint block__uniform_light_pos = glGetUniformLocation(block_program, "light_pos"); + uint block__uniform_time = glGetUniformLocation(block_program, "time"); // font @@ -332,6 +333,7 @@ int main() block__uniform_normal_trans, block__uniform_base_color, block__uniform_light_pos, + block__uniform_time, &state); glDisable(GL_BLEND); diff --git a/src/render.cpp b/src/render.cpp index 66b1ecb..22288ce 100644 --- a/src/render.cpp +++ b/src/render.cpp @@ -100,6 +100,7 @@ void render_blocks(mesh block_mesh, uint uniform_normal_trans, uint uniform_base_color, uint uniform_light_pos, + uint uniform_time, struct game_state * state) { light_pos_theta += 0.01; @@ -136,6 +137,8 @@ void render_blocks(mesh block_mesh, // render blocks ////////////////////////////////////////////////////////////////////// + glUniform1f(uniform_time, state->time); + mat4x4 a = aspect_mat(); vec3 light_pos = _light_pos(); diff --git a/src/shader/block.fp.glsl b/src/shader/block.fp.glsl index f2349ed..c8e359a 100644 --- a/src/shader/block.fp.glsl +++ b/src/shader/block.fp.glsl @@ -3,6 +3,8 @@ uniform vec4 base_color; uniform vec3 light_pos; +uniform float time; + varying vec3 fp_position; varying vec2 fp_texture; varying vec3 fp_normal; @@ -12,7 +14,23 @@ void main() vec3 light_dir = normalize(light_pos - fp_position); float diffuse = max(dot(fp_normal, light_dir), 0.0); - vec3 color = (diffuse + 0.5) * base_color.xyz; + float g = fp_position.x + fp_position.y; + float gt = g * 8.0 + time * 10; + float d = sin(gt) / 8.0; + d = abs(d); + d = 0.05 / d; + float sgt = sin(gt / 10); + if (sgt < 0.9) + d = 0; + else + d = (sgt - 0.9) * 10; + + //d = d * sin(time); + d = pow(d, 32); + + vec3 color = (diffuse + 0.5) * (base_color.xyz + max(d * 0.5, 0)); gl_FragColor = vec4(color, base_color.w); + + //gl_FragColor = vec4(d, 0, 0, base_color.w); }