/** * The root node is treated separately; it cannot inherit values since it has no parent */ int UpdateNodesAndAttachments( Layer& rootNode, BufferIndex updateBufferIndex, ResourceManager& resourceManager, RenderQueue& renderQueue, Shader* defaultShader ) { DALI_ASSERT_DEBUG( rootNode.IsRoot() ); // Short-circuit for invisible nodes if ( !rootNode.IsVisible( updateBufferIndex ) ) { return 0; } // If the root node was not previously visible BufferIndex previousBuffer = updateBufferIndex ? 0u : 1u; if ( !rootNode.IsVisible( previousBuffer ) ) { // The node was skipped in the previous update; it must recalculate everything rootNode.SetAllDirtyFlags(); } int nodeDirtyFlags( rootNode.GetDirtyFlags() ); if ( rootNode.GetInheritedShader() == NULL ) { nodeDirtyFlags |= ShaderFlag; } int cumulativeDirtyFlags = nodeDirtyFlags; UpdateRootNodeShader( rootNode, nodeDirtyFlags, defaultShader ); UpdateRootNodeOpacity( rootNode, nodeDirtyFlags, updateBufferIndex ); UpdateRootNodeTransformValues( rootNode, nodeDirtyFlags, updateBufferIndex ); DrawMode::Type drawMode( rootNode.GetDrawMode() ); // recurse children NodeContainer& children = rootNode.GetChildren(); const NodeIter endIter = children.End(); for ( NodeIter iter = children.Begin(); iter != endIter; ++iter ) { Node& child = **iter; cumulativeDirtyFlags |= UpdateNodesAndAttachments( child, nodeDirtyFlags, updateBufferIndex, resourceManager, renderQueue, rootNode, defaultShader, drawMode ); } return cumulativeDirtyFlags; }