#define erot(p,ax,t) (mix(dot(ax,p)*ax,p,cos(t))+cross(ax,p)*sin(t))
#define pcg3d(p,o) do{uvec3 q=floatBitsToUint(p)*123456798u+12346578u; q.x+=q.y*q.z;q.y+=q.x*q.z;q.z+=q.y*q.x;q^=q>>16u;q.x+=q.y*q.z;q.y+=q.x*q.z;q.z+=q.y*q.x; o=vec3(q)/float(-1U);}while(false)
#define pal(t,a) (a+a*cos(6.28*(t+vec3(1.,1.,1.))))
#define pal2(t) (.5+.5*cos(6.28*(1.*t+vec3(.0,.3,.7))))
#define diam2(p,s) (abs(p).x+abs(p).y-s)*inversesqrt(3.)
#define tru(p,out) do{ vec2 id = floor(p)+.5; vec2 gv = p-id; gv.x *= fract(452.6*sin(dot(id,vec2(452.5,985.5)))) > .5 ? -1.:1. ; gv.xy-=.5 * (gv.x >-gv.y ? 1. :-1.); out= abs(diam2(gv.xy,.5)); } while(false)
#define cd(p,o) do{vec3 cdp=abs(p);float cdd=0.,m;for(int j=0;j++<3;){cdd+=step(m=max(cdp.y,cdp.z),cdp.x)*m;cdp = cdp.yzx;}o=max(max(cdp.x,max(cdp.y,cdp.z))-3.,1.-cdd);}while(false)
#define fractal(p,o) do{vec3 fp=p;float s= 1.;for (int ii=0;ii<6;ii++){float q;cd(fp,q);o = max(o, q*s);fp = fract((fp-1.)*.5)*6.-3.;s/= 3.0;} }while(false)
#define tri(p,trir,triout ) do{vec2 trip=p;const float k = sqrt(3.0);trip.x = abs(trip.x) - trir;trip.y = trip.y + trir/k;if( trip.x+k*trip.y>0.0 ){ trip = vec2(trip.x-k*trip.y,-k*trip.x-trip.y)/2.0;}trip.x -= clamp( trip.x, -2.0*trir, 0.0 ); triout = -length(trip)*sign(trip.y);}while(false)
vec2 p=(FC.xy*2.-r)/min(r.x,r.y);
vec2 op=p;
vec3 rnd;
pcg3d(vec3(vec3(t,floor(p.xy*50.))),rnd);
vec3 col=vec3(0.);
float bpm = t*140./60.*(.5+min(15.5,.1*exp(mod(t,35.)*.1)));
vec3 trnd; pcg3d(vec3(floor(bpm)),trnd);;
bpm= smoothstep(0.,1.,fract(bpm))+floor(bpm);
float sq =(mod(bpm,10.));
//sq =-1.5;
vec3 subscreenRnd;pcg3d(trnd,subscreenRnd);
float screenRatio = r.y/r.x;
vec2 subscreenSize = vec2(1.,screenRatio);
p -=(max(vec2(.1),subscreenRnd.xy)-.5)*1.5;
p /=max(.1,subscreenRnd.z);
if(sq<1.){
for(float i=0.,im=25.;i<im;i++){
vec2 pp= p;
pp.x+=sin(t+i/im*6.28);
pp.y+=cos(i+t*.1);
float d = length(pp)-.1-abs(dot(sin(p*3.),cos(p.yx*2.))*.1);
d=.001/(.001+abs(d));
col +=vec3(d);
}
} else if(sq<2.) {
for(float i=0.,im=8.;i<im;i++){
vec2 pp= p;
pp=erot(pp.xyy,vec3(0.,0.,1.),i*i).xy;
pp.x += sin(i);
float sc = i/im;
float fsc = fract(sc-t*.1);
float m =mix(.1,10.,fsc);
pp*=m;
pp=fract(pp)-.5;
float d= min(abs(pp.x),abs(pp.y));
d=.001/(.001+abs(d))*mix(10.,.0,1.-exp(-7.*fsc));
col +=vec3(d);
}
} else if( sq<3.) {
for(float i=0.,im=32.;i++<im;){
vec3 rnd; pcg3d(vec3(i),rnd);
float d= length(p+(rnd.xz-.5)*.1)-.3;
d= (.001+.001*exp(-.5*fract(i/im+t)))/(.001+abs(d));
col += vec3(1.,.5,.2)*d*(1.5+1.5*sin(i/im*6.28+t+atan(p.x,p.y)));
p*=(1.-rnd.z*.05);
}
} else if(sq<4.) {
vec3 a;
vec2 pp=p;
float b;
pp.y -=t*.05;
vec3 z; pcg3d(vec3(floor(pp*20.).y),z) ;
pp.x -=(b=t*(.1+.3*z.z));
pcg3d(vec3( floor(pp*25.),0.),a);
col = pal(b*4.5+length(a),a)*smoothstep(a.x,a.y,a.z);
}else if(sq<5.)
{
float d = 1.0;
float ztime = t;
for(int c =0;c<3;c++){
ztime = smoothstep(.0,1.,pow(fract(ztime),2.))+floor(ztime);
for(float i=1.,im=16.;i<im;i++){
vec2 uuv = abs(p*rotate2D(i/im+ztime*i/im-t*.5)*pow(0.95,i))-.2/(sqrt(1.)/i*im);
d = length(max(vec2(0.),uuv))+min(0.,max(uuv.x,uuv.y));
d = max(0.,0.002/(.001+abs(d)));
col[c] +=d*exp(-fract(ztime+.5+i/im));
}
}
col = 1.-col;
}
else if(sq<6.){
vec2 pp=p;
pp*=8.;
float bpm = floor(t)+smoothstep(.0,1.,fract(t));
for(float i=0.,im=8.;i<im;i++){
float q = fract(i/im);
vec2 luv =pp+q;
float tou;tru(luv*q+bpm,tou);
col += +exp(-5.*fract(bpm*2.+q))*sin(vec3(.3,.3,.7))*q*.1/tou;
tru(p+q+bpm,tou);
//col += +exp(-5.*fract(bpm+q))*vec3(.1,.5,.1)*.256*.02/tou;
}
} else if(sq<7.){
vec2 pp=p;
vec3 ro=vec3(0.,0.,-10.);
vec3 rd = normalize(vec3(pp,1.));
for(float i=0.,e=0.,g=0.;i++<20.;){
vec3 z = ro+rd*g;
vec3 zz=z;
zz.xz*=rotate2D(t);
zz.xy*=rotate2D(t);
//z.z += t;
float h =0.; length(z)-.1;
fractal(zz,h);
g+=e=max(.001,(h));
col+=(.5+.5*sin(t+g*1.0+vec3(1.,.5,.3)))/exp(10.*i*i*e);
}
} else if(sq<8.) {
float t = t*.5;
for(int cc=0;cc<3;cc++){
for(float i=0.,im=5.;i<im;i++){
t = pow(fract(t),0.75)+floor(t);
float sc = 2.;
vec2 zpp= p*(sc=pow(sqrt(3.),i));
zpp=erot(zpp.xyy,vec3(0.,0.,1.),3.14/6.*(1.+i)*t ).xy;
float d ; tri(zpp,.4,d);abs(d/sc)-.002;
d = min(-d,min(abs(zpp.x),abs(zpp.y))-.1);
d= (.005-sin(atan(zpp.x,zpp.y)+t)*.004)/(.002+abs(d)-.001);
col[cc] += (4.*(.5+.25*sin(t+i*vec3(.2,.5,.9)))*d/im)[cc];
}
}col=1.-col;}else if(sq<9.){
float d = float(1U);
float im=16.;
for(float i=0.;i++<im;){
float d = min(d,abs(p.x+asin(sin(i/im*6.28+p.y*5.+3.14*exp(-3.*fract(t+(1.+i/im)))))*.4));
col += pal2(i/im)*((.005+.005*exp(-3.*fract(t)))/(.001+d));
}
}else if(sq<10.) {
vec3 ro =vec3(0.,1.,-5.),rt=vec3(0.);
ro.zx +=t; rt.zx +=t;
vec3 z = normalize(rt-ro),x=vec3(z.z,0.,-z.x),y=cross(z,x);
vec3 rd = mat3(x,y,z)*normalize(vec3(p,1.));
float g=0.;
for(float i=0.,e=0.;i++<50.;){
vec3 gp=ro+rd*g;
vec3 cent=gp;
cent.zx-=t;
float d = 0.;
vec4 pp=vec4(gp,1.);
for(float j=0.;j++<2.;){
d += .5*dot((sin(d+pp.xyz)),(cos(pp.yzx*2./pp.w)))/pp.w;
pp.xyz = (abs(pp.xyz)-1.5);
pp.xyz = erot(pp.xyz,normalize(vec3(.3,.5,.3)),j+.785);
pp*=1.1;
}
float h = dot(gp,vec3(0.,1.,0.))+d*.2;
g+=e=max(.01,h);
col+=vec3(1.,.5,.1)*.0525/exp(i*i*e); }
col = mix(col,vec3(1.),1.-exp(-g*g*g*.001));
}
col += step(-abs(p.x),-.95)+step(-abs(p.y),-.42);
vec3 pcol = texelFetch(b,ivec2(FC.xy)+(mod(t,70.)>35. ? 1:0)*ivec2(int(sign(sin(p.xx*100.)))+int((rnd.x-.5)*10.)/1,0),0).rgb;
o.rgb = mix(pcol*vec3(.0,.993,.992)*(1.-.00*rnd.xyz)*step(-.5,sin(op.y*1000.)),col,step(abs(p.y),subscreenSize.y)*step(abs(p.x),subscreenSize.x));
o.rgb = max(vec3(0.),o.rgb);