precision mediump float;
varying vec2 vTextureCoord;
uniform sampler2D uSampler;
uniform float radius;
uniform float angle;
uniform vec2 offset;
void main(void)
{
vec2 coord = vTextureCoord - offset;
float dist = length(coord);
if (dist < radius)
{
float ratio = (radius - dist) / radius;
float angleMod = ratio * ratio * angle;
float s = sin(angleMod);
float c = cos(angleMod);
coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);
}
gl_FragColor = texture2D(uSampler, coord+offset);
}