#define pi acos(-1.) #define tau pi*2. precision highp float; uniform vec2 resolution; uniform float time; uniform sampler2D backbuffer; out vec4 outColor; uint seed; uint hashi( uint x) { x ^= x >> 16; x *= 0x7feb352dU; x ^= x >> 15; x *= 0x846ca68bU; x ^= x >> 16; return x; } uint wang(uint a) { a = (a ^ 61U) ^ (a >> 16U); a = a * 9U; a = a ^ (a >> 4); a = a * 0x27d4eb2dU; a = a ^ (a >> 15); return a; } #define hash_u_s(s) ( ( hashi(uint(s)) ) ) #define hash_i_s(s) ( int( hashi(uint(s)) ) ) #define hash_f_s(s) ( float( hashi(uint(s)) ) / float( 0xffffffffU ) ) #define hash_v2_s(s) vec2(hash_f_s(s),hash_f_s(s+12512)) #define hash_f() ( float( seed = hashi(seed) ) / float( 0xffffffffU ) ) #define hash_v2() vec2(hash_f(),hash_f()) #define hash_v3() vec3(hash_f(),hash_f(),hash_f()) #define hash_v4() vec3(hash_f(),hash_f(),hash_f(),hash_f()) #define hash_v3_s(s) vec3(hash_f_s(s),hash_f_s(s + 1),hash_f_s(s + 2) mat2 rot(float n){ return mat2(cos(n),-sin(n),sin(n),cos(n)); } float truchet(vec2 p){ float width = .2; vec2 q = vec2(p.x,abs(p.y)); q.y-=2./sqrt(3.); float arc = step(width,abs(length(q)-1./sqrt(3.))); float line = step(width, abs(p.y)); return arc*line; } vec4 hexagon(vec2 p, float sca) { p = p*sca; p.y /= sqrt(3.)/2.; float odd_rows = mod(floor(p.y),2.); p.x += odd_rows*.5; vec2 i_uv = floor(p), f_uv = fract(p)*2.-1.; vec2 q = (vec2(1)-abs(f_uv))*vec2(1.,sqrt(3.)); if(q.x+q.y<.5){ i_uv = i_uv+vec2(sign(f_uv.x)*.5-odd_rows+.5,sign(f_uv.y)); f_uv = f_uv-2.*vec2(.5,1.)*sign(f_uv); } return vec4(i_uv, f_uv*vec2(1.,sqrt(3.)/2.)); } vec3 samp(vec2 p){ p=vec2(atan(p.y,p.x)/tau-length(p)*2.,length(p)); float ay = p.y + pow(p.y,1.2); float by = log(p.y); p.y = mix(ay,by,sin(time)*.5+.5); p.y += time*.2 + 45.; vec2 i_hex = hexagon(p, 2.0).xy, f_hex = hexagon(p, 2.0).wz; i_hex.x = mod(i_hex.x,8.); float val = truchet(f_hex*rot(floor(hash_f_s(uint(i_hex.y*68387.+i_hex.x))*8.)*tau/6.)); vec3 col = mix(vec3(0,.03,.01),vec3(.2,.1,.0),step(.5,val)); return col; } void main(){ vec2 r=resolution, p=gl_FragCoord.xy/r;p-=.5;p.x*=r.x/r.y; float ep = .85/r.y; int os = 2; vec3 col; for(int i=-os; i<=os; i++){ for(int j=-os; j<=os; j++){ vec2 off = vec2(i,j)*ep/float(os); col += samp(p+off); } } col/=float(os)*float(os); outColor = vec4(pow(max(col,0.),vec3(.454545)),1.); }