Esempio n. 1
0
/**
*  @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);
}
Esempio n. 2
0
/**
*  @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;
}
Esempio n. 3
0
/**
*  @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();
	}
}