//--------------------------------------------------------------------- void CompositorManager::_reconstructAllCompositorResources() { // In order to deal with shared resources, we have to disable *all* compositors // first, that way shared resources will get freed typedef vector<CompositorInstance*>::type InstVec; InstVec instancesToReenable; for (Chains::iterator i = mChains.begin(); i != mChains.end(); ++i) { CompositorChain* chain = i->second; CompositorChain::InstanceIterator instIt = chain->getCompositors(); while (instIt.hasMoreElements()) { CompositorInstance* inst = instIt.getNext(); if (inst->getEnabled()) { inst->setEnabled(false); instancesToReenable.push_back(inst); } } } //UVs are lost, and will never be reconstructed unless we do them again, now if( mRectangle ) mRectangle->setDefaultUVs(); for (InstVec::iterator i = instancesToReenable.begin(); i != instancesToReenable.end(); ++i) { CompositorInstance* inst = *i; inst->setEnabled(true); } }
//----------------------------------------------------------------------- void CompositorChain::setCompositorEnabled(size_t position, bool state) { CompositorInstance* inst = getCompositor(position); if (!state && inst->getEnabled()) { // If we're disabling a 'middle' compositor in a chain, we have to be // careful about textures which might have been shared by non-adjacent // instances which have now become adjacent. CompositorInstance* nextInstance = getNextInstance(inst, true); if (nextInstance) { CompositionTechnique::TargetPassIterator tpit = nextInstance->getTechnique()->getTargetPassIterator(); while(tpit.hasMoreElements()) { CompositionTargetPass* tp = tpit.getNext(); if (tp->getInputMode() == CompositionTargetPass::IM_PREVIOUS) { if (nextInstance->getTechnique()->getTextureDefinition(tp->getOutputName())->pooled) { // recreate nextInstance->freeResources(false, true); nextInstance->createResources(false); } } } } } inst->setEnabled(state); }
//--------------------------------------------------------------------- void CompositorManager::_reconstructAllCompositorResources() { for (Chains::iterator i = mChains.begin(); i != mChains.end(); ++i) { CompositorChain* chain = i->second; CompositorChain::InstanceIterator instIt = chain->getCompositors(); while (instIt.hasMoreElements()) { CompositorInstance* inst = instIt.getNext(); if (inst->getEnabled()) { inst->setEnabled(false); inst->setEnabled(true); } } } }