void GUIHelper::fullDestroyOverlaySingleE(Ogre::OverlayElement *elem) { ASSERT(elem); Ogre::OverlayManager &om = Ogre::OverlayManager::getSingleton(); destroyMaterial(elem->getMaterialName()); om.destroyOverlayElement(elem); }
void GUIHelper::fullDestroyOverlayElement(Ogre::OverlayContainer *elem) { ASSERT(elem); Ogre::OverlayManager &om = Ogre::OverlayManager::getSingleton(); Ogre::OverlayContainer::ChildIterator it = elem->getChildIterator(); Ogre::OverlayContainer *child = 0; // TODO: cuidado aca que podemos estar teniendo SIGSEV si tenemos // muchos overlays anidados, deberiamos guardarlos capaz en un container // y luego liberar todos de una como en la funcion de arriba while(it.hasMoreElements()){ child = static_cast<Ogre::OverlayContainer *>(it.peekNextValue()); if(!child){ break; } // else.. we have to configure this child with the parent size and // position fullDestroyOverlayElement(child); it.moveNext(); } destroyMaterial(elem->getMaterialName()); om.destroyOverlayElement(elem); }
void CBlinkingMaterialManager::removeMaterial(const Ogre::String &nonBlinkingMatName) { // already created? for (auto &mat : m_lMaterials) { if (mat.name == nonBlinkingMatName) { mat.counter--; // increase counter if (mat.counter >= 0) { // destroy material destroyMaterial(mat); } return; } } }
iMaterialResourceFactory::~iMaterialResourceFactory() { iRenderer::getInstance().unregisterInitializedDelegate(iRendererInitializedDelegate(this, &iMaterialResourceFactory::initDefaultMaterial)); if (_defaultID != iMaterial::INVALID_MATERIAL_ID) { destroyMaterial(_defaultID); } if (!_materials.empty()) { con_debug_endl(static_cast<int>(_materials.size()) << " materials left. will clean up for you"); } auto materialIter = _materials.begin(); while (materialIter != _materials.end()) { delete (*materialIter); ++materialIter; } _materials.clear(); _materialMap.clear(); _currentMaterial = 0; if(!_targetMaterials.empty()) { con_err("possible mem leak! " << _targetMaterials.size() << " target materials left"); } auto targetmaterialIter = _targetMaterials.begin(); while (targetmaterialIter != _targetMaterials.end()) { delete (*targetmaterialIter); ++targetmaterialIter; } _targetMaterials.clear(); }
void GUIHelper::fullDestroyOverlay(Ogre::Overlay *overlay) { ASSERT(overlay); Ogre::Overlay::Overlay2DElementsIterator it = overlay->get2DElementsIterator(); Ogre::OverlayManager &om = Ogre::OverlayManager::getSingleton(); std::vector<Ogre::OverlayElement *> elements; Ogre::OverlayContainer *parent = 0; while(it.hasMoreElements()){ parent = it.peekNext(); if(!parent){ break; } Ogre::OverlayContainer::ChildIterator it2 = parent->getChildIterator(); Ogre::OverlayContainer *child = 0; while(it2.hasMoreElements()){ child = static_cast<Ogre::OverlayContainer *>(it2.peekNextValue()); if(!child){ break; } // else.. delete the container fullDestroyOverlayElement(child); it2.moveNext(); } elements.push_back(parent); it.moveNext(); } for(int i = 0; i < elements.size(); ++i){ destroyMaterial(elements[i]->getMaterialName()); om.destroyOverlayElement(elements[i]); } om.destroy(overlay); }
void BRDFMaterial::destroy() { if (baseColor.get()) { baseColor->destroy(); } if (metallic.get()) { metallic->destroy(); } if (specular.get()) { specular->destroy(); } if (roughness.get()) { roughness->destroy(); } destroyMaterial(); }