Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

Acid - final release

Name: FrozenVoid 2011-10-28 11:50

Optimized quasicrystal code: full window size render ~17 seconds for 30 frames
http://pastebin.com/fjLQnbkB

Name: FrozenVoid !!mJCwdV5J0Xy2A21 2011-11-09 22:16

725ms minor changes
<html><head><style>html,body{width:100%;height:100%;margin:0px;}
</style></head><body><canvas id='c' ></canvas></body>
<script>//722ms new record
var inittime=Date.now();var starttime=inittime;
function addtm(str){document.title+=Date.now()-starttime+str;starttime=Date.now()}
function settm(str){document.title=Date.now()-starttime+str;starttime=Date.now()}
function dump(a)document.writeln(a.toString())
var abs=Math.abs
var cos=Math.cos
var sin=Math.sin
var w=window.innerWidth
var h =window.innerHeight
w=w-w%8;//unroll factor
var halfantiw=w*0.0625;
var halfantih=h*0.0625;
var h8=h*8
var w8=w*8;
var canvas3=document.getElementById('c');
var context=canvas3.getContext("2d");
canvas3.width=window.innerWidth;
canvas3.height=window.innerHeight;
const size=w*h*4
var elsize=w*h;elsize+=(4-(elsize%4))
var wint=[];
for(i=0;i<30;i++){wint[i]=Uint32Array(ArrayBuffer(elsize));}
var frame = 0;
var i,preycache;
var rs=Float64Array(ArrayBuffer(64));
var ns=Float64Array(ArrayBuffer(64));
var temps=Int32Array(ArrayBuffer(32))
var lvars=Int32Array(ArrayBuffer(32))
var fcos=Float64Array(ArrayBuffer(8*30));
var fsin=Float64Array(ArrayBuffer(8*30));

var preyfsin1cos=Float64Array(ArrayBuffer(h8))
var preyfsin2cos=Float64Array(ArrayBuffer(h8))
var preyfsin3cos=Float64Array(ArrayBuffer(h8))
var preyfsin1sin=Float64Array(ArrayBuffer(h8))
var preyfsin2sin=Float64Array(ArrayBuffer(h8))
var preyfsin3sin=Float64Array(ArrayBuffer(h8))

var prexs1cos=Float64Array(ArrayBuffer(w8))
var prexs2cos=Float64Array(ArrayBuffer(w8))
var prexs3cos=Float64Array(ArrayBuffer(w8))
var hprecos=Float64Array(ArrayBuffer(w8))
var hpresin=Float64Array(ArrayBuffer(w8))
var prodxf1=Array(h)
var prodxs1=Array(h)
for( i=0;i<h;i++){
prodxf1[i]=Float64Array(ArrayBuffer(w8));
prodxs1[i]=Float64Array(ArrayBuffer(w8));
}


for(i=0;i<30;i++){
fcos[i]=cos(i*0.20943951023931953)
fsin[i]=sin(i*0.20943951023931953)
}

var pc1,pc2,pc3
for(i=0;i<h;i++){
preycache=i*0.125-halfantih;
pc1=preycache*0.4338837391175581
pc2=preycache*0.7818314824680298
pc3=preycache*0.9749279121818236
preyfsin1cos[i]=cos(pc1)
preyfsin1sin[i]=sin(pc1)
preyfsin2cos[i]=cos(pc2)
preyfsin2sin[i]=sin(pc2)
preyfsin3cos[i]=cos(pc3)
preyfsin3sin[i]=sin(pc3)
}



for(i=0;i<w;i++){
preycache=i*0.125 - halfantiw
hpresin[i]=sin(preycache)*0.5
hprecos[i]=cos(preycache)*0.5
prexs1cos[i]=cos(preycache*0.9009688679024191)
prexs2cos[i]=cos(preycache*0.6234898018587336)
prexs3cos[i]=cos(preycache*0.22252093395631445)}

