//----------------------------------------------------------------------- void CompositorChain::preViewportUpdate(const RenderTargetViewportEvent& evt) { // Only set up if there is at least one compositor enabled, and it's this viewport if(evt.source != mViewport || !mAnyCompositorsEnabled) return; // set original scene details from viewport CompositionPass* pass = mOriginalScene->getTechnique()->getOutputTargetPass()->getPass(0); CompositionTargetPass* passParent = pass->getParent(); if (pass->getClearBuffers() != mViewport->getClearBuffers() || pass->getClearColour() != mViewport->getBackgroundColour() || passParent->getVisibilityMask() != mViewport->getVisibilityMask() || passParent->getMaterialScheme() != mViewport->getMaterialScheme() || passParent->getShadowsEnabled() != mViewport->getShadowsEnabled()) { // recompile if viewport settings are different pass->setClearBuffers(mViewport->getClearBuffers()); pass->setClearColour(mViewport->getBackgroundColour()); passParent->setVisibilityMask(mViewport->getVisibilityMask()); passParent->setMaterialScheme(mViewport->getMaterialScheme()); passParent->setShadowsEnabled(mViewport->getShadowsEnabled()); _compile(); } Camera *cam = mViewport->getCamera(); if (cam) { /// Prepare for output operation preTargetOperation(mOutputOperation, mViewport, cam); } }
//----------------------------------------------------------------------- void CompositorInstance::_compileTargetOperations(CompiledState &compiledState) { /// Collect targets of previous state if(mPreviousInstance) mPreviousInstance->_compileTargetOperations(compiledState); /// Texture targets CompositionTechnique::TargetPassIterator it = mTechnique->getTargetPassIterator(); while(it.hasMoreElements()) { CompositionTargetPass *target = it.getNext(); TargetOperation ts(getTargetForTex(target->getOutputName())); /// Set "only initial" flag, visibilityMask and lodBias according to CompositionTargetPass. ts.onlyInitial = target->getOnlyInitial(); ts.visibilityMask = target->getVisibilityMask(); ts.lodBias = target->getLodBias(); ts.shadowsEnabled = target->getShadowsEnabled(); /// Check for input mode previous if(target->getInputMode() == CompositionTargetPass::IM_PREVIOUS) { /// Collect target state for previous compositor /// The TargetOperation for the final target is collected seperately as it is merged /// with later operations mPreviousInstance->_compileOutputOperation(ts); } /// Collect passes of our own target collectPasses(ts, target); compiledState.push_back(ts); } }