liquids rewritten; better glutils
[dd2d.git] / data / shaders / srliquid_distort.frag
blobac94bf534c11116349dc5b62d355e62a3bf0529e
1 #version 130
3 uniform sampler2D tex0; // liquid map
4 uniform vec4 liquidColorMul;
5 uniform float iGlobalTime;
8 const float speed     = 0.1;
9 const float frequency = 8.0;
11 vec2 shift (in vec2 p) {
12   vec2 d = vec2(iGlobalTime*speed);
13   vec2 f = frequency*(p+d);
14   return cos(vec2(cos(f.x-f.y)*cos(f.y), sin(f.x+f.y)*sin(f.y)));
18 void main (void) {
19   vec2 texCoord = gl_TexCoord[0].xy;
20   vec4 clr = texture2D(tex0, texCoord);
21   if (clr.a == 0.0) discard;
22   vec2 r = texCoord.xy;
23   vec2 p = shift(r);
24   vec2 q = shift(r+1.0);
25   float amplitude = 2.0/textureSize(tex0, 0).x;
26   vec2 s = r+amplitude*(p-q);
27   clr = texture2D(tex0, s);
28   // if distortion moved out of liquid area, dup texel instead
29   if (clr.a == 0.0) clr = texture2D(tex0, texCoord);
30   if (liquidColorMul.a != 0.0) clr *= liquidColorMul;
31   clr.a = 1.0;
32   gl_FragColor = clr;