#include "OgreVisibilityTerrainSceneManager.h" #include "OgreOctreeHierarchyInterface.h" #include "OgreVisibilityOptionsManager.h" #include #include #include #include //#include namespace Ogre { //namespace GtpVisibility { //----------------------------------------------------------------------- VisibilityTerrainSceneManager::VisibilityTerrainSceneManager(GtpVisibility::VisibilityManager *visManager) :mVisibilityManager(visManager) { mHierarchyInterface = new OctreeHierarchyInterface(this, mDestRenderSystem); setVisibilityManager(visManager); mShowBoxes = true; //mDisplayNodes = true; mShowBoundingBoxes = true; mMaxDepth = 20; } //----------------------------------------------------------------------- VisibilityTerrainSceneManager::~VisibilityTerrainSceneManager() { delete mHierarchyInterface; } //----------------------------------------------------------------------- void VisibilityTerrainSceneManager::_renderVisibleObjects() { //-- render background clearSpecialCaseRenderQueues(); addSpecialCaseRenderQueue(RENDER_QUEUE_BACKGROUND); addSpecialCaseRenderQueue(RENDER_QUEUE_SKIES_EARLY); setSpecialCaseRenderQueueMode(SceneManager::SCRQM_INCLUDE); SceneManager::_renderVisibleObjects(); #ifdef GTP_VISIBILITY_MODIFIED_OGRE _deleteRenderedQueueGroups(); #endif //-- render visible objects (i.e., all but overlay) clearSpecialCaseRenderQueues(); addSpecialCaseRenderQueue(RENDER_QUEUE_OVERLAY); setSpecialCaseRenderQueueMode(SceneManager::SCRQM_EXCLUDE); mHierarchyInterface->InitFrame(mOctree, mCameraInProgress); mVisibilityManager->ApplyVisibilityCulling(); #ifdef GTP_VISIBILITY_MODIFIED_OGRE _deleteRenderedQueueGroups(); #endif //-- render overlay clearSpecialCaseRenderQueues(); SceneManager::_renderVisibleObjects( ); } //----------------------------------------------------------------------- void VisibilityTerrainSceneManager::_findVisibleObjects(Camera* cam, bool onlyShadowCasters) { // must be empty because objects are found and rendered in an interleaved fashion // in _renderVisibibleObjects } //----------------------------------------------------------------------- void VisibilityTerrainSceneManager::_updateSceneGraph(Camera* cam) { //mHierarchyInterface->setNumSceneNodes((int)mSceneNodes.size()); mVisibilityManager->GetCullingManager()->SetHierarchyInterface(mHierarchyInterface); mHierarchyInterface->SetRenderSystem(mDestRenderSystem); #ifdef GTP_VISIBILITY_MODIFIED_OGRE mHierarchyInterface->SetNumOctreeNodes(mNumOctreeNodes); #endif TerrainSceneManager::_updateSceneGraph(cam); } //----------------------------------------------------------------------- bool VisibilityTerrainSceneManager::setOption(const String & key, const void * val) { return VisibilityOptionsManager(mVisibilityManager, mHierarchyInterface). setOption(key, val) || TerrainSceneManager::setOption(key, val); } //----------------------------------------------------------------------- bool VisibilityTerrainSceneManager::getOption(const String & key, void *val) { if (key == "NumHierarchyNodes") { * static_cast(val) = (unsigned int)mNumOctreeNodes; return true; } return VisibilityOptionsManager(mVisibilityManager, mHierarchyInterface). getOption(key, val) && TerrainSceneManager::getOption(key, val); } //----------------------------------------------------------------------- bool VisibilityTerrainSceneManager::getOptionValues(const String & key, StringVector &refValueList) { return TerrainSceneManager::getOptionValues( key, refValueList); } //----------------------------------------------------------------------- bool VisibilityTerrainSceneManager::getOptionKeys(StringVector & refKeys) { return VisibilityOptionsManager(mVisibilityManager, mHierarchyInterface). getOptionKeys(refKeys) || TerrainSceneManager::getOptionKeys(refKeys); } //----------------------------------------------------------------------- void VisibilityTerrainSceneManager::setVisibilityManager(GtpVisibility::VisibilityManager *visManager) { mVisibilityManager = visManager; } //----------------------------------------------------------------------- GtpVisibility::VisibilityManager *VisibilityTerrainSceneManager::getVisibilityManager( void ) { return mVisibilityManager; } //} // namespace GtpVisibility } // namespace Ogre