#include #include #include #include #include "OgreVisibilitySceneManager.h" #include "OgreSceneNodeHierarchyInterface.h" //#include namespace Ogre { //namespace GtpVisibility { //----------------------------------------------------------------------- VisibilitySceneManager::VisibilitySceneManager(GtpVisibility::VisibilityManager *visManager) :mVisibilityManager(visManager) { mHierarchyInterface = new SceneNodeHierarchyInterface(this, mDestRenderSystem); } //----------------------------------------------------------------------- VisibilitySceneManager::~VisibilitySceneManager() { delete mHierarchyInterface; } //----------------------------------------------------------------------- void VisibilitySceneManager::_findVisibleObjects(Camera* cam, bool onlyShadowCasters) { // empty because we have to find objects in _renderVisibleObjects } //----------------------------------------------------------------------- void VisibilitySceneManager::_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 overlay clearSpecialCaseRenderQueues(); SceneManager::_renderVisibleObjects( ); clearSpecialCaseRenderQueues(); } //----------------------------------------------------------------------- void VisibilitySceneManager::_updateSceneGraph(Camera* cam) { //mVisibilitySceneTraverser->setNumSceneNodes((int)mSceneNodes.size()); mVisibilityManager->GetCullingManager()->SetHierarchyInterface(mHierarchyInterface); mHierarchyInterface->SetRenderSystem(mDestRenderSystem); //mVisibilitySceneTraverser->setNumQueries((int)mSceneNodes.size()); SceneManager::_updateSceneGraph(cam); } //----------------------------------------------------------------------- bool VisibilitySceneManager::setOption(const String & key, const void * val) { //mVisibilitySceneTraverser->setOption(key, val); return SceneManager::setOption(key, val); } //----------------------------------------------------------------------- bool VisibilitySceneManager::getOption(const String & key, void *val) { //mVisibilitySceneTraverser->getOption(key, val); return SceneManager::getOption(key, val); } //----------------------------------------------------------------------- bool VisibilitySceneManager::getOptionValues(const String & key, StringVector &refValueList) { return SceneManager::getOptionValues(key, refValueList); } //----------------------------------------------------------------------- bool VisibilitySceneManager::getOptionKeys(StringVector & refKeys) { SceneManager::getOptionKeys(refKeys); //mVisibilitySceneTraverser->getOptionKeys( refKeys ); return true; } //----------------------------------------------------------------------- void VisibilitySceneManager::setVisibilityManager(GtpVisibility::VisibilityManager *visManager) { mVisibilityManager = visManager; } //----------------------------------------------------------------------- GtpVisibility::VisibilityManager *VisibilitySceneManager::getVisibilityManager( void ) { return mVisibilityManager; } //} // namespace GtpVisibility } // namespace Ogre