Пример #1
0
void GUIHelper::fullDestroyOverlaySingleE(Ogre::OverlayElement *elem)
{
	ASSERT(elem);
	Ogre::OverlayManager &om = Ogre::OverlayManager::getSingleton();
	destroyMaterial(elem->getMaterialName());
	om.destroyOverlayElement(elem);
}
Пример #2
0
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;
        }
    }
}
Пример #4
0
	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();
	}
Пример #5
0
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);
}
Пример #6
0
void BRDFMaterial::destroy()
{
    if (baseColor.get())
    {
        baseColor->destroy();
    }

    if (metallic.get())
    {
        metallic->destroy();
    }

    if (specular.get())
    {
        specular->destroy();
    }

    if (roughness.get())
    {
        roughness->destroy();
    }

    destroyMaterial();
}