#include "OgreOcclusionCullingDotSceneManager.h" #include "OgreMath.h" #include "OgreIteratorWrappers.h" #include "OgreRenderSystem.h" #include "OgreCamera.h" #include "OgreHardwareOcclusionQuery.h" //#include "OgreWireBoundingBox.h" #include "OgreSolidHalfBoundingBox.h" //#include namespace Ogre { //----------------------------------------------------------------------- OcclusionCullingDotSceneManager::OcclusionCullingDotSceneManager() { mOcclusionCullingSceneTraverser = new OcclusionCullingSceneTraverser(this, mDestRenderSystem); //mDisplayNodes = true; mShowBoundingBoxes = true; //mShowBoxes = true; } //----------------------------------------------------------------------- OcclusionCullingDotSceneManager::~OcclusionCullingDotSceneManager() { delete mOcclusionCullingSceneTraverser; } //----------------------------------------------------------------------- void OcclusionCullingDotSceneManager::_renderVisibleObjects(void) { //-- render background clearSpecialCaseRenderQueues(); addSpecialCaseRenderQueue(RENDER_QUEUE_BACKGROUND); addSpecialCaseRenderQueue(RENDER_QUEUE_SKIES_EARLY); setSpecialCaseRenderQueueMode(SceneManager::SCRQM_INCLUDE); DotSceneManager::_renderVisibleObjects( ); _deleteRenderedQueueGroups(); //-- render visible objects (i.e., all but overlay) clearSpecialCaseRenderQueues(); addSpecialCaseRenderQueue(RENDER_QUEUE_OVERLAY); setSpecialCaseRenderQueueMode(SceneManager::SCRQM_EXCLUDE); mOcclusionCullingSceneTraverser->renderScene(mCameraInProgress, mSceneRoot); _deleteRenderedQueueGroups(); //-- render overlay clearSpecialCaseRenderQueues(); DotSceneManager::_renderVisibleObjects( ); clearSpecialCaseRenderQueues(); } //----------------------------------------------------------------------- void OcclusionCullingDotSceneManager::_findVisibleObjects(Camera* cam, bool onlyShadowCasters) { // must be empty because objects are found and rendered in an interleaved fashion // in _renderVisibibleObjects } //----------------------------------------------------------------------- void OcclusionCullingDotSceneManager::_updateSceneGraph(Camera* cam) { mOcclusionCullingSceneTraverser->setNumSceneNodes(mSceneNodes.size()); mOcclusionCullingSceneTraverser->setRenderSystem(mDestRenderSystem); mOcclusionCullingSceneTraverser->preprocess(); DotSceneManager::_updateSceneGraph(cam); } //----------------------------------------------------------------------- bool OcclusionCullingDotSceneManager::setOption( const String & key, const void * val ) { return mOcclusionCullingSceneTraverser->setOption( key, val) || DotSceneManager::setOption( key, val ); } //----------------------------------------------------------------------- bool OcclusionCullingDotSceneManager::getOption( const String & key, void *val ) { return mOcclusionCullingSceneTraverser->getOption( key, val) || DotSceneManager::getOption( key, val ) ; } //----------------------------------------------------------------------- bool OcclusionCullingDotSceneManager::getOptionValues( const String & key, StringVector &refValueList ) { return DotSceneManager::getOptionValues( key, refValueList ); } //----------------------------------------------------------------------- bool OcclusionCullingDotSceneManager::getOptionKeys( StringVector & refKeys ) { return mOcclusionCullingSceneTraverser->getOptionKeys ( refKeys ) || DotSceneManager::getOptionKeys( refKeys ); } }