Files
TempleOS-Rijn/SparrowOS/Demo/MultiCore/Layers3DJob.CPP
T
2018-09-08 21:45:28 +02:00

132 lines
2.3 KiB
C++

$SP,"<1>",1$
class MPCtrl {
Bool core0_done,core1_done;
} mp;
I64 *r1,*r2;
U0 DrawIt(CTask *task,CDC *dc)
{
I64 *old_r;
if (mp.core0_done) return;
old_r=dc->r;
dc->color=BLACK;
GrPutS(dc,0,0,"This is not art.");
GrPutS(dc,0,FONT_HEIGHT,"It's just a test pattern.");
GrSetRotMat(dc,r1);
dc->x=200;
dc->y=200;
dc->flags|=DCF_TRANSFORMATION;
dc->pen_width=2;
CSpritePlot3(dc,0,0,0,$IB,"<1>",1$);
dc->color=BLUE;
GrRect3(dc,50,75,0,100,50);
GrRect3(dc,75,50,0,50,100);
dc->color=GREEN;
GrEllipse3(dc,100,100,0,50,25);
GrEllipse3(dc,100,100,0,50,25,ã/2);
dc->color=LTGREEN;
GrEllipse3(dc,100,100,0,50,25,ã/6);
GrEllipse3(dc,100,100,0,50,25,ã/3);
GrSetRotMat(dc,old_r);
mp.core0_done=TRUE;
}
U0 MPDrawIt(CTask *main_task)
{
CDC *dc;
I64 *old_r;
if (mp.core1_done) return;
dc=DCAlias;
old_r=dc->r;
dc->win_task=main_task;
GrSetRotMat(dc,r2);
dc->x=200;
dc->y=200;
dc->flags|=DCF_TRANSFORMATION;
DCFill(dc);
dc->pen_width=2;
CSpritePlot3(dc,0,0,0,$IB,"<1>",1$);
dc->color=BLUE;
GrRect3(dc,50,75,0,100,50);
GrRect3(dc,75,50,0,50,100);
dc->color=GREEN;
GrEllipse3(dc,100,100,0,50,25);
GrEllipse3(dc,100,100,0,50,25,ã/2);
dc->color=LTGREEN;
GrEllipse3(dc,100,100,0,50,25,ã/6);
GrEllipse3(dc,100,100,0,50,25,ã/3);
GrSetRotMat(dc,old_r);
DCDel(dc);
mp.core1_done=TRUE;
}
U0 Layers3DJob()
{
F64 é2=0,è2=0,é3=0,è3=0;
mp.core0_done=TRUE;
mp.core1_done=TRUE;
r1=GrIdent;
r2=GrIdent;
SettingsPush; //See $LK,"SettingsPush","MN:SettingsPush"$
DocClear;
Fs->draw_it=&DrawIt;
Preempt(OFF); //Don't access r1,r2 while being changed
while (!ScanChar) {
GrIdentEqu(r1);
GrRotXEqu(r1,è2);
GrRotZEqu(r1,é2);
GrIdentEqu(r2);
GrRotXEqu(r2,è3);
GrRotZEqu(r2,é3);
mp.core0_done=FALSE;
mp.core1_done=FALSE;
//Pass the task of the window as data item to job.
MPJob(&MPDrawIt,Fs,1);
WinMgrSync;
while (!mp.core0_done || !mp.core1_done)
Yield;
é2+=2*ã/100;
è2 +=2*ã/130;
é3-=2*ã/100;
è3 -=2*ã/130;
}
DCFill;
SettingsPop;
Free(r1);
Free(r2);
}
Layers3DJob;
Ü#ôÿÿÿ#ôÿÿÿ..  ìÿÿÿJIïÿÿÿéÿÿÿñÿÿÿêÿÿÿ!íý%9RÁð¿
=Åýï7RÁð¿lU9RÁð¿/€