var p,p2,p3,p4,p5,p6,i,co
var pc1,pc2,pc3,pc4,pc5,pc6
var ec1,ec2,ec3;
for( i=0;i<h;i++){
p=prodxf1[i];
p4=prodxs1[i]
pc1=preyfsin1cos[i];
pc2=preyfsin2cos[i];
pc3=preyfsin3cos[i];
pc4=preyfsin1sin[i];
pc5=preyfsin2sin[i];
pc6=preyfsin3sin[i];
for(co=0;co<w;co++){
ec1=prexs1cos[co]
ec2=prexs2cos[co]
ec3=prexs3cos[co]
p[co]=pc1*ec1+pc2*ec2+pc3*ec3+hprecos[co];
p4[co]=pc4*ec1+pc5*ec2+pc6*ec3+hpresin[co];;}
}


function redraw(){
var xf1,xs1,y=lvars[0],x=lvars[1],i=lvars[2],intload=wint[frame],xfracos=lvars[3]=fcos[frame],xfrasin=lvars[4]=fsin[frame++];
var r1=rs[0],r2=rs[1],r3=rs[2],r4=rs[3],r5=rs[4],r6=rs[5],r7=rs[6],r8=rs[7];
var n1=ns[0],n2=ns[1],n3=ns[2],n4=ns[3],n5=ns[4],n6=ns[5],n7=ns[6],n8=ns[7];
var temp1=temps[0],temp2=temps[1],temp3=temps[2],temp4=temps[3],temp5=temps[4],temp6=temps[5],temp7=temps[6],temp8=temps[7];

for(var y=0,i=0;y<h;y++){xf1=prodxf1[y];xs1=prodxs1[y];
for(x=0;x<w;x+=8) {
r1=3.5+xf1[x]*xfracos-xs1[x]*xfrasin
r2=3.5+xf1[x+1]*xfracos-xs1[x+1]*xfrasin
r3=3.5+xf1[x+2]*xfracos-xs1[x+2]*xfrasin
r4=3.5+xf1[x+3]*xfracos-xs1[x+3]*xfrasin
r5=3.5+xf1[x+4]*xfracos-xs1[x+4]*xfrasin
r6=3.5+xf1[x+5]*xfracos-xs1[x+5]*xfrasin
r7=3.5+xf1[x+6]*xfracos-xs1[x+6]*xfrasin
r8=3.5+xf1[x+7]*xfracos-xs1[x+7]*xfrasin
 temp1=(r1|0)
 temp2=(r2|0)
 temp3=(r3|0)
 temp4=(r4|0)
 temp5=(r5|0)
 temp6=(r6|0)
 temp7=(r7|0)
 temp8=(r8|0)
n1=(abs(temp1+(temp1&1)-r1)*0xff)
n2=(abs(temp2+(temp2&1)-r2)*0xff)
n3=(abs(temp3+(temp3&1)-r3)*0xff)
n4=(abs(temp4+(temp4&1)-r4)*0xff)
n5=(abs(temp5+(temp5&1)-r5)*0xff)
n6=(abs(temp6+(temp6&1)-r6)*0xff)
n7=(abs(temp7+(temp7&1)-r7)*0xff)
n8=(abs(temp8+(temp8&1)-r8)*0xff)
intload[i++]=(n1)|(n2<<8)|(n3<<16)|(n4<<24)
intload[i++]=(n5)|(n6<<8)|(n7<<16)|(n8<<24); }}}
while(frame<30)redraw();
var RGB=[],ic,ir,ig,ib;
for(var ic=0;ic<0xff;ic++){
ir=ic-31;ir*=ir>2;ig=ic-81;ig*=ig>8;ig=ig<<8;ib=(ic)<<16
RGB[ic]=(ir|ig|ib)|0xff000000;}
var dispc=[];
window.requestAnimationFrame=window.requestAnimationFrame ||    window.webkitRequestAnimationFrame    || window.mozRequestAnimationFrame    || window.oRequestAnimationFrame    || window.msRequestAnimationFrame;
function dispframe(){if(++frame >= 30)frame = 0;
if(!dispc[frame]){dispc[frame]={width:w,height:h,data:Uint8ClampedArray(ArrayBuffer(size))};
var tv=Uint32Array(dispc[frame].data.buffer);
var intpixels=Uint8Array(wint[frame].buffer);
for(var op=0,c=0;c<elsize;){tv[op++]=RGB[intpixels[c++]];}
delete(wint[frame]);}
context.putImageData(dispc[frame],0,0);
window.requestAnimationFrame(dispframe);}
addtm("ms render");dispframe();
</script></html>

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List