Exemplo n.º 1
0
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();
}
Exemplo n.º 2
0
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();
}
Exemplo n.º 3
0
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();

}