Guest User

Acid CSS fix for non proportional displays

a guest
Nov 3rd, 2011
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <html><head><style>img{position:absolute;display:none;}
  2. canvas{position:absolute; height:98%;width:99%}
  3. </style></head><body>
  4. <canvas id='c' ></canvas></body>
  5. <script>var inittime=Date.now();
  6. var starttime=Date.now()
  7. const frcount=30
  8. const maxcolor=0xff//0xd4//0xe0 //best effect e0:-31 -81 -0
  9. const maxcolor2=2*maxcolor//0xe0 //best effect e0:-31 -81 -0
  10. const da=[-maxcolor,maxcolor];//set D index -31 -81 -0
  11.  
  12. var ic,co,sum,bug=0;
  13. function check(){ if(!bug){bug=1;addtm(" OK ")}}
  14. function checkstr(str){ if(!bug){bug=1;addtm(str+"..")}}
  15. function checks(str){ if(!frame &&!flag){addtm(str)}}
  16. function addtm(str){document.title+=Date.now()-starttime+str;starttime=Date.now()}
  17. function dump(a)document.writeln(a.toString())
  18. abs=Math.abs
  19.  
  20.  
  21. //if  set to window w/h Firefox can clip the edges of canvas
  22. var w =window.innerWidth-8;//avoid canvas clipping
  23. const unroll=4;
  24. var h = window.innerHeight-16;
  25. w=w-w%unroll;
  26.  
  27. var halfantiw=w*0.0625;//w*h zoom factors
  28. var halfantih=h*0.0625;
  29.  
  30. var canvas3=document.getElementById('c');
  31. var context=canvas3.getContext("2d");
  32. canvas3.height=h;
  33. canvas3.width=w;
  34. const size=w*h*4
  35. var elsize=w*h;elsize+=(4-(elsize%4))
  36. var cache=[]
  37. var wint=[];
  38. addtm(":init,")
  39. for(i=0;i<frcount;i++){//merged pixel storage
  40. wint[i]=Uint32Array(ArrayBuffer(elsize));}
  41. addtm(":cache,")
  42. /*
  43. function fastcos(x){
  44. var xsum=x+pihalf;
  45. xsum-=((((xsum*api2)|0))*pi2)
  46. xsum-=(pi2*((xsum*api)|0) )
  47. //var //var ab=xsum*((((xsum>=0)|0)<<1)-1)
  48. xsum=xsum*qqpi*(pi-abs(xsum));
  49. return xsum}
  50.  
  51. function fastsin(x){
  52. var xsum=x;
  53. xsum-=((((xsum*api2)|0))*pi2)
  54. xsum-=(pi2*((xsum*api)|0) )
  55. //var //var ab=xsum*((((xsum>=0)|0)<<1)-1)
  56. xsum=xsum*qqpi*(pi-abs(xsum));
  57. return xsum}
  58. */
  59.  
  60.  
  61. var off =0;
  62. var frame = 0;
  63. var flag=0;
  64. var pihalf=1.5707963267948966
  65. var pi2=6.283185307179586
  66. var pi=3.141592653589793
  67. var api=0.3183098861837907
  68. var pin=-3.141592653589793
  69. var pin2=-6.283185307179586
  70. var api2=0.15915494309189535
  71. var qpi=1.2732395447351628
  72. var nqqpi=-0.4052847345693511
  73. var qqpi=0.4052847345693511
  74. var pi8=25.132741228718345
  75. var pi4=12.566370614359172
  76. var pi6=18.84955592153876
  77. var pi12=37.69911184307752
  78. var pi10=31.41592653589793
  79. var pin12=-37.69911184307752
  80. /*
  81.  
  82.  
  83. */
  84. var xcomcoss=Array(frcount)
  85. var xcomsins=Array(frcount)
  86. for(var co=0;co<frcount;co++){
  87.  preycache=pihalf+(co*0.20943951023931953);
  88. var xsum=preycache+pihalf;
  89. xsum-=((((xsum*api2)|0))*pi2)
  90. xsum-=(pi2*((xsum*api)|0) )
  91. //var //var ab=xsum*((((xsum>=0)|0)<<1)-1)
  92. xsum=xsum*qqpi*(pi-abs(xsum));
  93. xcomcoss[co]=xsum;
  94. var xsum=preycache;
  95. xsum-=((((xsum*api2)|0))*pi2)
  96. xsum-=(pi2*((xsum*api)|0) )
  97. //var //var ab=xsum*((((xsum>=0)|0)<<1)-1)
  98. xsum=xsum*qqpi*(pi-abs(xsum));
  99. xcomsins[co]=xsum
  100. }
  101.  
  102. var i,preycache;
  103. var preyfsin1cos=Array(h);
  104. var preyfsin2cos=Array(h);
  105. var preyfsin3cos=Array(h);
  106. var preyfsin1sin=Array(h);
  107. var preyfsin2sin=Array(h);
  108. var preyfsin3sin=Array(h);
  109.  
  110. for(i=0;i<h;i++){
  111. preycache=i*0.125-halfantih;
  112. xsum=preycache*0.4338837391175581+pihalf;
  113. xsum-=((((xsum*api2)|0))*pi2)
  114. xsum-=(pi2*((xsum*api)|0) )
  115.  //var ab=xsum*((((xsum>=0)|0)<<1)-1)
  116. xsum=xsum*qqpi*(pi-abs(xsum));
  117. preyfsin1cos[i]=xsum;
  118.  
  119.  xsum=preycache*0.7818314824680298+pihalf;
  120. xsum-=((((xsum*api2)|0))*pi2)
  121. xsum-=(pi2*((xsum*api)|0) )
  122.  //var ab=xsum*((((xsum>=0)|0)<<1)-1)
  123. xsum=xsum*qqpi*(pi-abs(xsum));
  124. preyfsin2cos[i]=xsum
  125.  
  126.  xsum=preycache*0.9749279121818236+pihalf;
  127. xsum-=((((xsum*api2)|0))*pi2)
  128. xsum-=(pi2*((xsum*api)|0) )
  129.  //var ab=xsum*((((xsum>=0)|0)<<1)-1)
  130. xsum=xsum*qqpi*(pi-abs(xsum));
  131. preyfsin3cos[i]=xsum;
  132.  
  133.  xsum=preycache*0.4338837391175581;
  134. xsum-=((((xsum*api2)|0))*pi2)
  135. xsum-=(pi2*((xsum*api)|0) )
  136.  //var ab=xsum*((((xsum>=0)|0)<<1)-1)
  137. xsum=xsum*qqpi*(pi-abs(xsum));
  138. preyfsin1sin[i]=xsum;
  139.  
  140.  xsum=preycache*0.7818314824680298;
  141. xsum-=((((xsum*api2)|0))*pi2)
  142. xsum-=(pi2*((xsum*api)|0) )
  143.  //var ab=xsum*((((xsum>=0)|0)<<1)-1)
  144. xsum=xsum*qqpi*(pi-abs(xsum));
  145. preyfsin2sin[i]=xsum;
  146.  
  147.  xsum=preycache*0.9749279121818236;
  148. xsum-=((((xsum*api2)|0))*pi2)
  149. xsum-=(pi2*((xsum*api)|0) )
  150.  //var ab=xsum*((((xsum>=0)|0)<<1)-1)
  151. xsum=xsum*qqpi*(pi-abs(xsum));
  152. preyfsin3sin[i]=xsum
  153. };//fsin1
  154. addtm(":presin,")
  155. var prexs1cos=Array(w);
  156. var prexs2cos=Array(w);
  157. var prexs3cos=Array(w);
  158. var hprecos=Array(w)
  159. var hpresin=Array(w)
  160.  
  161. for(i=0;i<w;i++){
  162. preycache=i*0.125 - halfantiw
  163. var xsum=preycache;
  164. xsum-=((((xsum*api2)|0))*pi2)
  165. xsum-=(pi2*((xsum*api)|0) )
  166. //var //var ab=xsum*((((xsum>=0)|0)<<1)-1)
  167. xsum=xsum*qqpi*(pi-abs(xsum));
  168. hpresin[i]=xsum*0.5
  169. var xsum=preycache+pihalf;
  170. xsum-=((((xsum*api2)|0))*pi2)
  171. xsum-=(pi2*((xsum*api)|0) )
  172. //var //var ab=xsum*((((xsum>=0)|0)<<1)-1)
  173. xsum=xsum*qqpi*(pi-abs(xsum));
  174. hprecos[i]=xsum*0.5
  175. var xsum=preycache*0.9009688679024191+pihalf;
  176. xsum-=((((xsum*api2)|0))*pi2)
  177. xsum-=(pi2*((xsum*api)|0) )
  178. //var //var ab=xsum*((((xsum>=0)|0)<<1)-1)
  179. xsum=xsum*qqpi*(pi-abs(xsum));
  180. prexs1cos[i]=xsum
  181. var xsum=preycache*0.6234898018587336+pihalf;
  182. xsum-=((((xsum*api2)|0))*pi2)
  183. xsum-=(pi2*((xsum*api)|0) )
  184. //var //var ab=xsum*((((xsum>=0)|0)<<1)-1)
  185. xsum=xsum*qqpi*(pi-abs(xsum));
  186. prexs2cos[i]=xsum
  187. var xsum=preycache*0.22252093395631445+pihalf;
  188. xsum-=((((xsum*api2)|0))*pi2)
  189. xsum-=(pi2*((xsum*api)|0) )
  190. //var //var ab=xsum*((((xsum>=0)|0)<<1)-1)
  191. xsum=xsum*qqpi*(pi-abs(xsum));
  192. prexs3cos[i]=xsum
  193. }
  194. addtm(":prex,")
  195. var prodxf1=Array(h)
  196. var prodxs1=Array(h)
  197. var p,p2,p3,p4,p5,p6,i,co
  198. var pc1,pc2,pc3,pc4,pc5,pc6
  199. var ec1,ec2,ec3,xp,xn,temp,temp2,vc,vc2;
  200. for( i=0;i<h;i++){
  201. prodxf1[i]=Array(w);
  202. p=prodxf1[i];
  203. prodxs1[i]=Array(w);
  204. p4=prodxs1[i]
  205. pc1=preyfsin1cos[i];
  206. pc2=preyfsin2cos[i];
  207. pc3=preyfsin3cos[i];
  208. pc4=preyfsin1sin[i];
  209. pc5=preyfsin2sin[i];
  210. pc6=preyfsin3sin[i];
  211. for(co=0;co<w;co++){
  212. ec1=prexs1cos[co]
  213. ec2=prexs2cos[co]
  214. ec3=prexs3cos[co]
  215. p[co]=pc1*ec1+pc2*ec2+pc3*ec3+hprecos[co];
  216. p4[co]=pc4*ec1+pc5*ec2+pc6*ec3+hpresin[co];;}}
  217.  
  218.  
  219. addtm(":prod,")
  220.  
  221. //===========REDRAW=================
  222.  
  223.  
  224. function redraw(){
  225. var d1,d2,d3,d4,d5,d6,d7,d8
  226. var xf1,xs1,y,x,i,intload,xfracos,xfrasin
  227.  
  228. var rep1,rep2,rep3,rep4,rep5,rep6,rep7,rep8;
  229. var temp1,temp2,temp3,temp4,temp5,temp6,temp7,temp8;
  230.  
  231. intload=wint[frame];
  232. xfracos=xcomcoss[frame];
  233. xfrasin=xcomsins[frame];
  234. for(var y=0,i=0;y<h;y++){
  235. xf1=prodxf1[y];xs1=prodxs1[y];
  236. x=0;
  237. while(x<w) {//unroll more than 8 muls does not improve speed.
  238.  rep1=3.5+xf1[x]*xfracos-xs1[x++]*xfrasin
  239.  rep2=3.5+xf1[x]*xfracos-xs1[x++]*xfrasin
  240.  rep3=3.5+xf1[x]*xfracos-xs1[x++]*xfrasin
  241.  rep4=3.5+xf1[x]*xfracos-xs1[x++]*xfrasin
  242.  rep5=3.5+xf1[x]*xfracos-xs1[x++]*xfrasin
  243.  rep6=3.5+xf1[x]*xfracos-xs1[x++]*xfrasin
  244.  rep7=3.5+xf1[x]*xfracos-xs1[x++]*xfrasin
  245.  rep8=3.5+xf1[x]*xfracos-xs1[x++]*xfrasin
  246.  temp1=(rep1|0)
  247.  temp2=(rep2|0)
  248.  temp3=(rep3|0)
  249.  temp4=(rep4|0)
  250.  temp5=(rep5|0)
  251.  temp6=(rep6|0)
  252.  temp7=(rep7|0)
  253.  temp8=(rep8|0)
  254. //avs ( -1 +1:0 - 1.1)=(0.1 +1:0)=(1.1:0.1)=1.1 :0.1
  255. //avs ( 1- +1:0 - 1.1)=(-0.1 +1:0)=(0.9:-0.1)=0.9:0.1
  256. d1=(abs(temp1+(temp1&1)-rep1)*maxcolor)
  257. d2=(abs(temp2+(temp2&1)-rep2)*maxcolor)
  258. d3=(abs(temp3+(temp3&1)-rep3)*maxcolor)
  259. d4=(abs(temp4+(temp4&1)-rep4)*maxcolor)
  260. d5=(abs(temp5+(temp5&1)-rep5)*maxcolor)
  261. d6=(abs(temp6+(temp6&1)-rep6)*maxcolor)
  262. d7=(abs(temp7+(temp7&1)-rep7)*maxcolor)
  263. d8=(abs(temp8+(temp8&1)-rep8)*maxcolor)
  264. //index:store index only
  265. intload[i]=(d1)|(d2<<8)|(d3<<16)|(d4<<24)
  266. intload[i+1]=(d5)|(d6<<8)|(d7<<16)|(d8<<24)
  267. ++i;++i; }}}
  268. while(frame<frcount){redraw();frame++;}
  269. //Image creation after redraw
  270. if(frame==frcount){addtm(":redraw,");dv=Date.now()
  271. var dp,tempconv,intpixels, op,c;
  272. //new render conversion
  273. var RGB=[];var ic,ir,ig,ib;
  274. for(var ic=0;ic<maxcolor;ic++){
  275. // old formula for static purple:R=d*x88 G=D*x56 B=D*xa7
  276. //new formula 0-0xeo:x-31>0?x-31,x-81>0?x-81,x
  277. ir=(ic|0)-31;ir*=ir>2;
  278. ig=(ic|0)-81;ig*=ig>8;ig=ig<<8
  279. ib=(ic)<<16
  280. //RGB[ic]=ir<<24|ig<<16|ic<<8|0xff
  281. RGB[ic]=(ir|ib|ig)|0xff000000;//
  282. }
  283. //bitmap generator: 4 times less memory vs canvas
  284.  
  285. for(i=0;i<frcount;i++){//Create Image From IndexFills
  286. cache[i]={};
  287. cache[i].width=w;
  288. cache[i].height=h;
  289. cache[i].data=Uint8ClampedArray(ArrayBuffer(size));
  290. tempconv=Uint32Array(cache[i].data.buffer)
  291. intpixels=Uint8Array(wint[i].buffer);//data:4
  292. op=0,c=0;
  293. while(c<elsize){
  294. dp=intpixels[c++]//255byte D1 index
  295. tempconv[op++]=RGB[dp]}
  296. //delete(wint[i])
  297. // reduce memory use by removing index fills
  298. }
  299. dispframe()
  300. ;}
  301.  
  302. function dispframe(){ //display cached frames
  303. if(++frame >= frcount){frame = 0;}
  304. context.putImageData(cache[frame],0,0);
  305. window.setTimeout(dispframe,40);}
  306.  
  307. document.title+=(dv-inittime)+(":total");
  308. </script></html>
  309.  
Advertisement
Add Comment
Please, Sign In to add comment