Changeset 3349 for code/branches/resource/src/core
- Timestamp:
- Jul 25, 2009, 2:14:05 PM (16 years ago)
- Location:
- code/branches/resource/src/core
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/resource/src/core/Core.cc
r3348 r3349 41 41 #include <cstdio> 42 42 #include <boost/filesystem.hpp> 43 #include <OgreRenderWindow.h> 43 44 44 45 #ifdef ORXONOX_PLATFORM_WINDOWS … … 69 70 #include "Factory.h" 70 71 #include "GameMode.h" 72 #include "GraphicsManager.h" 73 #include "GUIManager.h" 71 74 #include "Identifier.h" 72 75 #include "Language.h" … … 75 78 #include "TclBind.h" 76 79 #include "TclThreadManager.h" 80 #include "input/InputManager.h" 77 81 78 82 namespace orxonox … … 346 350 return; 347 351 352 // Load OGRE including the render window 353 this->graphicsManager_ = new GraphicsManager(); 354 355 // The render window width and height are used to set up the mouse movement. 356 size_t windowHnd = 0; 357 Ogre::RenderWindow* renderWindow = GraphicsManager::getInstance().getRenderWindow(); 358 renderWindow->getCustomAttribute("WINDOW", &windowHnd); 359 360 // Calls the InputManager which sets up the input devices. 361 inputManager_ = new InputManager(windowHnd); 362 363 // load the CEGUI interface 364 guiManager_ = new GUIManager(renderWindow); 365 348 366 GameMode::setShowsGraphics(true); 349 367 bGraphicsLoaded_ = true; … … 354 372 if (!bGraphicsLoaded_) 355 373 return; 374 375 delete this->guiManager_; 376 delete this->inputManager_; 377 delete graphicsManager_; 356 378 357 379 bGraphicsLoaded_ = false; … … 646 668 } 647 669 648 void Core::update(const Clock& time) 649 { 650 this->tclThreadManager_->update(time); 670 bool Core::preUpdate(const Clock& time) throw() 671 { 672 std::string exceptionMessage; 673 try 674 { 675 // process input events 676 this->inputManager_->update(time); 677 // process gui events 678 this->guiManager_->update(time); 679 // process thread commands 680 this->tclThreadManager_->update(time); 681 } 682 catch (const std::exception& ex) 683 { exceptionMessage = ex.what(); } 684 catch (...) 685 { exceptionMessage = "Unknown exception"; } 686 if (!exceptionMessage.empty()) 687 { 688 COUT(0) << "An exception occurred in the Core preUpdate: " << exceptionMessage << std::endl; 689 COUT(0) << "This should really never happen! Closing the program." << std::endl; 690 return false; 691 } 692 return true; 693 } 694 695 bool Core::postUpdate(const Clock& time) throw() 696 { 697 std::string exceptionMessage; 698 try 699 { 700 // Render (doesn't throw) 701 this->graphicsManager_->update(time); 702 } 703 catch (const std::exception& ex) 704 { exceptionMessage = ex.what(); } 705 catch (...) 706 { exceptionMessage = "Unknown exception"; } 707 if (!exceptionMessage.empty()) 708 { 709 COUT(0) << "An exception occurred in the Core postUpdate: " << exceptionMessage << std::endl; 710 COUT(0) << "This should really never happen! Closing the program." << std::endl; 711 return false; 712 } 713 return true; 651 714 } 652 715 } -
code/branches/resource/src/core/Core.h
r3345 r3349 71 71 void setConfigValues(); 72 72 73 void update(const Clock& time); 73 bool preUpdate(const Clock& time) throw(); 74 bool postUpdate(const Clock& time) throw(); 74 75 75 76 void loadGraphics(); … … 119 120 TclBind* tclBind_; 120 121 TclThreadManager* tclThreadManager_; 122 // graphical 123 InputManager* inputManager_; //!< Interface to OIS 124 GUIManager* guiManager_; //!< Interface to GUI 125 GraphicsManager* graphicsManager_; //!< Interface to OGRE 121 126 122 127 bool bDevRun_; //!< True for runs in the build directory (not installed) -
code/branches/resource/src/core/Game.cc
r3323 r3349 245 245 } 246 246 247 // UPDATE, Core first 248 bool threwException = false; 249 try 250 { 251 this->core_->update(*this->gameClock_); 252 } 253 catch (const std::exception& ex) 254 { 255 threwException = true; 256 COUT(0) << "Exception while ticking the Core: " << ex.what() << std::endl; 257 } 258 catch (...) 259 { 260 threwException = true; 261 } 262 if (threwException) 263 { 264 COUT(0) << "An exception occured while ticking the Core. This should really never happen!" << std::endl; 265 COUT(0) << "Closing the program." << std::endl; 247 // UPDATE, Core preUpdate (doesn't throw) 248 if (!this->core_->preUpdate(*this->gameClock_)) 249 { 266 250 this->stop(); 267 251 break; … … 273 257 it != this->activeStates_.end(); ++it) 274 258 { 275 bool threwException = false;259 std::string exceptionMessage; 276 260 try 277 261 { 278 262 // Add tick time for most of the states 279 263 uint64_t timeBeforeTick; 280 if ( !(*it)->ignoreTickTime())264 if ((*it)->ignoreTickTime()) 281 265 timeBeforeTick = this->gameClock_->getRealMicroseconds(); 282 266 (*it)->update(*this->gameClock_); 283 if ( !(*it)->ignoreTickTime())284 this-> addTickTime(static_cast<uint32_t>(this->gameClock_->getRealMicroseconds() - timeBeforeTick));267 if ((*it)->ignoreTickTime()) 268 this->subtractTickTime(static_cast<int32_t>(this->gameClock_->getRealMicroseconds() - timeBeforeTick)); 285 269 } 286 270 catch (const std::exception& ex) 271 { exceptionMessage = ex.what(); } 272 catch (...) 273 { exceptionMessage = "Unknown exception"; } 274 if (!exceptionMessage.empty()) 287 275 { 288 threwException = true; 289 COUT(0) << "Exception while ticking: " << ex.what() << std::endl; 290 } 291 catch (...) 292 { 293 threwException = true; 294 } 295 if (threwException) 296 { 297 COUT(1) << "An exception occured while ticking GameState '" << (*it)->getName() << "'. This should really never happen!" << std::endl; 276 COUT(1) << "An exception occurred while updating '" << (*it)->getName() << "': " << exceptionMessage << std::endl; 277 COUT(1) << "This should really never happen!" << std::endl; 298 278 COUT(1) << "Unloading all GameStates depending on the one that crashed." << std::endl; 299 279 if ((*it)->getParent() != NULL) … … 304 284 } 305 285 286 } 287 288 // UPDATE, Core postUpdate (doesn't throw) 289 if (!this->core_->postUpdate(*this->gameClock_)) 290 { 291 this->stop(); 292 break; 306 293 } 307 294 … … 344 331 } 345 332 346 void Game:: addTickTime(uint32_t length)333 void Game::subtractTickTime(int32_t length) 347 334 { 348 335 assert(!this->statisticsTickTimes_.empty()); 349 this->statisticsTickTimes_.back().tickLength += length;350 this->periodTickTime_ +=length;336 this->statisticsTickTimes_.back().tickLength -= length; 337 this->periodTickTime_ -= length; 351 338 } 352 339 -
code/branches/resource/src/core/Game.h
r3323 r3349 86 86 float getAvgFPS() { return this->avgFPS_; } 87 87 88 void addTickTime(uint32_t length);88 void subtractTickTime(int32_t length); 89 89 90 90 template <class T> -
code/branches/resource/src/core/GraphicsManager.cc
r3346 r3349 196 196 this->renderWindow_->setActive(true); 197 197 198 // render 198 // Time before rendering 199 uint64_t timeBeforeTick = time.getRealMicroseconds(); 200 201 // Render frame 199 202 ogreRoot_->_updateAllRenderTargets(); 203 204 uint64_t timeAfterTick = time.getRealMicroseconds(); 205 // Subtract the time used for rendering from the tick time counter 206 Game::getInstance().subtractTickTime(timeAfterTick - timeBeforeTick); 200 207 201 208 // again, just to be sure OGRE works fine
Note: See TracChangeset
for help on using the changeset viewer.