Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 3746 in orxonox.OLD for orxonox/branches/levelloader/src/orxonox.cc


Ignore:
Timestamp:
Apr 7, 2005, 3:54:49 PM (19 years ago)
Author:
chris
Message:

orxonox/branches/levelloader: Merged trunk into branch… still not working though…

File:
1 edited

Legend:

Unmodified
Added
Removed
  • orxonox/branches/levelloader/src/orxonox.cc

    r3605 r3746  
    2222   main-programmer: Patrick Boenzli
    2323   co-programmer: Christian Meyer
     24   co-programmer: Benjamin Grauer: injected ResourceManager/GraphicsEngine
    2425*/
    2526
    2627#include "orxonox.h"
     28
    2729#include "world.h"
    28 #include "camera.h"
    2930#include "data_tank.h"
    3031#include "command_node.h"
    3132#include "game_loader.h"
     33#include "graphics_engine.h"
     34#include "resource_manager.h"
     35#include "debug.h"
     36
    3237#include <string.h>
    33 int verbose = 4;
     38int verbose = 3;
    3439
    3540using namespace std;
     
    5156  if( world != NULL) delete world;
    5257  if( localinput != NULL) delete world;
    53   if( localcamera != NULL) delete localcamera;
    5458  if( resources != NULL) delete resources;
     59  delete GraphicsEngine::getInstance(); // deleting the Graphics
     60  delete ResourceManager::getInstance(); // deletes the Resource Manager
    5561}
    5662
     
    110116int Orxonox::initVideo()
    111117{
    112   printf("> Initializing video\n");
    113   if (SDL_Init(SDL_INIT_VIDEO) == -1)
    114     {
    115       printf ("could not initialize SDL Video\n");
    116       return -1;
    117     }
    118   // Set video mode
    119   // TO DO: parse arguments for settings
    120   //SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5);
    121   //SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5);
    122   //SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5);
    123   //SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
    124  
    125 
    126   SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );   
    127   SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 16);   
    128   SDL_GL_SetAttribute( SDL_GL_STENCIL_SIZE, 0); 
    129   SDL_GL_SetAttribute( SDL_GL_ACCUM_RED_SIZE, 0);
    130   SDL_GL_SetAttribute( SDL_GL_ACCUM_GREEN_SIZE, 0);
    131   SDL_GL_SetAttribute( SDL_GL_ACCUM_BLUE_SIZE, 0);
    132   SDL_GL_SetAttribute( SDL_GL_ACCUM_ALPHA_SIZE, 0);
    133 
    134 
    135 
    136   int bpp = 16;
    137   int width = 640;
    138   int height = 480;
    139   //Uint32 flags = SDL_HWSURFACE | SDL_OPENGL | SDL_GL_DOUBLEBUFFER; /* \todo: SDL_OPENGL doen't permit to load images*/
    140   //Uint32 flags = SDL_HWSURFACE | SDL_GL_DOUBLEBUFFER;
    141 
    142   Uint32 videoFlags = SDL_OPENGL | SDL_HWPALETTE | SDL_RESIZABLE;
    143 
    144   /* query SDL for information about our video hardware */
    145   const SDL_VideoInfo* videoInfo = SDL_GetVideoInfo ();
    146  
    147   if( videoInfo == NULL)
    148     {
    149       printf ("Orxonox::initVideo() - Failed getting Video Info :%s\n", SDL_GetError());
    150       SDL_Quit ();
    151     }
    152   if( videoInfo->hw_available)
    153     videoFlags |= SDL_HWSURFACE;
    154   else
    155     videoFlags |= SDL_SWSURFACE;
    156   /*
    157   if(VideoInfo -> blit_hw)                           
    158     VideoFlags |= SDL_HWACCEL;
    159   */
    160  
    161   if((this->screen = SDL_SetVideoMode (width, height, bpp, videoFlags)) == NULL)
    162   {
    163     printf("Could not SDL_SetVideoMode(%d, %d, %d, %d): %s\n", width, height, bpp, videoFlags, SDL_GetError());
    164     SDL_Quit();
    165     return -1;
    166   }
    167  
    168   // Set window labeling
    169   SDL_WM_SetCaption ("Orxonox " PACKAGE_VERSION, "Orxonox " PACKAGE_VERSION);
    170  
    171   // TO DO: Create a cool icon and use it here
    172   // SDL_WM_SetIcon(SDL_Surface *icon, Uint8 *mask); 
    173 
     118  PRINTF(3)("> Initializing video\n");
     119 
     120  GraphicsEngine::getInstance();
     121 
    174122  return 0;
    175123}
     
    215163int Orxonox::initResources()
    216164{
    217   printf("Not yet implemented\n");
     165  //  printf("Not yet implemented\n");
     166  PRINT(3)("initializing ResourceManager\n");
     167  resourceManager = ResourceManager::getInstance();
     168  resourceManager->setDataDir("../data/");
    218169  return 0;
    219170}
     
    270221{
    271222  // Handle special events such as reshape, quit, focus changes
     223  switch (event->type)
     224    {
     225    case SDL_VIDEORESIZE:
     226      GraphicsEngine* tmpGEngine = GraphicsEngine::getInstance();
     227      tmpGEngine->resolutionChanged(&event->resize);
     228      break;
     229    }
    272230}
    273231 
     
    291249}
    292250
    293 
    294 /**
    295    \brief retrieve a pointer to the local Camera
    296    \return a pointer to localcamera
    297 */
    298 Camera* Orxonox::getCamera()
    299 {
    300   return localcamera;
    301 }
    302 
    303 
    304251/**
    305252   \brief retrieve a pointer to the local CommandNode
     
    329276}
    330277
     278
     279
    331280/**
    332281   \brief main function
     
    336285int main(int argc, char** argv)
    337286
     287 
     288  /* reading arguments
     289     
     290     currently supported arguments are:
     291     <no args>                   ::    just starts orxonox
     292     --benchmark                 ::    start the benchmark without starting orxonox
     293     
     294     this is a preselection: it matches to one of the start* functions, the
     295     finetuning is made in those functions.
     296  */
     297
     298
     299  int i;
     300  for(i = 0; i < argc; ++i)
     301    {
     302      if(! strcmp( "--help", argv[i])) return startHelp();
     303      else if(! strcmp( "--benchmark", argv[i])) return startBenchmarks();
     304    }
     305
     306  PRINTF(2)("Orxonox does not understand the arguments");
     307  return startOrxonox(argc, argv);
     308}
     309
     310
     311
     312int startHelp()
     313{
     314  printf("orxonox: starts the orxonox game - rules\n");
     315  printf("usage: orxonox [arg]\n\n");
     316  printf("valid options:\n");
     317  printf(" --benchmark\tstarts the orxonox benchmark\n");
     318  printf(" --help \tshows this menu\n");
     319}
     320
     321
     322int startOrxonox(int argc, char** argv)
     323{
    338324  printf(">>> Starting Orxonox <<<\n");
    339325  Orxonox *orx = Orxonox::getInstance();
     
    347333  orx->start();
    348334 
    349   //delete orx;
    350  
    351   return 0;
    352 }
     335  delete orx;
     336 
     337}
     338
     339
     340#include "list.h"
     341#include "world_entity.h"
     342#include "vector.h"
     343#include "player.h"
     344#include "base_object.h"
     345
     346#ifdef __WIN32__
     347#elif
     348#include <asm/msr.h>
     349#include <linux/timex.h>
     350#endif
     351
     352
     353#define LIST_MAX 1000
     354#define VECTOR_MAX 1000000
     355#define ITERATIONS 10000
     356
     357
     358int startBenchmarks()
     359{
     360        #ifndef __WIN32__
     361  printf("===========================================================\n");
     362  printf("=                      BENCHMARKS                         =\n");
     363  printf("===========================================================\n");
     364  printf(" the author is not paying any attention to cacheing effects\n");
     365  printf(" of the CPU.\n\n");
     366  printf("[title]\t\t\t\t\t     [cycles]\t[loops]\n\n");
     367  //  printf("------------------------------------------------------------\n\n");
     368
     369  // first measure the time overhead:
     370  unsigned long ini, end, dt, tmp;
     371  rdtscl(ini); rdtscl(end);
     372  dt = end - ini;
     373
     374  int type = -1;
     375  /* type   -1 == all
     376     type    0 == framework
     377     type    1 == vector
     378     type    2 == quaternion
     379     type    3 == lists
     380  */
     381  if(type == 0 || type == -1)
     382    {
     383      /* framework test*/
     384     
     385      printf("Generating Objects:\t\t\t\t\t%i\n", ITERATIONS);
     386      /* ************WorldEntity class test************** */
     387      WorldEntity* w = NULL;
     388      int i = 0;
     389      unsigned long mittel = 0;
     390     
     391      for(i = 0; i < ITERATIONS; ++i)
     392        {
     393          rdtscl(ini);
     394         
     395          WorldEntity* w = new WorldEntity();
     396         
     397          rdtscl(end);
     398          delete w;
     399          mittel += (end - ini - dt);
     400        }
     401      float mi = mittel / (float)ITERATIONS;
     402      printf(" Generate a WorldEntity object:\t\t%11.2f\n", mi);
     403     
     404      /*
     405        mittel = 0;
     406        for(i = 0; i < ITERATIONS; ++i)
     407        {
     408        rdtscl(ini);
     409       
     410        WorldEntity* w = new Primitive(P_SPHERE);
     411       
     412        rdtscl(end);
     413        delete w;
     414        mittel += (end - ini - dt);
     415        }
     416        mi = mittel / (float)ITERATIONS;
     417        printf(" Generate a Primitive  object:\t\t%11.2f\n", mi);
     418      */
     419
     420      mittel = 0;
     421      for(i = 0; i < ITERATIONS; ++i)
     422        {
     423          rdtscl(ini);
     424         
     425          Vector* v = new Vector();
     426         
     427          rdtscl(end);
     428          delete v;
     429          mittel += (end - ini - dt);
     430        }
     431      mi = mittel / (float)ITERATIONS;
     432      printf(" Generate a Vector object:\t\t%11.2f\n", mi);
     433
     434
     435     mittel = 0;
     436      for(i = 0; i < ITERATIONS; ++i)
     437        {
     438          rdtscl(ini);
     439         
     440          Quaternion* q = new Quaternion();
     441         
     442          rdtscl(end);
     443          delete q;
     444          mittel += (end - ini - dt);
     445        }
     446      mi = mittel / (float)ITERATIONS;
     447      printf(" Generate a Quaternion object:\t\t%11.2f\n", mi);
     448
     449
     450
     451
     452      printf("\nCalling function inline &| virtual, \t\t\t%i\n", ITERATIONS);
     453      mittel = 0;
     454      w = new WorldEntity();
     455      for(i = 0; i < ITERATIONS; ++i)
     456        {
     457          rdtscl(ini);
     458         
     459          w->tick(0.0f);
     460
     461          rdtscl(end);
     462          mittel += (end - ini - dt);
     463          }
     464      //delete w;
     465      mi = mittel / (float)ITERATIONS;
     466      printf(" Virt funct tick() of WE: \t\t%11.2f\n", mi);
     467
     468
     469      mittel = 0;
     470      WorldEntity wo;
     471      for(i = 0; i < ITERATIONS; ++i)
     472        {
     473          rdtscl(ini);
     474         
     475          wo.tick(0.0f);
     476           
     477          rdtscl(end);
     478          mittel += (end - ini - dt);
     479          }
     480      //delete w;
     481      mi = mittel / (float)ITERATIONS;
     482      printf(" Inl virt funct tick() of WE v2: \t%11.2f\n", mi);
     483
     484     
     485      mittel = 0;
     486      BaseObject* bo = new BaseObject();
     487      for(i = 0; i < ITERATIONS; ++i)
     488        {
     489          rdtscl(ini);
     490         
     491          bo->isFinalized();
     492           
     493          rdtscl(end);
     494          mittel += (end - ini - dt);
     495          }
     496      //delete w;
     497      mi = mittel / (float)ITERATIONS;
     498      printf(" Inl funct BaseObject::isFinazlized(): \t%11.2f\n", mi);
     499
     500     
     501      tList<WorldEntity>* list = new tList<WorldEntity>();
     502
     503     
     504      /* ************Primitvie class test************** */
     505      list = new tList<WorldEntity>();
     506 
     507     
     508      /*
     509        mittel = 0;
     510        w = new Primitive(P_SPHERE);
     511        for(i = 0; i < ITERATIONS; ++i)
     512        {
     513        rdtscl(ini);
     514       
     515        w->tick(0.0f);
     516       
     517        rdtscl(end);
     518        mittel += (end - ini - dt);
     519        }
     520        mi = mittel / (float)ITERATIONS;
     521        printf(" Call function tick() of Prim:\t\t%11.2f\n", mi);
     522      */
     523     
     524    }
     525 
     526  if(type == 1 || type == -1)
     527    {
     528      printf("\nDoing some simple vector operations: \t\t\t%i\n", VECTOR_MAX);
     529      /* vector test */
     530      Vector* a = new Vector(1.3, 5.3, 4.1);
     531      Vector* b = new Vector(0.4, 2.5, 6.2);
     532      Vector* c = new Vector();
     533     
     534      unsigned long mittel, ini, end;
     535      float mi;
     536      int i = 0;
     537      // addition
     538      mittel = 0;
     539      for(i = 0; i < VECTOR_MAX; ++i)
     540        {
     541          rdtscl(ini);
     542         
     543          *c = *a + *b;
     544           
     545          rdtscl(end);
     546          mittel += (end - ini - dt);
     547        }
     548      mi = mittel / (float)VECTOR_MAX;
     549      printf(" Addition of two vectors:\t\t%11.2f\n", mi);
     550     
     551      // multiplikation
     552
     553      mittel = 0;
     554      for(i = 0; i < VECTOR_MAX; ++i)
     555        {
     556          rdtscl(ini);
     557         
     558          *c = a->cross( *b);
     559           
     560          rdtscl(end);
     561          mittel += (end - ini - dt);
     562        }
     563      mi = mittel / (float)VECTOR_MAX;
     564      printf(" CrossMult of two vectors:\t\t%11.2f\n", mi);
     565
     566    }
     567  if( type == 2 || type == -1)
     568    {
     569      /* quaternion test */
     570      printf("\nDoing some simple quaternion operations: \t\t%i\n", VECTOR_MAX);
     571      /* vector test */
     572      Quaternion* a = new Quaternion();
     573      Quaternion* b = new Quaternion();
     574      Quaternion* c = new Quaternion();
     575     
     576      unsigned long mittel, ini, end;
     577      float mi;
     578      int i = 0;
     579      // quaternion generieren mit spez konstruktor
     580      mittel = 0;
     581      Vector* qa = new Vector(4.6, 9.3, 0.4);
     582      Vector* qb = new Vector(3.5, 6.1, 4.3);
     583      for(i = 0; i < VECTOR_MAX; ++i)
     584        {
     585          rdtscl(ini);
     586         
     587          Quaternion* qu = new Quaternion(*qa, *qb);
     588         
     589          rdtscl(end);
     590          delete qu;
     591          mittel += (end - ini - dt);
     592        }
     593      delete a;
     594      delete b;
     595      mi = mittel / (float)VECTOR_MAX;
     596      printf(" Gen. quatern. betw. two vectors:\t%11.2f\n", mi);
     597     
     598     
     599      // multiplication
     600      mittel = 0;
     601      for(i = 0; i < VECTOR_MAX; ++i)
     602        {
     603          rdtscl(ini);
     604         
     605          *c = *a * *b;
     606         
     607          rdtscl(end);
     608          mittel += (end - ini - dt);
     609        }
     610      mi = mittel / (float)VECTOR_MAX;
     611      printf(" Multiplying two quat.(=rot): a * b\t%11.2f\n", mi);
     612     
     613     
     614     
     615      // rotating a vector by a quaternion
     616      mittel = 0;
     617      for(i = 0; i < VECTOR_MAX; ++i)
     618        {
     619          rdtscl(ini);
     620         
     621          *qa = a->apply(*qb);
     622         
     623          rdtscl(end);
     624          mittel += (end - ini - dt);
     625        }
     626      mi = mittel / (float)VECTOR_MAX;
     627      printf(" Rot a vec by a quat: q->apply(v)\t%11.2f\n", mi);
     628     
     629     
     630     
     631      // generate rotation matrix
     632      mittel = 0;
     633      float matrix[4][4];
     634      for(i = 0; i < VECTOR_MAX; ++i)
     635        {
     636          rdtscl(ini);
     637         
     638          a->matrix(matrix);
     639         
     640          rdtscl(end);
     641          mittel += (end - ini - dt);
     642        }
     643      mi = mittel / (float)VECTOR_MAX;
     644      printf(" Generate rot matrix: q->matrix(m)\t%11.2f\n", mi);
     645    }
     646  if( type == 3 || type == -1)
     647    {
     648      /* list tests*/
     649      printf("\nList operations tests: \t\t\t\t\t%i\n", LIST_MAX);
     650      tList<char>* list = new tList<char>();
     651      char* name;
     652     
     653      printf(" Adding[1..10] elements to list, found:\n");
     654      list->add("1");
     655      list->add("2");
     656      list->add("3");
     657      list->add("4");
     658      list->add("5");
     659      list->add("6");
     660      list->add("7");
     661      list->add("8");
     662      list->add("9");
     663      list->add("10");
     664     
     665      /*give list out */
     666      tIterator<char>* iterator = list->getIterator();
     667      name = iterator->nextElement();
     668      printf("  List Elements: \t\t");
     669      while( name != NULL)
     670        {
     671          printf("%s,", name);
     672          name = iterator->nextElement();
     673        }
     674      delete iterator;
     675      printf("\n");
     676     
     677     
     678      /*removing some elements from the list*/
     679      printf(" Removing elements [2,3,6,8,10], adding [11] now found:\n");
     680      list->remove("2");
     681      list->remove("3");
     682      list->remove("6");
     683      list->remove("8");
     684      list->remove("10");
     685      list->add("11");
     686      /*give list out */
     687      iterator = list->getIterator();
     688      name = iterator->nextElement();
     689      printf("  List Elements: \t\t");
     690      while( name != NULL)
     691        {
     692          printf("%s,", name);
     693          name = iterator->nextElement();
     694        }
     695      delete iterator;
     696      printf("\n");
     697     
     698      delete list;
     699      printf("\nChecking list performance:\t\t\t\t%i\n", LIST_MAX);
     700     
     701      tList<int>* plist = new tList<int>();
     702      unsigned long mittel, ini, end;
     703      float mi;
     704      int i = 0;
     705      mittel = 0;
     706      for(i = 0; i < LIST_MAX; ++i)
     707        {
     708          rdtscl(ini);
     709         
     710          plist->add(&i);
     711         
     712          rdtscl(end);
     713          mittel += (end - ini - dt);
     714        }
     715      mi = mittel / (float)LIST_MAX;
     716      printf(" Adding reference to list:\t\t%11.2f\n", mi);
     717     
     718      mittel = 0;
     719      for(i = 0; i < LIST_MAX; ++i)
     720        {
     721          rdtscl(ini);
     722         
     723          plist->remove(&i);
     724         
     725          rdtscl(end);
     726          mittel += (end - ini - dt);
     727        }
     728      mi = mittel / (float)LIST_MAX;
     729      printf(" Removing 1st reference from list:\t%11.2f\n", mi);
     730     
     731
     732      printf("\nList operations tests: \t\t\t\t\t%i\n", LIST_MAX);
     733      list = new tList<char>();
     734      printf(" Adding[1..10] elements to list, found:\n");
     735      list->add("1");
     736      list->add("2");
     737      list->add("3");
     738      list->add("4");
     739      list->add("5");
     740      list->add("6");
     741      list->add("7");
     742      list->add("8");
     743      list->add("9");
     744      list->add("10");
     745     
     746      /*give list out */
     747      iterator = list->getIterator();
     748      name = iterator->nextElement();
     749      printf("  List Elements: \t\t");
     750      while( name != NULL)
     751        {
     752          printf("%s,", name);
     753          name = iterator->nextElement();
     754        }
     755      delete iterator;
     756      printf("\n");
     757     
     758     
     759      int c = 0;
     760      printf(" Going trough list with nextElement(el) func: ");
     761      name = list->firstElement();
     762      while(c < 20)
     763        {
     764          printf("%s,", name);
     765          name = list->nextElement(name);
     766          c++;
     767        }
     768      printf("\n");
     769     
     770
     771     
     772    }
     773  #endif
     774}
Note: See TracChangeset for help on using the changeset viewer.