├── README.md ├── build └── glsl-transitions.js ├── index.js ├── package.json ├── test.js ├── transitions.json └── transitions.min.json /README.md: -------------------------------------------------------------------------------- 1 | glsl-transitions 2 | === 3 | 4 | A collection of GLSL Transitions created on [GLSL.io](https://glsl.io). 5 | 6 | ![](https://nodei.co/npm/glsl-transitions.png) 7 | 8 | This package provides an automatic daily snapshot of transitions created on GLSL.io that you can directly use for your libraries and softwares. 9 | 10 | For web usage, you can use it with [glsl-transition](http://github.com/gre/glsl-transition). 11 | See for instance [this examples page](http://glslio.github.io/glsl-transition-examples/). 12 | 13 | License 14 | --- 15 | 16 | All transitions are released under MIT License (see the gists). 17 | -------------------------------------------------------------------------------- /build/glsl-transitions.js: -------------------------------------------------------------------------------- 1 | /*! glsl-transitions 2017.4.19 */ 2 | !function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var n;"undefined"!=typeof window?n=window:"undefined"!=typeof global?n=global:"undefined"!=typeof self&&(n=self),n.GlslTransitions=e()}}(function(){return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a="function"==typeof require&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}for(var i="function"==typeof require&&require,o=0;o2.0) return color1;float dd=pow(1.0-distanc/2.0,sharpness);return ((color2-color1)*dd)+color1;}float distanceToEdge(vec3 point){float dx=abs(point.x>0.5?1.0-point.x:point.x);float dy=abs(point.y>0.5?1.0-point.y:point.y);if(point.x<0.0) dx=-point.x;if(point.x>1.0) dx=point.x-1.0;if(point.y<0.0) dy=-point.y;if(point.y>1.0) dy=point.y-1.0;if((point.x<0.0||point.x>1.0)&&(point.y<0.0||point.y>1.0)) return sqrt(dx*dx+dy*dy);return min(dx,dy);}vec4 seeThrough(float yc,vec2 p,mat3 rotation,mat3 rrotation){float hitAngle=PI-(acos(yc/cylinderRadius)-cylinderAngle);vec3 point=hitPoint(hitAngle,yc,rotation*vec3(p,1.0),rrotation);if(yc<=0.0&&(point.x<0.0||point.y<0.0||point.x>1.0||point.y>1.0)){vec2 texCoord=gl_FragCoord.xy/resolution.xy;return texture2D(to,texCoord);}if(yc>0.0) return texture2D(from,p);vec4 color=texture2D(from,point.xy);vec4 tcolor=vec4(0.0);return antiAlias(color,tcolor,distanceToEdge(point));}vec4 seeThroughWithShadow(float yc,vec2 p,vec3 point,mat3 rotation,mat3 rrotation){float shadow=distanceToEdge(point)*30.0;shadow=(1.0-shadow)/3.0;if(shadow<0.0) shadow=0.0;else shadow*=amount;vec4 shadowColor=seeThrough(yc,p,rotation,rrotation);shadowColor.r-=shadow;shadowColor.g-=shadow;shadowColor.b-=shadow;return shadowColor;}vec4 backside(float yc,vec3 point){vec4 color=texture2D(from,point.xy);float gray=(color.r+color.b+color.g)/15.0;gray+=(8.0/10.0)*(pow(1.0-abs(yc/cylinderRadius),2.0/10.0)/2.0+(5.0/10.0));color.rgb=vec3(gray);return color;}vec4 behindSurface(float yc,vec3 point,mat3 rrotation){float shado=(1.0-((-cylinderRadius-yc)/amount*7.0))/6.0;shado*=1.0-abs(point.x-0.5);yc=(-cylinderRadius-cylinderRadius-yc);float hitAngle=(acos(yc/cylinderRadius)+cylinderAngle)-PI;point=hitPoint(hitAngle,yc,point,rrotation);if(yc<0.0&&point.x>=0.0&&point.y>=0.0&&point.x<=1.0&&point.y<=1.0&&(hitAngle0.5)){shado=1.0-(sqrt(pow(point.x-0.5,2.0)+pow(point.y-0.5,2.0))/(71.0/100.0));shado*=pow(-yc/cylinderRadius,3.0);shado*=0.5;}else{shado=0.0;}vec2 texCoord=gl_FragCoord.xy/resolution.xy;return vec4(texture2D(to,texCoord).rgb-shado,1.0);}void main(){vec2 texCoord=gl_FragCoord.xy/resolution.xy;const float angle=100.0*PI/180.0;float c=cos(-angle);float s=sin(-angle);mat3 rotation=mat3(c,s,0,-s,c,0,-0.801,0.8900,1);c=cos(angle);s=sin(angle);mat3 rrotation=mat3(c,s,0,-s,c,0,0.98500,0.985,1);vec3 point=rotation*vec3(texCoord,1.0);float yc=point.y-cylinderCenter;if(yc<-cylinderRadius){gl_FragColor=behindSurface(yc,point,rrotation);return;}if(yc>cylinderRadius){gl_FragColor=texture2D(from,texCoord);return;}float hitAngle=(acos(yc/cylinderRadius)+cylinderAngle)-PI;float hitAngleMod=mod(hitAngle,2.0*PI);if((hitAngleMod>PI&&amount<0.5)||(hitAngleMod>PI/2.0&&amount<0.0)){gl_FragColor=seeThrough(yc,texCoord,rotation,rrotation);return;}point=hitPoint(hitAngle,yc,point,rrotation);if(point.x<0.0||point.y<0.0||point.x>1.0||point.y>1.0){gl_FragColor=seeThroughWithShadow(yc,texCoord,point,rotation,rrotation);return;}vec4 color=backside(yc,point);vec4 otherColor;if(yc<0.0){float shado=1.0-(sqrt(pow(point.x-0.5,2.0)+pow(point.y-0.5,2.0))/0.71);shado*=pow(-yc/cylinderRadius,3.0);shado*=0.5;otherColor=vec4(0.0,0.0,0.0,shado);}else{otherColor=texture2D(from,texCoord);}color=antiAlias(color,otherColor,cylinderRadius-abs(yc));vec4 cl=seeThroughWithShadow(yc,texCoord,point,rotation,rrotation);float dist=distanceToEdge(point);gl_FragColor=antiAlias(color,cl,dist);}"},{id:"5a66e633d36532aa4743a73d20f20304",name:"water_drop",owner:"PawelPlociennik",uniforms:{amplitude:30,speed:30},html_url:"https://gist.github.com/5a66e633d36532aa4743a73d20f20304",created_at:"2016-09-16T10:24:45Z",updated_at:"2016-09-16T12:35:36Z",stars:0,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from;uniform sampler2D to;uniform float progress;uniform vec2 resolution;uniform float amplitude;uniform float speed;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec2 dir=p-vec2(.5);float dist=length(dir);if(dist>progress){gl_FragColor=mix(texture2D(from,p),texture2D(to,p),progress);}else{vec2 offset=dir*sin(dist*amplitude-progress*speed);gl_FragColor=mix(texture2D(from,p+offset),texture2D(to,p),progress);}}"},{id:"597954724feda999b2cf2b5518d3edec",name:"StereoViewer Toy",owner:"tschundler",uniforms:{zoom:.88,corner_radius:.22},html_url:"https://gist.github.com/597954724feda999b2cf2b5518d3edec",created_at:"2016-08-30T01:49:23Z",updated_at:"2016-08-30T07:27:55Z",stars:1,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform float zoom;uniform float corner_radius;const vec4 black=vec4(0.0,0.0,0.0,1.0);const vec2 c00=vec2(0.0,0.0);const vec2 c01=vec2(0.0,1.0);const vec2 c11=vec2(1.0,1.0);const vec2 c10=vec2(1.0,0.0);bool in_corner(vec2 p,vec2 corner,vec2 radius){vec2 axis=(c11-corner)-corner;p=p-(corner+axis*radius);p*=axis/radius;return (p.x>0.0&&p.y>-1.0)||(p.y>0.0&&p.x>-1.0)||dot(p,p)<1.0;}bool test_rounded_mask(vec2 p,vec2 corner_size){return in_corner(p,c00,corner_size)&&in_corner(p,c01,corner_size)&&in_corner(p,c10,corner_size)&&in_corner(p,c11,corner_size);}vec4 screen(vec4 a,vec4 b){return 1.0-(1.0-a)*(1.0-b);}vec4 unscreen(vec4 c){return 1.0-sqrt(1.0-c);}vec4 sample_with_corners(sampler2D tex,vec2 p,vec2 corner_size){p=(p-0.5)/zoom+0.5;if(!test_rounded_mask(p,corner_size)){return black;}return unscreen(texture2D(tex,p));}vec4 simple_sample_with_corners(sampler2D tex,vec2 p,vec2 corner_size,float zoom_amt){p=(p-0.5)/(1.0-zoom_amt+zoom*zoom_amt)+0.5;if(!test_rounded_mask(p,corner_size)){return black;}return texture2D(tex,p);}mat3 rotate2d(float angle,float aspect){float s=sin(angle);float c=cos(angle);return mat3(c,s,0.0,-s,c,0.0,0.0,0.0,1.0);}mat3 translate2d(float x,float y){return mat3(1.0,0.0,0,0.0,1.0,0,-x,-y,1.0);}mat3 scale2d(float x,float y){return mat3(x,0.0,0,0.0,y,0,0,0,1.0);}vec4 get_cross_rotated(vec3 p3,float angle,vec2 corner_size,float aspect){angle=angle*angle;angle/=2.4;mat3 center_and_scale=translate2d(-0.5,-0.5)*scale2d(1.0,aspect);mat3 unscale_and_uncenter=scale2d(1.0,1.0/aspect)*translate2d(0.5,0.5);mat3 slide_left=translate2d(-2.0,0.0);mat3 slide_right=translate2d(2.0,0.0);mat3 rotate=rotate2d(angle,aspect);mat3 op_a=center_and_scale*slide_right*rotate*slide_left*unscale_and_uncenter;mat3 op_b=center_and_scale*slide_left*rotate*slide_right*unscale_and_uncenter;vec4 a=sample_with_corners(from,(op_a*p3).xy,corner_size);vec4 b=sample_with_corners(from,(op_b*p3).xy,corner_size);return screen(a,b);}vec4 get_cross_masked(vec3 p3,float angle,vec2 corner_size,float aspect){angle=1.0-angle;angle=angle*angle;angle/=2.4;vec4 img;mat3 center_and_scale=translate2d(-0.5,-0.5)*scale2d(1.0,aspect);mat3 unscale_and_uncenter=scale2d(1.0/zoom,1.0/(zoom*aspect))*translate2d(0.5,0.5);mat3 slide_left=translate2d(-2.0,0.0);mat3 slide_right=translate2d(2.0,0.0);mat3 rotate=rotate2d(angle,aspect);mat3 op_a=center_and_scale*slide_right*rotate*slide_left*unscale_and_uncenter;mat3 op_b=center_and_scale*slide_left*rotate*slide_right*unscale_and_uncenter;bool mask_a=test_rounded_mask((op_a*p3).xy,corner_size);bool mask_b=test_rounded_mask((op_b*p3).xy,corner_size);if(mask_a||mask_b){img=sample_with_corners(to,p3.xy,corner_size);return screen(mask_a?img:black,mask_b?img:black);}else{return black;}}void main(){float a;vec2 p=gl_FragCoord.xy/resolution.xy;vec3 p3=vec3(p.xy,1.0);float aspect=resolution.x/resolution.y;vec2 corner_size=vec2(corner_radius/aspect,corner_radius);if(progress<=0.0){gl_FragColor=texture2D(from,p);}else if(progress<0.1){a=progress/0.1;gl_FragColor=simple_sample_with_corners(from,p,corner_size*a,a);}else if(progress<0.48){a=(progress-0.1)/0.38;gl_FragColor=get_cross_rotated(p3,a,corner_size,aspect);}else if(progress<0.9){gl_FragColor=get_cross_masked(p3,(progress-0.52)/0.38,corner_size,aspect);}else if(progress<1.0){a=(1.0-progress)/0.1;gl_FragColor=simple_sample_with_corners(to,p,corner_size*a,a);}else{gl_FragColor=texture2D(to,p);}}"},{id:"ad095dac1054de1c796418f992f0f8a0",name:"wipeUp",owner:"homerjam",uniforms:{},html_url:"https://gist.github.com/ad095dac1054de1c796418f992f0f8a0",created_at:"2016-07-29T13:49:32Z",updated_at:"2016-07-29T13:52:55Z",stars:0,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec4 a=texture2D(from,p);vec4 b=texture2D(to,p);gl_FragColor=mix(a,b,step(0.0+p.y,progress));}"},{id:"f63e3009c1143950dee9063c3b83fb88",name:"Circle Crop",owner:"fkuteken",uniforms:{},html_url:"https://gist.github.com/f63e3009c1143950dee9063c3b83fb88",created_at:"2016-07-12T18:04:53Z",updated_at:"2016-07-12T19:07:57Z",stars:0,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;float maxRadius=resolution.x+resolution.y;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;float distX=gl_FragCoord.x-resolution.x/2.0;float distY=gl_FragCoord.y-resolution.y/2.0;float dist=sqrt(distX*distX+distY*distY);float ;step=step*step*step;if(dist.5){b=1.-pow(2.-(x*2.),a)/2.;}return b;}float rand(float co){return fract(sin((co*24.9898)+Seed)*43758.5453);}float rand(vec2 co){return fract(sin(dot(co.xy,vec2(12.9898,78.233)))*43758.5453);}float apow(float a,float b){return pow(abs(a),b)*sign(b);}vec3 pow3(vec3 a,vec3 b){return vec3(apow(a.r,b.r),apow(a.g,b.g),apow(a.b,b.b));}float smooth_mix(float a,float b,float c){return mix(a,b,sigmoid(c,2.));}float random(vec2 co,float shft){co+=10.;return smooth_mix(fract(sin(dot(co.xy,vec2(12.9898+(floor(shft)*.5),78.233+Seed)))*43758.5453),fract(sin(dot(co.xy,vec2(12.9898+(floor(shft+1.)*.5),78.233+Seed)))*43758.5453),fract(shft));}float smooth_random(vec2 co,float shft){return smooth_mix(smooth_mix(random(floor(co),shft),random(floor(co+vec2(1.,0.)),shft),fract(co.x)),smooth_mix(random(floor(co+vec2(0.,1.)),shft),random(floor(co+vec2(1.,1.)),shft),fract(co.x)),fract(co.y));}vec4 texture(vec2 p){return mix(texture2D(from,p),texture2D(to,p),sigmoid(progress,10.));}\n#define pi 3.14159265358979323\n\n#define clamps(x) clamp(x,0.,1.)\nvoid main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec3 f=vec3(0.);for(float i=0.;i<13.;i++){f+=sin(((p.x*rand(i)*6.)+(progress*8.))+rand(i+1.43))*sin(((p.y*rand(i+4.4)*6.)+(progress*6.))+rand(i+2.4));f+=1.-clamps(length(p-vec2(smooth_random(vec2(progress*1.3),i+1.),smooth_random(vec2(progress*.5),i+6.25)))*mix(20.,70.,rand(i)));}f+=4.;f/=11.;f=pow3(f*vec3(1.,0.7,0.6),vec3(1.,2.-sin(progress*pi),1.3));f*=sin(progress*pi);p-=.5;p*=1.+(smooth_random(vec2(progress*5.),6.3)*sin(progress*pi)*.05);p+=.5;vec4 blurred_image=vec4(0.);float bluramount=sin(progress*pi)*.03;\n#define repeats 50.\nfor(float i=0.;ix0.y)?vec2(1.0,0.0):vec2(0.0,1.0);vec4 x12=x0.xyxy+C.xxzz;x12.xy-=i1;i=mod289(i);vec3 p=permute(permute(i.y+vec3(0.0,i1.y,1.0))+i.x+vec3(0.0,i1.x,1.0));vec3 m=max(0.5-vec3(dot(x0,x0),dot(x12.xy,x12.xy),dot(x12.zw,x12.zw)),0.0);m=m*m;m=m*m;vec3 x=2.0*fract(p*C.www)-1.0;vec3 h=abs(x)-0.5;vec3 ox=floor(x+0.5);vec3 a0=x-ox;m*=1.79284291400159-0.85373472095314*(a0*a0+h*h);vec3 g;g.x=a0.x*x0.x+h.x*x0.y;g.yz=a0.yz*x12.xz+h.yz*x12.yw;return 130.0*dot(m,g);}float luminance(vec4 color){return color.r*0.299+color.g*0.587+color.b*0.114;}vec2 center=vec2(1.0,direction);void main(){vec2 p=gl_FragCoord.xy/resolution.xy;if(progress==0.0){gl_FragColor=texture2D(from,p);}else if(progress==1.0){gl_FragColor=texture2D(to,p);}else{float x=progress;float dist=distance(center,p)-progress*exp(snoise(vec2(p.x,0.0)));float r=x-rand(vec2(p.x,0.1));float m;if(above){m=dist<=r&&luminance(texture2D(from,p))>l_threshold?1.0:(progress*progress*progress);}else{m=dist<=r&&luminance(texture2D(from,p))1.0){z=0.2+(pro-1.0)*5.;t=clamp((progress-0.8)/0.07,0.0,1.0);}if(length(r)<0.5+z){}else if(length(r)<0.8+z*1.5){uv=zoom(uv,1.0-0.15*pro);t=t*0.5;}else if(length(r)<1.2+z*2.5){uv=zoom(uv,1.0-0.2*pro);t=t*0.2;}else uv=zoom(uv,1.0-0.25*pro);gl_FragColor=mix(texture2D(from,uv),texture2D(to,uv),t);}"},{id:"c08c1995cb370520f251",name:"Bounce",owner:"adrian-purser",uniforms:{bounce:2.5,shadow:.075,shadow_colour:[0,0,0,.8]},html_url:"https://gist.github.com/c08c1995cb370520f251",created_at:"2015-12-18T16:30:58Z",updated_at:"2016-03-20T23:09:47Z",stars:1,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform float bounce;uniform float shadow;uniform vec4 shadow_colour;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;float phase=progress*3.14159265358*bounce;float y=(abs(cos(phase)))*(1.0-sin(progress*(3.14159265358/2.0)));if(progress==0.0) gl_FragColor=texture2D(from,p);else if(p.yshadow) gl_FragColor=texture2D(from,p);else{float a=((d/shadow)*shadow_colour.a)+(1.0-shadow_colour.a);gl_FragColor=mix(shadow_colour,texture2D(from,p),a);}}else gl_FragColor=texture2D(to,vec2(p.x,p.y-y));}"},{id:"7ffa32c097c9321533cb",name:"Raytraced Sphere",owner:"Romejanic",uniforms:{},html_url:"https://gist.github.com/7ffa32c097c9321533cb",created_at:"2015-08-28T12:25:49Z",updated_at:"2015-10-20T12:17:20Z",stars:1,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;\n#define EPSILON .001\n\n#define REFRACT_INDICIES .33\n\n#define FRESNEL_STRENGTH .8\nstruct Ray{vec3 origin;vec3 direction;};struct RaycastHit{vec3 point;vec3 normal;float det;int type;};vec3 light=vec3(2.,3.,0.);RaycastHit intersectSphere(vec3 position,float radius,const Ray ray){float a=dot(ray.direction,ray.direction);float b=2.*dot(ray.direction,ray.origin-position);float c=dot(ray.origin-position,ray.origin-position)-(radius*radius);float det=(b*b)-4.*a*c;float lambda=(-b-sqrt(det))/(2.*a);vec3 p=ray.origin+lambda*ray.direction;vec3 n=p-position;RaycastHit hit;hit.point=p;hit.normal=normalize(n);hit.det=det;hit.type=(det>=0.&&lambda>=0.)?0:-1;return hit;}float rand(vec2 uv){float a=dot(uv,vec2(92.,80.));float b=dot(uv,vec2(41.,62.));float x=sin(a)+cos(b)*51.;return fract(x);}vec4 shade(Ray ray,vec2 uv){vec3 spherePos=vec3(0.,0.,4.);RaycastHit sphere=intersectSphere(spherePos,1.5,ray);vec3 bg=mix(texture2D(from,uv),texture2D(to,uv),progress).xyz;if(sphere.type==0){vec3 reflectDir=reflect(ray.direction,sphere.normal);Ray reflectRay=Ray(sphere.point+(reflectDir*EPSILON),reflectDir);vec3 l=light-sphere.point;float dif=pow(max(dot(normalize(l),sphere.normal),0.),1.);float spec=0.;spec+=pow(max(dot(normalize(reflectRay.direction),normalize(l)),0.),15.);float ndotr=dot(sphere.normal,ray.direction);float fresnel=pow(1.-abs(ndotr),FRESNEL_STRENGTH);fresnel=mix(.001,1.0,fresnel);uv=vec2(rand(uv),rand(uv))*.05;bg=mix(texture2D(from,uv),texture2D(to,uv),progress).xyz;vec3 ambient=vec3(.2);vec3 diffuse=bg*dif;vec3 specular=vec3(1.)*spec;vec3 final=ambient+diffuse+spec;return vec4(final.xyz,1.);}return vec4(bg,1.);}void main(){vec2 uv=(gl_FragCoord.xy-(resolution.xy/2.))/resolution.y;light.x=2.*progress;vec3 ori=vec3(0.);vec3 dir=vec3(uv.xy,1.);Ray ray=Ray(ori,dir);gl_FragColor=shade(ray,gl_FragCoord.xy/resolution.xy);}"},{id:"1f6e25d1075bb82e21db",name:"Blur",owner:"giangchau92",uniforms:{size:0},html_url:"https://gist.github.com/1f6e25d1075bb82e21db",created_at:"2015-05-03T16:04:27Z",updated_at:"2015-08-29T14:20:28Z",stars:0,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\n\n#define QUALITY 32\n\n#define N 20\nuniform sampler2D from;uniform sampler2D to;uniform float progress;uniform vec2 resolution;uniform float size;const float GOLDEN_ANGLE=2.399963229728653;vec4 blur(sampler2D t,vec2 c,float radius){vec4 sum=vec4(0.0);float q=float(QUALITY);for(int i=0;i-0.005){return -1.0;}else if(r-dist<0.01&&r-dist>-0.005){return -2.0;}return grad;}float round(float a){return floor(a+0.5);}float getWave(vec2 p){vec2 _p=p-center;float rads=atan(_p.y,_p.x);float degs=degrees(rads)+180.0;vec2 range=vec2(0.0,M_PI*30.0);vec2 domain=vec2(0.0,360.0);float ratio=(M_PI*30.0)/360.0;degs=degs*ratio;float x=progress;float magnitude=mix(0.02,0.09,smoothstep(0.0,1.0,x));float offset=mix(40.0,30.0,smoothstep(0.0,1.0,x));float ease_degs=quadraticInOut(sin(degs));float deg_wave_pos=(ease_degs*magnitude)*sin(x*offset);return x+deg_wave_pos;}void main(){vec2 p=gl_FragCoord.xy/resolution.xy;if(progress==0.0){gl_FragColor=texture2D(from,p);}else if(progress==1.0){gl_FragColor=texture2D(to,p);}else{float dist=distance(center,p);float m=getGradient(getWave(p),dist);if(m==-2.0){gl_FragColor=mix(texture2D(from,p),vec4(0.0,0.0,0.0,1.0),0.75);}else{gl_FragColor=mix(texture2D(from,p),texture2D(to,p),m);}}}"},{id:"b3aa4a8b4f88dc228d4a",name:"test",owner:"brandonyoyo",uniforms:{},html_url:"https://gist.github.com/b3aa4a8b4f88dc228d4a",created_at:"2014-10-26T16:46:18Z",updated_at:"2015-08-29T14:08:09Z",stars:0,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;gl_FragColor=mix(texture2D(from,p),texture2D(to,p),progress);}"},{id:"d1f891c5585fc40b55ea",name:"Star Wipe",owner:"MemoryStomp",uniforms:{},html_url:"https://gist.github.com/d1f891c5585fc40b55ea",created_at:"2014-07-01T06:58:45Z",updated_at:"2015-08-29T14:03:17Z",stars:0,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;vec2 circlePoint(float ang){ang+=6.28318*0.15;return vec2(cos(ang),sin(ang));}float cross2d(vec2 a,vec2 b){return (a.x*b.y-a.y*b.x);}float star(vec2 p,float size){if(size<=0.0){return 0.0;}p/=size;vec2 p0=circlePoint(0.0);vec2 p1=circlePoint(6.28318*1.0/5.0);vec2 p2=circlePoint(6.28318*2.0/5.0);vec2 p3=circlePoint(6.28318*3.0/5.0);vec2 p4=circlePoint(6.28318*4.0/5.0);float s0=(cross2d(p1-p0,p-p0));float s1=(cross2d(p2-p1,p-p1));float s2=(cross2d(p3-p2,p-p2));float s3=(cross2d(p4-p3,p-p3));float s4=(cross2d(p0-p4,p-p4));float s5=min(min(min(s0,s1),min(s2,s3)),s4);float s=max(1.0-sign(s0*s1*s2*s3*s4)+sign(s5),0.0);s=sign(2.6-length(p))*s;return max(s,0.0);}void main(){vec2 p=(gl_FragCoord.xy/resolution.xy);vec2 o=p*2.0-1.0;float t=progress*1.4;float c1=star(o,t);float c2=star(o,t-0.1);float border=max(c1-c2,0.0);gl_FragColor=mix(texture2D(from,p),texture2D(to,p),c1)+vec4(border,border,border,0.0);}"},{id:"5a4d1fb6711076d17e2e",name:"morph",owner:"paniq",uniforms:{},html_url:"https://gist.github.com/5a4d1fb6711076d17e2e",created_at:"2014-07-01T04:52:25Z",updated_at:"2016-04-17T10:51:46Z",stars:1,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;const float strength=0.1;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec4 ca=texture2D(from,p);vec4 cb=texture2D(to,p);vec2 oa=(((ca.rg+ca.b)*0.5)*2.0-1.0);vec2 ob=(((cb.rg+cb.b)*0.5)*2.0-1.0);vec2 oc=mix(oa,ob,0.5)*strength;float w0=progress;float w1=1.0-w0;gl_FragColor=mix(texture2D(from,p+oc*w0),texture2D(to,p-oc*w1),progress);}"},{id:"00973cee8e0353c73305",name:"LumaWipe",owner:"rectalogic",uniforms:{lumaTex:"conical-asym.png",invertLuma:!0,softness:.25},html_url:"https://gist.github.com/00973cee8e0353c73305",created_at:"2014-06-17T02:11:27Z",updated_at:"2015-08-29T14:02:38Z",stars:0,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform sampler2D lumaTex;uniform bool invertLuma;uniform float softness;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;float luma=texture2D(lumaTex,p).x;if(invertLuma) luma=1.0-luma;vec4 fromColor=texture2D(from,p);vec4 toColor=texture2D(to,p);float time=mix(0.0,1.0+softness,progress);if(luma<=time-softness) gl_FragColor=toColor;else if(luma>=time) gl_FragColor=fromColor;else{float alpha=(time-luma)/softness;gl_FragColor=mix(fromColor,toColor,alpha);}}"},{id:"0141a38779af3a652c22",name:"simple luma",owner:"gre",uniforms:{luma:"spiral-1.png"},html_url:"https://gist.github.com/0141a38779af3a652c22",created_at:"2014-06-13T08:16:10Z",updated_at:"2015-08-29T14:02:31Z",stars:1,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform sampler2D luma;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;gl_FragColor=mix(texture2D(from,p),texture2D(to,p),step(texture2D(luma,p).r,progress));}"},{id:"ee15128c2b87d0e74dee",name:"cube",owner:"gre",uniforms:{persp:.7,unzoom:.3,reflection:.4,floating:3},html_url:"https://gist.github.com/ee15128c2b87d0e74dee",created_at:"2014-06-12T17:13:17Z",updated_at:"2016-12-13T03:57:44Z",stars:6,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform float persp;uniform float unzoom;uniform float reflection;uniform float floating;vec2 project(vec2 p){return p*vec2(1.0,-1.2)+vec2(0.0,-floating/100.);}bool inBounds(vec2 p){return all(lessThan(vec2(0.0),p))&&all(lessThan(p,vec2(1.0)));}vec4 bgColor(vec2 p,vec2 pfr,vec2 pto){vec4 c=vec4(0.0,0.0,0.0,1.0);pfr=project(pfr);if(inBounds(pfr)){c+=mix(vec4(0.0),texture2D(from,pfr),reflection*mix(1.0,0.0,pfr.y));}pto=project(pto);if(inBounds(pto)){c+=mix(vec4(0.0),texture2D(to,pto),reflection*mix(1.0,0.0,pto.y));}return c;}vec2 xskew(vec2 p,float persp,float center){float x=mix(p.x,1.0-p.x,center);return ((vec2(x,(p.y-0.5*(1.0-persp)*x)/(1.0+(persp-1.0)*x))-vec2(0.5-distance(center,0.5),0.0))*vec2(0.5/distance(center,0.5)*(center<0.5?1.0:-1.0),1.0)+vec2(center<0.5?0.0:1.0,0.0));}void main(){vec2 op=gl_FragCoord.xy/resolution.xy;float uz=unzoom*2.0*(0.5-distance(0.5,progress));vec2 p=-uz*0.5+(1.0+uz)*op;vec2 fromP=xskew((p-vec2(progress,0.0))/vec2(1.0-progress,1.0),1.0-mix(progress,0.0,persp),0.0);vec2 toP=xskew(p/vec2(progress,1.0),mix(pow(progress,2.0),1.0,persp),1.0);if(inBounds(fromP)){gl_FragColor=texture2D(from,fromP);}else if(inBounds(toP)){gl_FragColor=texture2D(to,toP);}else{gl_FragColor=bgColor(op,fromP,toP);}}"},{id:"9b99fc01fd5705008a5b",name:"Glitch Memories",owner:"natewave",uniforms:{},html_url:"https://gist.github.com/9b99fc01fd5705008a5b",created_at:"2014-05-29T19:32:52Z",updated_at:"2015-12-04T07:11:52Z",stars:1,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;void glitch_memories(sampler2D pic){vec2 p=gl_FragCoord.xy/resolution.xy;vec2 block=floor(gl_FragCoord.xy/vec2(16));vec2 uv_noise=block/vec2(64);uv_noise+=floor(vec2(progress)*vec2(1200.0,3500.0))/vec2(64);float block_thresh=pow(fract(progress*1200.0),2.0)*0.2;float line_thresh=pow(fract(progress*2200.0),3.0)*0.7;vec2 red=p,green=p,blue=p,o=p;vec2 dist=(fract(uv_noise)-0.5)*0.3;red+=dist*0.1;green+=dist*0.2;blue+=dist*0.125;gl_FragColor.r=texture2D(pic,red).r;gl_FragColor.g=texture2D(pic,green).g;gl_FragColor.b=texture2D(pic,blue).b;gl_FragColor.a=1.0;}void main(void){float smoothed=smoothstep(0.,1.,progress);if((smoothed<0.4&&smoothed>0.1)){glitch_memories(from);}else if((smoothed>0.6&&smoothed<0.9)){glitch_memories(to);}else{vec2 p=gl_FragCoord.xy/resolution.xy;gl_FragColor=mix(texture2D(from,p),texture2D(to,p),progress);}}"},{id:"fe67b3b5149738069537",name:"potleaf",owner:"Flexi23",uniforms:{},html_url:"https://gist.github.com/fe67b3b5149738069537",created_at:"2014-05-28T09:58:30Z",updated_at:"2015-08-29T14:01:55Z",stars:0,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;void main(){vec2 uv=gl_FragCoord.xy/resolution.xy;vec2 leaf_uv=(uv-vec2(0.5))/10./pow(progress,3.5);leaf_uv.y+=0.35;float r=0.18;float o=atan(leaf_uv.y,leaf_uv.x);gl_FragColor=mix(texture2D(from,uv),texture2D(to,uv),1.-step(1.-length(leaf_uv)+r*(1.+sin(o))*(1.+0.9*cos(8.*o))*(1.+0.1*cos(24.*o))*(0.9+0.05*cos(200.*o)),1.));}"},{id:"b86b90161503a0023231",name:"CrossZoom",owner:"rectalogic",uniforms:{strength:.4},html_url:"https://gist.github.com/b86b90161503a0023231",created_at:"2014-05-25T01:24:39Z",updated_at:"2016-10-14T11:48:08Z",stars:8,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform float strength;const float PI=3.141592653589793;float Linear_ease(in float begin,in float change,in float duration,in float time){return change*time/duration+begin;}float Exponential_easeInOut(in float begin,in float change,in float duration,in float time){if(time==0.0) return begin;else if(time==duration) return begin+change;time=time/(duration/2.0);if(time<1.0) return change/2.0*pow(2.0,10.0*(time-1.0))+begin;return change/2.0*(-pow(2.0,-10.0*(time-1.0))+2.0)+begin;}float Sinusoidal_easeInOut(in float begin,in float change,in float duration,in float time){return -change/2.0*(cos(PI*time/duration)-1.0)+begin;}float random(in vec3 scale,in float seed){return fract(sin(dot(gl_FragCoord.xyz+seed,scale))*43758.5453+seed);}vec3 crossFade(in vec2 uv,in float dissolve){return mix(texture2D(from,uv).rgb,texture2D(to,uv).rgb,dissolve);}void main(){vec2 texCoord=gl_FragCoord.xy/resolution.xy;vec2 center=vec2(Linear_ease(0.25,0.5,1.0,progress),0.5);float dissolve=Exponential_easeInOut(0.0,1.0,1.0,progress);float strength=Sinusoidal_easeInOut(0.0,strength,0.5,progress);vec3 color=vec3(0.0);float total=0.0;vec2 toCenter=center-texCoord;float offset=random(vec3(12.9898,78.233,151.7182),0.0);for(float t=0.0;t<=40.0;t++){float percent=(t+offset)/40.0;float weight=4.0*(percent-percent*percent);color+=crossFade(texCoord+toCenter*percent*strength,dissolve)*weight;total+=weight;}gl_FragColor=vec4(color/total,1.0);}"},{id:"ce9279de351984f0ad27",name:"Slide",owner:"rectalogic",uniforms:{translateX:1,translateY:0},html_url:"https://gist.github.com/ce9279de351984f0ad27",created_at:"2014-05-25T01:13:20Z",updated_at:"2016-03-17T22:31:23Z",stars:1,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform float translateX;uniform float translateY;void main(){vec2 texCoord=gl_FragCoord.xy/resolution.xy;float x=progress*translateX;float y=progress*translateY;if(x>=0.0&&y>=0.0){if(texCoord.x>=x&&texCoord.y>=y){gl_FragColor=texture2D(from,texCoord-vec2(x,y));}else{vec2 uv;if(x>0.0) uv=vec2(x-1.0,y);else if(y>0.0) uv=vec2(x,y-1.0);gl_FragColor=texture2D(to,texCoord-uv);}}else if(x<=0.0&&y<=0.0){if(texCoord.x<=(1.0+x)&&texCoord.y<=(1.0+y)) gl_FragColor=texture2D(from,texCoord-vec2(x,y));else{vec2 uv;if(x<0.0) uv=vec2(x+1.0,y);else if(y<0.0) uv=vec2(x,y+1.0);gl_FragColor=texture2D(to,texCoord-uv);}}else gl_FragColor=vec4(0.0);}"},{id:"154a99fbe5300fb5c279",name:"pinwheel",owner:"mrspeaker",uniforms:{},html_url:"https://gist.github.com/154a99fbe5300fb5c279",created_at:"2014-05-23T21:56:59Z",updated_at:"2015-08-29T14:01:45Z",stars:0,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;float circPos=atan(p.y-0.5,p.x-0.5)+progress;float modPos=mod(circPos,3.1415/4.);float signed=sign(progress-modPos);float smoothed=smoothstep(0.,1.,signed);if(smoothed>0.5){gl_FragColor=texture2D(to,p);}else{gl_FragColor=texture2D(from,p);}}"},{id:"e54a807cdb66c8b16a34",name:"Kaleidoscope",owner:"nwoeanhinnogaehr",uniforms:{speed:1,angle:2,power:2},html_url:"https://gist.github.com/e54a807cdb66c8b16a34",created_at:"2014-05-23T19:02:46Z",updated_at:"2016-04-17T11:03:48Z",stars:1,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform float speed;uniform float angle;uniform float power;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec2 q=p;float t=pow(progress,power)*speed;p=p-0.5;for(int i=0;i<7;i++){p=vec2(sin(t)*p.x+cos(t)*p.y,sin(t)*p.y-cos(t)*p.x);t+=angle;p=abs(mod(p,2.0)-1.0);}abs(mod(p,1.0));gl_FragColor=mix(mix(texture2D(from,q),texture2D(to,q),progress),mix(texture2D(from,p),texture2D(to,p),progress),1.0-2.0*abs(progress-0.5));}"},{id:"408045772d255df97520",name:"SimpleFlip",owner:"nwoeanhinnogaehr",uniforms:{},html_url:"https://gist.github.com/408045772d255df97520",created_at:"2014-05-23T18:42:58Z",updated_at:"2015-08-29T14:01:44Z",stars:0,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec2 q=p;p.x=(p.x-0.5)/abs(progress-0.5)*0.5+0.5;vec4 a=texture2D(from,p);vec4 b=texture2D(to,p);gl_FragColor=vec4(mix(a,b,step(0.5,progress)).rgb*step(abs(q.x-0.5),abs(progress-0.5)),1.0);}"},{id:"a070cbd69e2535e757f1",name:"DoomScreenTransition",owner:"zeh",uniforms:{barWidth:10,noise:.2,amplitude:2,frequency:1},html_url:"https://gist.github.com/a070cbd69e2535e757f1",created_at:"2014-05-23T18:00:18Z",updated_at:"2016-06-21T09:36:36Z",stars:2,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform int barWidth;uniform float amplitude;uniform float noise;uniform float frequency;float rand(int num){return fract(mod(float(num)*67123.313,12.0)*sin(float(num)*10.3)*cos(float(num)));}float wave(int num){float fn=float(num)*frequency*0.1*float(barWidth);return cos(fn*0.5)*cos(fn*0.13)*sin((fn+10.0)*0.3)/2.0+0.5;}float pos(int num){return noise==0.0?wave(num):mix(wave(num),rand(num),noise);}void main(){int bar=int(gl_FragCoord.x)/barWidth;float scale=1.0+pos(bar)*amplitude;float phase=progress*scale;float posY=gl_FragCoord.y/resolution.y;vec2 p;vec4 c;if(phase+posY<1.0){p=vec2(gl_FragCoord.x,gl_FragCoord.y+mix(0.0,resolution.y,phase))/resolution.xy;c=texture2D(from,p);}else{p=gl_FragCoord.xy/resolution.xy;c=texture2D(to,p);}gl_FragColor=c;}"},{id:"a830822b23e846e25d2d",name:"DreamyZoom",owner:"zeh",uniforms:{rotation:6,scale:1.2},html_url:"https://gist.github.com/a830822b23e846e25d2d",created_at:"2014-05-23T15:27:25Z",updated_at:"2015-08-29T14:01:44Z",stars:0,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\n\n#define DEG2RAD 0.03926990816987241548078304229099 // 1/180*PI\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform float rotation;uniform float scale;void main(){float phase=progress<0.5?progress*2.0:(progress-0.5)*2.0;float angleOffset=progress<0.5?mix(0.0,rotation*DEG2RAD,phase):mix(-rotation*DEG2RAD,0.0,phase);float newScale=progress<0.5?mix(1.0,scale,phase):mix(scale,1.0,phase);vec2 center=vec2(0,0);float maxRes=max(resolution.x,resolution.y);float resX=resolution.x/maxRes*0.5;float resY=resolution.y/maxRes*0.5;vec2 p=(gl_FragCoord.xy/maxRes-vec2(resX,resY))/newScale;float angle=atan(p.y,p.x)+angleOffset;float dist=distance(center,p);p.x=cos(angle)*dist+resX;p.y=sin(angle)*dist+resY;vec4 c=progress<0.5?texture2D(from,p):texture2D(to,p);gl_FragColor=c+(progress<0.5?mix(0.0,1.0,phase):mix(1.0,0.0,phase));}"},{id:"b6720916aa3f035949bc",name:"squareswipe",owner:"gre",uniforms:{squares:[10,10],direction:[1,-.5],smoothness:1.6},html_url:"https://gist.github.com/b6720916aa3f035949bc",created_at:"2014-05-23T12:09:38Z",updated_at:"2015-08-29T14:01:44Z",stars:0,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform ivec2 squares;uniform vec2 direction;uniform float smoothness;const vec2 center=vec2(0.5,0.5);void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec2 v=normalize(direction);if(v!=vec2(0.0)) v/=abs(v.x)+abs(v.y);float d=v.x*center.x+v.y*center.y;float offset=smoothness;float pr=smoothstep(-offset,0.0,v.x*p.x+v.y*p.y-(d-0.5+progress*(1.+offset)));vec2 squarep=fract(p*vec2(squares));vec2 squaremin=vec2(pr/2.0);vec2 squaremax=vec2(1.0-pr/2.0);float a=all(lessThan(squaremin,squarep))&&all(lessThan(squarep,squaremax))?1.0:0.0;gl_FragColor=mix(texture2D(from,p),texture2D(to,p),a);}"},{id:"169781bb76f310e2bfde",name:"TilesWaveBottomLeftToTopRight",owner:"numb3r23",uniforms:{tileSize:[64,64],checkerDistance:0,flipX:!1,flipY:!1,preTileSingleColor:!1,postTileSingleColor:!1},html_url:"https://gist.github.com/169781bb76f310e2bfde",created_at:"2014-05-21T22:50:48Z",updated_at:"2015-08-29T14:01:42Z",stars:0,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform vec2 tileSize;uniform float checkerDistance;uniform bool flipX;uniform bool flipY;uniform bool preTileSingleColor;uniform bool postTileSingleColor;vec2 tile2Global(vec2 tex,vec2 tileNum,bool tileSingleColor){vec2 perTile=tileSize/resolution.xy;return tileNum*perTile+(tileSingleColor?vec2(0):tex*perTile);}void main(void){vec2 uv=gl_FragCoord.xy/resolution.xy;vec4 fragColor=vec4(1,1,0,1);vec2 posInTile=mod(vec2(gl_FragCoord),tileSize);vec2 tileNum=floor(vec2(gl_FragCoord)/tileSize);int num=int(tileNum.x);vec2 totalTiles=ceil(resolution.xy/tileSize);float countTiles=totalTiles.x*totalTiles.y;vec2 perTile=ceil(tileSize/resolution.xy);float offset=0.0;offset=(tileNum.y+tileNum.x*perTile.y)/(sqrt(countTiles)*2.0);float timeOffset=(progress-offset)*countTiles;timeOffset=clamp(timeOffset,0.0,0.5);float sinTime=1.0-abs(cos(fract(timeOffset)*3.1415926));fragColor.rg=uv;fragColor.b=sinTime;vec2 texC=posInTile/tileSize;if(sinTime<=0.5){if(flipX){if((texC.x1.0-sinTime)){discard;}if(texC.x<0.5){texC.x=(texC.x-sinTime)*0.5/(0.5-sinTime);}else{texC.x=(texC.x-0.5)*0.5/(0.5-sinTime)+0.5;}}if(flipY){if((texC.y1.0-sinTime)){discard;}if(texC.y<0.5){texC.y=(texC.y-sinTime)*0.5/(0.5-sinTime);}else{texC.y=(texC.y-0.5)*0.5/(0.5-sinTime)+0.5;}}fragColor=texture2D(from,tile2Global(texC,tileNum,preTileSingleColor));}else{if(flipX){if((texC.x>sinTime)||(texC.x<1.0-sinTime)){discard;}if(texC.x<0.5){texC.x=(texC.x-sinTime)*0.5/(0.5-sinTime);}else{texC.x=(texC.x-0.5)*0.5/(0.5-sinTime)+0.5;}texC.x=1.0-texC.x;}if(flipY){if((texC.y>sinTime)||(texC.y<1.0-sinTime)){discard;}if(texC.y<0.5){texC.y=(texC.y-sinTime)*0.5/(0.5-sinTime);}else{texC.y=(texC.y-0.5)*0.5/(0.5-sinTime)+0.5;}texC.y=1.0-texC.y;}fragColor.rgb=texture2D(to,tile2Global(texC,tileNum,postTileSingleColor)).rgb;}gl_FragColor=fragColor;}"},{id:"5ebd3442a208861c7a8a",name:"TilesScanline",owner:"numb3r23",uniforms:{},html_url:"https://gist.github.com/5ebd3442a208861c7a8a",created_at:"2014-05-21T22:49:22Z",updated_at:"2015-08-29T14:01:42Z",stars:0,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;const vec2 tileSize=vec2(64,64);const float checkerDistance=0.015;const bool flipX=true;const bool flipY=false;const bool preTileSingleColor=false;const bool postTileSingleColor=false;vec2 tile2Global(vec2 tex,vec2 tileNum,bool tileSingleColor){vec2 perTile=tileSize/resolution.xy;return tileNum*perTile+(tileSingleColor?vec2(0):tex*perTile);}void main(void){vec2 uv=gl_FragCoord.xy/resolution.xy;vec4 fragColor=vec4(1,1,0,1);vec2 posInTile=mod(vec2(gl_FragCoord),tileSize);vec2 tileNum=floor(vec2(gl_FragCoord)/tileSize);int num=int(tileNum.x);vec2 totalTiles=ceil(resolution.xy/tileSize);float countTiles=totalTiles.x*totalTiles.y;vec2 perTile=ceil(tileSize/resolution.xy);float offset=0.0;offset=(tileNum.x+tileNum.y*totalTiles.x)/countTiles;float timeOffset=(progress-offset)*countTiles;timeOffset=clamp(timeOffset,0.0,0.5);float sinTime=1.0-abs(cos(fract(timeOffset)*3.1415926));fragColor.rg=uv;fragColor.b=sinTime;vec2 texC=posInTile/tileSize;if(sinTime<=0.5){if(flipX){if((texC.x1.0-sinTime)){discard;}if(texC.x<0.5){texC.x=(texC.x-sinTime)*0.5/(0.5-sinTime);}else{texC.x=(texC.x-0.5)*0.5/(0.5-sinTime)+0.5;}}if(flipY){if((texC.y1.0-sinTime)){discard;}if(texC.y<0.5){texC.y=(texC.y-sinTime)*0.5/(0.5-sinTime);}else{texC.y=(texC.y-0.5)*0.5/(0.5-sinTime)+0.5;}}fragColor=texture2D(from,tile2Global(texC,tileNum,preTileSingleColor));}else{if(flipX){if((texC.x>sinTime)||(texC.x<1.0-sinTime)){discard;}if(texC.x<0.5){texC.x=(texC.x-sinTime)*0.5/(0.5-sinTime);}else{texC.x=(texC.x-0.5)*0.5/(0.5-sinTime)+0.5;}texC.x=1.0-texC.x;}if(flipY){if((texC.y>sinTime)||(texC.y<1.0-sinTime)){discard;}if(texC.y<0.5){texC.y=(texC.y-sinTime)*0.5/(0.5-sinTime);}else{texC.y=(texC.y-0.5)*0.5/(0.5-sinTime)+0.5;}texC.y=1.0-texC.y;}fragColor.rgb=texture2D(to,tile2Global(texC,tileNum,postTileSingleColor)).rgb;}gl_FragColor=fragColor;}"},{id:"9e86d2712e123542758b",name:"Dreamy",owner:"mikolalysenko",uniforms:{},html_url:"https://gist.github.com/9e86d2712e123542758b",created_at:"2014-05-21T14:55:01Z",updated_at:"2015-08-29T14:01:39Z",stars:0,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;vec2 offset(float progress,float x,float theta){float phase=progress*progress+progress+theta;float shifty=0.03*progress*cos(10.0*(progress+x));return vec2(0,shifty);}void main(){vec2 p=gl_FragCoord.xy/resolution.xy;gl_FragColor=mix(texture2D(from,p+offset(progress,p.x,0.0)),texture2D(to,p+offset(1.0-progress,p.x,3.14)),progress);}"},{id:"21d2fdd24c706952dc8c",name:"AdvancedMosaic",owner:"corporateshark",uniforms:{},html_url:"https://gist.github.com/21d2fdd24c706952dc8c",created_at:"2014-05-21T14:45:52Z",updated_at:"2015-08-29T14:01:39Z",stars:0,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;void main(void){vec2 p=gl_FragCoord.xy/resolution.xy;float T=progress;float S0=1.0;float S1=50.0;float S2=1.0;float Half=0.5;float PixelSize=(Tprogress?fTex:tTex,tTex,pow(progress,interpolationPower));}"},{id:"b93818de23d4511fde10",name:"Dissolve",owner:"nwoeanhinnogaehr",uniforms:{blocksize:1},html_url:"https://gist.github.com/b93818de23d4511fde10",created_at:"2014-05-20T23:40:57Z",updated_at:"2015-08-29T14:01:38Z",stars:0,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform float blocksize;float rand(vec2 co){return fract(sin(dot(co,vec2(12.9898,78.233)))*43758.5453);}void main(){vec2 p=gl_FragCoord.xy/resolution.xy;gl_FragColor=mix(texture2D(from,p),texture2D(to,p),step(rand(floor(gl_FragCoord.xy/blocksize)),progress));}"},{id:"b185145363d65751009b",name:"HSVfade",owner:"nwoeanhinnogaehr",uniforms:{},html_url:"https://gist.github.com/b185145363d65751009b",created_at:"2014-05-20T23:21:27Z",updated_at:"2015-12-04T07:14:09Z",stars:1,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;vec3 hsv2rgb(vec3 c){const vec4 K=vec4(1.0,2.0/3.0,1.0/3.0,3.0);vec3 p=abs(fract(c.xxx+K.xyz)*6.0-K.www);return c.z*mix(K.xxx,clamp(p-K.xxx,0.0,1.0),c.y);}vec3 rgb2hsv(vec3 c){const vec4 K=vec4(0.0,-1.0/3.0,2.0/3.0,-1.0);vec4 p=mix(vec4(c.bg,K.wz),vec4(c.gb,K.xy),step(c.b,c.g));vec4 q=mix(vec4(p.xyw,c.r),vec4(c.r,p.yzx),step(p.x,c.r));float d=q.x-min(q.w,q.y);return vec3(abs(q.z+(q.w-q.y)/(6.0*d+0.001)),d/(q.x+0.001),q.x);}void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec3 a=rgb2hsv(texture2D(from,p).rgb);vec3 b=rgb2hsv(texture2D(to,p).rgb);vec3 m=mix(a,b,progress);gl_FragColor=vec4(hsv2rgb(m),1.0);}"},{id:"f6fc39f4cfcbb97f96a6",name:"Fold",owner:"nwoeanhinnogaehr",uniforms:{},html_url:"https://gist.github.com/f6fc39f4cfcbb97f96a6",created_at:"2014-05-20T23:14:23Z",updated_at:"2015-08-29T14:01:38Z",stars:0,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec4 a=texture2D(from,(p-vec2(progress,0.0))/vec2(1.0-progress,1.0));vec4 b=texture2D(to,p/vec2(progress,1.0));gl_FragColor=mix(a,b,step(p.x,progress));}"},{id:"80c2d40cac3f98453176",name:"linearblur",owner:"gre",uniforms:{intensity:.1},html_url:"https://gist.github.com/80c2d40cac3f98453176",created_at:"2014-05-20T22:02:35Z",updated_at:"2015-12-04T07:14:08Z",stars:1,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform float intensity;const int PASSES=8;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec4 c1=vec4(0.0),c2=vec4(0.0);float disp=intensity*(0.5-distance(0.5,progress));for(int xi=0;xi2.0) return color1;float dd=pow(1.0-distanc/2.0,sharpness);return ((color2-color1)*dd)+color1;}float distanceToEdge(vec3 point){float dx=abs(point.x>0.5?1.0-point.x:point.x);float dy=abs(point.y>0.5?1.0-point.y:point.y);if(point.x<0.0) dx=-point.x;if(point.x>1.0) dx=point.x-1.0;if(point.y<0.0) dy=-point.y;if(point.y>1.0) dy=point.y-1.0;if((point.x<0.0||point.x>1.0)&&(point.y<0.0||point.y>1.0)) return sqrt(dx*dx+dy*dy);return min(dx,dy);}vec4 seeThrough(float yc,vec2 p,mat3 rotation,mat3 rrotation){float hitAngle=PI-(acos(yc/cylinderRadius)-cylinderAngle);vec3 point=hitPoint(hitAngle,yc,rotation*vec3(p,1.0),rrotation);if(yc<=0.0&&(point.x<0.0||point.y<0.0||point.x>1.0||point.y>1.0)){vec2 texCoord=gl_FragCoord.xy/resolution.xy;return texture2D(to,texCoord);}if(yc>0.0) return texture2D(from,p);vec4 color=texture2D(from,point.xy);vec4 tcolor=vec4(0.0);return antiAlias(color,tcolor,distanceToEdge(point));}vec4 seeThroughWithShadow(float yc,vec2 p,vec3 point,mat3 rotation,mat3 rrotation){float shadow=distanceToEdge(point)*30.0;shadow=(1.0-shadow)/3.0;if(shadow<0.0) shadow=0.0;else shadow*=amount;vec4 shadowColor=seeThrough(yc,p,rotation,rrotation);shadowColor.r-=shadow;shadowColor.g-=shadow;shadowColor.b-=shadow;return shadowColor;}vec4 backside(float yc,vec3 point){vec4 color=texture2D(from,point.xy);float gray=(color.r+color.b+color.g)/15.0;gray+=(8.0/10.0)*(pow(1.0-abs(yc/cylinderRadius),2.0/10.0)/2.0+(5.0/10.0));color.rgb=vec3(gray);return color;}vec4 behindSurface(float yc,vec3 point,mat3 rrotation){float shado=(1.0-((-cylinderRadius-yc)/amount*7.0))/6.0;shado*=1.0-abs(point.x-0.5);yc=(-cylinderRadius-cylinderRadius-yc);float hitAngle=(acos(yc/cylinderRadius)+cylinderAngle)-PI;point=hitPoint(hitAngle,yc,point,rrotation);if(yc<0.0&&point.x>=0.0&&point.y>=0.0&&point.x<=1.0&&point.y<=1.0&&(hitAngle0.5)){shado=1.0-(sqrt(pow(point.x-0.5,2.0)+pow(point.y-0.5,2.0))/(71.0/100.0));shado*=pow(-yc/cylinderRadius,3.0);shado*=0.5;}else{shado=0.0;}vec2 texCoord=gl_FragCoord.xy/resolution.xy;return vec4(texture2D(to,texCoord).rgb-shado,1.0);}void main(){vec2 texCoord=gl_FragCoord.xy/resolution.xy;const float angle=30.0*PI/180.0;float c=cos(-angle);float s=sin(-angle);mat3 rotation=mat3(c,s,0,-s,c,0,0.12,0.258,1);c=cos(angle);s=sin(angle);mat3 rrotation=mat3(c,s,0,-s,c,0,0.15,-0.5,1);vec3 point=rotation*vec3(texCoord,1.0);float yc=point.y-cylinderCenter;if(yc<-cylinderRadius){gl_FragColor=behindSurface(yc,point,rrotation);return;}if(yc>cylinderRadius){gl_FragColor=texture2D(from,texCoord);return;}float hitAngle=(acos(yc/cylinderRadius)+cylinderAngle)-PI;float hitAngleMod=mod(hitAngle,2.0*PI);if((hitAngleMod>PI&&amount<0.5)||(hitAngleMod>PI/2.0&&amount<0.0)){gl_FragColor=seeThrough(yc,texCoord,rotation,rrotation);return;}point=hitPoint(hitAngle,yc,point,rrotation);if(point.x<0.0||point.y<0.0||point.x>1.0||point.y>1.0){gl_FragColor=seeThroughWithShadow(yc,texCoord,point,rotation,rrotation);return;}vec4 color=backside(yc,point);vec4 otherColor;if(yc<0.0){float shado=1.0-(sqrt(pow(point.x-0.5,2.0)+pow(point.y-0.5,2.0))/0.71);shado*=pow(-yc/cylinderRadius,3.0);shado*=0.5;otherColor=vec4(0.0,0.0,0.0,shado);}else{otherColor=texture2D(from,texCoord);}color=antiAlias(color,otherColor,cylinderRadius-abs(yc));vec4 cl=seeThroughWithShadow(yc,texCoord,point,rotation,rrotation);float dist=distanceToEdge(point);gl_FragColor=antiAlias(color,cl,dist);}"},{id:"06450f79cab706705bf9",name:"Polka_dots",owner:"bobylito",uniforms:{dots:5},html_url:"https://gist.github.com/06450f79cab706705bf9",created_at:"2014-05-20T12:09:38Z",updated_at:"2015-08-29T14:01:37Z",stars:0,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform float dots;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;float x=progress;bool nextImage=distance(fract(p*dots),vec2(0.5,0.5)).5){gl_FragColor=texture2D(to,mrp);}else{gl_FragColor=texture2D(from,mrp);}}"},{id:"ce1d48f0ce00bb379750",name:"Radial",owner:"Xaychru",uniforms:{},html_url:"https://gist.github.com/ce1d48f0ce00bb379750",created_at:"2014-05-19T15:18:28Z",updated_at:"2015-08-29T14:01:36Z",stars:0,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\n\n#define PI 3.141592653589\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec2 rp=p*2.-1.;float a=atan(rp.y,rp.x);float pa=progress*PI*2.5-PI*1.25;vec4 fromc=texture2D(from,p);vec4 toc=texture2D(to,p);if(a>pa){gl_FragColor=mix(toc,fromc,smoothstep(0.,1.,(a-pa)));}else{gl_FragColor=toc;}}"},{id:"c3bc914de09227713787",name:"ButterflyWaveScrawler",owner:"mandubian",uniforms:{amplitude:1,waves:30,colorSeparation:.3},html_url:"https://gist.github.com/c3bc914de09227713787",created_at:"2014-05-19T11:48:15Z",updated_at:"2015-08-29T14:01:36Z",stars:0,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform float amplitude;uniform float waves;uniform float colorSeparation;float PI=3.14159265358979323846264;float compute(vec2 p,float progress,vec2 center){vec2 o=p*sin(progress*amplitude)-center;vec2 h=vec2(1.,0.);float theta=acos(dot(o,h))*waves;return (exp(cos(theta))-2.*cos(4.*theta)+pow(sin((2.*theta-PI)/24.),5.))/10.;}void main(){vec2 p=gl_FragCoord.xy/resolution.xy;float inv=1.-progress;vec2 dir=p-vec2(.5);float dist=length(dir);float disp=compute(p,progress,vec2(0.5,0.5));vec4 texTo=texture2D(to,p+inv*disp);vec4 texFrom=vec4(texture2D(from,p+progress*disp*(1.0-colorSeparation)).r,texture2D(from,p+progress*disp).g,texture2D(from,p+progress*disp*(1.0+colorSeparation)).b,1.0);gl_FragColor=texTo*progress+texFrom*inv;}"},{id:"4268c81d39bd4ca00ae2",name:"CrazyParametricFun",owner:"mandubian",uniforms:{a:4,b:1,amplitude:120,smoothness:.1},html_url:"https://gist.github.com/4268c81d39bd4ca00ae2",created_at:"2014-05-19T08:04:52Z",updated_at:"2015-08-29T14:01:36Z",stars:0,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform float a;uniform float b;uniform float amplitude;uniform float smoothness;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec2 dir=p-vec2(.5);float dist=length(dir);float x=(a-b)*cos(progress)+b*cos(progress*((a/b)-1.));float y=(a-b)*sin(progress)-b*sin(progress*((a/b)-1.));vec2 offset=dir*vec2(sin(progress*dist*amplitude*x),sin(progress*dist*amplitude*y))/smoothness;gl_FragColor=mix(texture2D(from,p+offset),texture2D(to,p),smoothstep(0.2,1.0,progress));}"},{id:"2bcfb59096fcaed82355",name:"powerdisformation",owner:"gre",uniforms:{power:3,powerDest:!0},html_url:"https://gist.github.com/2bcfb59096fcaed82355",created_at:"2014-05-17T10:58:29Z",updated_at:"2015-08-29T14:01:31Z",stars:0,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform float power;uniform bool powerDest;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec2 p2=mix(p,vec2(pow(p.x,power),pow(p.y,power)),(powerDest?0.5:1.0)-distance(progress,powerDest?0.5:1.0));gl_FragColor=mix(texture2D(from,p2),texture2D(to,powerDest?p2:p),progress);}"},{id:"2a3f2e907e1c0a152e60",name:"swap",owner:"gre",uniforms:{reflection:.4,perspective:.2,depth:3},html_url:"https://gist.github.com/2a3f2e907e1c0a152e60",created_at:"2014-05-16T13:59:07Z",updated_at:"2015-08-29T14:01:30Z",stars:1,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from;uniform sampler2D to;uniform float progress;uniform vec2 resolution;uniform float reflection;uniform float perspective;uniform float depth;const vec4 black=vec4(0.0,0.0,0.0,1.0);const vec2 boundMin=vec2(0.0,0.0);const vec2 boundMax=vec2(1.0,1.0);bool inBounds(vec2 p){return all(lessThan(boundMin,p))&&all(lessThan(p,boundMax));}vec2 project(vec2 p){return p*vec2(1.0,-1.2)+vec2(0.0,-0.02);}vec4 bgColor(vec2 p,vec2 pfr,vec2 pto){vec4 c=black;pfr=project(pfr);if(inBounds(pfr)){c+=mix(black,texture2D(from,pfr),reflection*mix(1.0,0.0,pfr.y));}pto=project(pto);if(inBounds(pto)){c+=mix(black,texture2D(to,pto),reflection*mix(1.0,0.0,pto.y));}return c;}void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec2 pfr,pto=vec2(-1.);float size=mix(1.0,depth,progress);float persp=perspective*progress;pfr=(p+vec2(-0.0,-0.5))*vec2(size/(1.0-perspective*progress),size/(1.0-size*persp*p.x))+vec2(0.0,0.5);size=mix(1.0,depth,1.-progress);persp=perspective*(1.-progress);pto=(p+vec2(-1.0,-0.5))*vec2(size/(1.0-perspective*(1.0-progress)),size/(1.0-size*persp*(0.5-p.x)))+vec2(1.0,0.5);bool fromOver=progress<0.5;if(fromOver){if(inBounds(pfr)){gl_FragColor=texture2D(from,pfr);}else if(inBounds(pto)){gl_FragColor=texture2D(to,pto);}else{gl_FragColor=bgColor(p,pfr,pto);}}else{if(inBounds(pto)){gl_FragColor=texture2D(to,pto);}else if(inBounds(pfr)){gl_FragColor=texture2D(from,pfr);}else{gl_FragColor=bgColor(p,pfr,pto);}}}"},{id:"94ffa2725b65aa8b9979",name:"ripple",owner:"gre",uniforms:{amplitude:100,speed:50},html_url:"https://gist.github.com/94ffa2725b65aa8b9979",created_at:"2014-05-16T13:58:42Z",updated_at:"2015-08-29T14:01:30Z",stars:0,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from;uniform sampler2D to;uniform float progress;uniform vec2 resolution;uniform float amplitude;uniform float speed;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec2 dir=p-vec2(.5);float dist=length(dir);vec2 offset=dir*(sin(progress*dist*amplitude-progress*speed)+.5)/30.;gl_FragColor=mix(texture2D(from,p+offset),texture2D(to,p),smoothstep(0.2,1.0,progress));}"},{id:"99bced7d9b5311fd166e",name:"flash",owner:"gre",uniforms:{flashPhase:.3,flashIntensity:3,flashZoomEffect:.5},html_url:"https://gist.github.com/99bced7d9b5311fd166e",created_at:"2014-05-16T13:58:17Z",updated_at:"2015-12-04T07:14:45Z",stars:1,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from;uniform sampler2D to;uniform float progress;uniform vec2 resolution;uniform float flashPhase;uniform float flashIntensity;uniform float flashZoomEffect;const vec3 flashColor=vec3(1.0,0.8,0.3);const float flashVelocity=3.0;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec4 fc=texture2D(from,p);vec4 tc=texture2D(to,p);float intensity=mix(1.0,2.0*distance(p,vec2(0.5,0.5)),flashZoomEffect)*flashIntensity*pow(smoothstep(flashPhase,0.0,distance(0.5,progress)),flashVelocity);vec4 c=mix(texture2D(from,p),texture2D(to,p),smoothstep(0.5*(1.0-flashPhase),0.5*(1.0+flashPhase),progress));c+=intensity*vec4(flashColor,1.0);gl_FragColor=c;}"},{id:"81c6f2e6fce88f9075d2",name:"flyeye",owner:"gre",uniforms:{size:.04,zoom:30,colorSeparation:.3},html_url:"https://gist.github.com/81c6f2e6fce88f9075d2",created_at:"2014-05-16T13:56:53Z",updated_at:"2016-01-28T00:11:53Z",stars:2,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from;uniform sampler2D to;uniform float progress;uniform vec2 resolution;uniform float size;uniform float zoom;uniform float colorSeparation;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;float inv=1.-progress;vec2 disp=size*vec2(cos(zoom*p.x),sin(zoom*p.y));vec4 texTo=texture2D(to,p+inv*disp);vec4 texFrom=vec4(texture2D(from,p+progress*disp*(1.0-colorSeparation)).r,texture2D(from,p+progress*disp).g,texture2D(from,p+progress*disp*(1.0+colorSeparation)).b,1.0);gl_FragColor=texTo*progress+texFrom*inv;}"},{id:"979934722820b5e715fa",name:"doorway",owner:"gre",uniforms:{reflection:.4,perspective:.4,depth:3},html_url:"https://gist.github.com/979934722820b5e715fa",created_at:"2014-05-16T13:54:38Z",updated_at:"2015-08-29T14:01:30Z",stars:1,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from;uniform sampler2D to;uniform float progress;uniform vec2 resolution;uniform float reflection;uniform float perspective;uniform float depth;const vec4 black=vec4(0.0,0.0,0.0,1.0);const vec2 boundMin=vec2(0.0,0.0);const vec2 boundMax=vec2(1.0,1.0);bool inBounds(vec2 p){return all(lessThan(boundMin,p))&&all(lessThan(p,boundMax));}vec2 project(vec2 p){return p*vec2(1.0,-1.2)+vec2(0.0,-0.02);}vec4 bgColor(vec2 p,vec2 pto){vec4 c=black;pto=project(pto);if(inBounds(pto)){c+=mix(black,texture2D(to,pto),reflection*mix(1.0,0.0,pto.y));}return c;}void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec2 pfr=vec2(-1.),pto=vec2(-1.);float middleSlit=2.0*abs(p.x-0.5)-progress;if(middleSlit>0.0){pfr=p+(p.x>0.5?-1.0:1.0)*vec2(0.5*progress,0.0);float d=1.0/(1.0+perspective*progress*(1.0-middleSlit));pfr.y-=d/2.;pfr.y*=d;pfr.y+=d/2.;}float size=mix(1.0,depth,1.-progress);pto=(p+vec2(-0.5,-0.5))*vec2(size,size)+vec2(0.5,0.5);if(inBounds(pfr)){gl_FragColor=texture2D(from,pfr);}else if(inBounds(pto)){gl_FragColor=texture2D(to,pto);}else{gl_FragColor=bgColor(p,pto);}}"},{id:"731fcad4f8956866f34a",name:"randomsquares",owner:"gre",uniforms:{size:[10,10],smoothness:.5},html_url:"https://gist.github.com/731fcad4f8956866f34a",created_at:"2014-05-16T13:52:46Z",updated_at:"2016-04-17T10:50:07Z",stars:2,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from;uniform sampler2D to;uniform float progress;uniform vec2 resolution;uniform ivec2 size;uniform float smoothness;float rand(vec2 co){return fract(sin(dot(co.xy,vec2(12.9898,78.233)))*43758.5453);}void main(){vec2 p=gl_FragCoord.xy/resolution.xy;float r=rand(floor(vec2(size)*p));float m=smoothstep(0.0,-smoothness,r-(progress*(1.0+smoothness)));gl_FragColor=mix(texture2D(from,p),texture2D(to,p),m);}"},{id:"df8797fd112e8e429064",name:"squeeze",owner:"gre",uniforms:{colorSeparation:.02},html_url:"https://gist.github.com/df8797fd112e8e429064",created_at:"2014-05-16T13:51:39Z",updated_at:"2015-08-29T14:01:30Z",stars:0,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from;uniform sampler2D to;uniform float progress;uniform vec2 resolution;uniform float colorSeparation;float progressY(float y){return 0.5+(y-0.5)/(1.0-progress);}void main(){vec2 p=gl_FragCoord.xy/resolution.xy;float y=progressY(p.y);if(y<0.0||y>1.0){gl_FragColor=texture2D(to,p);}else{vec2 fp=vec2(p.x,y);vec3 c=vec3(texture2D(from,fp-progress*vec2(0.0,colorSeparation)).r,texture2D(from,fp).g,texture2D(from,fp+progress*vec2(0.0,colorSeparation)).b);gl_FragColor=vec4(c,1.0);}}"},{id:"90000743fedc953f11a4",name:"directionalwipe",owner:"gre",uniforms:{direction:[1,-1],smoothness:.5},html_url:"https://gist.github.com/90000743fedc953f11a4",created_at:"2014-05-16T13:50:51Z",updated_at:"2015-08-29T14:01:30Z",stars:0,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from;uniform sampler2D to;uniform float progress;uniform vec2 resolution;uniform vec2 direction;uniform float smoothness;const vec2 center=vec2(0.5,0.5);void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec2 v=normalize(direction);v/=abs(v.x)+abs(v.y);float d=v.x*center.x+v.y*center.y;float m=smoothstep(-smoothness,0.0,v.x*p.x+v.y*p.y-(d-0.5+progress*(1.+smoothness)));gl_FragColor=mix(texture2D(to,p),texture2D(from,p),m);}"},{id:"7de3f4b9482d2b0bf7bb",name:"wind",owner:"gre",uniforms:{size:.2},html_url:"https://gist.github.com/7de3f4b9482d2b0bf7bb",created_at:"2014-05-16T13:49:36Z",updated_at:"2015-08-29T14:01:30Z",stars:0,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from;uniform sampler2D to;uniform float progress;uniform vec2 resolution;uniform float size;float rand(vec2 co){return fract(sin(dot(co.xy,vec2(12.9898,78.233)))*43758.5453);}void main(){vec2 p=gl_FragCoord.xy/resolution.xy;float r=rand(vec2(0,p.y));float m=smoothstep(0.0,-size,p.x*(1.0-size)+size*r-(progress*(1.0+size)));gl_FragColor=mix(texture2D(from,p),texture2D(to,p),m);}"},{id:"d9f8b4df19584f1f0474",name:"fadegrayscale",owner:"gre",uniforms:{grayPhase:.3},html_url:"https://gist.github.com/d9f8b4df19584f1f0474",created_at:"2014-05-16T13:49:13Z",updated_at:"2015-12-04T07:14:52Z",stars:1,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from;uniform sampler2D to;uniform float progress;uniform vec2 resolution;uniform float grayPhase;vec3 grayscale(vec3 color){return vec3(0.2126*color.r+0.7152*color.g+0.0722*color.b);}void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec4 fc=texture2D(from,p);vec4 tc=texture2D(to,p);gl_FragColor=mix(mix(vec4(grayscale(fc.rgb),1.0),texture2D(from,p),smoothstep(1.0-grayPhase,0.0,progress)),mix(vec4(grayscale(tc.rgb),1.0),texture2D(to,p),smoothstep(grayPhase,1.0,progress)),progress);}"},{id:"206b96128ad6085f9911",name:"dispersionblur",owner:"gre",uniforms:{size:.6},html_url:"https://gist.github.com/206b96128ad6085f9911",created_at:"2014-05-16T13:47:09Z",updated_at:"2016-03-25T08:12:23Z",stars:2,glsl:"\n#ifdef GL_ES\nprecision highp float;\n#endif\n\n#define QUALITY 32\nuniform sampler2D from;uniform sampler2D to;uniform float progress;uniform vec2 resolution;uniform float size;const float GOLDEN_ANGLE=2.399963229728653;vec4 blur(sampler2D t,vec2 c,float radius){vec4 sum=vec4(0.0);float q=float(QUALITY);for(int i=0;i", 15 | "contributors": [], 16 | "repository": { 17 | "type": "git", 18 | "url": "https://github.com/gre/glsl-transitions.git" 19 | }, 20 | "license": "MIT", 21 | "devDependencies": { 22 | "browserify": "4.2.x", 23 | "uglify-js": "2.4.x" 24 | }, 25 | "scripts": { 26 | "build": "echo '/*! glsl-transitions '`node -e 'console.log(require(\"./package.json\").version)'`' */' > build/glsl-transitions.js && browserify index.js --standalone GlslTransitions | uglifyjs -c >> build/glsl-transitions.js" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /test.js: -------------------------------------------------------------------------------- 1 | 2 | var transitions = require("./index.js"); 3 | 4 | if (!(transitions instanceof Array)) throw new Error("transitions is not an Array."); 5 | 6 | if (transitions.length === 0) throw new Error("transitions is empty."); 7 | 8 | -------------------------------------------------------------------------------- /transitions.min.json: -------------------------------------------------------------------------------- 1 | [{"id":"9bcd1c4b5934ba60087bdb55c2ea92e5","name":"test","owner":"TimDonselaar","uniforms":{"size":[4.0,4.0],"pause":0.1,"dividerSize":0.05},"html_url":"https://gist.github.com/9bcd1c4b5934ba60087bdb55c2ea92e5","created_at":"2016-11-17T18:53:35Z","updated_at":"2016-11-17T19:04:46Z","stars":0.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from;uniform sampler2D to;uniform float progress;uniform vec2 resolution;uniform ivec2 size;uniform float pause;uniform float dividerSize;const vec4 dividerColor=vec4(0.0,0.0,0.0,1.0);const float randomOffset=0.1;float rand(vec2 co){return fract(sin(dot(co.xy,vec2(12.9898,78.233)))*43758.5453);}float getDelta(vec2 p){vec2 rectanglePos=floor(vec2(size)*p);vec2 rectangleSize=vec2(1.0/vec2(size).x,1.0/vec2(size).y);float top=rectangleSize.y*(rectanglePos.y+1.0);float bottom=rectangleSize.y*rectanglePos.y;float left=rectangleSize.x*rectanglePos.x;float right=rectangleSize.x*(rectanglePos.x+1.0);float minX=min(abs(p.x-left),abs(p.x-right));float minY=min(abs(p.y-top),abs(p.y-bottom));return min(minX,minY);}float getDividerSize(){vec2 rectangleSize=vec2(1.0/vec2(size).x,1.0/vec2(size).y);return min(rectangleSize.x,rectangleSize.y)*dividerSize;}void showDivider(vec2 p){float currentProg=progress/pause;float a=1.0;if(getDelta(p)2.0) return color1;float dd=pow(1.0-distanc/2.0,sharpness);return ((color2-color1)*dd)+color1;}float distanceToEdge(vec3 point){float dx=abs(point.x>0.5?1.0-point.x:point.x);float dy=abs(point.y>0.5?1.0-point.y:point.y);if(point.x<0.0) dx=-point.x;if(point.x>1.0) dx=point.x-1.0;if(point.y<0.0) dy=-point.y;if(point.y>1.0) dy=point.y-1.0;if((point.x<0.0||point.x>1.0)&&(point.y<0.0||point.y>1.0)) return sqrt(dx*dx+dy*dy);return min(dx,dy);}vec4 seeThrough(float yc,vec2 p,mat3 rotation,mat3 rrotation){float hitAngle=PI-(acos(yc/cylinderRadius)-cylinderAngle);vec3 point=hitPoint(hitAngle,yc,rotation*vec3(p,1.0),rrotation);if(yc<=0.0&&(point.x<0.0||point.y<0.0||point.x>1.0||point.y>1.0)){vec2 texCoord=gl_FragCoord.xy/resolution.xy;return texture2D(to,texCoord);}if(yc>0.0) return texture2D(from,p);vec4 color=texture2D(from,point.xy);vec4 tcolor=vec4(0.0);return antiAlias(color,tcolor,distanceToEdge(point));}vec4 seeThroughWithShadow(float yc,vec2 p,vec3 point,mat3 rotation,mat3 rrotation){float shadow=distanceToEdge(point)*30.0;shadow=(1.0-shadow)/3.0;if(shadow<0.0) shadow=0.0;else shadow*=amount;vec4 shadowColor=seeThrough(yc,p,rotation,rrotation);shadowColor.r-=shadow;shadowColor.g-=shadow;shadowColor.b-=shadow;return shadowColor;}vec4 backside(float yc,vec3 point){vec4 color=texture2D(from,point.xy);float gray=(color.r+color.b+color.g)/15.0;gray+=(8.0/10.0)*(pow(1.0-abs(yc/cylinderRadius),2.0/10.0)/2.0+(5.0/10.0));color.rgb=vec3(gray);return color;}vec4 behindSurface(float yc,vec3 point,mat3 rrotation){float shado=(1.0-((-cylinderRadius-yc)/amount*7.0))/6.0;shado*=1.0-abs(point.x-0.5);yc=(-cylinderRadius-cylinderRadius-yc);float hitAngle=(acos(yc/cylinderRadius)+cylinderAngle)-PI;point=hitPoint(hitAngle,yc,point,rrotation);if(yc<0.0&&point.x>=0.0&&point.y>=0.0&&point.x<=1.0&&point.y<=1.0&&(hitAngle0.5)){shado=1.0-(sqrt(pow(point.x-0.5,2.0)+pow(point.y-0.5,2.0))/(71.0/100.0));shado*=pow(-yc/cylinderRadius,3.0);shado*=0.5;}else{shado=0.0;}vec2 texCoord=gl_FragCoord.xy/resolution.xy;return vec4(texture2D(to,texCoord).rgb-shado,1.0);}void main(){vec2 texCoord=gl_FragCoord.xy/resolution.xy;const float angle=100.0*PI/180.0;float c=cos(-angle);float s=sin(-angle);mat3 rotation=mat3(c,s,0,-s,c,0,-0.801,0.8900,1);c=cos(angle);s=sin(angle);mat3 rrotation=mat3(c,s,0,-s,c,0,0.98500,0.985,1);vec3 point=rotation*vec3(texCoord,1.0);float yc=point.y-cylinderCenter;if(yc<-cylinderRadius){gl_FragColor=behindSurface(yc,point,rrotation);return;}if(yc>cylinderRadius){gl_FragColor=texture2D(from,texCoord);return;}float hitAngle=(acos(yc/cylinderRadius)+cylinderAngle)-PI;float hitAngleMod=mod(hitAngle,2.0*PI);if((hitAngleMod>PI&&amount<0.5)||(hitAngleMod>PI/2.0&&amount<0.0)){gl_FragColor=seeThrough(yc,texCoord,rotation,rrotation);return;}point=hitPoint(hitAngle,yc,point,rrotation);if(point.x<0.0||point.y<0.0||point.x>1.0||point.y>1.0){gl_FragColor=seeThroughWithShadow(yc,texCoord,point,rotation,rrotation);return;}vec4 color=backside(yc,point);vec4 otherColor;if(yc<0.0){float shado=1.0-(sqrt(pow(point.x-0.5,2.0)+pow(point.y-0.5,2.0))/0.71);shado*=pow(-yc/cylinderRadius,3.0);shado*=0.5;otherColor=vec4(0.0,0.0,0.0,shado);}else{otherColor=texture2D(from,texCoord);}color=antiAlias(color,otherColor,cylinderRadius-abs(yc));vec4 cl=seeThroughWithShadow(yc,texCoord,point,rotation,rrotation);float dist=distanceToEdge(point);gl_FragColor=antiAlias(color,cl,dist);}"},{"id":"5a66e633d36532aa4743a73d20f20304","name":"water_drop","owner":"PawelPlociennik","uniforms":{"amplitude":30.0,"speed":30.0},"html_url":"https://gist.github.com/5a66e633d36532aa4743a73d20f20304","created_at":"2016-09-16T10:24:45Z","updated_at":"2016-09-16T12:35:36Z","stars":0.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from;uniform sampler2D to;uniform float progress;uniform vec2 resolution;uniform float amplitude;uniform float speed;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec2 dir=p-vec2(.5);float dist=length(dir);if(dist>progress){gl_FragColor=mix(texture2D(from,p),texture2D(to,p),progress);}else{vec2 offset=dir*sin(dist*amplitude-progress*speed);gl_FragColor=mix(texture2D(from,p+offset),texture2D(to,p),progress);}}"},{"id":"597954724feda999b2cf2b5518d3edec","name":"StereoViewer Toy","owner":"tschundler","uniforms":{"zoom":0.88,"corner_radius":0.22},"html_url":"https://gist.github.com/597954724feda999b2cf2b5518d3edec","created_at":"2016-08-30T01:49:23Z","updated_at":"2016-08-30T07:27:55Z","stars":1.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform float zoom;uniform float corner_radius;const vec4 black=vec4(0.0,0.0,0.0,1.0);const vec2 c00=vec2(0.0,0.0);const vec2 c01=vec2(0.0,1.0);const vec2 c11=vec2(1.0,1.0);const vec2 c10=vec2(1.0,0.0);bool in_corner(vec2 p,vec2 corner,vec2 radius){vec2 axis=(c11-corner)-corner;p=p-(corner+axis*radius);p*=axis/radius;return (p.x>0.0&&p.y>-1.0)||(p.y>0.0&&p.x>-1.0)||dot(p,p)<1.0;}bool test_rounded_mask(vec2 p,vec2 corner_size){return in_corner(p,c00,corner_size)&&in_corner(p,c01,corner_size)&&in_corner(p,c10,corner_size)&&in_corner(p,c11,corner_size);}vec4 screen(vec4 a,vec4 b){return 1.0-(1.0-a)*(1.0-b);}vec4 unscreen(vec4 c){return 1.0-sqrt(1.0-c);}vec4 sample_with_corners(sampler2D tex,vec2 p,vec2 corner_size){p=(p-0.5)/zoom+0.5;if(!test_rounded_mask(p,corner_size)){return black;}return unscreen(texture2D(tex,p));}vec4 simple_sample_with_corners(sampler2D tex,vec2 p,vec2 corner_size,float zoom_amt){p=(p-0.5)/(1.0-zoom_amt+zoom*zoom_amt)+0.5;if(!test_rounded_mask(p,corner_size)){return black;}return texture2D(tex,p);}mat3 rotate2d(float angle,float aspect){float s=sin(angle);float c=cos(angle);return mat3(c,s,0.0,-s,c,0.0,0.0,0.0,1.0);}mat3 translate2d(float x,float y){return mat3(1.0,0.0,0,0.0,1.0,0,-x,-y,1.0);}mat3 scale2d(float x,float y){return mat3(x,0.0,0,0.0,y,0,0,0,1.0);}vec4 get_cross_rotated(vec3 p3,float angle,vec2 corner_size,float aspect){angle=angle*angle;angle/=2.4;mat3 center_and_scale=translate2d(-0.5,-0.5)*scale2d(1.0,aspect);mat3 unscale_and_uncenter=scale2d(1.0,1.0/aspect)*translate2d(0.5,0.5);mat3 slide_left=translate2d(-2.0,0.0);mat3 slide_right=translate2d(2.0,0.0);mat3 rotate=rotate2d(angle,aspect);mat3 op_a=center_and_scale*slide_right*rotate*slide_left*unscale_and_uncenter;mat3 op_b=center_and_scale*slide_left*rotate*slide_right*unscale_and_uncenter;vec4 a=sample_with_corners(from,(op_a*p3).xy,corner_size);vec4 b=sample_with_corners(from,(op_b*p3).xy,corner_size);return screen(a,b);}vec4 get_cross_masked(vec3 p3,float angle,vec2 corner_size,float aspect){angle=1.0-angle;angle=angle*angle;angle/=2.4;vec4 img;mat3 center_and_scale=translate2d(-0.5,-0.5)*scale2d(1.0,aspect);mat3 unscale_and_uncenter=scale2d(1.0/zoom,1.0/(zoom*aspect))*translate2d(0.5,0.5);mat3 slide_left=translate2d(-2.0,0.0);mat3 slide_right=translate2d(2.0,0.0);mat3 rotate=rotate2d(angle,aspect);mat3 op_a=center_and_scale*slide_right*rotate*slide_left*unscale_and_uncenter;mat3 op_b=center_and_scale*slide_left*rotate*slide_right*unscale_and_uncenter;bool mask_a=test_rounded_mask((op_a*p3).xy,corner_size);bool mask_b=test_rounded_mask((op_b*p3).xy,corner_size);if(mask_a||mask_b){img=sample_with_corners(to,p3.xy,corner_size);return screen(mask_a?img:black,mask_b?img:black);}else{return black;}}void main(){float a;vec2 p=gl_FragCoord.xy/resolution.xy;vec3 p3=vec3(p.xy,1.0);float aspect=resolution.x/resolution.y;vec2 corner_size=vec2(corner_radius/aspect,corner_radius);if(progress<=0.0){gl_FragColor=texture2D(from,p);}else if(progress<0.1){a=progress/0.1;gl_FragColor=simple_sample_with_corners(from,p,corner_size*a,a);}else if(progress<0.48){a=(progress-0.1)/0.38;gl_FragColor=get_cross_rotated(p3,a,corner_size,aspect);}else if(progress<0.9){gl_FragColor=get_cross_masked(p3,(progress-0.52)/0.38,corner_size,aspect);}else if(progress<1.0){a=(1.0-progress)/0.1;gl_FragColor=simple_sample_with_corners(to,p,corner_size*a,a);}else{gl_FragColor=texture2D(to,p);}}"},{"id":"ad095dac1054de1c796418f992f0f8a0","name":"wipeUp","owner":"homerjam","uniforms":{},"html_url":"https://gist.github.com/ad095dac1054de1c796418f992f0f8a0","created_at":"2016-07-29T13:49:32Z","updated_at":"2016-07-29T13:52:55Z","stars":0.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec4 a=texture2D(from,p);vec4 b=texture2D(to,p);gl_FragColor=mix(a,b,step(0.0+p.y,progress));}"},{"id":"f63e3009c1143950dee9063c3b83fb88","name":"Circle Crop","owner":"fkuteken","uniforms":{},"html_url":"https://gist.github.com/f63e3009c1143950dee9063c3b83fb88","created_at":"2016-07-12T18:04:53Z","updated_at":"2016-07-12T19:07:57Z","stars":0.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;float maxRadius=resolution.x+resolution.y;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;float distX=gl_FragCoord.x-resolution.x/2.0;float distY=gl_FragCoord.y-resolution.y/2.0;float dist=sqrt(distX*distX+distY*distY);float ;step=step*step*step;if(dist.5){b=1.-pow(2.-(x*2.),a)/2.;}return b;}float rand(float co){return fract(sin((co*24.9898)+Seed)*43758.5453);}float rand(vec2 co){return fract(sin(dot(co.xy,vec2(12.9898,78.233)))*43758.5453);}float apow(float a,float b){return pow(abs(a),b)*sign(b);}vec3 pow3(vec3 a,vec3 b){return vec3(apow(a.r,b.r),apow(a.g,b.g),apow(a.b,b.b));}float smooth_mix(float a,float b,float c){return mix(a,b,sigmoid(c,2.));}float random(vec2 co,float shft){co+=10.;return smooth_mix(fract(sin(dot(co.xy,vec2(12.9898+(floor(shft)*.5),78.233+Seed)))*43758.5453),fract(sin(dot(co.xy,vec2(12.9898+(floor(shft+1.)*.5),78.233+Seed)))*43758.5453),fract(shft));}float smooth_random(vec2 co,float shft){return smooth_mix(smooth_mix(random(floor(co),shft),random(floor(co+vec2(1.,0.)),shft),fract(co.x)),smooth_mix(random(floor(co+vec2(0.,1.)),shft),random(floor(co+vec2(1.,1.)),shft),fract(co.x)),fract(co.y));}vec4 texture(vec2 p){return mix(texture2D(from,p),texture2D(to,p),sigmoid(progress,10.));}\n#define pi 3.14159265358979323\n\n#define clamps(x) clamp(x,0.,1.)\nvoid main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec3 f=vec3(0.);for(float i=0.;i<13.;i++){f+=sin(((p.x*rand(i)*6.)+(progress*8.))+rand(i+1.43))*sin(((p.y*rand(i+4.4)*6.)+(progress*6.))+rand(i+2.4));f+=1.-clamps(length(p-vec2(smooth_random(vec2(progress*1.3),i+1.),smooth_random(vec2(progress*.5),i+6.25)))*mix(20.,70.,rand(i)));}f+=4.;f/=11.;f=pow3(f*vec3(1.,0.7,0.6),vec3(1.,2.-sin(progress*pi),1.3));f*=sin(progress*pi);p-=.5;p*=1.+(smooth_random(vec2(progress*5.),6.3)*sin(progress*pi)*.05);p+=.5;vec4 blurred_image=vec4(0.);float bluramount=sin(progress*pi)*.03;\n#define repeats 50.\nfor(float i=0.;ix0.y)?vec2(1.0,0.0):vec2(0.0,1.0);vec4 x12=x0.xyxy+C.xxzz;x12.xy-=i1;i=mod289(i);vec3 p=permute(permute(i.y+vec3(0.0,i1.y,1.0))+i.x+vec3(0.0,i1.x,1.0));vec3 m=max(0.5-vec3(dot(x0,x0),dot(x12.xy,x12.xy),dot(x12.zw,x12.zw)),0.0);m=m*m;m=m*m;vec3 x=2.0*fract(p*C.www)-1.0;vec3 h=abs(x)-0.5;vec3 ox=floor(x+0.5);vec3 a0=x-ox;m*=1.79284291400159-0.85373472095314*(a0*a0+h*h);vec3 g;g.x=a0.x*x0.x+h.x*x0.y;g.yz=a0.yz*x12.xz+h.yz*x12.yw;return 130.0*dot(m,g);}float luminance(vec4 color){return color.r*0.299+color.g*0.587+color.b*0.114;}vec2 center=vec2(1.0,direction);void main(){vec2 p=gl_FragCoord.xy/resolution.xy;if(progress==0.0){gl_FragColor=texture2D(from,p);}else if(progress==1.0){gl_FragColor=texture2D(to,p);}else{float x=progress;float dist=distance(center,p)-progress*exp(snoise(vec2(p.x,0.0)));float r=x-rand(vec2(p.x,0.1));float m;if(above){m=dist<=r&&luminance(texture2D(from,p))>l_threshold?1.0:(progress*progress*progress);}else{m=dist<=r&&luminance(texture2D(from,p))1.0){z=0.2+(pro-1.0)*5.;t=clamp((progress-0.8)/0.07,0.0,1.0);}if(length(r)<0.5+z){}else if(length(r)<0.8+z*1.5){uv=zoom(uv,1.0-0.15*pro);t=t*0.5;}else if(length(r)<1.2+z*2.5){uv=zoom(uv,1.0-0.2*pro);t=t*0.2;}else uv=zoom(uv,1.0-0.25*pro);gl_FragColor=mix(texture2D(from,uv),texture2D(to,uv),t);}"},{"id":"c08c1995cb370520f251","name":"Bounce","owner":"adrian-purser","uniforms":{"bounce":2.5,"shadow":0.075,"shadow_colour":[0.0,0.0,0.0,0.8]},"html_url":"https://gist.github.com/c08c1995cb370520f251","created_at":"2015-12-18T16:30:58Z","updated_at":"2016-03-20T23:09:47Z","stars":1.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform float bounce;uniform float shadow;uniform vec4 shadow_colour;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;float phase=progress*3.14159265358*bounce;float y=(abs(cos(phase)))*(1.0-sin(progress*(3.14159265358/2.0)));if(progress==0.0) gl_FragColor=texture2D(from,p);else if(p.yshadow) gl_FragColor=texture2D(from,p);else{float a=((d/shadow)*shadow_colour.a)+(1.0-shadow_colour.a);gl_FragColor=mix(shadow_colour,texture2D(from,p),a);}}else gl_FragColor=texture2D(to,vec2(p.x,p.y-y));}"},{"id":"7ffa32c097c9321533cb","name":"Raytraced Sphere","owner":"Romejanic","uniforms":{},"html_url":"https://gist.github.com/7ffa32c097c9321533cb","created_at":"2015-08-28T12:25:49Z","updated_at":"2015-10-20T12:17:20Z","stars":1.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;\n#define EPSILON .001\n\n#define REFRACT_INDICIES .33\n\n#define FRESNEL_STRENGTH .8\nstruct Ray{vec3 origin;vec3 direction;};struct RaycastHit{vec3 point;vec3 normal;float det;int type;};vec3 light=vec3(2.,3.,0.);RaycastHit intersectSphere(vec3 position,float radius,const Ray ray){float a=dot(ray.direction,ray.direction);float b=2.*dot(ray.direction,ray.origin-position);float c=dot(ray.origin-position,ray.origin-position)-(radius*radius);float det=(b*b)-4.*a*c;float lambda=(-b-sqrt(det))/(2.*a);vec3 p=ray.origin+lambda*ray.direction;vec3 n=p-position;RaycastHit hit;hit.point=p;hit.normal=normalize(n);hit.det=det;hit.type=(det>=0.&&lambda>=0.)?0:-1;return hit;}float rand(vec2 uv){float a=dot(uv,vec2(92.,80.));float b=dot(uv,vec2(41.,62.));float x=sin(a)+cos(b)*51.;return fract(x);}vec4 shade(Ray ray,vec2 uv){vec3 spherePos=vec3(0.,0.,4.);RaycastHit sphere=intersectSphere(spherePos,1.5,ray);vec3 bg=mix(texture2D(from,uv),texture2D(to,uv),progress).xyz;if(sphere.type==0){vec3 reflectDir=reflect(ray.direction,sphere.normal);Ray reflectRay=Ray(sphere.point+(reflectDir*EPSILON),reflectDir);vec3 l=light-sphere.point;float dif=pow(max(dot(normalize(l),sphere.normal),0.),1.);float spec=0.;spec+=pow(max(dot(normalize(reflectRay.direction),normalize(l)),0.),15.);float ndotr=dot(sphere.normal,ray.direction);float fresnel=pow(1.-abs(ndotr),FRESNEL_STRENGTH);fresnel=mix(.001,1.0,fresnel);uv=vec2(rand(uv),rand(uv))*.05;bg=mix(texture2D(from,uv),texture2D(to,uv),progress).xyz;vec3 ambient=vec3(.2);vec3 diffuse=bg*dif;vec3 specular=vec3(1.)*spec;vec3 final=ambient+diffuse+spec;return vec4(final.xyz,1.);}return vec4(bg,1.);}void main(){vec2 uv=(gl_FragCoord.xy-(resolution.xy/2.))/resolution.y;light.x=2.*progress;vec3 ori=vec3(0.);vec3 dir=vec3(uv.xy,1.);Ray ray=Ray(ori,dir);gl_FragColor=shade(ray,gl_FragCoord.xy/resolution.xy);}"},{"id":"1f6e25d1075bb82e21db","name":"Blur","owner":"giangchau92","uniforms":{"size":0.0},"html_url":"https://gist.github.com/1f6e25d1075bb82e21db","created_at":"2015-05-03T16:04:27Z","updated_at":"2015-08-29T14:20:28Z","stars":0.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\n\n#define QUALITY 32\n\n#define N 20\nuniform sampler2D from;uniform sampler2D to;uniform float progress;uniform vec2 resolution;uniform float size;const float GOLDEN_ANGLE=2.399963229728653;vec4 blur(sampler2D t,vec2 c,float radius){vec4 sum=vec4(0.0);float q=float(QUALITY);for(int i=0;i-0.005){return -1.0;}else if(r-dist<0.01&&r-dist>-0.005){return -2.0;}return grad;}float round(float a){return floor(a+0.5);}float getWave(vec2 p){vec2 _p=p-center;float rads=atan(_p.y,_p.x);float degs=degrees(rads)+180.0;vec2 range=vec2(0.0,M_PI*30.0);vec2 domain=vec2(0.0,360.0);float ratio=(M_PI*30.0)/360.0;degs=degs*ratio;float x=progress;float magnitude=mix(0.02,0.09,smoothstep(0.0,1.0,x));float offset=mix(40.0,30.0,smoothstep(0.0,1.0,x));float ease_degs=quadraticInOut(sin(degs));float deg_wave_pos=(ease_degs*magnitude)*sin(x*offset);return x+deg_wave_pos;}void main(){vec2 p=gl_FragCoord.xy/resolution.xy;if(progress==0.0){gl_FragColor=texture2D(from,p);}else if(progress==1.0){gl_FragColor=texture2D(to,p);}else{float dist=distance(center,p);float m=getGradient(getWave(p),dist);if(m==-2.0){gl_FragColor=mix(texture2D(from,p),vec4(0.0,0.0,0.0,1.0),0.75);}else{gl_FragColor=mix(texture2D(from,p),texture2D(to,p),m);}}}"},{"id":"b3aa4a8b4f88dc228d4a","name":"test","owner":"brandonyoyo","uniforms":{},"html_url":"https://gist.github.com/b3aa4a8b4f88dc228d4a","created_at":"2014-10-26T16:46:18Z","updated_at":"2015-08-29T14:08:09Z","stars":0.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;gl_FragColor=mix(texture2D(from,p),texture2D(to,p),progress);}"},{"id":"d1f891c5585fc40b55ea","name":"Star Wipe","owner":"MemoryStomp","uniforms":{},"html_url":"https://gist.github.com/d1f891c5585fc40b55ea","created_at":"2014-07-01T06:58:45Z","updated_at":"2015-08-29T14:03:17Z","stars":0.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;vec2 circlePoint(float ang){ang+=6.28318*0.15;return vec2(cos(ang),sin(ang));}float cross2d(vec2 a,vec2 b){return (a.x*b.y-a.y*b.x);}float star(vec2 p,float size){if(size<=0.0){return 0.0;}p/=size;vec2 p0=circlePoint(0.0);vec2 p1=circlePoint(6.28318*1.0/5.0);vec2 p2=circlePoint(6.28318*2.0/5.0);vec2 p3=circlePoint(6.28318*3.0/5.0);vec2 p4=circlePoint(6.28318*4.0/5.0);float s0=(cross2d(p1-p0,p-p0));float s1=(cross2d(p2-p1,p-p1));float s2=(cross2d(p3-p2,p-p2));float s3=(cross2d(p4-p3,p-p3));float s4=(cross2d(p0-p4,p-p4));float s5=min(min(min(s0,s1),min(s2,s3)),s4);float s=max(1.0-sign(s0*s1*s2*s3*s4)+sign(s5),0.0);s=sign(2.6-length(p))*s;return max(s,0.0);}void main(){vec2 p=(gl_FragCoord.xy/resolution.xy);vec2 o=p*2.0-1.0;float t=progress*1.4;float c1=star(o,t);float c2=star(o,t-0.1);float border=max(c1-c2,0.0);gl_FragColor=mix(texture2D(from,p),texture2D(to,p),c1)+vec4(border,border,border,0.0);}"},{"id":"5a4d1fb6711076d17e2e","name":"morph","owner":"paniq","uniforms":{},"html_url":"https://gist.github.com/5a4d1fb6711076d17e2e","created_at":"2014-07-01T04:52:25Z","updated_at":"2016-04-17T10:51:46Z","stars":1.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;const float strength=0.1;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec4 ca=texture2D(from,p);vec4 cb=texture2D(to,p);vec2 oa=(((ca.rg+ca.b)*0.5)*2.0-1.0);vec2 ob=(((cb.rg+cb.b)*0.5)*2.0-1.0);vec2 oc=mix(oa,ob,0.5)*strength;float w0=progress;float w1=1.0-w0;gl_FragColor=mix(texture2D(from,p+oc*w0),texture2D(to,p-oc*w1),progress);}"},{"id":"00973cee8e0353c73305","name":"LumaWipe","owner":"rectalogic","uniforms":{"lumaTex":"conical-asym.png","invertLuma":true,"softness":0.25},"html_url":"https://gist.github.com/00973cee8e0353c73305","created_at":"2014-06-17T02:11:27Z","updated_at":"2015-08-29T14:02:38Z","stars":0.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform sampler2D lumaTex;uniform bool invertLuma;uniform float softness;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;float luma=texture2D(lumaTex,p).x;if(invertLuma) luma=1.0-luma;vec4 fromColor=texture2D(from,p);vec4 toColor=texture2D(to,p);float time=mix(0.0,1.0+softness,progress);if(luma<=time-softness) gl_FragColor=toColor;else if(luma>=time) gl_FragColor=fromColor;else{float alpha=(time-luma)/softness;gl_FragColor=mix(fromColor,toColor,alpha);}}"},{"id":"0141a38779af3a652c22","name":"simple luma","owner":"gre","uniforms":{"luma":"spiral-1.png"},"html_url":"https://gist.github.com/0141a38779af3a652c22","created_at":"2014-06-13T08:16:10Z","updated_at":"2015-08-29T14:02:31Z","stars":1.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform sampler2D luma;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;gl_FragColor=mix(texture2D(from,p),texture2D(to,p),step(texture2D(luma,p).r,progress));}"},{"id":"ee15128c2b87d0e74dee","name":"cube","owner":"gre","uniforms":{"persp":0.7,"unzoom":0.3,"reflection":0.4,"floating":3.0},"html_url":"https://gist.github.com/ee15128c2b87d0e74dee","created_at":"2014-06-12T17:13:17Z","updated_at":"2016-12-13T03:57:44Z","stars":6.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform float persp;uniform float unzoom;uniform float reflection;uniform float floating;vec2 project(vec2 p){return p*vec2(1.0,-1.2)+vec2(0.0,-floating/100.);}bool inBounds(vec2 p){return all(lessThan(vec2(0.0),p))&&all(lessThan(p,vec2(1.0)));}vec4 bgColor(vec2 p,vec2 pfr,vec2 pto){vec4 c=vec4(0.0,0.0,0.0,1.0);pfr=project(pfr);if(inBounds(pfr)){c+=mix(vec4(0.0),texture2D(from,pfr),reflection*mix(1.0,0.0,pfr.y));}pto=project(pto);if(inBounds(pto)){c+=mix(vec4(0.0),texture2D(to,pto),reflection*mix(1.0,0.0,pto.y));}return c;}vec2 xskew(vec2 p,float persp,float center){float x=mix(p.x,1.0-p.x,center);return ((vec2(x,(p.y-0.5*(1.0-persp)*x)/(1.0+(persp-1.0)*x))-vec2(0.5-distance(center,0.5),0.0))*vec2(0.5/distance(center,0.5)*(center<0.5?1.0:-1.0),1.0)+vec2(center<0.5?0.0:1.0,0.0));}void main(){vec2 op=gl_FragCoord.xy/resolution.xy;float uz=unzoom*2.0*(0.5-distance(0.5,progress));vec2 p=-uz*0.5+(1.0+uz)*op;vec2 fromP=xskew((p-vec2(progress,0.0))/vec2(1.0-progress,1.0),1.0-mix(progress,0.0,persp),0.0);vec2 toP=xskew(p/vec2(progress,1.0),mix(pow(progress,2.0),1.0,persp),1.0);if(inBounds(fromP)){gl_FragColor=texture2D(from,fromP);}else if(inBounds(toP)){gl_FragColor=texture2D(to,toP);}else{gl_FragColor=bgColor(op,fromP,toP);}}"},{"id":"9b99fc01fd5705008a5b","name":"Glitch Memories","owner":"natewave","uniforms":{},"html_url":"https://gist.github.com/9b99fc01fd5705008a5b","created_at":"2014-05-29T19:32:52Z","updated_at":"2015-12-04T07:11:52Z","stars":1.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;void glitch_memories(sampler2D pic){vec2 p=gl_FragCoord.xy/resolution.xy;vec2 block=floor(gl_FragCoord.xy/vec2(16));vec2 uv_noise=block/vec2(64);uv_noise+=floor(vec2(progress)*vec2(1200.0,3500.0))/vec2(64);float block_thresh=pow(fract(progress*1200.0),2.0)*0.2;float line_thresh=pow(fract(progress*2200.0),3.0)*0.7;vec2 red=p,green=p,blue=p,o=p;vec2 dist=(fract(uv_noise)-0.5)*0.3;red+=dist*0.1;green+=dist*0.2;blue+=dist*0.125;gl_FragColor.r=texture2D(pic,red).r;gl_FragColor.g=texture2D(pic,green).g;gl_FragColor.b=texture2D(pic,blue).b;gl_FragColor.a=1.0;}void main(void){float smoothed=smoothstep(0.,1.,progress);if((smoothed<0.4&&smoothed>0.1)){glitch_memories(from);}else if((smoothed>0.6&&smoothed<0.9)){glitch_memories(to);}else{vec2 p=gl_FragCoord.xy/resolution.xy;gl_FragColor=mix(texture2D(from,p),texture2D(to,p),progress);}}"},{"id":"fe67b3b5149738069537","name":"potleaf","owner":"Flexi23","uniforms":{},"html_url":"https://gist.github.com/fe67b3b5149738069537","created_at":"2014-05-28T09:58:30Z","updated_at":"2015-08-29T14:01:55Z","stars":0.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;void main(){vec2 uv=gl_FragCoord.xy/resolution.xy;vec2 leaf_uv=(uv-vec2(0.5))/10./pow(progress,3.5);leaf_uv.y+=0.35;float r=0.18;float o=atan(leaf_uv.y,leaf_uv.x);gl_FragColor=mix(texture2D(from,uv),texture2D(to,uv),1.-step(1.-length(leaf_uv)+r*(1.+sin(o))*(1.+0.9*cos(8.*o))*(1.+0.1*cos(24.*o))*(0.9+0.05*cos(200.*o)),1.));}"},{"id":"b86b90161503a0023231","name":"CrossZoom","owner":"rectalogic","uniforms":{"strength":0.4},"html_url":"https://gist.github.com/b86b90161503a0023231","created_at":"2014-05-25T01:24:39Z","updated_at":"2016-10-14T11:48:08Z","stars":8.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform float strength;const float PI=3.141592653589793;float Linear_ease(in float begin,in float change,in float duration,in float time){return change*time/duration+begin;}float Exponential_easeInOut(in float begin,in float change,in float duration,in float time){if(time==0.0) return begin;else if(time==duration) return begin+change;time=time/(duration/2.0);if(time<1.0) return change/2.0*pow(2.0,10.0*(time-1.0))+begin;return change/2.0*(-pow(2.0,-10.0*(time-1.0))+2.0)+begin;}float Sinusoidal_easeInOut(in float begin,in float change,in float duration,in float time){return -change/2.0*(cos(PI*time/duration)-1.0)+begin;}float random(in vec3 scale,in float seed){return fract(sin(dot(gl_FragCoord.xyz+seed,scale))*43758.5453+seed);}vec3 crossFade(in vec2 uv,in float dissolve){return mix(texture2D(from,uv).rgb,texture2D(to,uv).rgb,dissolve);}void main(){vec2 texCoord=gl_FragCoord.xy/resolution.xy;vec2 center=vec2(Linear_ease(0.25,0.5,1.0,progress),0.5);float dissolve=Exponential_easeInOut(0.0,1.0,1.0,progress);float strength=Sinusoidal_easeInOut(0.0,strength,0.5,progress);vec3 color=vec3(0.0);float total=0.0;vec2 toCenter=center-texCoord;float offset=random(vec3(12.9898,78.233,151.7182),0.0);for(float t=0.0;t<=40.0;t++){float percent=(t+offset)/40.0;float weight=4.0*(percent-percent*percent);color+=crossFade(texCoord+toCenter*percent*strength,dissolve)*weight;total+=weight;}gl_FragColor=vec4(color/total,1.0);}"},{"id":"ce9279de351984f0ad27","name":"Slide","owner":"rectalogic","uniforms":{"translateX":1.0,"translateY":0.0},"html_url":"https://gist.github.com/ce9279de351984f0ad27","created_at":"2014-05-25T01:13:20Z","updated_at":"2016-03-17T22:31:23Z","stars":1.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform float translateX;uniform float translateY;void main(){vec2 texCoord=gl_FragCoord.xy/resolution.xy;float x=progress*translateX;float y=progress*translateY;if(x>=0.0&&y>=0.0){if(texCoord.x>=x&&texCoord.y>=y){gl_FragColor=texture2D(from,texCoord-vec2(x,y));}else{vec2 uv;if(x>0.0) uv=vec2(x-1.0,y);else if(y>0.0) uv=vec2(x,y-1.0);gl_FragColor=texture2D(to,texCoord-uv);}}else if(x<=0.0&&y<=0.0){if(texCoord.x<=(1.0+x)&&texCoord.y<=(1.0+y)) gl_FragColor=texture2D(from,texCoord-vec2(x,y));else{vec2 uv;if(x<0.0) uv=vec2(x+1.0,y);else if(y<0.0) uv=vec2(x,y+1.0);gl_FragColor=texture2D(to,texCoord-uv);}}else gl_FragColor=vec4(0.0);}"},{"id":"154a99fbe5300fb5c279","name":"pinwheel","owner":"mrspeaker","uniforms":{},"html_url":"https://gist.github.com/154a99fbe5300fb5c279","created_at":"2014-05-23T21:56:59Z","updated_at":"2015-08-29T14:01:45Z","stars":0.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;float circPos=atan(p.y-0.5,p.x-0.5)+progress;float modPos=mod(circPos,3.1415/4.);float signed=sign(progress-modPos);float smoothed=smoothstep(0.,1.,signed);if(smoothed>0.5){gl_FragColor=texture2D(to,p);}else{gl_FragColor=texture2D(from,p);}}"},{"id":"e54a807cdb66c8b16a34","name":"Kaleidoscope","owner":"nwoeanhinnogaehr","uniforms":{"speed":1.0,"angle":2.0,"power":2.0},"html_url":"https://gist.github.com/e54a807cdb66c8b16a34","created_at":"2014-05-23T19:02:46Z","updated_at":"2016-04-17T11:03:48Z","stars":1.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform float speed;uniform float angle;uniform float power;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec2 q=p;float t=pow(progress,power)*speed;p=p-0.5;for(int i=0;i<7;i++){p=vec2(sin(t)*p.x+cos(t)*p.y,sin(t)*p.y-cos(t)*p.x);t+=angle;p=abs(mod(p,2.0)-1.0);}abs(mod(p,1.0));gl_FragColor=mix(mix(texture2D(from,q),texture2D(to,q),progress),mix(texture2D(from,p),texture2D(to,p),progress),1.0-2.0*abs(progress-0.5));}"},{"id":"408045772d255df97520","name":"SimpleFlip","owner":"nwoeanhinnogaehr","uniforms":{},"html_url":"https://gist.github.com/408045772d255df97520","created_at":"2014-05-23T18:42:58Z","updated_at":"2015-08-29T14:01:44Z","stars":0.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec2 q=p;p.x=(p.x-0.5)/abs(progress-0.5)*0.5+0.5;vec4 a=texture2D(from,p);vec4 b=texture2D(to,p);gl_FragColor=vec4(mix(a,b,step(0.5,progress)).rgb*step(abs(q.x-0.5),abs(progress-0.5)),1.0);}"},{"id":"a070cbd69e2535e757f1","name":"DoomScreenTransition","owner":"zeh","uniforms":{"barWidth":10.0,"noise":0.2,"amplitude":2.0,"frequency":1.0},"html_url":"https://gist.github.com/a070cbd69e2535e757f1","created_at":"2014-05-23T18:00:18Z","updated_at":"2016-06-21T09:36:36Z","stars":2.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform int barWidth;uniform float amplitude;uniform float noise;uniform float frequency;float rand(int num){return fract(mod(float(num)*67123.313,12.0)*sin(float(num)*10.3)*cos(float(num)));}float wave(int num){float fn=float(num)*frequency*0.1*float(barWidth);return cos(fn*0.5)*cos(fn*0.13)*sin((fn+10.0)*0.3)/2.0+0.5;}float pos(int num){return noise==0.0?wave(num):mix(wave(num),rand(num),noise);}void main(){int bar=int(gl_FragCoord.x)/barWidth;float scale=1.0+pos(bar)*amplitude;float phase=progress*scale;float posY=gl_FragCoord.y/resolution.y;vec2 p;vec4 c;if(phase+posY<1.0){p=vec2(gl_FragCoord.x,gl_FragCoord.y+mix(0.0,resolution.y,phase))/resolution.xy;c=texture2D(from,p);}else{p=gl_FragCoord.xy/resolution.xy;c=texture2D(to,p);}gl_FragColor=c;}"},{"id":"a830822b23e846e25d2d","name":"DreamyZoom","owner":"zeh","uniforms":{"rotation":6.0,"scale":1.2},"html_url":"https://gist.github.com/a830822b23e846e25d2d","created_at":"2014-05-23T15:27:25Z","updated_at":"2015-08-29T14:01:44Z","stars":0.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\n\n#define DEG2RAD 0.03926990816987241548078304229099 // 1/180*PI\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform float rotation;uniform float scale;void main(){float phase=progress<0.5?progress*2.0:(progress-0.5)*2.0;float angleOffset=progress<0.5?mix(0.0,rotation*DEG2RAD,phase):mix(-rotation*DEG2RAD,0.0,phase);float newScale=progress<0.5?mix(1.0,scale,phase):mix(scale,1.0,phase);vec2 center=vec2(0,0);float maxRes=max(resolution.x,resolution.y);float resX=resolution.x/maxRes*0.5;float resY=resolution.y/maxRes*0.5;vec2 p=(gl_FragCoord.xy/maxRes-vec2(resX,resY))/newScale;float angle=atan(p.y,p.x)+angleOffset;float dist=distance(center,p);p.x=cos(angle)*dist+resX;p.y=sin(angle)*dist+resY;vec4 c=progress<0.5?texture2D(from,p):texture2D(to,p);gl_FragColor=c+(progress<0.5?mix(0.0,1.0,phase):mix(1.0,0.0,phase));}"},{"id":"b6720916aa3f035949bc","name":"squareswipe","owner":"gre","uniforms":{"squares":[10.0,10.0],"direction":[1.0,-0.5],"smoothness":1.6},"html_url":"https://gist.github.com/b6720916aa3f035949bc","created_at":"2014-05-23T12:09:38Z","updated_at":"2015-08-29T14:01:44Z","stars":0.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform ivec2 squares;uniform vec2 direction;uniform float smoothness;const vec2 center=vec2(0.5,0.5);void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec2 v=normalize(direction);if(v!=vec2(0.0)) v/=abs(v.x)+abs(v.y);float d=v.x*center.x+v.y*center.y;float offset=smoothness;float pr=smoothstep(-offset,0.0,v.x*p.x+v.y*p.y-(d-0.5+progress*(1.+offset)));vec2 squarep=fract(p*vec2(squares));vec2 squaremin=vec2(pr/2.0);vec2 squaremax=vec2(1.0-pr/2.0);float a=all(lessThan(squaremin,squarep))&&all(lessThan(squarep,squaremax))?1.0:0.0;gl_FragColor=mix(texture2D(from,p),texture2D(to,p),a);}"},{"id":"169781bb76f310e2bfde","name":"TilesWaveBottomLeftToTopRight","owner":"numb3r23","uniforms":{"tileSize":[64.0,64.0],"checkerDistance":0.0,"flipX":false,"flipY":false,"preTileSingleColor":false,"postTileSingleColor":false},"html_url":"https://gist.github.com/169781bb76f310e2bfde","created_at":"2014-05-21T22:50:48Z","updated_at":"2015-08-29T14:01:42Z","stars":0.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform vec2 tileSize;uniform float checkerDistance;uniform bool flipX;uniform bool flipY;uniform bool preTileSingleColor;uniform bool postTileSingleColor;vec2 tile2Global(vec2 tex,vec2 tileNum,bool tileSingleColor){vec2 perTile=tileSize/resolution.xy;return tileNum*perTile+(tileSingleColor?vec2(0):tex*perTile);}void main(void){vec2 uv=gl_FragCoord.xy/resolution.xy;vec4 fragColor=vec4(1,1,0,1);vec2 posInTile=mod(vec2(gl_FragCoord),tileSize);vec2 tileNum=floor(vec2(gl_FragCoord)/tileSize);int num=int(tileNum.x);vec2 totalTiles=ceil(resolution.xy/tileSize);float countTiles=totalTiles.x*totalTiles.y;vec2 perTile=ceil(tileSize/resolution.xy);float offset=0.0;offset=(tileNum.y+tileNum.x*perTile.y)/(sqrt(countTiles)*2.0);float timeOffset=(progress-offset)*countTiles;timeOffset=clamp(timeOffset,0.0,0.5);float sinTime=1.0-abs(cos(fract(timeOffset)*3.1415926));fragColor.rg=uv;fragColor.b=sinTime;vec2 texC=posInTile/tileSize;if(sinTime<=0.5){if(flipX){if((texC.x1.0-sinTime)){discard;}if(texC.x<0.5){texC.x=(texC.x-sinTime)*0.5/(0.5-sinTime);}else{texC.x=(texC.x-0.5)*0.5/(0.5-sinTime)+0.5;}}if(flipY){if((texC.y1.0-sinTime)){discard;}if(texC.y<0.5){texC.y=(texC.y-sinTime)*0.5/(0.5-sinTime);}else{texC.y=(texC.y-0.5)*0.5/(0.5-sinTime)+0.5;}}fragColor=texture2D(from,tile2Global(texC,tileNum,preTileSingleColor));}else{if(flipX){if((texC.x>sinTime)||(texC.x<1.0-sinTime)){discard;}if(texC.x<0.5){texC.x=(texC.x-sinTime)*0.5/(0.5-sinTime);}else{texC.x=(texC.x-0.5)*0.5/(0.5-sinTime)+0.5;}texC.x=1.0-texC.x;}if(flipY){if((texC.y>sinTime)||(texC.y<1.0-sinTime)){discard;}if(texC.y<0.5){texC.y=(texC.y-sinTime)*0.5/(0.5-sinTime);}else{texC.y=(texC.y-0.5)*0.5/(0.5-sinTime)+0.5;}texC.y=1.0-texC.y;}fragColor.rgb=texture2D(to,tile2Global(texC,tileNum,postTileSingleColor)).rgb;}gl_FragColor=fragColor;}"},{"id":"5ebd3442a208861c7a8a","name":"TilesScanline","owner":"numb3r23","uniforms":{},"html_url":"https://gist.github.com/5ebd3442a208861c7a8a","created_at":"2014-05-21T22:49:22Z","updated_at":"2015-08-29T14:01:42Z","stars":0.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;const vec2 tileSize=vec2(64,64);const float checkerDistance=0.015;const bool flipX=true;const bool flipY=false;const bool preTileSingleColor=false;const bool postTileSingleColor=false;vec2 tile2Global(vec2 tex,vec2 tileNum,bool tileSingleColor){vec2 perTile=tileSize/resolution.xy;return tileNum*perTile+(tileSingleColor?vec2(0):tex*perTile);}void main(void){vec2 uv=gl_FragCoord.xy/resolution.xy;vec4 fragColor=vec4(1,1,0,1);vec2 posInTile=mod(vec2(gl_FragCoord),tileSize);vec2 tileNum=floor(vec2(gl_FragCoord)/tileSize);int num=int(tileNum.x);vec2 totalTiles=ceil(resolution.xy/tileSize);float countTiles=totalTiles.x*totalTiles.y;vec2 perTile=ceil(tileSize/resolution.xy);float offset=0.0;offset=(tileNum.x+tileNum.y*totalTiles.x)/countTiles;float timeOffset=(progress-offset)*countTiles;timeOffset=clamp(timeOffset,0.0,0.5);float sinTime=1.0-abs(cos(fract(timeOffset)*3.1415926));fragColor.rg=uv;fragColor.b=sinTime;vec2 texC=posInTile/tileSize;if(sinTime<=0.5){if(flipX){if((texC.x1.0-sinTime)){discard;}if(texC.x<0.5){texC.x=(texC.x-sinTime)*0.5/(0.5-sinTime);}else{texC.x=(texC.x-0.5)*0.5/(0.5-sinTime)+0.5;}}if(flipY){if((texC.y1.0-sinTime)){discard;}if(texC.y<0.5){texC.y=(texC.y-sinTime)*0.5/(0.5-sinTime);}else{texC.y=(texC.y-0.5)*0.5/(0.5-sinTime)+0.5;}}fragColor=texture2D(from,tile2Global(texC,tileNum,preTileSingleColor));}else{if(flipX){if((texC.x>sinTime)||(texC.x<1.0-sinTime)){discard;}if(texC.x<0.5){texC.x=(texC.x-sinTime)*0.5/(0.5-sinTime);}else{texC.x=(texC.x-0.5)*0.5/(0.5-sinTime)+0.5;}texC.x=1.0-texC.x;}if(flipY){if((texC.y>sinTime)||(texC.y<1.0-sinTime)){discard;}if(texC.y<0.5){texC.y=(texC.y-sinTime)*0.5/(0.5-sinTime);}else{texC.y=(texC.y-0.5)*0.5/(0.5-sinTime)+0.5;}texC.y=1.0-texC.y;}fragColor.rgb=texture2D(to,tile2Global(texC,tileNum,postTileSingleColor)).rgb;}gl_FragColor=fragColor;}"},{"id":"9e86d2712e123542758b","name":"Dreamy","owner":"mikolalysenko","uniforms":{},"html_url":"https://gist.github.com/9e86d2712e123542758b","created_at":"2014-05-21T14:55:01Z","updated_at":"2015-08-29T14:01:39Z","stars":0.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;vec2 offset(float progress,float x,float theta){float phase=progress*progress+progress+theta;float shifty=0.03*progress*cos(10.0*(progress+x));return vec2(0,shifty);}void main(){vec2 p=gl_FragCoord.xy/resolution.xy;gl_FragColor=mix(texture2D(from,p+offset(progress,p.x,0.0)),texture2D(to,p+offset(1.0-progress,p.x,3.14)),progress);}"},{"id":"21d2fdd24c706952dc8c","name":"AdvancedMosaic","owner":"corporateshark","uniforms":{},"html_url":"https://gist.github.com/21d2fdd24c706952dc8c","created_at":"2014-05-21T14:45:52Z","updated_at":"2015-08-29T14:01:39Z","stars":0.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;void main(void){vec2 p=gl_FragCoord.xy/resolution.xy;float T=progress;float S0=1.0;float S1=50.0;float S2=1.0;float Half=0.5;float PixelSize=(Tprogress?fTex:tTex,tTex,pow(progress,interpolationPower));}"},{"id":"b93818de23d4511fde10","name":"Dissolve","owner":"nwoeanhinnogaehr","uniforms":{"blocksize":1.0},"html_url":"https://gist.github.com/b93818de23d4511fde10","created_at":"2014-05-20T23:40:57Z","updated_at":"2015-08-29T14:01:38Z","stars":0.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform float blocksize;float rand(vec2 co){return fract(sin(dot(co,vec2(12.9898,78.233)))*43758.5453);}void main(){vec2 p=gl_FragCoord.xy/resolution.xy;gl_FragColor=mix(texture2D(from,p),texture2D(to,p),step(rand(floor(gl_FragCoord.xy/blocksize)),progress));}"},{"id":"b185145363d65751009b","name":"HSVfade","owner":"nwoeanhinnogaehr","uniforms":{},"html_url":"https://gist.github.com/b185145363d65751009b","created_at":"2014-05-20T23:21:27Z","updated_at":"2015-12-04T07:14:09Z","stars":1.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;vec3 hsv2rgb(vec3 c){const vec4 K=vec4(1.0,2.0/3.0,1.0/3.0,3.0);vec3 p=abs(fract(c.xxx+K.xyz)*6.0-K.www);return c.z*mix(K.xxx,clamp(p-K.xxx,0.0,1.0),c.y);}vec3 rgb2hsv(vec3 c){const vec4 K=vec4(0.0,-1.0/3.0,2.0/3.0,-1.0);vec4 p=mix(vec4(c.bg,K.wz),vec4(c.gb,K.xy),step(c.b,c.g));vec4 q=mix(vec4(p.xyw,c.r),vec4(c.r,p.yzx),step(p.x,c.r));float d=q.x-min(q.w,q.y);return vec3(abs(q.z+(q.w-q.y)/(6.0*d+0.001)),d/(q.x+0.001),q.x);}void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec3 a=rgb2hsv(texture2D(from,p).rgb);vec3 b=rgb2hsv(texture2D(to,p).rgb);vec3 m=mix(a,b,progress);gl_FragColor=vec4(hsv2rgb(m),1.0);}"},{"id":"f6fc39f4cfcbb97f96a6","name":"Fold","owner":"nwoeanhinnogaehr","uniforms":{},"html_url":"https://gist.github.com/f6fc39f4cfcbb97f96a6","created_at":"2014-05-20T23:14:23Z","updated_at":"2015-08-29T14:01:38Z","stars":0.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec4 a=texture2D(from,(p-vec2(progress,0.0))/vec2(1.0-progress,1.0));vec4 b=texture2D(to,p/vec2(progress,1.0));gl_FragColor=mix(a,b,step(p.x,progress));}"},{"id":"80c2d40cac3f98453176","name":"linearblur","owner":"gre","uniforms":{"intensity":0.1},"html_url":"https://gist.github.com/80c2d40cac3f98453176","created_at":"2014-05-20T22:02:35Z","updated_at":"2015-12-04T07:14:08Z","stars":1.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform float intensity;const int PASSES=8;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec4 c1=vec4(0.0),c2=vec4(0.0);float disp=intensity*(0.5-distance(0.5,progress));for(int xi=0;xi2.0) return color1;float dd=pow(1.0-distanc/2.0,sharpness);return ((color2-color1)*dd)+color1;}float distanceToEdge(vec3 point){float dx=abs(point.x>0.5?1.0-point.x:point.x);float dy=abs(point.y>0.5?1.0-point.y:point.y);if(point.x<0.0) dx=-point.x;if(point.x>1.0) dx=point.x-1.0;if(point.y<0.0) dy=-point.y;if(point.y>1.0) dy=point.y-1.0;if((point.x<0.0||point.x>1.0)&&(point.y<0.0||point.y>1.0)) return sqrt(dx*dx+dy*dy);return min(dx,dy);}vec4 seeThrough(float yc,vec2 p,mat3 rotation,mat3 rrotation){float hitAngle=PI-(acos(yc/cylinderRadius)-cylinderAngle);vec3 point=hitPoint(hitAngle,yc,rotation*vec3(p,1.0),rrotation);if(yc<=0.0&&(point.x<0.0||point.y<0.0||point.x>1.0||point.y>1.0)){vec2 texCoord=gl_FragCoord.xy/resolution.xy;return texture2D(to,texCoord);}if(yc>0.0) return texture2D(from,p);vec4 color=texture2D(from,point.xy);vec4 tcolor=vec4(0.0);return antiAlias(color,tcolor,distanceToEdge(point));}vec4 seeThroughWithShadow(float yc,vec2 p,vec3 point,mat3 rotation,mat3 rrotation){float shadow=distanceToEdge(point)*30.0;shadow=(1.0-shadow)/3.0;if(shadow<0.0) shadow=0.0;else shadow*=amount;vec4 shadowColor=seeThrough(yc,p,rotation,rrotation);shadowColor.r-=shadow;shadowColor.g-=shadow;shadowColor.b-=shadow;return shadowColor;}vec4 backside(float yc,vec3 point){vec4 color=texture2D(from,point.xy);float gray=(color.r+color.b+color.g)/15.0;gray+=(8.0/10.0)*(pow(1.0-abs(yc/cylinderRadius),2.0/10.0)/2.0+(5.0/10.0));color.rgb=vec3(gray);return color;}vec4 behindSurface(float yc,vec3 point,mat3 rrotation){float shado=(1.0-((-cylinderRadius-yc)/amount*7.0))/6.0;shado*=1.0-abs(point.x-0.5);yc=(-cylinderRadius-cylinderRadius-yc);float hitAngle=(acos(yc/cylinderRadius)+cylinderAngle)-PI;point=hitPoint(hitAngle,yc,point,rrotation);if(yc<0.0&&point.x>=0.0&&point.y>=0.0&&point.x<=1.0&&point.y<=1.0&&(hitAngle0.5)){shado=1.0-(sqrt(pow(point.x-0.5,2.0)+pow(point.y-0.5,2.0))/(71.0/100.0));shado*=pow(-yc/cylinderRadius,3.0);shado*=0.5;}else{shado=0.0;}vec2 texCoord=gl_FragCoord.xy/resolution.xy;return vec4(texture2D(to,texCoord).rgb-shado,1.0);}void main(){vec2 texCoord=gl_FragCoord.xy/resolution.xy;const float angle=30.0*PI/180.0;float c=cos(-angle);float s=sin(-angle);mat3 rotation=mat3(c,s,0,-s,c,0,0.12,0.258,1);c=cos(angle);s=sin(angle);mat3 rrotation=mat3(c,s,0,-s,c,0,0.15,-0.5,1);vec3 point=rotation*vec3(texCoord,1.0);float yc=point.y-cylinderCenter;if(yc<-cylinderRadius){gl_FragColor=behindSurface(yc,point,rrotation);return;}if(yc>cylinderRadius){gl_FragColor=texture2D(from,texCoord);return;}float hitAngle=(acos(yc/cylinderRadius)+cylinderAngle)-PI;float hitAngleMod=mod(hitAngle,2.0*PI);if((hitAngleMod>PI&&amount<0.5)||(hitAngleMod>PI/2.0&&amount<0.0)){gl_FragColor=seeThrough(yc,texCoord,rotation,rrotation);return;}point=hitPoint(hitAngle,yc,point,rrotation);if(point.x<0.0||point.y<0.0||point.x>1.0||point.y>1.0){gl_FragColor=seeThroughWithShadow(yc,texCoord,point,rotation,rrotation);return;}vec4 color=backside(yc,point);vec4 otherColor;if(yc<0.0){float shado=1.0-(sqrt(pow(point.x-0.5,2.0)+pow(point.y-0.5,2.0))/0.71);shado*=pow(-yc/cylinderRadius,3.0);shado*=0.5;otherColor=vec4(0.0,0.0,0.0,shado);}else{otherColor=texture2D(from,texCoord);}color=antiAlias(color,otherColor,cylinderRadius-abs(yc));vec4 cl=seeThroughWithShadow(yc,texCoord,point,rotation,rrotation);float dist=distanceToEdge(point);gl_FragColor=antiAlias(color,cl,dist);}"},{"id":"06450f79cab706705bf9","name":"Polka_dots","owner":"bobylito","uniforms":{"dots":5.0},"html_url":"https://gist.github.com/06450f79cab706705bf9","created_at":"2014-05-20T12:09:38Z","updated_at":"2015-08-29T14:01:37Z","stars":0.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform float dots;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;float x=progress;bool nextImage=distance(fract(p*dots),vec2(0.5,0.5)).5){gl_FragColor=texture2D(to,mrp);}else{gl_FragColor=texture2D(from,mrp);}}"},{"id":"ce1d48f0ce00bb379750","name":"Radial","owner":"Xaychru","uniforms":{},"html_url":"https://gist.github.com/ce1d48f0ce00bb379750","created_at":"2014-05-19T15:18:28Z","updated_at":"2015-08-29T14:01:36Z","stars":0.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\n\n#define PI 3.141592653589\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec2 rp=p*2.-1.;float a=atan(rp.y,rp.x);float pa=progress*PI*2.5-PI*1.25;vec4 fromc=texture2D(from,p);vec4 toc=texture2D(to,p);if(a>pa){gl_FragColor=mix(toc,fromc,smoothstep(0.,1.,(a-pa)));}else{gl_FragColor=toc;}}"},{"id":"c3bc914de09227713787","name":"ButterflyWaveScrawler","owner":"mandubian","uniforms":{"amplitude":1.0,"waves":30.0,"colorSeparation":0.3},"html_url":"https://gist.github.com/c3bc914de09227713787","created_at":"2014-05-19T11:48:15Z","updated_at":"2015-08-29T14:01:36Z","stars":0.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform float amplitude;uniform float waves;uniform float colorSeparation;float PI=3.14159265358979323846264;float compute(vec2 p,float progress,vec2 center){vec2 o=p*sin(progress*amplitude)-center;vec2 h=vec2(1.,0.);float theta=acos(dot(o,h))*waves;return (exp(cos(theta))-2.*cos(4.*theta)+pow(sin((2.*theta-PI)/24.),5.))/10.;}void main(){vec2 p=gl_FragCoord.xy/resolution.xy;float inv=1.-progress;vec2 dir=p-vec2(.5);float dist=length(dir);float disp=compute(p,progress,vec2(0.5,0.5));vec4 texTo=texture2D(to,p+inv*disp);vec4 texFrom=vec4(texture2D(from,p+progress*disp*(1.0-colorSeparation)).r,texture2D(from,p+progress*disp).g,texture2D(from,p+progress*disp*(1.0+colorSeparation)).b,1.0);gl_FragColor=texTo*progress+texFrom*inv;}"},{"id":"4268c81d39bd4ca00ae2","name":"CrazyParametricFun","owner":"mandubian","uniforms":{"a":4.0,"b":1.0,"amplitude":120.0,"smoothness":0.1},"html_url":"https://gist.github.com/4268c81d39bd4ca00ae2","created_at":"2014-05-19T08:04:52Z","updated_at":"2015-08-29T14:01:36Z","stars":0.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform float a;uniform float b;uniform float amplitude;uniform float smoothness;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec2 dir=p-vec2(.5);float dist=length(dir);float x=(a-b)*cos(progress)+b*cos(progress*((a/b)-1.));float y=(a-b)*sin(progress)-b*sin(progress*((a/b)-1.));vec2 offset=dir*vec2(sin(progress*dist*amplitude*x),sin(progress*dist*amplitude*y))/smoothness;gl_FragColor=mix(texture2D(from,p+offset),texture2D(to,p),smoothstep(0.2,1.0,progress));}"},{"id":"2bcfb59096fcaed82355","name":"powerdisformation","owner":"gre","uniforms":{"power":3.0,"powerDest":true},"html_url":"https://gist.github.com/2bcfb59096fcaed82355","created_at":"2014-05-17T10:58:29Z","updated_at":"2015-08-29T14:01:31Z","stars":0.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from,to;uniform float progress;uniform vec2 resolution;uniform float power;uniform bool powerDest;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec2 p2=mix(p,vec2(pow(p.x,power),pow(p.y,power)),(powerDest?0.5:1.0)-distance(progress,powerDest?0.5:1.0));gl_FragColor=mix(texture2D(from,p2),texture2D(to,powerDest?p2:p),progress);}"},{"id":"2a3f2e907e1c0a152e60","name":"swap","owner":"gre","uniforms":{"reflection":0.4,"perspective":0.2,"depth":3.0},"html_url":"https://gist.github.com/2a3f2e907e1c0a152e60","created_at":"2014-05-16T13:59:07Z","updated_at":"2015-08-29T14:01:30Z","stars":1.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from;uniform sampler2D to;uniform float progress;uniform vec2 resolution;uniform float reflection;uniform float perspective;uniform float depth;const vec4 black=vec4(0.0,0.0,0.0,1.0);const vec2 boundMin=vec2(0.0,0.0);const vec2 boundMax=vec2(1.0,1.0);bool inBounds(vec2 p){return all(lessThan(boundMin,p))&&all(lessThan(p,boundMax));}vec2 project(vec2 p){return p*vec2(1.0,-1.2)+vec2(0.0,-0.02);}vec4 bgColor(vec2 p,vec2 pfr,vec2 pto){vec4 c=black;pfr=project(pfr);if(inBounds(pfr)){c+=mix(black,texture2D(from,pfr),reflection*mix(1.0,0.0,pfr.y));}pto=project(pto);if(inBounds(pto)){c+=mix(black,texture2D(to,pto),reflection*mix(1.0,0.0,pto.y));}return c;}void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec2 pfr,pto=vec2(-1.);float size=mix(1.0,depth,progress);float persp=perspective*progress;pfr=(p+vec2(-0.0,-0.5))*vec2(size/(1.0-perspective*progress),size/(1.0-size*persp*p.x))+vec2(0.0,0.5);size=mix(1.0,depth,1.-progress);persp=perspective*(1.-progress);pto=(p+vec2(-1.0,-0.5))*vec2(size/(1.0-perspective*(1.0-progress)),size/(1.0-size*persp*(0.5-p.x)))+vec2(1.0,0.5);bool fromOver=progress<0.5;if(fromOver){if(inBounds(pfr)){gl_FragColor=texture2D(from,pfr);}else if(inBounds(pto)){gl_FragColor=texture2D(to,pto);}else{gl_FragColor=bgColor(p,pfr,pto);}}else{if(inBounds(pto)){gl_FragColor=texture2D(to,pto);}else if(inBounds(pfr)){gl_FragColor=texture2D(from,pfr);}else{gl_FragColor=bgColor(p,pfr,pto);}}}"},{"id":"94ffa2725b65aa8b9979","name":"ripple","owner":"gre","uniforms":{"amplitude":100.0,"speed":50.0},"html_url":"https://gist.github.com/94ffa2725b65aa8b9979","created_at":"2014-05-16T13:58:42Z","updated_at":"2015-08-29T14:01:30Z","stars":0.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from;uniform sampler2D to;uniform float progress;uniform vec2 resolution;uniform float amplitude;uniform float speed;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec2 dir=p-vec2(.5);float dist=length(dir);vec2 offset=dir*(sin(progress*dist*amplitude-progress*speed)+.5)/30.;gl_FragColor=mix(texture2D(from,p+offset),texture2D(to,p),smoothstep(0.2,1.0,progress));}"},{"id":"99bced7d9b5311fd166e","name":"flash","owner":"gre","uniforms":{"flashPhase":0.3,"flashIntensity":3.0,"flashZoomEffect":0.5},"html_url":"https://gist.github.com/99bced7d9b5311fd166e","created_at":"2014-05-16T13:58:17Z","updated_at":"2015-12-04T07:14:45Z","stars":1.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from;uniform sampler2D to;uniform float progress;uniform vec2 resolution;uniform float flashPhase;uniform float flashIntensity;uniform float flashZoomEffect;const vec3 flashColor=vec3(1.0,0.8,0.3);const float flashVelocity=3.0;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec4 fc=texture2D(from,p);vec4 tc=texture2D(to,p);float intensity=mix(1.0,2.0*distance(p,vec2(0.5,0.5)),flashZoomEffect)*flashIntensity*pow(smoothstep(flashPhase,0.0,distance(0.5,progress)),flashVelocity);vec4 c=mix(texture2D(from,p),texture2D(to,p),smoothstep(0.5*(1.0-flashPhase),0.5*(1.0+flashPhase),progress));c+=intensity*vec4(flashColor,1.0);gl_FragColor=c;}"},{"id":"81c6f2e6fce88f9075d2","name":"flyeye","owner":"gre","uniforms":{"size":0.04,"zoom":30.0,"colorSeparation":0.3},"html_url":"https://gist.github.com/81c6f2e6fce88f9075d2","created_at":"2014-05-16T13:56:53Z","updated_at":"2016-01-28T00:11:53Z","stars":2.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from;uniform sampler2D to;uniform float progress;uniform vec2 resolution;uniform float size;uniform float zoom;uniform float colorSeparation;void main(){vec2 p=gl_FragCoord.xy/resolution.xy;float inv=1.-progress;vec2 disp=size*vec2(cos(zoom*p.x),sin(zoom*p.y));vec4 texTo=texture2D(to,p+inv*disp);vec4 texFrom=vec4(texture2D(from,p+progress*disp*(1.0-colorSeparation)).r,texture2D(from,p+progress*disp).g,texture2D(from,p+progress*disp*(1.0+colorSeparation)).b,1.0);gl_FragColor=texTo*progress+texFrom*inv;}"},{"id":"979934722820b5e715fa","name":"doorway","owner":"gre","uniforms":{"reflection":0.4,"perspective":0.4,"depth":3.0},"html_url":"https://gist.github.com/979934722820b5e715fa","created_at":"2014-05-16T13:54:38Z","updated_at":"2015-08-29T14:01:30Z","stars":1.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from;uniform sampler2D to;uniform float progress;uniform vec2 resolution;uniform float reflection;uniform float perspective;uniform float depth;const vec4 black=vec4(0.0,0.0,0.0,1.0);const vec2 boundMin=vec2(0.0,0.0);const vec2 boundMax=vec2(1.0,1.0);bool inBounds(vec2 p){return all(lessThan(boundMin,p))&&all(lessThan(p,boundMax));}vec2 project(vec2 p){return p*vec2(1.0,-1.2)+vec2(0.0,-0.02);}vec4 bgColor(vec2 p,vec2 pto){vec4 c=black;pto=project(pto);if(inBounds(pto)){c+=mix(black,texture2D(to,pto),reflection*mix(1.0,0.0,pto.y));}return c;}void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec2 pfr=vec2(-1.),pto=vec2(-1.);float middleSlit=2.0*abs(p.x-0.5)-progress;if(middleSlit>0.0){pfr=p+(p.x>0.5?-1.0:1.0)*vec2(0.5*progress,0.0);float d=1.0/(1.0+perspective*progress*(1.0-middleSlit));pfr.y-=d/2.;pfr.y*=d;pfr.y+=d/2.;}float size=mix(1.0,depth,1.-progress);pto=(p+vec2(-0.5,-0.5))*vec2(size,size)+vec2(0.5,0.5);if(inBounds(pfr)){gl_FragColor=texture2D(from,pfr);}else if(inBounds(pto)){gl_FragColor=texture2D(to,pto);}else{gl_FragColor=bgColor(p,pto);}}"},{"id":"731fcad4f8956866f34a","name":"randomsquares","owner":"gre","uniforms":{"size":[10.0,10.0],"smoothness":0.5},"html_url":"https://gist.github.com/731fcad4f8956866f34a","created_at":"2014-05-16T13:52:46Z","updated_at":"2016-04-17T10:50:07Z","stars":2.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from;uniform sampler2D to;uniform float progress;uniform vec2 resolution;uniform ivec2 size;uniform float smoothness;float rand(vec2 co){return fract(sin(dot(co.xy,vec2(12.9898,78.233)))*43758.5453);}void main(){vec2 p=gl_FragCoord.xy/resolution.xy;float r=rand(floor(vec2(size)*p));float m=smoothstep(0.0,-smoothness,r-(progress*(1.0+smoothness)));gl_FragColor=mix(texture2D(from,p),texture2D(to,p),m);}"},{"id":"df8797fd112e8e429064","name":"squeeze","owner":"gre","uniforms":{"colorSeparation":0.02},"html_url":"https://gist.github.com/df8797fd112e8e429064","created_at":"2014-05-16T13:51:39Z","updated_at":"2015-08-29T14:01:30Z","stars":0.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from;uniform sampler2D to;uniform float progress;uniform vec2 resolution;uniform float colorSeparation;float progressY(float y){return 0.5+(y-0.5)/(1.0-progress);}void main(){vec2 p=gl_FragCoord.xy/resolution.xy;float y=progressY(p.y);if(y<0.0||y>1.0){gl_FragColor=texture2D(to,p);}else{vec2 fp=vec2(p.x,y);vec3 c=vec3(texture2D(from,fp-progress*vec2(0.0,colorSeparation)).r,texture2D(from,fp).g,texture2D(from,fp+progress*vec2(0.0,colorSeparation)).b);gl_FragColor=vec4(c,1.0);}}"},{"id":"90000743fedc953f11a4","name":"directionalwipe","owner":"gre","uniforms":{"direction":[1.0,-1.0],"smoothness":0.5},"html_url":"https://gist.github.com/90000743fedc953f11a4","created_at":"2014-05-16T13:50:51Z","updated_at":"2015-08-29T14:01:30Z","stars":0.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from;uniform sampler2D to;uniform float progress;uniform vec2 resolution;uniform vec2 direction;uniform float smoothness;const vec2 center=vec2(0.5,0.5);void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec2 v=normalize(direction);v/=abs(v.x)+abs(v.y);float d=v.x*center.x+v.y*center.y;float m=smoothstep(-smoothness,0.0,v.x*p.x+v.y*p.y-(d-0.5+progress*(1.+smoothness)));gl_FragColor=mix(texture2D(to,p),texture2D(from,p),m);}"},{"id":"7de3f4b9482d2b0bf7bb","name":"wind","owner":"gre","uniforms":{"size":0.2},"html_url":"https://gist.github.com/7de3f4b9482d2b0bf7bb","created_at":"2014-05-16T13:49:36Z","updated_at":"2015-08-29T14:01:30Z","stars":0.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from;uniform sampler2D to;uniform float progress;uniform vec2 resolution;uniform float size;float rand(vec2 co){return fract(sin(dot(co.xy,vec2(12.9898,78.233)))*43758.5453);}void main(){vec2 p=gl_FragCoord.xy/resolution.xy;float r=rand(vec2(0,p.y));float m=smoothstep(0.0,-size,p.x*(1.0-size)+size*r-(progress*(1.0+size)));gl_FragColor=mix(texture2D(from,p),texture2D(to,p),m);}"},{"id":"d9f8b4df19584f1f0474","name":"fadegrayscale","owner":"gre","uniforms":{"grayPhase":0.3},"html_url":"https://gist.github.com/d9f8b4df19584f1f0474","created_at":"2014-05-16T13:49:13Z","updated_at":"2015-12-04T07:14:52Z","stars":1.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D from;uniform sampler2D to;uniform float progress;uniform vec2 resolution;uniform float grayPhase;vec3 grayscale(vec3 color){return vec3(0.2126*color.r+0.7152*color.g+0.0722*color.b);}void main(){vec2 p=gl_FragCoord.xy/resolution.xy;vec4 fc=texture2D(from,p);vec4 tc=texture2D(to,p);gl_FragColor=mix(mix(vec4(grayscale(fc.rgb),1.0),texture2D(from,p),smoothstep(1.0-grayPhase,0.0,progress)),mix(vec4(grayscale(tc.rgb),1.0),texture2D(to,p),smoothstep(grayPhase,1.0,progress)),progress);}"},{"id":"206b96128ad6085f9911","name":"dispersionblur","owner":"gre","uniforms":{"size":0.6},"html_url":"https://gist.github.com/206b96128ad6085f9911","created_at":"2014-05-16T13:47:09Z","updated_at":"2016-03-25T08:12:23Z","stars":2.0,"glsl":"\n#ifdef GL_ES\nprecision highp float;\n#endif\n\n#define QUALITY 32\nuniform sampler2D from;uniform sampler2D to;uniform float progress;uniform vec2 resolution;uniform float size;const float GOLDEN_ANGLE=2.399963229728653;vec4 blur(sampler2D t,vec2 c,float radius){vec4 sum=vec4(0.0);float q=float(QUALITY);for(int i=0;i