From 307163a8ad9262cc86dde180a8baa9e4ba14ad07 Mon Sep 17 00:00:00 2001 From: TempleOS-bot Date: Tue, 31 Jan 2017 00:27:25 -0500 Subject: [PATCH] Nightly update (ISO SHA-1 38ac12b) --- TempleOSCD/0000Boot/0000Kernel.BIN.C | Bin 192080 -> 192080 bytes TempleOSCD/Adam/ADefine.HC | 2 +- TempleOSCD/Compiler/Compiler.BIN | Bin 192920 -> 192919 bytes TempleOSCD/Compiler/CompilerB.HH | 1 + TempleOSCD/Demo/AcctExample/Registry.HC | 2 +- TempleOSCD/Demo/Graphics/LightTable.HC | 140 +++++++++++++++++------- TempleOSCD/Doc/ChgLog.DD | 2 +- 7 files changed, 105 insertions(+), 42 deletions(-) diff --git a/TempleOSCD/0000Boot/0000Kernel.BIN.C b/TempleOSCD/0000Boot/0000Kernel.BIN.C index 9e8947e9bbba3ada6c25ec2eedb0fdf10e0876b1..d8c97417a651dec05c81181da5e3ab52893b2ba5 100644 GIT binary patch delta 205 zcmca`hx@`E?g=LBzQqlOS8TaAFJ!sMyqSmPWgKJs=5I->CD@|k<4ztD*u1=Y2^Y&$ zK3T@;3I&YflhfKRF)~cHY@fwap()EaIlfbI@{jgr7C9}50*T4z+XOeS=-AB2xMy=r zmv#+dC{QB2~FjGWt> JW;2}&0st8CPT~Ln delta 202 zcmca`hx@`E?g=LBd!GACUa{rgypZK0^JX5FmvM}3o4+NkmYDo!n(*c=)zi6HCi2NL zPFE;k6rY^dc8O7MvSs@$mU2y5#>w%Wij#k|H?zoUK@><#KHny|c}2%&M#kNnW4gQp z87FOCar+4mQ)b@gz87*)jJ?~}Ix)`YXFNUKH;A#Gv3L8~AVz+1#@_9BGZ~)=Gw$Dh zq?U273}gQGrdf=gMvQy6^PFX@XJ?W6EWcolor=WHITE; GrPrint(dc,0,0,"Mem:0x%X %,dMeg Scale:%0.3f (%d,%d)-->(%d,%d)", bmp_mem,bmp_mem/1024/1024,bmp_scale, map->width,map->height,bmp_width,bmp_height); - tmpp=p_root.next; - while (tmpp!=&p_root) { - dc->color=LTRED; - GrLine(dc,tmpp->p.x-TAIL*tmpp->v.x,tmpp->p.y-TAIL*tmpp->v.y, - tmpp->p.x,tmpp->p.y); - tmpp=tmpp->next; + GrPrint(dc,0,FONT_HEIGHT,"PhotonCnt:%d SnellCnt:%d",photon_cnt,snell_cnt); + for (i=0;icolor=LTRED; + GrLine(dc,tmpp->p.x-TAIL*tmpp->v.x,tmpp->p.y-TAIL*tmpp->v.y, + tmpp->p.x,tmpp->p.y); + tmpp=tmpp->next; + } + LBtr(&p_root_locks,i); } } @@ -56,23 +77,20 @@ U0 RayBurst(I64 x1,I64 y1,I64 x2,I64 y2) D3Unit(&v); D3Equ(&n,v.y,-v.x); - tmpp=CAlloc(sizeof(Photon)); + tmpp=PhotonNew; D3Copy(&tmpp->p,&p); D3Copy(&tmpp->v,&v); - QueIns(tmpp,p_root.last); for (i=2;i<=9;i+=3) { D3Mul(&n2,i,&n); - tmpp=CAlloc(sizeof(Photon)); + tmpp=PhotonNew; D3Add(&tmpp->p,&p,&n2); D3Copy(&tmpp->v,&v); - QueIns(tmpp,p_root.last); - tmpp=CAlloc(sizeof(Photon)); + tmpp=PhotonNew; D3Sub(&tmpp->p,&p,&n2); D3Copy(&tmpp->v,&v); - QueIns(tmpp,p_root.last); } } @@ -82,27 +100,31 @@ U0 RandomBurst() F64 é; Photon *tmpp; for (i=0;i<256;i++) { - tmpp=CAlloc(sizeof(Photon)); + tmpp=PhotonNew; D3Equ(&tmpp->p,Fs->pix_width*Rand,Fs->pix_height*Rand); é=2*ã*Rand; D3Equ(&tmpp->v,Cos(é),Sin(é)); - QueIns(tmpp,p_root.last); } } -U0 FindNormal(Photon *tmpp,I64 last,I64,CD3 *_normal) +U0 FindNormal(Photon *tmpp,CD3 *_normal) { - CD3 p1,p2,v,s,bmp_p; + CD3 p,p1,p2,v,s; F64 é=Arg(tmpp->v.x,tmpp->v.y),è; - D3Mul(&bmp_p,bmp_scale,&tmpp->p); - while (BmpPeek(bmp_p.x,bmp_p.y)==last) - D3AddEqu(&bmp_p,&tmpp->v); + D3Copy(&tmpp->p_snell_inhibit,&tmpp->p); + D3SubEqu(&tmpp->p,&tmpp->v); + D3Mul(&p,bmp_scale,&tmpp->p); + D3Copy(&p1,&p); + while (BmpPeek(p1.x,p1.y)==BLACK && D3DistSqr(&p,&p1)v); + D3Copy(&p,&p1); + D3Div(&tmpp->p,&p,bmp_scale); for (è=0;è<ã/2;è+=ã/bmp_norm_radius) { D3Equ(&s,Cos(é+ã-ã/4-è),Sin(é+ã-ã/4-è)); D3Mul(&v,bmp_norm_radius,&s); - D3Add(&p1,&bmp_p,&v); + D3Add(&p1,&p,&v); if (BmpPeek(p1.x,p1.y)!=BLACK) break; } @@ -112,7 +134,7 @@ U0 FindNormal(Photon *tmpp,I64 last,I64,CD3 *_normal) for (è=0;è<ã/2;è+=ã/bmp_norm_radius) { D3Equ(&s,Cos(é+ã+ã/4+è),Sin(é+ã+ã/4+è)); D3Mul(&v,bmp_norm_radius,&s); - D3Add(&p2,&bmp_p,&v); + D3Add(&p2,&p,&v); if (BmpPeek(p2.x,p2.y)!=BLACK) break; } @@ -141,7 +163,7 @@ U0 SnellsLaw(Photon *tmpp,I64 last,I64 next) n2=1.5; else n2=1.0; - FindNormal(tmpp,last,next,&normal); + FindNormal(tmpp,&normal); én=Arg(normal.x,normal.y); //dot=m1m2Cos(é); é1=ACos(D3Dot(&normal,&tmpp->v)); @@ -155,43 +177,73 @@ U0 SnellsLaw(Photon *tmpp,I64 last,I64 next) else é=éb; D3Equ(&tmpp->v,Cos(é),Sin(é)); + lock {snell_cnt++;} } U0 AnimateTask(I64) { - Photon *tmpp; + Photon *tmpp,*root=&p_root[Gs->num]; I64 last,next; while (TRUE) { - tmpp=p_root.next; - while (tmpp!=&p_root) { + while (!LBts(&p_root_locks,Gs->num)) + Yield; + tmpp=root->next; + while (tmpp!=root) { last=GrPeek(map,tmpp->p.x,tmpp->p.y); D3AddEqu(&tmpp->p,&tmpp->v); - if (tmpp->p.x<=0) tmpp->v.x=-tmpp->v.x; - if (tmpp->p.x>=map->width) tmpp->v.x=-tmpp->v.x; - if (tmpp->p.y<=0) tmpp->v.y=-tmpp->v.y; - if (tmpp->p.y>=map->height) tmpp->v.y=-tmpp->v.y; + if (tmpp->p.x<0) { + tmpp->p.x=-tmpp->p.x; + tmpp->v.x=-tmpp->v.x; + } + if (tmpp->p.x>=map->width) { + tmpp->p.x-=tmpp->p.x-map->width; + tmpp->v.x=-tmpp->v.x; + } + if (tmpp->p.y<0) { + tmpp->p.y=-tmpp->p.y; + tmpp->v.y=-tmpp->v.y; + } + if (tmpp->p.y>=map->height) { + tmpp->p.y-=tmpp->p.y-map->height; + tmpp->v.y=-tmpp->v.y; + } next=GrPeek(map,tmpp->p.x,tmpp->p.y); - if (last!=next && - (last==BLACK && next==WHITE) || (last==WHITE && next==BLACK)) + if (last!=next && (last==BLACK && next==WHITE) || + (last==WHITE && next==BLACK) && + D3DistSqr(&tmpp->p_snell_inhibit,&tmpp->p)>=4.0) SnellsLaw(tmpp,last,next); tmpp=tmpp->next; } - Sleep(1000*ts); + LBtr(&p_root_locks,Gs->num); + if (ts) + Sleep(1000*ts); + else { + Yield; + Yield; //Give a more time unlocked. + } } } U0 Init() { + I64 i; ts=0.01; + photon_cnt=snell_cnt=0; map=DCNew(Fs->pix_width,Fs->pix_height); - QueInit(&p_root); - //x*y=bmp_mem*8 + for (i=0;ipix_height/Fs->pix_width)/Fs->pix_height; + bmp_scale_sqr=Sqr(bmp_scale); bmp_width =bmp_scale*Fs->pix_width; bmp_height=bmp_scale*Fs->pix_height; bmp=CAlloc(bmp_width*bmp_height/8); @@ -200,7 +252,13 @@ U0 Init() U0 CleanUp() { - QueDel(&p_root,TRUE); + I64 i; + for (i=0;idraw_it=&DrawIt; - Fs->animate_task=Spawn(&AnimateTask,NULL,"Animate",,Fs); + for (i=0;i