// displacement — generated from https://github.com/gl-transitions/gl-transitions/blob/master/transitions/displacement.glsl // Author: Travis Fischer // License: MIT // Description: A crossfade in which a displacement map (an extra grayscale texture) warps both images uniform shader _from; uniform shader _to; uniform float2 _resolution; uniform float progress; uniform float ratio; vec4 getFromColor(vec2 uv) { return vec4(unpremul(_from.eval(vec2(uv.x, 1.0 - uv.y) * _resolution))); } vec4 getToColor(vec2 uv) { return vec4(unpremul(_to.eval(vec2(uv.x, 1.0 - uv.y) * _resolution))); } uniform shader displacementMap; vec4 _texture_displacementMap(vec2 uv) { return vec4(unpremul(displacementMap.eval(vec2(uv.x, 1.0 - uv.y) * _resolution))); } uniform float strength; vec4 transition (vec2 uv) { float displacement = _texture_displacementMap( uv).r * strength; vec2 uvFrom = vec2(uv.x + progress * displacement, uv.y); vec2 uvTo = vec2(uv.x - (1.0 - progress) * displacement, uv.y); return mix( getFromColor(uvFrom), getToColor(uvTo), progress ); } half4 main(float2 _coord) { vec2 _uv = _coord / _resolution; vec4 _c = clamp(transition(vec2(_uv.x, 1.0 - _uv.y)), 0.0, 1.0); return half4(_c.rgb * _c.a, _c.a); }