1uniform mat4 u_Color;
2varying vec2 v_TexCoord;
3varying vec2 v_TexCoord2;
4varying vec2 v_Position;
5uniform sampler2D u_Tex0;
6uniform float u_Time;
7
8// CONFIG
9float speed = 50.0;
10float height = 200.0;
11float angle = 290.0; // degrees
12float intensity = 1.0;
13// CONFIG END
14
15vec2 rotate(vec2 v, float a) {
16 float s = sin(a);
17 float c = cos(a);
18 mat2 m = mat2(c, -s, s, c);
19 return m * v;
20}
21
22void main()
23{
24 gl_FragColor = texture2D(u_Tex0, v_TexCoord);
25 vec4 texcolor = texture2D(u_Tex0, v_TexCoord2);
26
27 if(texcolor.a > 0.9) {
28 vec2 p = rotate(v_Position, (angle / 180.0) * 3.14);
29 float frame = mod(p.y, height) - mod(u_Time * speed, height);
30 float dist1 = min(abs(frame), min(abs(frame - height), abs(frame + height)));
31 frame = mod(p.y + height * 0.33, height) - mod(u_Time * speed, height);
32 float dist2 = min(abs(frame), min(abs(frame - height), abs(frame + height)));
33 frame = mod(p.y + height * 0.66, height) - mod(u_Time * speed, height);
34 float dist3 = min(abs(frame), min(abs(frame - height), abs(frame + height)));
35 gl_FragColor.xyz *= vec3(intensity / sqrt(dist1 / 2.0), intensity / sqrt(dist2 / 2.0), intensity/ sqrt(dist3 / 2.0));
36 }
37 if(texcolor.r > 0.9) {
38 gl_FragColor *= texcolor.g > 0.9 ? u_Color[0] : u_Color[1];
39 } else if(texcolor.g > 0.9) {
40 gl_FragColor *= u_Color[2];
41 } else if(texcolor.b > 0.9) {
42 gl_FragColor *= u_Color[3];
43 }
44 if(gl_FragColor.a < 0.01) discard;
45}