From: <vo...@us...> - 2008-01-02 15:51:42
|
Revision: 508 http://opde.svn.sourceforge.net/opde/?rev=508&view=rev Author: volca Date: 2008-01-02 07:51:47 -0800 (Wed, 02 Jan 2008) Log Message: ----------- Default viewport and camera getters Modified Paths: -------------- trunk/src/services/render/RenderService.cpp trunk/src/services/render/RenderService.h Modified: trunk/src/services/render/RenderService.cpp =================================================================== --- trunk/src/services/render/RenderService.cpp 2008-01-02 15:51:13 UTC (rev 507) +++ trunk/src/services/render/RenderService.cpp 2008-01-02 15:51:47 UTC (rev 508) @@ -56,6 +56,11 @@ RenderService::~RenderService() { LOG_INFO("RenderService::~RenderService()"); + // Good thing about services. Render service will be released as the last + // one thanks to the shared_ptr. This means using the scene manager/whatever + // is safe outside this class as long as it is done in a service which has + // a member pointer to render service + if (!mPropPosition.isNull()) mPropPosition->unregisterListener(mPropPositionListenerID); @@ -67,6 +72,17 @@ delete mDarkSMFactory; mDarkSMFactory = NULL; } + + if (mRenderWindow) + mRenderWindow->removeAllViewports(); + + if (mSceneMgr) + mSceneMgr->destroyAllCameras(); + + if (!mLoopService.isNull()) + mLoopService->removeLoopClient(this); + + // TODO: Delete Ogre::Root safe here? } // -------------------------------------------------------------------------- @@ -93,7 +109,16 @@ // Get the resolution parameters, and instantinate ogre display. We expect the Ogre::Root to be already defined mSceneMgr = mRoot->getSceneManager("DarkSceneManager"); // TODO: Really bad idea. Same goes to the WorldrepService + + // Next step. We create a default camera in the mRenderWindow + mDefaultCamera = mSceneMgr->createCamera( "MainCamera" ); + mRenderWindow->addViewport( mDefaultCamera ); + + // Last step: Get the loop service and register as a listener + mLoopService = ServiceManager::getSingleton().getService("LoopService").as<LoopService>(); + mLoopService->addLoopClient(this); + return true; } @@ -115,7 +140,19 @@ assert(mRenderWindow); return mRenderWindow; } + + // -------------------------------------------------------------------------- + Ogre::Viewport* RenderService::getDefaultViewport() { + return mDefaultCamera->getViewport(); + } + + // -------------------------------------------------------------------------- + Ogre::Camera* RenderService::getDefaultCamera() { + return mDefaultCamera; + } + + // -------------------------------------------------------------------------- void RenderService::setScreenSize(bool fullScreen, unsigned int width, unsigned int height) { assert(mRenderWindow); Modified: trunk/src/services/render/RenderService.h =================================================================== --- trunk/src/services/render/RenderService.h 2008-01-02 15:51:13 UTC (rev 507) +++ trunk/src/services/render/RenderService.h 2008-01-02 15:51:47 UTC (rev 508) @@ -77,6 +77,18 @@ Ogre::Root* getOgreRoot(); Ogre::SceneManager* getSceneManager(); Ogre::RenderWindow* getRenderWindow(); + + /** + Getter for the default viewport. Most of the time sufficient (for game) + @returns The default viewport (Viewport of the default camera ) + */ + Ogre::Viewport* getDefaultViewport(); + + /** + Getter for the default camera. Default camera is a camera named "DefaultCamera" that is autocreated and added to the autocreated window + @returns The default camera + */ + Ogre::Camera* getDefaultCamera(); /// Screen size setter. Please use this instead of the Ogre::RenderWindow methods, as it broadcasts a message about the change void setScreenSize(bool fullScreen, unsigned int width, unsigned int height); @@ -134,9 +146,14 @@ Ogre::RenderWindow* mRenderWindow; /// Factory instance for the DarkSceneManager Ogre::DarkSceneManagerFactory* mDarkSMFactory; + /// Default camera. Used solely for game mode + Ogre::Camera* mDefaultCamera; /// Manual loader for bin meshes Ogre::ManualBinFileLoader* mManualBinFileLoader; + + /// Pointer for loop service + LoopServicePtr mLoopService; }; /// Shared pointer to Link service This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |