precision highp float; varying vec2 v_TexCoords; uniform mat4 u_STMatrix; uniform sampler2D u_Texture; uniform sampler2D u_Mask; uniform float featureX; uniform float featureY; uniform float scale; void main() { vec2 uv = (u_STMatrix * vec4(v_TexCoords.x, v_TexCoords.y, 0.0, 1.0)).xy; vec2 ap; ap.x = featureX; ap.y = featureY; vec2 uvTweek = (uv - ap) * (1.0/scale) + ap; // subtract anchor pt., do scale, then add anchor point back vec4 feed = texture2D(u_Texture, uv); vec4 mouth = texture2D(u_Texture, uvTweek); vec4 mask = texture2D(u_Mask, uvTweek); gl_FragColor = mix(feed, mouth, mask.r); }