#include #include #include #include #include //#include namespace Ogre { //----------------------------------------------------------------------- VisibilityDotSceneManager::VisibilityDotSceneManager(GtpVisibility::VisibilityManager *visManager) :mVisibilityManager(visManager) { mHierarchyInterface = new SceneNodeHierarchyInterface(this, mDestRenderSystem); mShowBoundingBoxes = true; //mDisplayNodes = true; //mShowBoxes = true; } //----------------------------------------------------------------------- VisibilityDotSceneManager::~VisibilityDotSceneManager() { delete mHierarchyInterface; } //----------------------------------------------------------------------- void VisibilityDotSceneManager::_renderVisibleObjects(void) { //-- render background clearSpecialCaseRenderQueues(); addSpecialCaseRenderQueue(RENDER_QUEUE_BACKGROUND); addSpecialCaseRenderQueue(RENDER_QUEUE_SKIES_EARLY); setSpecialCaseRenderQueueMode(SceneManager::SCRQM_INCLUDE); DotSceneManager::_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 overlay clearSpecialCaseRenderQueues(); DotSceneManager::_renderVisibleObjects( ); clearSpecialCaseRenderQueues(); } //----------------------------------------------------------------------- void VisibilityDotSceneManager::_findVisibleObjects(Camera* cam, bool onlyShadowCasters) { // must be empty because objects are found and rendered in an interleaved fashion // in _renderVisibibleObjects } //----------------------------------------------------------------------- void VisibilityDotSceneManager::_updateSceneGraph(Camera* cam) { //mVisibilitySceneTraverser->setNumSceneNodes((int)mSceneNodes.size()); mVisibilityManager->GetCullingManager()->SetHierarchyInterface(mHierarchyInterface); mHierarchyInterface->SetRenderSystem(mDestRenderSystem); DotSceneManager::_updateSceneGraph(cam); } //----------------------------------------------------------------------- bool VisibilityDotSceneManager::setOption(const String & key, const void * val) { return /*mVisibilitySceneTraverser->setOption( key, val) || */DotSceneManager::setOption(key, val); } //----------------------------------------------------------------------- bool VisibilityDotSceneManager::getOption(const String & key, void *val) { return /*mVisibilitySceneTraverser->getOption( key, val) || */DotSceneManager::getOption(key, val); } //----------------------------------------------------------------------- bool VisibilityDotSceneManager::getOptionValues(const String & key, StringVector &refValueList) { return DotSceneManager::getOptionValues(key, refValueList); } //----------------------------------------------------------------------- bool VisibilityDotSceneManager::getOptionKeys(StringVector & refKeys) { return /*mVisibilitySceneTraverser->getOptionKeys ( refKeys ) || */DotSceneManager::getOptionKeys( refKeys ); } //----------------------------------------------------------------------- void VisibilityDotSceneManager::setVisibilityManager(GtpVisibility::VisibilityManager *visManager) { mVisibilityManager = visManager; } //----------------------------------------------------------------------- GtpVisibility::VisibilityManager *VisibilityDotSceneManager::getVisibilityManager() { return mVisibilityManager; } //} // namespace GtpVisibility } // namespace Ogre