X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fupdate%2Fnodes%2Fnode.cpp;h=87b4603d8f1892cb6d6f28aef099def7ba7bb4d4;hb=3c49a16475d96201db74ebb9a7c8c872857ca6b5;hp=ab3e9a296336a39b577a8e051a3398e314b2a0fe;hpb=8a9319c43c76f4814ed9df4c798fe9964c22e6b3;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/update/nodes/node.cpp b/dali/internal/update/nodes/node.cpp index ab3e9a2..87b4603 100644 --- a/dali/internal/update/nodes/node.cpp +++ b/dali/internal/update/nodes/node.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Samsung Electronics Co., Ltd. + * Copyright (c) 2022 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,8 +27,8 @@ namespace { -//Memory pool used to allocate new nodes. Memory used by this pool will be released when process dies -// or DALI library is unloaded +// Memory pool used to allocate new nodes. Memory used by this pool will be released when process dies +// or DALI library is unloaded Dali::Internal::MemoryPoolObjectAllocator gNodeMemoryPool; #ifdef DEBUG_ENABLED // keep track of nodes alive, to ensure we have 0 when the process exits or DALi library is unloaded @@ -59,8 +59,8 @@ Node* Node::New() void Node::Delete(Node* node) { - // check we have a node not a layer - if(!node->mIsLayer) + // check we have a node not a derived node + if(!node->mIsLayer && !node->mIsCamera) { // Manually call the destructor node->~Node(); @@ -76,16 +76,16 @@ void Node::Delete(Node* node) } Node::Node() -: mOrientation(), // Initialized to identity by default - mVisible(true), - mCulled(false), - mColor(Color::WHITE), - mUpdateSizeHint(Vector3::ZERO), +: mOrientation(), // Initialized to identity by default mWorldPosition(TRANSFORM_PROPERTY_WORLD_POSITION, Vector3(0.0f, 0.0f, 0.0f)), // Zero initialized by default mWorldScale(TRANSFORM_PROPERTY_WORLD_SCALE, Vector3(1.0f, 1.0f, 1.0f)), mWorldOrientation(), // Initialized to identity by default mWorldMatrix(), + mVisible(true), + mCulled(false), + mColor(Color::WHITE), mWorldColor(Color::WHITE), + mUpdateAreaHint(Vector4::ZERO), mClippingSortModifier(0u), mId(++mNodeCounter), mParent(nullptr), @@ -95,18 +95,15 @@ Node::Node() mScissorDepth(0u), mDepthIndex(0u), mDirtyFlags(NodePropertyFlags::ALL), - mRegenerateUniformMap(0), mDrawMode(DrawMode::NORMAL), mColorMode(DEFAULT_COLOR_MODE), mClippingMode(ClippingMode::DISABLED), mIsRoot(false), mIsLayer(false), + mIsCamera(false), mPositionUsesAnchorPoint(true), mTransparent(false) { - mUniformMapChanged[0] = 0u; - mUniformMapChanged[1] = 0u; - #ifdef DEBUG_ENABLED gNodeCount++; #endif @@ -137,26 +134,15 @@ uint32_t Node::GetId() const void Node::CreateTransform(SceneGraph::TransformManager* transformManager) { - //Create a new transform + // Create a new transform mTransformManagerData.mManager = transformManager; - mTransformManagerData.mId = transformManager->CreateTransform(); - - //Initialize all the animatable properties - mPosition.Initialize(&mTransformManagerData); - mScale.Initialize(&mTransformManagerData); - mOrientation.Initialize(&mTransformManagerData); - mSize.Initialize(&mTransformManagerData); - mParentOrigin.Initialize(&mTransformManagerData); - mAnchorPoint.Initialize(&mTransformManagerData); - - //Initialize all the input properties - mWorldPosition.Initialize(&mTransformManagerData); - mWorldScale.Initialize(&mTransformManagerData); - mWorldOrientation.Initialize(&mTransformManagerData); - mWorldMatrix.Initialize(&mTransformManagerData); - - //Set whether the position should use the anchor point - transformManager->SetPositionUsesAnchorPoint(mTransformManagerData.Id(), mPositionUsesAnchorPoint); + TransformId createdTransformId = transformManager->CreateTransform(); + + // Set whether the position should use the anchor point + transformManager->SetPositionUsesAnchorPoint(createdTransformId, mPositionUsesAnchorPoint); + + // Set TransformId after initialize done. + mTransformManagerData.mId = createdTransformId; } void Node::SetRoot(bool isRoot) @@ -166,55 +152,11 @@ void Node::SetRoot(bool isRoot) mIsRoot = isRoot; } -void Node::AddUniformMapping(const UniformPropertyMapping& map) -{ - PropertyOwner::AddUniformMapping(map); - mRegenerateUniformMap = 2; -} - -void Node::RemoveUniformMapping(const ConstString& uniformName) -{ - PropertyOwner::RemoveUniformMapping(uniformName); - mRegenerateUniformMap = 2; -} - bool Node::IsAnimationPossible() const { return mIsConnectedToSceneGraph; } -void Node::PrepareRender(BufferIndex bufferIndex) -{ - if(mRegenerateUniformMap != 0) - { - if(mRegenerateUniformMap == 2) - { - CollectedUniformMap& localMap = mCollectedUniformMap[bufferIndex]; - localMap.Resize(0); - - for(UniformMap::SizeType i = 0, count = mUniformMaps.Count(); i < count; ++i) - { - localMap.PushBack(mUniformMaps[i]); - } - } - else if(mRegenerateUniformMap == 1) - { - CollectedUniformMap& localMap = mCollectedUniformMap[bufferIndex]; - CollectedUniformMap& oldMap = mCollectedUniformMap[1 - bufferIndex]; - - localMap.Resize(oldMap.Count()); - - CollectedUniformMap::SizeType index = 0; - for(CollectedUniformMap::Iterator iter = oldMap.Begin(), end = oldMap.End(); iter != end; ++iter, ++index) - { - localMap[index] = *iter; - } - } - --mRegenerateUniformMap; - mUniformMapChanged[bufferIndex] = 1u; - } -} - void Node::ConnectChild(Node* childNode) { DALI_ASSERT_ALWAYS(this != childNode); @@ -278,6 +220,8 @@ void Node::AddRenderer(Renderer* renderer) } } + SetUpdated(true); + mRenderer.PushBack(renderer); } @@ -288,6 +232,7 @@ void Node::RemoveRenderer(const Renderer* renderer) { if(mRenderer[i] == renderer) { + SetUpdated(true); mRenderer.Erase(mRenderer.Begin() + i); return; } @@ -311,6 +256,12 @@ NodePropertyFlags Node::GetDirtyFlags() const flags |= NodePropertyFlags::COLOR; } + // Check whether the update area property has changed + if(!mUpdateAreaHint.IsClean()) + { + flags |= NodePropertyFlags::TRANSFORM; + } + return flags; } @@ -329,6 +280,20 @@ void Node::ResetDirtyFlags(BufferIndex updateBufferIndex) mDirtyFlags = NodePropertyFlags::NOTHING; } +void Node::UpdateUniformHash(BufferIndex bufferIndex) +{ + uint64_t hash = 0xc70f6907UL; + for(uint32_t i = 0u, count = mUniformMaps.Count(); i < count; ++i) + { + hash = mUniformMaps[i].propertyPtr->Hash(bufferIndex, hash); + } + if(mUniformsHash != hash) + { + mUniformsHash = hash; + SetUpdated(true); + } +} + void Node::SetParent(Node& parentNode) { DALI_ASSERT_ALWAYS(this != &parentNode); @@ -369,6 +334,11 @@ void Node::RecursiveDisconnectFromSceneGraph(BufferIndex updateBufferIndex) } } +uint32_t Node::GetMemoryPoolCapacity() +{ + return gNodeMemoryPool.GetCapacity(); +} + } // namespace SceneGraph } // namespace Internal