//----------------------------------------------------------------------- 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(); /// 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); } }
//----------------------------------------------------------------------- void CompositorInstance::_compileOutputOperation(TargetOperation &finalState) { /// Final target CompositionTargetPass *tpass = mTechnique->getOutputTargetPass(); /// Logical-and together the visibilityMask, and multiply the lodBias finalState.visibilityMask &= tpass->getVisibilityMask(); finalState.lodBias *= tpass->getLodBias(); if(tpass->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(finalState); } /// Collect passes collectPasses(finalState, tpass); }