chaos.glsl 1.07 KB
uniform float prange;
uniform float left;
uniform float top;
uniform int dir;
uniform float progress;
uniform vec4 resolution;
uniform sampler2D src1;
uniform sampler2D src2;
uniform float intensity;
varying vec2 vUv;
vec2 mirror(vec2 v) {
    vec2 m = mod(v, 2.0);
    return mix(m, 2.0 - m, step(1.0, m));
}
float map(float a, float b, float c, float d, float v, float cmin, float cmax) {
    return clamp((v - a) * (d - c) / (b - a) + c, cmin, cmax);
}
void main() {
    vec2 uv = vUv;
    vec2 vw = uv - 0.5;
    vec2 vwo = vw;
    float m = progress;
    float w = m;
    float mult = (w - 0.5) * 2.;
    mult = (-(mult * mult) + 1.);
    #replaceChaos vw = mix(vwo, vw, mult * intensity / 10.);
    uv = .5 + (vw.xy);
    vec2 nUv = vec2(uv.x + m * left, uv.y + m * top);
    nUv = mirror(nUv);
    vec2 nUvIn = nUv;
    if (mod(left, 2.) != 0.) nUvIn.x *= -1.;
    if (mod(top, 2.) != 0.) nUvIn.y *= -1.;
    float nprog = map((0.5 - prange), (0.5 + prange), 0., 1., progress, 0., 1.);
    vec4 col = mix(TEXTURE2D(src1, nUv), TEXTURE2D(src2, nUvIn), nprog);
    gl_FragColor = col;
}