File: ripple.glsl

package info (click to toggle)
chromium 138.0.7204.183-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 6,071,908 kB
  • sloc: cpp: 34,937,088; ansic: 7,176,967; javascript: 4,110,704; python: 1,419,953; asm: 946,768; xml: 739,971; pascal: 187,324; sh: 89,623; perl: 88,663; objc: 79,944; sql: 50,304; cs: 41,786; fortran: 24,137; makefile: 21,806; php: 13,980; tcl: 13,166; yacc: 8,925; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (43 lines) | stat: -rw-r--r-- 1,281 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
uniform float u_time;
uniform vec2 u_mouse;
uniform sampler2D u_texture1;

#define PI      3.141592654

float decay(float v, float t)
{
  return v * (1.0 / (1.0 + t*t));
}

void mainImage(out vec4 fragColor, in vec2 fragCoord, in vec2 resolution, in vec2 uv)
{
  // Temporary to loop time every 1 sec
  float time = u_time;
  // we normalize all the effects according to the min height/width
  float size = min(resolution.x, resolution.y);

  // Animate one wave over size in 0.3 sec
  float wave_speed = size / 0.3;
  float wave_length = size / 1.0;
  float wave_height = size  * 0.1;

  vec2 center = u_mouse;
  vec2 direction_from_center = fragCoord - center;
  float distance_from_center = length(direction_from_center);

  /* Normalize direction */
  direction_from_center = direction_from_center / distance_from_center;

  float propagation_length = time * wave_speed;

  float t = (propagation_length - distance_from_center) / wave_length;
  float offset_magnitude = 0.0;
  if (t > 0.0)
    offset_magnitude = decay(wave_height * sin(t * 2.0 * PI), t);

  vec2 offset = direction_from_center * min(offset_magnitude, distance_from_center);
  vec2 source = fragCoord - offset;

  vec2 uv2 = source / resolution;
  fragColor = GskTexture(u_texture1, vec2(uv2.x, 1.0-uv2.y));
}