memoscan
← all memos

Memo 0xe87271c1…aded4f on Ethereum

highp float;\n#define GLSLIFY 1\n\nin vec2 state;\n\nuniform float u_scale;\n\nout vec4 color;\n\nvoid main() {\n color = vec4( fract( state + 0.25 ) - 0.25, fract( state - 0.25 ) + 0.25 ) * u_scale;\n}"),count:r,mode:e.POINTS}),vn.fb=d(e,{width:an.mapSize,height:an.mapSize,tiling:e.REPEAT,type:e.FLOAT,internalFormat:e.RGBA32F,singular:!0}),vn.blur=cn(e)};const pn=n=>{vn.renderer.bindVAOs(),n.bindVertexArray(Nn.renderer.readTFB),n.bindFramebuffer(n.FRAMEBUFFER,vn.fb.read.fb),vn.renderer.bindUniform("u_screensize",[an.height,an.height]),vn.renderer.bindUniform("u_scale",an.mapScale),n.clear(n.DEPTH_BUFFER_BIT),n.clear(n.DEPTH_BUFFER_BIT|n.COLOR_BUFFER_BIT),n.enable(n.BLEND),n.blendEquationSeparate(n.FUNC_ADD,n.FUNC_ADD),n.blendFuncSeparate(n.ONE,n.ONE,n.ONE,n.ONE),vn.renderer.render(an.mapSize,an.mapSize),n.disable(n.BLEND),vn.fb.swap(),vn.blurTexture=mn(n,vn.fb.read.targetTexture,vn.blur,an.mapSize,an.mapSize)};const bn={},gn=e=>{const r=an.numParticles;bn.renderer=s(e,{vert:n("#version 300 es\n#define GLSLIFY 1\n\nlayout(location=0) in vec2 a_position;\nlayout(location=1) in vec2 a_velocity;\n\nuniform vec2 u_screensize;\n\nout vec2 state;\nout vec2 statedv;\n\nvoid main() {\n gl_PointSize = 1.;\n state = a_position / u_screensize;\n statedv = a_velocity;\n gl_Position = vec4( a_position / u_screensize * 2. - 1., 0., 1. );\n}"),frag:n("#version 300 es\nprecision highp float;\n#define GLSLIFY 1\n\nin vec2 state;\nin vec2 statedv;\n\nuniform float u_scale;\n\nout vec4 color;\n\nvoid main() {\n color = vec4(1, 0, clamp(statedv, -1e4, 1e4)) * u_scale;\n}"),count:r,mode:e.POINTS}),bn.fb=d(e,{width:an.mapSize,height:an.mapSize,tiling:e.REPEAT,type:e.FLOAT,internalFormat:e.RGBA32F,singular:!0}),bn.blur=cn(e)};const hn=n=>{bn.renderer.bindVAOs(),n.bindVertexArray(Nn.renderer.readTFB),n.bindFramebuffer(n.FRAMEBUFFER,bn.fb.read.fb),bn.renderer.bindUniform("u_screensize",[an.height,an.height]),bn.renderer.bindUniform("u_scale",an.mapScale),n.clear(n.DEPTH_BUFFER_BIT),n.clear(n.DEPTH_BUFFER_BIT|n.COLOR_BUFFER_BIT),n.enable(n.BLEND),n.blendEquationSeparate(n.FUNC_ADD,n.FUNC_ADD),n.blendFuncSeparate(n.ONE,n.ONE,n.ONE,n.ONE),bn.renderer.render(an.mapSize,an.mapSize),n.disable(n.BLEND),bn.fb.swap(),bn.blurTexture=mn(n,bn.fb.read.targetTexture,bn.blur,an.mapSize,an.mapSize)};const xn=c(),yn=new Float32Array([-1,-1,3,-1,-1,3]),Tn=new Float32Array([0,0,2,0,0,2]);let En=an.numSpots,Rn=an.sunPos[0],Fn=an.sunPos[1],Un=an.sunRad,wn="const vec4 spots["+En+"] = vec4["+En+"](";const An={},zn=e=>{let r,t;for(let n=0;n<En;n++){let e=Fn+1*xn.random_num(-Un,Un),o=xn.random_num(.05,.8)*Un;xn.random_bool(.5)&&(o=-o);let a=Rn+o,i=Math.pow(xn.random_dec(),3)*Un*.7+6,s=xn.random_num(-4,4);n%2==1&&(e=t+xn.random_num(-50,50),a=r+xn.random_num(-20,20)),r=a,t=e,wn+="vec4("+a+","+e+","+i+","+s+")",wn+=n<En-1?", ":");"}An.renderer=s(e,{vert:n(sn),frag:n("#version 300 es\nprecision highp float;\n#define GLSLIFY 1\n\nuniform vec2 u_sunPos;\nuniform float u_sunRad;\nuniform int u_numForces;\nuniform int u_numSpots;\n\nuniform vec2 u_res;\nuniform int u_eventId;\nuniform vec2 u_nOff;\n\nout vec4 color;\n\n#define PI 3.1415926\n#define TAU 6.2831853\n\n%%sunspots%%\n\nvec3 sdgCircle( in vec2 p, in float r ) {\n float d = length(p);\n return vec3( d-r, p/d );\n}\n\nfloat smin( float a, float b, float k ){\n float res = exp2( -k*a ) + exp2( -k*b );\n return -log2( res )/k;\n}\n\nvec3 sdgSmoothMin( in vec3 a, in vec3 b, in float k ){\n float h = max(k-abs(a.x-b.x),0.0);\n float m = 0.25*h*h/k;\n float n = 0.50* h/k;\n return vec3( min(a.x, b.x) - m, \n mix(a.yz, b.yz, (a.x<b.x)?n:1.0-n) );\n}\n\nfloat getHaversine( vec2 p0, vec2 p1 ){\n vec2 c = u_sunPos;\n float sr = u_sunRad;\n float d0 = distance( c, p0 );\n float d1 = distance( c, p1 );\n float r0 = clamp( d0/sr, 0.0, 1.0 );\n float r1 = clamp( d1/sr, 0.0, 1.0 );\n\n r0 = pow( 1.0 - r0, 0.25 ) * sr * 2.0;\n r1 = pow( 1.0 - r1, 0.25 ) * sr * 2.0;\n\n vec3 ps0 = vec3( p0, r0 );\n vec3 ps1 = vec3( p1, r1 );\n\n float hd = distance( ps0, ps1 );\n return hd;\n}\n\n// Hash without Sine\n// MIT License...\n// Copyright (c)2014 David Hoskins.\n\nfloat hash12( vec2 p ){\n\tvec3 p3 = fract(vec3(p.xyx) * .1031);\n p3 += dot(p3, p3.yzx + 33.33);\n return fract((p3.x + p3.y) * p3.z);\n}\n\nvec4 getForceData( vec2 p, float sr ){\n vec2 c = u_sunPos;\n float t = hash12( p ) * TAU;\n float r = sr - hash12( p + u_nOff ) * sr * 0.05;\n float x = c.x + cos( t ) * r;\n float y = c.y + sin( t ) * r;\n float f = hash12( p * vec2( 155.0 ) + u_nOff ) - 0.5;\n\n return vec4( x, y, hash12( p + vec2( 2.3, 5.6 ) ), f );\n}\n\nvoid main() {\n vec2 dirToSun = u_sunPos - gl_FragCoord.xy;\n vec3 sunSdg = sdgCircle( dirToSun, u_sunRad );\n float sunDist = sunSdg.x;\n\n float myDist = 1000000.0;\n vec3 mySdg = vec3( 100000.0, 0.0, 0.0 ); \n\tvec2 myVel = vec2( 0.0, 0.0 );\n\tfloat myF = 0.0;\n float myR = 0.0;\n\tvec2 p0 = gl_FragCoord.xy;\n\n if( sunDist > 0.0 ){\n for( int i=0; i<u_numForces; i++ ){\n float u = hash12( vec2( float( i ) * 3.3 + 11.4, 0.5 ) );\n float v = hash12( vec2( float( i ) * 5.5 + 17.5, 0.5 ) );\n vec4 forceData = getForceData( vec2( u, v ) * 100.0, u_sunRad );\n vec2 p1 = forceData.xy;\n float r = forceData.z;\n float f = forceData.w;\n\n vec2 dir \t\t= p0 - p1;\n float dist \t\t= length( dir );\n vec2 dirNorm = normalize( dir );\n float distSq = dist * dist;\n float invDistSq = 1.0 / ( distSq + r );\n\n myVel += dirNorm * invDistSq * 5000.0 * f;\n\n if( dist < myDist ){\n myDist = dist;\n myF = f;\n }\n }\n } else {\n for( int i=0; i<u_numSpots; i++ ){\n vec4 spot = spots[i];\n vec2 p1 = spot.xy;\n float r = spot.z;\n float f = spot.w;\n\n vec2 dir \t\t= p0 - p1;\n float dist = getHaversine( p0, p1 );\n vec3 sdg = sdgCircle( dir, r );\n vec2 dirNorm = normalize( dir );\n float distSq = dist * dist;\n float invDistSq = 1.0 / ( distSq + r );\n sdg.x = dist;\n mySdg = sdgSmoothMin( sdg, mySdg, u_sunRad * 0.05 );\n myF = smin( myF, f, 35.0 ) * sign( f );\n myR = smin( myR, r, 35.0 );\n myVel += dirNorm * invDistSq * 500.0 * f;\n }\n myDist = mySdg.x;\n }\n \n \tcolor = vec4( myVel.x, myVel.y, myDist, myF );\n}").replace("%%sunspots%%",wn),attributes:{position:{data:yn,size:2},uv:{data:Tn,size:2}},count:3}),An.fb=d(e,{width:an.height,height:an.height,type:e.FLOAT,internalFormat:e.RGBA32F,tiling:e.REPEAT})},Pn=n=>{An.renderer.bindVAOs(),n.bindFramebuffer(n.FRAMEBUFFER,An.fb.write.fb),n.activeTexture(n.TEXTURE0),n.bindTexture(n.TEXTURE_2D,An.fb.read.targetTexture),An.renderer.bindUniform("u_framebuffer",0),An.renderer.bindUniform("u_sunPos",an.sunPos),An.renderer.bindUniform("u_sunRad",an.sunRad),An.renderer.bindUniform("u_numForces",an.numForces),An.renderer.bindUniform("u_numSpots",an.numSpots),An.renderer.bindUniform("u_res",[An.fb.width,An.fb.height]),An.renderer.bindUniform("u_eventId",an.eventId),An.renderer.bindUniform("u_nOff",an.nOff),An.renderer.render(An.fb.width,An.fb.height),An.fb.swap()};const Sn=new Float32Array([-1,-1,3,-1,-1,3]),Dn=new Float32Array([0,0,2,0,0,2]),In={},Mn=e=>{In.renderer=s(e,{vert:n(sn),frag:n("#version 300 es\nprecision highp float;\n#define GLSLIFY 1\n\nuniform vec2 u_res;\nuniform float u_rf0;\nuniform float u_rf1;\nuniform vec2 u_ruv;\n\nout vec4 color;\n\n#define PI 3.14159\n#define TAU 6.28318\n\n#define OCTAVES 8\n#define UI0 1597334673U\n#define UI1 3812015801U\n#define UI2 uvec2(UI0, UI1)\n#define UIF (1.0 / float(0xffffffffU))\nfloat hash12(vec2 p){\n\tuvec2 q = uvec2(ivec2(p)) * UI2;\n\tuint n = (q.x ^ q.y) * UI0;\n\treturn float(n) * UIF;\n}\n\nfloat hermite(float t)\n{\n return t*t*(3.0-2.0*t);\n}\n\nfloat noise(vec2 co, float frequency)\n{\n vec2 v = vec2(co.x * frequency, co.y * frequency);\n\n float ix1 = floor(v.x);\n float iy1 = floor(v.y);\n float ix2 = floor(v.x + 1.0);\n float iy2 = floor(v.y + 1.0);\n\n float fx = hermite(fract(v.x));\n float fy = hermite(fract(v.y));\n\n float fade1 = mix(hash12(vec2(ix1, iy1)), hash12(vec2(ix2, iy1)), fx);\n float fade2 = mix(hash12(vec2(ix1, iy2)), hash12(vec2(ix2, iy2)), fx);\n\n return mix(fade1, fade2, fy);\n}\n\nfloat pnoise(vec2 co, float freq, int steps, float persistence)\n{\n float value = 0.0;\n float ampl = 1.0;\n float sum = 0.0;\n for(int i=0 ; i<steps ; i++)\n {\n sum += ampl;\n value += noise(co, freq) * ampl;\n freq *= 2.0;\n ampl *= persistence;\n }\n return value / sum;\n}\n\nvoid main() {\n vec2 frag = gl_FragCoord.xy;\n vec2 uv = frag / u_res;\n vec2 off = vec2( u_rf0, u_rf1 );\n float c0 = pnoise( uv + off * 1.0, 3.0, OCTAVES, 0.6 );\n float c1 = pnoise( uv + off * 2.0, 8.0, OCTAVES, 0.6 );\n float c2 = pnoise( uv + off * 3.0, 20.0, OCTAVES, 0.6 );\n float c3 = pnoise( uv + off * 4.0, 100.0, OCTAVES, 0.6 );\n vec4 clouds = vec4( c0, c1, c2, c3 );\n color = clouds;\n}"),attributes:{position:{data:Sn,size:2},uv:{data:Dn,size:2}},count:3}),In.fb=d(e,{width:an.height,height:an.height,type:e.FLOAT,internalFormat:e.RGBA16F,tiling:e.REPEAT})},Bn=n=>{In.renderer.bindVAOs(),n.bindFramebuffer(n.FRAMEBUFFER,In.fb.write.fb),n.activeTexture(n.TEXTURE0),n.bindTexture(n.TEXTURE_2D,In.fb.read.targetTexture),In.renderer.bindUniform("u_framebuffer",0),In.renderer.bindUniform("u_res",[In.fb.width,In.fb.height]),In.renderer.bindUniform("u_rf0",an.rf0),In.renderer.bindUniform("u_rf1",an.rf1),In.renderer.bindUniform("u_ruv",[123.45*an.rf0,123.45*an.rf1]),In.renderer.render(In.fb.width,In.fb.height),In.fb.swap()},Cn=new Float32Array([-1,-1,3,-1,-1,3]),Ln=new Float32Array([0,0,2,0,0,2]),On={},Xn=e=>{On.renderer=s(e,{vert:n(sn),frag:n("#version 300 es\nprecision highp float;\n#define GLSLIFY 1\n\nuniform sampler2D u_forces;\nuniform sampler2D u_noiseClouds;\n\nuniform vec2 u_res;\nuniform float u_sunRad;\nuniform vec2 u_sunPos;\nuniform float u_rf0;\nuniform float u_rf1;\nuniform vec2 u_ruv;\n\nunif