Changeset 3746 in orxonox.OLD for orxonox/branches/levelloader/src/orxonox.cc
- Timestamp:
- Apr 7, 2005, 3:54:49 PM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
orxonox/branches/levelloader/src/orxonox.cc
r3605 r3746 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 #include "debug.h" 36 32 37 #include <string.h> 33 int verbose = 4;38 int verbose = 3; 34 39 35 40 using namespace std; … … 51 56 if( world != NULL) delete world; 52 57 if( localinput != NULL) delete world; 53 if( localcamera != NULL) delete localcamera;54 58 if( resources != NULL) delete resources; 59 delete GraphicsEngine::getInstance(); // deleting the Graphics 60 delete ResourceManager::getInstance(); // deletes the Resource Manager 55 61 } 56 62 … … 110 116 int Orxonox::initVideo() 111 117 { 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 174 122 return 0; 175 123 } … … 215 163 int Orxonox::initResources() 216 164 { 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/"); 218 169 return 0; 219 170 } … … 270 221 { 271 222 // 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 } 272 230 } 273 231 … … 291 249 } 292 250 293 294 /**295 \brief retrieve a pointer to the local Camera296 \return a pointer to localcamera297 */298 Camera* Orxonox::getCamera()299 {300 return localcamera;301 }302 303 304 251 /** 305 252 \brief retrieve a pointer to the local CommandNode … … 329 276 } 330 277 278 279 331 280 /** 332 281 \brief main function … … 336 285 int main(int argc, char** argv) 337 286 { 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 312 int 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 322 int startOrxonox(int argc, char** argv) 323 { 338 324 printf(">>> Starting Orxonox <<<\n"); 339 325 Orxonox *orx = Orxonox::getInstance(); … … 347 333 orx->start(); 348 334 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 358 int 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.