swwmgz_m/shaders/pp/Diviscreen.fp

37 lines
1.2 KiB
GLSL

// the ultimate refreshment
void main()
{
vec2 uv = TexCoord;
vec2 bresl = vec2(textureSize(InputTexture,0));
vec2 sr = vec2(1.,bresl.y/bresl.x);
vec3 ice = texture(BumpTex,uv*sr*4.).xyz;
vec2 ofs = (ice.xy-.5)*2.;
ofs *= pow(length(ofs),.25)*.4*str;
float dist = distance(uv,vec2(.5))*2.;
float distfct = clamp(pow(dist,1.2)*.85-(.75+.5*(1.-str)),0.,1.);
ofs *= distfct;
vec3 col = texture(InputTexture,uv+ofs).rgb;
col += pow(max(0.,ice.z),1.45)*.65*str*distfct;
float str2 = str*(.9+texture(NoiseTex,vec2(timer*.05)).x*.2);
float ang = timer*.05;
uv *= sr;
uv.x += 1.*sr.x;
vec2 uv2 = vec2(uv.x*cos(ang)-uv.y*sin(ang),uv.y*cos(ang)+uv.x*sin(ang))*1.3;
float smk = texture(WarpTex,uv2).x;
uv.y -= 2.*sr.y;
ang = timer*.03;
uv2 = vec2(uv.x*cos(ang)-uv.y*sin(ang),uv.y*cos(ang)+uv.x*sin(ang))*1.5;
smk += texture(WarpTex,uv2).x;
uv.x -= 3.*sr.x;
ang = timer*.04;
uv2 = vec2(uv.x*cos(ang)-uv.y*sin(ang),uv.y*cos(ang)+uv.x*sin(ang))*1.6;
smk += texture(WarpTex,uv2).x;
uv.y += 4.*sr.y;
ang = timer*.02;
uv2 = vec2(uv.x*cos(ang)-uv.y*sin(ang),uv.y*cos(ang)+uv.x*sin(ang))*1.2;
smk += texture(WarpTex,uv2).x;
smk = pow(max(0.,smk*.25),4.);
col += vec3(.8,1.,1.2)*smk*2.*str2;
FragColor = vec4(col,1.);
}