memoscan
← all memos

Memo 0x7440d9d5…4e2f62 on Ethereum

let useA,prngA,prngB; class Random { constructor() { useA = false; let sfc32 = function (uint128Hex) { let a = parseInt(uint128Hex.substr(0, 8), 16); let b = parseInt(uint128Hex.substr(8, 8), 16); let c = parseInt(uint128Hex.substr(16, 8), 16); let d = parseInt(uint128Hex.substr(24, 8), 16); return function () { a |= 0; b |= 0; c |= 0; d |= 0; let t = (((a + b) | 0) + d) | 0; d = (d + 1) | 0; a = b ^ (b >>> 9); b = (c + (c << 3)) | 0; c = (c << 21) | (c >>> 11); c = (c + t) | 0; return (t >>> 0) / 4294967296; }; }; prngA = new sfc32(tokenData.hash.substr(2, 32)); prngB = new sfc32(tokenData.hash.substr(34, 32)); for (let i = 0; i < 1e6; i += 2) { prngA(); prngB(); } } random_dec() { useA = !useA; return useA ? prngA() : prngB(); } } function rnd() { return R.random_dec() } function vecscl(v,k) { let w=[]; for (let i=0; i<v.length; i++) { w[i] = v[i]*k; } return w } function clamp(x) { return Math.max(0,Math.min(1,x)); } function dot2(x,y) { return x[0]*y[0]+x[1]*y[1]; } if (GET.hash) { tokenData.hash = GET.hash; } let mintn = tokenData.tokenId%1000000; let hashlist = [ "0xa13b49485299cc1d0a337166703adaa84d16afdd7f967817d97cb12a12261002", "0x646d6cae9d01d922825bd8f5f40fdb820299b3582fedac9b4a540972ef885f44", "0x3f4f04b90d31bee7e4750fda24cecbb9c674344aaddcf2de91e4e1a377ba35f1", "0x90b70525cb642187a6e0f56018a42ec3f419b2f7c544a12184c331b2797812de", "0x26e0b3f96a81f1c56858d6011a8f60681498cffda232093f4dc1b24ae80d01ec", "0x49abdd5f90e662835b83e7eb4fe993de9866a0d0b4d9f701fff94338a0489d49", "0x1a9f7d7cb6ca528846d9b6387a8988d8f67b5d36de0a991a36cb9292672294b7", "0x22c5d01cd9df91ebe1aaaadb92facd9bbb618625e963da7c1c3ec6c862b19955", "0x6b8bfb011ceaf50891a20ed882870f0d49d53c8e633a4f546e14e844ab993bc1", "0x2296bca26af467663a989ab9d733d90f22f8994bc72ec46801128fe77ae8722d" ]; (mintn>0)&&(mintn<11)&&(tokenData.hash=hashlist[mintn-1]); R = new Random(); let C,D,body,gl,Shader; document.body.style.backgroundColor = "#030303"; console.log("Atlas by Eric De Giuli"); C=({body}=D=document).createElement('canvas'); body.appendChild(C); gl=C.getContext('webgl2'); Shader=(typ,src)=>{ const s =gl.createShader(typ); gl.shaderSource(s,src); gl.compileShader(s); if (!gl.getShaderParameter(s, gl.COMPILE_STATUS)) { console.error(`Error compiling ${typ === gl.VERTEX_SHADER ? "vertex" : "fragment"} shader "${src}":`); console.log(gl.getShaderInfoLog(s)); } return s; } let simp,colp,vs,fs; let Lx,Ly,Nx,Ny; let hgt = rnd(); let Nm = (hgt<.15) ? 30 : (hgt<0.4) ? 60 : (hgt<0.6) ? 90 : (hgt<0.75) ? 120 : 240; const head = /\bHeadlessChrome\//.test(navigator.userAgent); let PI = 3.1415926; let pal,pj; let palp = [11,4,8,3,4,3,4,4,3,3,6,2,4,3,6,10,6,5,5,3]; const pinv = [0.7,1,1,1,0,1,0,1,1,1,1,1,0,1,0.5,0.5,0.5,0,0.4,1]; // prob of inv const plum = [0,0,1,0.4,0,1,0,1,0,0,0.4,1,0,0.4,0,0,0.4,0,0.4,1]; // prob of lum palp = vecscl(palp,1/97); let cumpal = []; cumpal[0]=0; for (let i=1; i<palp.length; i++) { cumpal[i]=cumpal[i-1]+palp[i-1]; } let st = 1; pj=1; let palr = rnd(); while (st<palp.length && cumpal[st]<palr) { st++; } st--; let pj2 = Math.floor(11*rnd()); let kl = new Float32Array(N); for (let i=0; i<N; i++) { kl[i]=rnd(); } kl[7]*=kl[7]*(3-2*kl[7]); kl[19]*=kl[19];//*(3-2*kl[19]); kl[28]*=kl[28]*(2-kl[28]); kl[29]*=kl[29]*(3-2*kl[29]); kl[5] = 1-kl[5]*kl[5]; kl[15]=1.-kl[15]*kl[15];//*kl[15]; let lum=0,inv=0,sqr = 0; let starch = 1; let rcorr = rnd(); sqr=rnd();sqr*=sqr; let horiz = (rnd()<.2) ? 1 : 0; let eclipa = rnd()<0.2 ? 0.1*Math.exp(rnd()) : 0; let eclipt = 6.2*rnd(); let cres = 1; eclipa = Math.max(0.1,eclipa); eclipa*=3; let anim=0; let esc = rnd()<.22 ? 1 : 0; inv = rnd()<pinv[st] ? 1 : 0; lum = rnd()<plum[st] ? 1 : 0; kl[9]=0.9; kl[11]=0.9;//+.1; kl[10]=0.9;//-.1; switch(st) { case 0: pj=6;pj2=7; horiz=0; (!inv)&&(kl[7]=-1-.5*kl[7]); kl[29]=.5; break; case 1: pj=11;pj2=7; kl[10]-=.4; kl[7]*=-2/3; Nm*=2; Nm=Math.min(240,Nm); break; case 2: pj=1;pj2=5; kl[10]-=.1; kl[7]/=3; (kl[0]<.2)&&(Nm=15); break; case 3: pj=1;pj2=0; kl[9]-=.1; kl[10]-=.15; kl[29]*=.5; Nm=Math.max(90,Nm); horiz=0; kl[7]*=-1; kl[2]*=2;kl[3]*=2;kl[4]*=2; break; case 4: pj=3;pj2=9; kl[29]*=.5; kl[7]=-1; kl[3]=.95; Nm=Math.min(120,Nm); horiz=0; break; case 5: pj=6;pj2=0; kl[9]-=.2; kl[29]*=.5; kl[7]=inv ? 0 : -1; esc=1; Nm*=2; break; case 6: pj=4;pj2=7; sqr=0; Nm/=2; Nm=Math.max(30,Nm); kl[19]=1.5; kl[29]=1; horiz=0; break; // nocturne case 7: pj=11;pj2=5; kl[10]-=.1; kl[7]=0; break; case 8: pj=11;pj2=4; kl[9]-=.2;kl[10]-=.2;kl[11]-=.2;kl[7]=-1; sqr*=sqr; horiz=0; Nm=Math.max(Nm/2,30); break; case 9: pj=11;pj2=0; kl[10]-=.2; sqr = 1-sqr*sqr; kl[7]=-1; Nm=Math.min(Nm,90); break; case 10: pj=0;pj2=0; Nm=Math.max(90,Nm); horiz=0; kl[29]= lum ? 0 : .5; break; case 11: pj=3;pj2=3; horiz=1; kl[3]=.97; kl[5]=0.1; kl[7]=1; rcorr=0; break; case 12: pj=2;pj2=3; kl[7]=1; horiz=0; break; case 13: pj=2;pj2=10; sqr/=2; kl[7]*=-1; kl[29]=.5; Nm = Math.min(90,Nm); horiz=0; break; case 14: pj=10;pj2=8; kl[9]-=.1*(1-2*inv); kl[10]-=.1; kl[7]*=-.8; horiz=0; break; case 15: pj=10;pj2=4; sqr/=2; kl[2]=1-kl[2]*kl[2]; (!inv)&&(kl[19]=2); (inv==1)&&(Nm=Math.max(60,Nm)); horiz=0; kl[29]*=0.5; break; case 16: pj=6;pj2=10; (!inv)&&(lum=0); (lum)&&(kl[29]=0); break; case 17: pj=7;pj2=12; kl[10]-=.2; kl[4]=0; kl[13]=1; kl[7]=-0.2; kl[19]=1; Nm=Math.max(30,Nm/2); break; case 18: pj=12;pj2=3; kl[29]=.5; esc=0; (inv)&&(lum=horiz=0); break; case 19: pj=12;pj2=6; kl[29]*=.5; esc=1; lum=1;kl[7]=0;horiz=0; Nm=Math.max(Nm,90); } (!lum)&&(esc=0); (esc)&&(Nm=Math.max(15,Nm/2)); (Nm<=20)&&(horiz=sqr=0); (starch==0)&&(lum=1); (lum==1)&&(rcorr=1-rcorr*rcorr*rcorr); (lum)&&(horiz=sqr=0); (horiz)&&(kl[21]=kl[29]=.5); (kl[15]<.3)&&(kl[29]=0.5); (lum&&Nm>100)&&(Nm/=2); if (GET.N) { Nm=GET.N; } if (innerWidth>innerHeight) { Ny = Nm; Nx = Math.floor(Nm*innerWidth/innerHeight); } else { Nx = Nm; Ny = Math.floor(Nm*innerHeight/innerWidth); } if (GET.a) { Ny=Nm;Nx=Math.floor(GET.a*Ny); } pal = new Uint8Array(10*4*2); for (let k=0; k<11; k++) { // which colour in palette for (let k2=0; k2<2; k2++) { // which palette let pp = (k2==0) ? pj : pj2; let kk = Math.min(k,pals[pp].length-1); pal[3*k+3*10*k2] = pals[pp][kk][0]; pal[3*k+3*10*k2+1] = pals[pp][kk][1]; pal[3*k+3*10*k2+2] = pals[pp][kk][2]; if (inv) { pal[3*k+3*10*k2] = (pal[3*k+3*10*k2]+180)%360; } //invert colour } } let kp,km,rand,randp,randn; rand = []; for (let i=0; i<Nrand; i++) { rand[i]=rnd(); } randp = []; for (let i=0; i<Nrand; i++) { randp[i]=rnd(); } randn = []; for (let i=0; i<Nrand; i++) { randn[i]=rnd(); } let k0=1; kp = new Float32Array(N); km = new Float32Array(N); for (let i=0; i<N; i++) { kp[i]=k0*rnd(); } kp[11]*=kp[11]; for (let i=0; i<N; i++) { km[i]=k0*rnd(); } let bg_h = (lum*.5+ pal[0]/255)%1; let bg_s = .5;//.65; //pal[1]/255*1.2; let bg_l = Math.pow(pal[2]/255,.75); let bg_r = Math.max(0,Math.min(1, Math.abs(bg_h*6.0-3.0)-1.0)); let bg_g = Math.max(0,Math.min(1, Math.abs((bg_h*6.0+4.0)%6-3.0)-1.0)); let bg_b = Math.max(0,Math.min(1, Math.abs((bg_h*6.0+2.0)%6-3.0)-1.0)); bg_r = bg_l + bg_s*(bg_r-.5)*(1-Math.abs(2.0*bg_l-1.0)); bg_g = bg_l + bg_s*(bg_g-.5)*(1-Math.abs(2.0*bg_l-1.0)); bg_b = bg_l + bg_s*(bg_b-.5)*(1-Math.abs(2.0*bg_l-1.0)); bg_b = Math.pow(bg_b,.4+.3*kp[0]); function setrand() { rand[0] = km[16]*3; rand[2] = km[17]*3; rand[37] = km[0]; rand[38] = kp[4]; rand[39] = bg_r; rand[40] = bg_g; rand[41] = bg_b; rand[42] = km[5] < .77 ? 1 : 0; rand[43] = km[6]; rand[44] = km[7]; rand[45] = lum; rand[46] = sqr; rand[47] = rcorr; rand[48] = horiz; rand[67] = eclipa; rand[68] = eclipt; rand[69] = cres; rand[88] = esc; } setrand(); let nx = 2+Math.floor(3*rnd()); let ny = 2+Math.floor(3*rnd()); let rr = rnd(); let n4 = Math.floor(Math.exp(4*rnd())); let rbg = Math.floor(19*rnd()); let rbgarr = [0,1,2,3,4,6,6,7,8,8,9,9,11,12,13,14,15,15,16]; rbg=rbgarr[rbg]; (rbg==1)&&(Nm=Math.min(60,Nm)); function ff1(x,r) { return r*2*kl[20]*2*Math.sin(x*rr*2*PI+kl[0])*Math.sin(x*rr*2*PI+kl[0]); } function ff2(x,r) { return r*2*kl[21]*2*Math.cos(x*rr*2*PI+kl[1])*Math.cos(x*rr*2*PI+kl[1]); } // initial conditions const tex0 = new Uint8Array(Nx*Ny*4); let th; for (let x = 0; x < Nx; x++) { for (let y = 0; y < Ny; y++) { let i = x+Nx*y; let r2 = (x-Nx/2)**2+(y-Ny/2)**2; r2/=(Nx*Nx+Ny*Ny)/4; switch(rbg) { case 0: r2 = Math.sin(x/nx)*Math.sin(y/ny)*Math.sin(25*r2)>.1+.5*rr; break; case 1: r2 = .25*Math.sin(2*x/Nx*nx*PI)*Math.sin(2*y/Ny*ny*PI)*Math.sin(25*r2)-0.5*rr; break; case 2: r2 = Math.sin(y*x/Nx*nx*PI)*Math.sin(y/Ny*ny*PI)*Math.sin(25*r2)-0.5*rr; break; case 3: r2 = Math.sin(y*x/Nx*nx*PI)*Math.sin(y/Ny*ny*PI)*Math.sin(2*(x-Nx/2)/(y-Ny/2)+1*(y-Ny/2)/(x-Nx/2))>0.5*rr; break; case 4: r2 = 1+Math.sin(Math.sin(x/Nx*n4)*y/Ny*nx*PI)*Math.sin(y/Ny*ny*PI)*Math.sin(2*(x-Nx/2)/(y-Ny/2)+1*(y-Ny/2)/(x-Nx/2))-0.5*rr; (r2!=r2)&&(r2=1); break; case 5: r2 = Math.sin(Math.sin(x/Nx*n4*PI)*y/Ny*(1-y/Ny)*ny*PI)*Math.sin(x/Nx*nx*PI)-0.6*rr; break; case 6: r2 = Math.sin(Math.sin(y/Ny*n4*PI)*x/Nx*(1-x/Nx)*nx*PI)*Math.sin(y/Ny*ny*PI)-0.6*rr; break; case 7: r2 = Math.sin(30*x/Nx*nx*PI)*Math.sin(x/Nx*nx*PI)>0.6*rr; break; case 8: r2 = Math.sin(30*x/Nx*nx*PI)*Math.sin(y/Ny*ny*PI)>0.6*rr; break; case 9: r2 *= .7*(Math.sin(20*(x/Nx-0.5)*nx)+Math.sin(2*(y/Ny-0.5))); break; case 10: r2 = 1+r2*Math.sin(20*r2*nx)-.3*rr; break; case 11: r2 = -1+Math.sin(r2*nx*Math.tan(n4*x/Nx+9*y/Ny))-.6*rr; break; case 12: th = Math.atan2(y-Ny/2,x-Nx/2); r2*=1+0.2*Math.cos(nx*th)*(1+0.6*Math.sin(nx/ny+3*nx*th)*(1+0.6*Math.cos(5*nx*th))); r2*=.72; break; case 14: r2=0.2+.8*rr; break; case 15: r2 = 10*Math.max(x/Nx/3,(1-x/Nx)/3); break; case 16: r2 = 10*Math.max(y/Ny/3,(1-y/Ny)/3); break; } tex0[4*i] = Math.floor(255*ff1(r2,rnd())); tex0[4*i+1] = Math.floor(255*ff2(r2,rnd()) ); tex0[4*i+2] = Math.floor(255*ff2(r2,rnd()) ); tex0[4*i+3] = Math.floor(255*ff1(r2,rnd()) ); } } dzp=dzc; let loc_a,loc_ac,loc_img,loc_img00,loc_img2,loc_img02,loc_res,loc_t,loc_tr,loc_rand,loc_palc,loc_kp,loc_km,loc_kl,loc_klc,loc_kv,loc_kw,loc_imgc,loc_imgc2,loc_imgcp,loc_imgc2p,loc_resc,loc_Lc,loc_tc,loc_randc,loc_aavg,loc_bavg,loc_dxy,loc_dxyc,loc_rc,loc_rcc; function thrower(prog) { if (!gl.getProgramParameter(prog, gl.LINK_STATUS)) { console.log(`Link failed:\n${gl.getProgramInfoLog(prog)}`); console.log(`VS LOG:\n${gl.getShaderInfoLog(vs)}`); console.log(`FS LOG:\n${gl.getShaderInfoLog(fs)}`); throw 'AARG DED'; } } simp = gl.createProgram(); // simulation program vs = Shader(gl.VERTEX_SHADER, src_vert); fs = Shader(gl.FRAGMENT_SHADER, src_simp); gl.attachShader(simp, vs); gl.attachShader(simp, fs); gl.linkProgram(simp); gl.useProgram(simp); thrower(simp); function gul(pr,lab) { return gl.getUniformLocation(pr,lab); } loc_img=gul(simp,'img'); loc_img00=gul(simp,'img00'); loc_img2=gul(simp,'img2'); loc_img02=gul(simp,'img02'); loc_res=gul(simp,'res'); loc_t =gul(simp,'t'); loc_tr =gul(simp,'tr'); loc_rand =gul(simp,'rand'); loc_kp =gul(simp,'kp'); loc_km =gul(simp,'km'); loc_kl =gul(simp,'kl'); loc_dxy =gul(simp,'dxy'); loc_rc =gul(simp,'rc'); let loc_mult =gul(simp,'mult'); gl.uniform1i(loc_img,0); gl.uniform1i(loc_img00,1); gl.uniform1i(loc_img2,2); gl.uniform1i(loc_img02,3); gl.uniform2f(loc_res,Nx,Ny); loc_a = gl.getAttribLocation(simp, "a"); gl.activeTexture(gl.TEXTURE0); gl.vertexAttribPointer(loc_a, 2, gl.FLOAT, false, 0, 0); gl.enableVertexAttribArray(loc_a); colp = gl.createProgram(); // colour program vs = Shader(gl.VERTEX_SHADER, src_vert); fs = Shader(gl.FRAGMENT_SHADER, src_colp); gl.attachShader(colp, vs); gl.attachShader(colp, fs); gl.linkProgram(colp); gl.useProgram(colp); thrower(colp); loc_imgc=gul(colp,'img'); loc_imgcp=gul(colp,'imgp'); loc_imgc2=gul(colp,'img2'); loc_imgc2p=gul(colp,'img2p'); loc_palc=gul(colp,'pal'); loc_resc=gul(colp,'res'); loc_Lc=gul(colp,'L'); loc_tc =gul(colp,'t'); loc_randc =gul(colp,'rand'); loc_dxyc =gul(colp,'dxy'); loc_rcc =gul(colp,'rc'); loc_klc =gul(colp,'kl'); let loc_mousec=gul(colp,'mouse'); gl.bindBuffer(gl.ARRAY_BUFFER, gl.createBuffer()); gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, 1.0, 1.0, -1.0, -1.0, -1.0]),gl.STATIC_DRAW); gl.uniform1i(loc_imgc,0); gl.uniform1i(loc_imgcp,2); gl.uniform1i(loc_imgc2,3); gl.uniform1i(loc_imgc2p,4); gl.uniform2f(loc_resc,Nx,Ny); loc_ac = gl.getAttribLocation(colp, "a"); //'a'); gl.activeTexture(gl.TEXTURE0); gl.vertexAttribPointer(loc_ac, 2, gl.FLOAT, false, 0, 0); gl.enableVertexAttribArray(loc_ac); let M=1; var isMobile = window.matchMedia("(hover: none)").matches; // no hovering let dpr=1; function resize_render() { let w=innerWidth, h=innerHeight, dpr=devicePixelRatio; C.width = M*w*dpr|0; C.height = M*h*dpr|0; if (head || f1==0) { Lx = Math.floor(C.width); Ly = Math.floor(C.height); } else {//if (f1==1 || isMobile) { C.requestFullscreen(); Lx = C.width; Ly=C.height; } C.style.width = w+'px'; C.style.height = h+'px'; gl.viewport((C.width-Lx)/2,(C.height-Ly)/2,Lx,Ly); render(); } function texset(wrap=gl.CLAMP_TO_EDGE,fil=gl.NEAREST) { //NEAREST) { gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, wrap); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, wrap); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, fil); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, fil); } let tex00,tex02,texA,texB,texA2,texB2,texC,fbA,fbB; tex00 = gl.createTexture(); gl.bindTexture(gl.TEXTURE_2D, tex00); gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, Nx, Ny, 0, gl.RGBA, gl.UNSIGNED_BYTE, tex0.subarray(0, Nx*Ny*4)); texset(gl.REPEAT,gl.LINEAR); tex02 = gl.createTexture(); gl.bindTexture(gl.TEXTURE_2D, tex02); gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, Nx, Ny, 0, gl.RGBA, gl.UNSIGNED_BYTE, 255-tex0.subarray(0, Nx*Ny*4)); texset(gl.REPEAT,gl.LINEAR); texA = gl.createTexture(); gl.bindTexture(gl.TEXTURE_2D, texA); gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, Nx, Ny, 0, gl.RGBA, gl.UNSIGNED_BYTE, tex0.subarray(0, Nx*Ny*4)); fbA = gl.createFramebuffer(); gl.bindFramebuffer(gl.FRAMEBUFFER, fbA); gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texA, 0); texset(); texB = gl.createTexture(); gl.bindTexture(gl.TEXTURE_2D, texB); gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, Nx, Ny, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); fbB = gl.createFramebuffer(); gl.bindFramebuffer(gl.FRAMEBUFFER, fbB); gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texB, 0); texset(); texA2 = gl.createTexture(); gl.bindTexture(gl.TEXTURE_2D, texA2); gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, Nx, Ny, 0, gl.RGBA, gl.UNSIGNED_BYTE, 255-tex0.subarray(0, Nx*Ny*4)); gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT1, gl.TEXTURE_2D, texA2, 0); texset(); texB2 = gl.createTexture(); gl.bindTexture(gl.TEXTURE_2D, texB2); gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, Nx, Ny, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT1, gl.TEXTURE_2D, texB2, 0); texset(); texC = gl.createTexture(); //colormap gl.bindTexture(gl.TEXTURE_2D, texC); gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGB, 10, 2, 0, gl.RGB, gl.UNSIGNED_BYTE, pal); texset(gl.REPEAT,gl.LINEAR); //texset(gl.CLAMP_TO_EDGE,gl.LINEAR); gl.useProgram(colp); gl.uniform1i(loc_palc, 1); //texture 1