void MyApp::PaintCube() { sSetRendertarget(0,sCLEAR_ALL,0xff405060); Env.AmbientColor = 0xff404040; Env.LightColor[0] = 0x00c00000; Env.LightColor[1] = 0x0000c000; Env.LightColor[2] = 0x000000c0; Env.LightDir[0].Init(1,0,0); Env.LightDir[1].Init(0,1,0); Env.LightDir[2].Init(0,0,1); Timer.OnFrame(sGetTime()); sInt time = Timer.GetTime(); View.Model.EulerXYZ(time*0.0011f,time*0.0013f,time*0.0015f); View.SetTargetCurrent(); View.SetZoom(1); View.Camera.l.Init(0,0,-5); View.Prepare(); // View.Set(); sCBuffer<sSimpleMaterialEnvPara> cb; cb.Data->Set(View,Env); Mtrl->Set(&cb); sVertexStandard *vp; sU16 *ip; Geo->BeginLoadVB(8,sGD_STREAM,(void **)&vp); vp[0].Init(-1,-1,-1, -1,-1,-1, 0,0); vp[1].Init( 1,-1,-1, 1,-1,-1, 1,0); vp[2].Init( 1, 1,-1, 1, 1,-1, 1,1); vp[3].Init(-1, 1,-1, -1, 1,-1, 0,1); vp[4].Init(-1,-1, 1, -1,-1, 1, 0,0); vp[5].Init( 1,-1, 1, 1,-1, 1, 1,0); vp[6].Init( 1, 1, 1, 1, 1, 1, 1,1); vp[7].Init(-1, 1, 1, -1, 1, 1, 0,1); Geo->EndLoadVB(); Geo->BeginLoadIB(6*6,sGD_STREAM,(void **)&ip); sQuad(ip,0,3,2,1,0); sQuad(ip,0,4,5,6,7); sQuad(ip,0,0,1,5,4); sQuad(ip,0,1,2,6,5); sQuad(ip,0,2,3,7,6); sQuad(ip,0,3,0,4,7); Geo->EndLoadIB(); Geo->Draw(); }
void MyApp::OnPaint3D() { // set rendertarget sSchedMon->Begin(0,0xffffff); sSetRendertarget(0,sCLEAR_ALL,0xff405060); // get timing Timer.OnFrame(sGetTime()); static sInt time; if(sHasWindowFocus()) time = Timer.GetTime(); sF32 avg = Timer.GetAverageDelta(); tb.Clear(); tb.PrintF(L"%5.2ffps %5.3fms\n",1000/avg,avg); // prepare random data sSchedMon->Begin(0,0xffffffff); sRandom rnd; rnd.Seed(time); SortSource.Resize(SortCount); for(sInt i=0;i<SortCount;i++) SortSource[i] = rnd.Int32(); SortDestHS.Resize(SortCount); SortDestST.Resize(SortCount); SortDestMT.Resize(SortCount); sSchedMon->End(0); sBool single = sGetKeyQualifier() & sKEYQ_SHIFT; // mergesort MT // sDPrintF(L"----------------\n"); if(!single) { SortDestHS = SortSource; SortDestMT = SortSource; sStsWorkload *wl = sSched->BeginWorkload(); ms data; data.s = SortDestMT.GetData(); data.b = SortDestHS.GetData(); data.i0 = 0; data.i2 = SortCount; data.parent = 0; data.wl = wl; data.wl->AddTask(data.wl->NewTask(MergeSortTask,&data,1,0)); sSchedMon->Begin(0,0xffff0000); wl->Start(); wl->Sync(); wl->End(); sSchedMon->End(0); } // mergesort ST if(single) { SortDestHS = SortSource; SortDestST = SortSource; sSchedMon->Begin(0,0xff00ff00); MergeSort(SortDestST.GetData(),SortDestHS.GetData(),0,SortCount); sSchedMon->End(0); } // heapsort /* SortDestHS = SortSource; sSchedMon->Begin(0,0xffffff00); sHeapSortUp(SortDestHS); sSchedMon->End(0); */ // did it work? sInt e = 0; sSchedMon->Begin(0,0xffffffff); for(sInt i=1;i<SortCount;i++) { if(SortDestMT[i-1]>SortDestMT[i]) { sDPrintF(L"%08x\n",i); e = 1; } } sVERIFY(!e); /* sVERIFY(sCmpMem(SortDestMT.GetData(),SortDestST.GetData(),sizeof(sU32)*SortCount)==0); sVERIFY(sCmpMem(SortDestHS.GetData(),SortDestST.GetData(),sizeof(sU32)*SortCount)==0); sVERIFY(sCmpMem(SortDestHS.GetData(),SortDestMT.GetData(),sizeof(sU32)*SortCount)==0); */ sSchedMon->End(0); // set camera View.SetTargetCurrent(); View.SetZoom(2.0f); View.Model.EulerXYZ(time*0.0011f,time*0.0013f,time*0.0015f); View.Model.l.Init(0,0,0); View.Camera.l.Init(0,0,-3.2f); View.Prepare(); // set material sCBuffer<sSimpleMaterialEnvPara> cb; cb.Data->Set(View,Env); Mtrl->Set(&cb); // draw Geo->Draw(); // debug output Painter->SetTarget(); Painter->Begin(); Painter->SetPrint(0,0xff000000,2); Painter->SetPrint(0,~0,2); Painter->Print(10,10,tb.Get()); Painter->End(); sSchedMon->Paint(sTargetSpec()); sSchedMon->Scale = 18; sSchedMon->End(0); sSchedMon->FlipFrame(); }
void MyApp::OnPaint3D() { sRandom rnd; sVertexSingle *vp; // set rendertarget sSetRendertarget(0,sCLEAR_ALL,0xff405060); // get timing Timer.OnFrame(sGetTime()); sInt time = Timer.GetTime(); // set camera View.SetTargetCurrent(); View.SetZoom(1.7f); // View.Model.EulerXYZ(time*0.0011f,time*0.0013f,time*0.0015f); View.Model.l.Init(0,0,0); View.Camera.l.Init(0,0,-4); View.Prepare(); View.Set(); // set material sCBuffer<sSimpleMaterialEnvPara> cb; cb.Data->Set(Env); // begin for(sInt i=0;i<4;i++) Geo[i]->BeginQuadrics(); // grid Geo[0]->BeginGrid((void **) &vp,65,65); for(sInt y=-32;y<=32;y++) { for(sInt x=-32;x<=32;x++) { sF32 px,py,fx,fy; fx = x/32.0f; fy = y/32.0f; px = x/16.0f + sFSin(x*0.10f+y*0.12f+time*0.0011f)*0.1f; py = y/16.0f + sFSin(x*0.11f+y*0.13f+time*0.0011f)*0.1f; vp->Init(px,py,0,0xff808080,fx,fy); vp++; } } Geo[0]->EndGrid(); // some random quads sInt max = sInt((sFSin(time*0.004f)+2)*64); for(sInt i=0;i<max;i++) { sF32 x,y,s; sInt r; x = sFSin(i*0.10f+time*0.0011f); y = sFCos(i*0.12f+time*0.0014f); s = 0.1f; r = rnd.Int(4); Geo[r]->BeginQuad((void **) &vp,1); vp[0].Init(x-s,y-s,0, ~0, 0,0); vp[1].Init(x+s,y-s,0, ~0, 1,0); vp[2].Init(x+s,y+s,0, ~0, 1,1); vp[3].Init(x-s,y+s,0, ~0, 0,1); Geo[r]->EndQuad(); } // end and draw for(sInt i=0;i<4;i++) Geo[i]->EndQuadrics(); for(sInt i=0;i<4;i++) { Mtrl[i]->Set(&cb); Geo[i]->Draw(); } // debug output sF32 avg = Timer.GetAverageDelta(); Painter->SetTarget(); Painter->Begin(); Painter->SetPrint(0,~0,2); Painter->PrintF(10,10,L"%5.2ffps %5.3fms",1000/avg,avg); Painter->End(); }