Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 3681 in orxonox.OLD for orxonox/branches/textEngine/src/orxonox.cc


Ignore:
Timestamp:
Mar 30, 2005, 9:02:23 PM (19 years ago)
Author:
bensch
Message:

orxonox/branches/textEngine: merged trunk here.
merged with command:
svn merge ../trunk textEngine -r 3467:HEAD
no conflicts

File:
1 edited

Legend:

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

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