Fragment Shader
#version 300 es
precision highp float;
in vec2 vTextureCoordinates;
in vec2 vPos;
uniform float uTime;
uniform vec2 uMousePos;
uniform int uMouseDown;
uniform sampler2D uTexture;
out vec4 fragColor;
void main() {
float v1 = (sin(vTextureCoordinates.s + uTime) + 1.0) / 2.0;
float v2 = (cos(vTextureCoordinates.t + uTime) + 1.0) / 2.0;
float d = distance(uMousePos, vPos);
vec2 tt = vec2(vTextureCoordinates.s + sin(uTime / 10.0), vTextureCoordinates.t + cos(uTime / 10.0));
vec4 c1 = texture(uTexture, tt) * 1.1;
float avg = (c1.r + c1.g + c1.b) / 3.0;
float r = c1.r + v1 * pow(avg, 4.0) - pow(d, pow(avg, 2.0) + float(uMouseDown) * avg);
float g = c1.g + v2 * pow(avg, 4.0) - pow(d, pow(avg, 2.0) + float(uMouseDown) * avg);
float b = c1.g - pow(d,pow(avg, 2.0) + float(uMouseDown) * avg);
fragColor = vec4(r, g, b, 1.0);
}