void CCOcclusionTrackerBase<LayerType, RenderSurfaceType>::finishedTargetRenderSurface(const LayerType* owningLayer, const RenderSurfaceType* finishedTarget) { // FIXME: Remove the owningLayer parameter when we can get all the info from the surface. ASSERT(owningLayer->renderSurface() == finishedTarget); // Make sure we know about the target surface. enterTargetRenderSurface(finishedTarget); if (owningLayer->maskLayer() || finishedTarget->drawOpacity() < 1 || finishedTarget->filters().hasFilterThatAffectsOpacity()) { m_stack.last().occlusionInScreen = Region(); m_stack.last().occlusionInTarget = Region(); } }
void CCOcclusionTrackerBase<LayerType, RenderSurfaceType>::finishedTargetRenderSurface(const LayerType* owningLayer, const RenderSurfaceType* finishedTarget) { // FIXME: Remove the owningLayer parameter when we can get all the info from the surface. ASSERT(owningLayer->renderSurface() == finishedTarget); // Make sure we know about the target surface. enterTargetRenderSurface(finishedTarget); // If the occlusion within the surface can not be applied to things outside of the surface's subtree, then clear the occlusion here so it won't be used. if (owningLayer->maskLayer() || !surfaceOpacityKnown(finishedTarget) || finishedTarget->drawOpacity() < 1 || finishedTarget->filters().hasFilterThatAffectsOpacity()) { m_stack.last().occlusionInScreen = Region(); m_stack.last().occlusionInTarget = Region(); } else { if (!surfaceTransformsToTargetKnown(finishedTarget)) m_stack.last().occlusionInTarget = Region(); if (!surfaceTransformsToScreenKnown(finishedTarget)) m_stack.last().occlusionInScreen = Region(); } }