#include "OgreVisibilityBspSceneManager.h" #include #include #include #include #include namespace Ogre { //----------------------------------------------------------------------- VisibilityBspSceneManager::VisibilityBspSceneManager( GtpVisibility::Manager *visManager): mVisibilityManager(visManager) { mHierarchyInterface = new BspHierarchyInterface(this, mDestRenderSystem); //mDisplayNodes = true; //mShowBoundingBoxes = true; //mShowBoxes = true; //mMaxDepth = 20; } //----------------------------------------------------------------------- VisibilityBspSceneManager::~VisibilityBspSceneManager() { delete mHierarchyInterface; } //----------------------------------------------------------------------- void VisibilityBspSceneManager::_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(mSceneRoot, mCameraInProgress); mVisibilityManager->ApplyVisibilityCulling(); #ifdef GTP_VISIBILITY_MODIFIED_OGRE _deleteRenderedQueueGroups(); #endif //-- render rest, e.g., overlay clearSpecialCaseRenderQueues(); SceneManager::_renderVisibleObjects(); //_deleteRenderedQueueGroups(); } //----------------------------------------------------------------------- void VisibilityBspSceneManager::_findVisibleObjects(Camera* cam, bool onlyShadowCasters) { // must be empty because objects are found and rendered in an interleaved fashion // in _renderVisibibleObjects } //----------------------------------------------------------------------- void VisibilityBspSceneManager::_updateSceneGraph(Camera* cam) { //mOcclusionBspHierarchyInterface->setNumSceneNodes((int)mSceneNodes.size()); mVisibilityManager->GetCullingManager()->SetHierarchyInterface(mHierarchyInterface); mHierarchyInterface->SetRenderSystem(mDestRenderSystem); #ifdef GTP_VISIBILITY_MODIFIED_OGRE mHierarchyInterface->SetNumOctreeNodes(mNumOctreeNodes); #endif BspSceneManager::_updateSceneGraph(cam); } //----------------------------------------------------------------------- bool VisibilityBspSceneManager::setOption(const String & key, const void * val) { return /*mVisibilitySceneTraverser->setOption( key, val) || */BspSceneManager::setOption( key, val ); } //----------------------------------------------------------------------- bool VisibilityBspSceneManager::getOption(const String & key, void *val) { return /*mVisibilitySceneTraverser->getOption( key, val) || */BspSceneManager::getOption(key, val); } //----------------------------------------------------------------------- bool VisibilityBspSceneManager::getOptionValues(const String & key, StringVector &refValueList) { return BspSceneManager::getOptionValues( key, refValueList ); } //----------------------------------------------------------------------- bool VisibilityBspSceneManager::getOptionKeys(StringVector & refKeys) { return /*mVisibilitySceneTraverser->getOptionKeys ( refKeys ) || */BspSceneManager::getOptionKeys(refKeys); } //----------------------------------------------------------------------- void VisibilityBspSceneManager::setVisibilityManager(GtpVisibility::Manager *visManager) { mVisibilityManager = visManager; } //----------------------------------------------------------------------- GtpVisibility::Manager *VisibilityBspSceneManager::getVisibilityManager() { return mVisibilityManager; } } // namespace Ogre