Changeset 3681 in orxonox.OLD for orxonox/branches/textEngine/src/orxonox.cc
- Timestamp:
- Mar 30, 2005, 9:02:23 PM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
orxonox/branches/textEngine/src/orxonox.cc
r3449 r3681 22 22 main-programmer: Patrick Boenzli 23 23 co-programmer: Christian Meyer 24 co-programmer: Benjamin Grauer: injected ResourceManager/GraphicsEngine 24 25 */ 25 26 26 27 #include "orxonox.h" 28 27 29 #include "world.h" 28 #include "camera.h"29 30 #include "data_tank.h" 30 31 #include "command_node.h" 31 32 #include "game_loader.h" 33 #include "graphics_engine.h" 34 #include "resource_manager.h" 35 32 36 #include <string.h> 33 int verbose ;37 int verbose = 3; 34 38 35 39 using namespace std; … … 51 55 if( world != NULL) delete world; 52 56 if( localinput != NULL) delete world; 53 if( localcamera != NULL) delete localcamera;54 57 if( resources != NULL) delete resources; 55 } 56 58 delete GraphicsEngine::getInstance(); // deleting the Graphics 59 delete ResourceManager::getInstance(); // deletes the Resource Manager 60 } 57 61 58 62 /** \brief this is a singleton class to prevent duplicates */ … … 111 115 int Orxonox::initVideo() 112 116 { 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 179 121 return 0; 180 122 } … … 220 162 int Orxonox::initResources() 221 163 { 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/"); 223 168 return 0; 224 169 } … … 274 219 { 275 220 // 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 } 276 228 } 277 229 … … 295 247 } 296 248 297 298 /**299 \brief retrieve a pointer to the local Camera300 \return a pointer to localcamera301 */302 Camera* Orxonox::getCamera()303 {304 return localcamera;305 }306 307 308 249 /** 309 250 \brief retrieve a pointer to the local CommandNode … … 333 274 } 334 275 276 277 335 278 /** 336 279 \brief main function … … 340 283 int main(int argc, char** argv) 341 284 { 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 310 int 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 320 int startOrxonox(int argc, char** argv) 321 { 342 322 printf(">>> Starting Orxonox <<<\n"); 343 323 Orxonox *orx = Orxonox::getInstance(); … … 351 331 orx->start(); 352 332 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 352 int 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.