#include "OgreOcclusionCullingSceneManager.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 { //----------------------------------------------------------------------- OcclusionCullingSceneManager::OcclusionCullingSceneManager() { mOcclusionCullingSceneTraverser = new OcclusionCullingSceneTraverser(this, mDestRenderSystem); } //----------------------------------------------------------------------- OcclusionCullingSceneManager::~OcclusionCullingSceneManager() { delete mOcclusionCullingSceneTraverser; } //----------------------------------------------------------------------- void OcclusionCullingSceneManager::_findVisibleObjects( Camera* cam, bool onlyShadowCasters ) { // empty because we have to find objects in _renderVisibleObjects } //----------------------------------------------------------------------- void OcclusionCullingSceneManager::_renderVisibleObjects( void ) { //-- render background clearSpecialCaseRenderQueues(); addSpecialCaseRenderQueue(RENDER_QUEUE_BACKGROUND); addSpecialCaseRenderQueue(RENDER_QUEUE_SKIES_EARLY); setSpecialCaseRenderQueueMode(SceneManager::SCRQM_INCLUDE); SceneManager::_renderVisibleObjects( ); _deleteRenderedQueueGroups(); //-- render visible objects (i.e., all but overlay) clearSpecialCaseRenderQueues(); addSpecialCaseRenderQueue(RENDER_QUEUE_OVERLAY); setSpecialCaseRenderQueueMode(SceneManager::SCRQM_EXCLUDE); mOcclusionCullingSceneTraverser->setSceneRoot(mSceneRoot); mOcclusionCullingSceneTraverser->renderScene(mCameraInProgress); _deleteRenderedQueueGroups(); //-- render overlay clearSpecialCaseRenderQueues(); SceneManager::_renderVisibleObjects( ); clearSpecialCaseRenderQueues(); } //----------------------------------------------------------------------- /*void OcclusionCullingSceneManager::renderZPass() { traverseNode(mSceneRoot); }*/ //----------------------------------------------------------------------- void OcclusionCullingSceneManager::_updateSceneGraph( Camera* cam ) { mOcclusionCullingSceneTraverser->setNumSceneNodes((int)mSceneNodes.size()); mOcclusionCullingSceneTraverser->setRenderSystem(mDestRenderSystem); //mOcclusionCullingSceneTraverser->setNumQueries((int)mSceneNodes.size()); //mOcclusionCullingSceneTraverser->preprocess(); SceneManager::_updateSceneGraph(cam); } //----------------------------------------------------------------------- bool OcclusionCullingSceneManager::setOption( const String & key, const void * val ) { mOcclusionCullingSceneTraverser->setOption(key, val); return SceneManager::setOption( key, val ); } //----------------------------------------------------------------------- bool OcclusionCullingSceneManager::getOption( const String & key, void *val ) { mOcclusionCullingSceneTraverser->getOption(key, val); return SceneManager::getOption( key, val ); } //----------------------------------------------------------------------- bool OcclusionCullingSceneManager::getOptionValues( const String & key, StringVector &refValueList ) { return SceneManager::getOptionValues( key, refValueList ); } //----------------------------------------------------------------------- bool OcclusionCullingSceneManager::getOptionKeys( StringVector & refKeys ) { SceneManager::getOptionKeys( refKeys ); mOcclusionCullingSceneTraverser->getOptionKeys( refKeys ); return true; } }