v4k-git-backup/demos/art/shadertoys/lddXzM.fs

307 lines
7.5 KiB
Forth
Raw Normal View History

2023-08-10 14:30:56 +00:00
#define line1 h_ e_ l_ l_ o_ _ s_ h_ a_ d_ e_ r_ t_ o_ y_ crlf
#define line2 t_ h_ i_ s_ _ i_ s_ _ m_ y_ _ f_ o_ n_ t_ crlf
#define line3 h_ o_ p_ e_ _ y_ o_ u_ _ l_ i_ k_ e_ _ i_ t_ crlf
#define line4 f_ e_ e_ l_ _ f_ r_ e_ e_ _ t_ o_ _ u_ s_ e_ crlf
#define line5 _ a_ b_ c_ d_ e_ f_ g_ h_ i_ j_ k_ l_ m_ crlf
#define line6 _ n_ o_ p_ q_ r_ s_ t_ u_ v_ w_ x_ y_ z_
//======Start shared code for state
#define pz_stateYOffset 0.0
#define pz_stateBuf 0
#define pz_stateSample(x) texture(iChannel0,x)
vec2 pz_realBufferResolution;
vec2 pz_originalBufferResolution;
float pz_scale;
void pz_initializeState() {
pz_realBufferResolution = iChannelResolution[pz_stateBuf].xy;
pz_originalBufferResolution = pz_stateSample(.5/pz_realBufferResolution).xy;
}
vec2 pz_nr2vec(float nr) {
return vec2(mod(nr, pz_originalBufferResolution.x)
, pz_stateYOffset+floor(nr / pz_originalBufferResolution.x))+.5;
}
vec4 pz_readState(float nr) {
return pz_stateSample(pz_nr2vec(nr)/pz_realBufferResolution);
}
float pz_resetCount() {
return pz_readState(1.).z;
}
vec3 pz_position() {
return pz_readState(3.).xyz;
}
vec2 pz_initializeState(vec2 fragCoord) {
pz_initializeState();
vec3 position = pz_position();
fragCoord -= 0.5*iResolution.xy;
fragCoord *= pz_scale = position.z;
fragCoord += (0.5 + position.xy) * iResolution.xy ;
return fragCoord;
}
//======End shared code for state
// line function, used in k, s, v, w, x, y, z
float line(vec2 p, vec2 a, vec2 b)
{
vec2 pa = p - a;
vec2 ba = b - a;
float h = clamp(dot(pa, ba) / dot(ba, ba), 0.0, 1.0);
return length(pa - ba * h);
}
//These functions are re-used by multiple letters
float _u(vec2 uv,float w,float v) {
return length(vec2(
abs(length(vec2(uv.x,
max(0.0,-(.4-v)-uv.y) ))-w)
,max(0.,uv.y-.4))) +.4;
}
float _i(vec2 uv) {
return length(vec2(uv.x,max(0.,abs(uv.y)-.4)))+.4;
}
float _j(vec2 uv) {
uv.x+=.2;
float t = _u(uv,.25,-.15);
float x = uv.x>0.?t:length(vec2(uv.x,uv.y+.8))+.4;
return x;
}
float _l(vec2 uv) {
uv.y -= .2;
return length(vec2(uv.x,max(0.,abs(uv.y)-.6)))+.4;
}
float _o(vec2 uv) {
return abs(length(vec2(uv.x,max(0.,abs(uv.y)-.15)))-.25)+.4;
}
// Here is the alphabet
float aa(vec2 uv) {
uv = -uv;
float x = abs(length(vec2(max(0.,abs(uv.x)-.05),uv.y-.2))-.2)+.4;
x = min(x,length(vec2(uv.x+.25,max(0.,abs(uv.y-.2)-.2)))+.4);
return min(x,(uv.x<0.?uv.y<0.:atan(uv.x,uv.y+0.15)>2.)?_o(uv):length(vec2(uv.x-.22734,uv.y+.254))+.4);
}
float bb(vec2 uv) {
float x = _o(uv);
uv.x += .25;
return min(x,_l(uv));
}
float cc(vec2 uv) {
float x = _o(uv);
uv.y= abs(uv.y);
return uv.x<0.||atan(uv.x,uv.y-0.15)<1.14?x:length(vec2(uv.x-.22734,uv.y-.254))+.4;
}
float dd(vec2 uv) {
uv.x *= -1.;
return bb(uv);
}
float ee(vec2 uv) {
float x = _o(uv);
return min(uv.x<0.||uv.y>.05||atan(uv.x,uv.y+0.15)>2.?x:length(vec2(uv.x-.22734,uv.y+.254))+.4,
length(vec2(max(0.,abs(uv.x)-.25),uv.y-.05))+.4);
}
float ff(vec2 uv) {
uv.x *= -1.;
uv.x += .05;
float x = _j(vec2(uv.x,-uv.y));
uv.y -= .4;
x = min(x,length(vec2(max(0.,abs(uv.x-.05)-.25),uv.y))+.4);
return x;
}
float gg(vec2 uv) {
float x = _o(uv);
return min(x,uv.x>0.||uv.y<-.65?_u(uv,0.25,-0.2):length(vec2(uv.x+0.25,uv.y+.65))+.4 );
}
float hh(vec2 uv) {
uv.y *= -1.;
float x = _u(uv,.25,.25);
uv.x += .25;
uv.y *= -1.;
return min(x,_l(uv));
}
float ii(vec2 uv) {
return min(_i(uv),length(vec2(uv.x,uv.y-.7))+.4);
}
float jj(vec2 uv) {
uv.x += .05;
return min(_j(uv),length(vec2(uv.x-.05,uv.y-.7))+.4);
}
float kk(vec2 uv) {
float x = line(uv,vec2(-.25,-.1), vec2(0.25,0.4))+.4;
x = min(x,line(uv,vec2(-.15,.0), vec2(0.25,-0.4))+.4);
uv.x+=.25;
return min(x,_l(uv));
}
float ll(vec2 uv) {
return _l(uv);
}
float mm(vec2 uv) {
//uv.x *= 1.4;
uv.y *= -1.;
uv.x-=.175;
float x = _u(uv,.175,.175);
uv.x+=.35;
x = min(x,_u(uv,.175,.175));
uv.x+=.175;
return min(x,_i(uv));
}
float nn(vec2 uv) {
uv.y *= -1.;
float x = _u(uv,.25,.25);
uv.x+=.25;
return min(x,_i(uv));
}
float oo(vec2 uv) {
return _o(uv);
}
float pp(vec2 uv) {
float x = _o(uv);
uv.x += .25;
uv.y += .4;
return min(x,_l(uv));
}
float qq(vec2 uv) {
uv.x = -uv.x;
return pp(uv);
}
float rr(vec2 uv) {
float x =atan(uv.x,uv.y-0.15)<1.14&&uv.y>0.?_o(uv):length(vec2(uv.x-.22734,uv.y-.254))+.4;
//)?_o(uv):length(vec2(uv.x-.22734,uv.y+.254))+.4);
uv.x+=.25;
return min(x,_i(uv));
}
float ss(vec2 uv) {
if (uv.y <.145 && uv.x>0. || uv.y<-.145)
uv = -uv;
float x = atan(uv.x-.05,uv.y-0.2)<1.14?
abs(length(vec2(max(0.,abs(uv.x)-.05),uv.y-.2))-.2)+.4:
length(vec2(uv.x-.231505,uv.y-.284))+.4;
return x;
}
float tt(vec2 uv) {
uv.x *= -1.;
uv.y -= .4;
uv.x += .05;
float x = min(_j(uv),length(vec2(max(0.,abs(uv.x-.05)-.25),uv.y))+.4);
return x;
}
float uu(vec2 uv) {
return _u(uv,.25,.25);
}
float vv(vec2 uv) {
uv.x=abs(uv.x);
return line(uv,vec2(0.25,0.4), vec2(0.,-0.4))+.4;
}
float ww(vec2 uv) {
uv.x=abs(uv.x);
return min(line(uv,vec2(0.3,0.4), vec2(.2,-0.4))+.4,
line(uv,vec2(0.2,-0.4), vec2(0.,0.1))+.4);
}
float xx(vec2 uv) {
uv=abs(uv);
return line(uv,vec2(0.,0.), vec2(.3,0.4))+.4;
}
float yy(vec2 uv) {
return min(line(uv,vec2(.0,-.2), vec2(-.3,0.4))+.4,
line(uv,vec2(.3,.4), vec2(-.3,-0.8))+.4);
}
float zz(vec2 uv) {
float l = line(uv,vec2(0.25,0.4), vec2(-0.25,-0.4))+.4;
uv.y=abs(uv.y);
float x = length(vec2(max(0.,abs(uv.x)-.25),uv.y-.4))+.4;
return min(x,l);
}
// Spare Q :)
float Q(vec2 uv) {
float x = _o(uv);
uv.y += .3;
uv.x -= .2;
return min(x,length(vec2(abs(uv.x+uv.y),max(0.,abs(uv.x-uv.y)-.2)))/sqrt(2.) +.4);
}
//Render char if it's up
#define ch(l) if (nr++==ofs) x=min(x,l(uv));
//Make it a bit easier to type text
#define a_ ch(aa);
#define b_ ch(bb);
#define c_ ch(cc);
#define d_ ch(dd);
#define e_ ch(ee);
#define f_ ch(ff);
#define g_ ch(gg);
#define h_ ch(hh);
#define i_ ch(ii);
#define j_ ch(jj);
#define k_ ch(kk);
#define l_ ch(ll);
#define m_ ch(mm);
#define n_ ch(nn);
#define o_ ch(oo);
#define p_ ch(pp);
#define q_ ch(qq);
#define r_ ch(rr);
#define s_ ch(ss);
#define t_ ch(tt);
#define u_ ch(uu);
#define v_ ch(vv);
#define w_ ch(ww);
#define x_ ch(xx);
#define y_ ch(yy);
#define z_ ch(zz);
//Space
#define _ nr++;
//Next line
#define crlf uv.y += 2.0; nr = 0.;
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
fragCoord = pz_initializeState(fragCoord);
float scale = 1.0;//3.5-3.0*sin(iGlobalTime*.2);
vec2 uv = (fragCoord-0.5*iResolution.xy) / iResolution.x * 22.0 * scale;
float ofs = floor(uv.x)+8.;
uv.x = mod(uv.x,1.0)-.5;
float x = 100.;
float nr = 0.;
uv.y -= 5.;
line1;
line2;
line3;
line4;
line5;
line6;
vec3 clr = vec3(0.0);
float px = 17.0/iResolution.x*pz_scale;
clr.r = 0.7-0.7*smoothstep(0.49-px,0.49+px, x); // The body
clr.g = 0.7-0.7*smoothstep(0.00,px*1.5, abs(x-0.49+px)); // Yellow outline
clr.b = 0.4-0.4*smoothstep(0.43,0.53,1.0-x); // Background with shadow
clr.rg += 0.12-0.12*smoothstep(0.00,0.1+px, abs(x-0.49+px)); // Yellow glow
if (iMouse.w>0.1) {
clr.rgb = vec3(smoothstep(0.49-px,0.49+px, x));
}
fragColor = vec4(clamp(clr,0.0,1.0),1.0);
}