//----------------------------------------------------------------------- void BeamRenderer::_destroyAll(void) { if (!mParentTechnique) return; // Remove the listener mParentTechnique->removeTechniqueListener(this); // Detach the billboardchain Ogre::SceneNode* parentNode = mParentTechnique->getParentSystem()->getParentSceneNode(); if (parentNode && mBillboardChain && mBillboardChain->isAttached()) { parentNode->detachObject(mBillboardChain); } // Delete the BillboardChain Ogre::SceneManager* sceneManager = mParentTechnique->getParentSystem()->getSceneManager(); if (mBillboardChain && sceneManager && sceneManager->hasBillboardChain(mBillboardChainName)) { sceneManager->destroyBillboardChain(mBillboardChainName); mBillboardChain = 0; } // Delete the visual data vector<BeamRendererVisualData*>::const_iterator it; vector<BeamRendererVisualData*>::const_iterator itEnd = mAllVisualData.end(); for (it = mAllVisualData.begin(); it != itEnd; ++it) { PU_DELETE_T(*it, BeamRendererVisualData, MEMCATEGORY_SCENE_OBJECTS); } mAllVisualData.clear(); mVisualData.clear(); // Reset the visual data in the pool mParentTechnique->initVisualDataInPool(); }