//--------------------------------------------------------------------- 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 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); } } } }
//--------------------------------------------------------------------- void CompositorInstance::deriveTextureRenderTargetOptions( const String& texname, bool *hwGammaWrite, uint *fsaa) { // search for passes on this texture def that either include a render_scene // or use input previous bool renderingScene = false; CompositionTechnique::TargetPassIterator it = mTechnique->getTargetPassIterator(); while (it.hasMoreElements()) { CompositionTargetPass* tp = it.getNext(); if (tp->getOutputName() == texname) { if (tp->getInputMode() == CompositionTargetPass::IM_PREVIOUS) { // this may be rendering the scene implicitly // Can't check mPreviousInstance against mChain->_getOriginalSceneCompositor() // at this time, so check the position CompositorChain::InstanceIterator instit = mChain->getCompositors(); renderingScene = true; while(instit.hasMoreElements()) { CompositorInstance* inst = instit.getNext(); if (inst == this) break; else if (inst->getEnabled()) { // nope, we have another compositor before us, this will // be doing the AA renderingScene = false; } } if (renderingScene) break; } else { // look for a render_scene pass CompositionTargetPass::PassIterator pit = tp->getPassIterator(); while(pit.hasMoreElements()) { CompositionPass* pass = pit.getNext(); if (pass->getType() == CompositionPass::PT_RENDERSCENE) { renderingScene = true; break; } } } } } if (renderingScene) { // Ok, inherit settings from target RenderTarget* target = mChain->getViewport()->getTarget(); *hwGammaWrite = target->isHardwareGammaEnabled(); *fsaa = target->getFSAA(); } else { *hwGammaWrite = false; *fsaa = 0; } }