void MainLoop()
{
    inputE.Update();
    InputProcess();
    GUIMgr.Update();
    Renderer.ClearBackground();
    NTimer.NextTick();

    //update fps lable
    std::stringstream tmpS;
    tmpS <<"fps :" << NTimer.GetFPS()<<std::endl;//I wonder why this FPS is EXACTLY the half of Graphic Debug FPS
    myText_fps.SetTextAscii(tmpS.str());
    std::stringstream tmpS2;
    tmpS2 << GUIScrollBar1.GetValue();
    float aaaa = GUIScrollBar1.GetValue();
    myText2.SetTextAscii(tmpS2.str());

    //add to render list
    Renderer.AddObjectToRenderList(Mesh1);
    Renderer.AddObjectToRenderList(GraphicObjBuffer);
    Renderer.AddObjectToRenderList(Atmos);
    Renderer.AddObjectToRenderList(myText1);
    Renderer.AddObjectToRenderList(myText2);
    Renderer.AddObjectToRenderList(myText_fps);

    GUIMgr.AddObjectToRenderList(GUIScrollBar1);
    GUIMgr.AddObjectToRenderList(GUIButton1);
    GUIMgr.AddObjectToRenderList(GUITextBox1);


    //render
    Renderer.SetBlendingMode(NOISE_BLENDMODE_OPAQUE);
    Renderer.RenderMeshes();
    Renderer.SetBlendingMode(NOISE_BLENDMODE_OPAQUE);
    Renderer.RenderAtmosphere();
    Renderer.SetBlendingMode(NOISE_BLENDMODE_OPAQUE);
    Renderer.RenderGraphicObjects();
    Renderer.SetBlendingMode(NOISE_BLENDMODE_ALPHA);
    Renderer.RenderGUIObjects();
    Renderer.SetBlendingMode(NOISE_BLENDMODE_ALPHA);
    Renderer.RenderTexts();

    //present
    Renderer.RenderToScreen();
};
int main(){
  clock_t startTime = clock();
  FILE *fp = fopen( "output.txt", "w" );
  int pancake[SOLVE_NUM];
  int swapOrder[MAX_DEPTH_SEARCH];

  int pancakeLength = InputProcess(pancake, "input.txt");
  int move = IterativeDeepeningSearch( swapOrder, pancake, pancakeLength );
  if( move != CUTOFF ){
    fprintf( fp, "An optimal solution has %d moves.\n", move );
    OutputPancake( fp, pancake, pancakeLength );
    for( int i = move-1 ; i >= 0 ; --i ){
      SwapPancake(pancake, swapOrder[i]);
      OutputPancake( fp, pancake, pancakeLength );
    }
    fprintf( fp, "Total run time = %.2f seconds.\n", (float)(clock()-startTime) / CLOCKS_PER_SEC );
  }
  else{
    fprintf( fp, "Fail...\n" );
  }
  fclose(fp);
  return 0;
}