my solution(W.I.P)
Code: Select all
void SceneManager::clearScene(void)
{
destroyAllStaticGeometry();
destroyAllInstanceManagers();
destroyAllMovableObjects();
// Clear root node of all children
getRootSceneNode()->removeAllChildren();
getRootSceneNode()->detachAllObjects();
// Delete all SceneNodes, except root that is
for (SceneNodeList::iterator i = mSceneNodes.begin();
i != mSceneNodes.end(); ++i)
{
OGRE_DELETE i->second;
}
mSceneNodes.clear();
mAutoTrackingSceneNodes.clear();
// Clear animations
destroyAllAnimations();
// Remove sky nodes since they've been deleted
mSkyBoxNode = mSkyPlaneNode = mSkyDomeNode = 0;
mSkyBoxEnabled = mSkyPlaneEnabled = mSkyDomeEnabled = false;
//Nick.start:why not cleaned?
destroyAllEntities();
destroyAllBillboardSets();
destroyAllBillboardChains();
destroyAllInstancedGeometry();
destroyAllParticleSystems();
destroyAllRibbonTrails();
destroyAllLights();
//Nick:end
// Clear render queue, empty completely
if (mRenderQueue)
mRenderQueue->clear(true);
}