/** * @brief * Sets the scene container */ bool SPScene::SetSceneContainer(SceneContainer *pContainer) { // Anything to do in here? if (pContainer == GetSceneContainer()) return true; // Done // Destroy the old cull query if (m_pCullQuery->GetElement()) { SceneQuery *pSceneQuery = m_pCullQuery->GetElement(); if (pSceneQuery) pSceneQuery->GetSceneContainer().DestroyQuery(*pSceneQuery); } // Create cull query SQCull *pCullQuery = static_cast<SQCull*>(m_pCullQuery->GetElement()); if (!pCullQuery && pContainer) { pCullQuery = static_cast<SQCull*>(pContainer->CreateQuery("PLScene::SQCull")); if (pCullQuery) { m_pCullQuery->SetElement(pCullQuery); // Set the cull mode pCullQuery->SetMode(SQCull::Frustum); // We do not need to inform any scene query listeners pCullQuery->SetFlags(0); } } // Set container return m_pSceneContainerHandler->SetElement(pContainer); }
/** * @brief * Destructor */ SPScene::~SPScene() { // Destroy scene root container handler delete m_pRootContainerHandler; // Destroy scene container handler delete m_pSceneContainerHandler; // Destroy the cull query if (m_pCullQuery) { SceneQuery *pSceneQuery = m_pCullQuery->GetElement(); if (pSceneQuery) pSceneQuery->GetSceneContainer().DestroyQuery(*pSceneQuery); delete m_pCullQuery; } // Destroy camera scene node handler delete m_pCameraNodeHandler; // Destroy the default scene renderer handler delete m_pDefaultSceneRendererHandler; }
/** * @brief * Destructor */ VisContainer::~VisContainer() { // Free all nodes FreeNodes(); // Destroy the query SceneQuery *pSceneQuery = m_pQueryHandler->GetElement(); if (pSceneQuery) pSceneQuery->GetSceneContainer().DestroyQuery(*pSceneQuery); delete m_pQueryHandler; { // Destroy all containers Iterator<VisContainer*> cIterator = m_mapContainers.GetIterator(); while (cIterator.HasNext()) delete cIterator.Next(); } { // Destroy all portals Iterator<VisPortal*> cIterator = m_mapPortals.GetIterator(); while (cIterator.HasNext()) delete cIterator.Next(); } }