From 64bfb066e331e8986d9870aa08c5002a7c016b5c Mon Sep 17 00:00:00 2001 From: Heeyong Song Date: Fri, 26 Nov 2021 17:23:41 +0900 Subject: [PATCH] (Partial update) Change resetting the updated flag Reset the updated flag after calculating all damaged area of the scene Change-Id: I6abf26012f3053689abb461d42c2960b09886895 --- dali/internal/render/common/render-manager.cpp | 16 ++++++++-------- dali/internal/update/common/scene-graph-scene.h | 25 ++++++++++++++++++++++++- dali/internal/update/manager/update-manager.cpp | 10 +++++++--- 3 files changed, 39 insertions(+), 12 deletions(-) diff --git a/dali/internal/render/common/render-manager.cpp b/dali/internal/render/common/render-manager.cpp index 3772183..bb35b69 100644 --- a/dali/internal/render/common/render-manager.cpp +++ b/dali/internal/render/common/render-manager.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. @@ -672,13 +672,6 @@ void RenderManager::PreRender(Integration::Scene& scene, std::vector>& } } } - - // Reset updated flag from the root - Layer* sourceLayer = renderList->GetSourceLayer(); - if(sourceLayer) - { - sourceLayer->SetUpdatedTree(false); - } } } } @@ -703,6 +696,13 @@ void RenderManager::PreRender(Integration::Scene& scene, std::vector>& itemsDirtyRects.resize(j - itemsDirtyRects.begin()); damagedRectCleaner.SetCleanOnReturn(false); + + // Reset updated flag from the root + Layer* root = sceneObject->GetRoot(); + if(root) + { + root->SetUpdatedTree(false); + } } void RenderManager::RenderScene(Integration::RenderStatus& status, Integration::Scene& scene, bool renderToFbo) diff --git a/dali/internal/update/common/scene-graph-scene.h b/dali/internal/update/common/scene-graph-scene.h index d8c8643..eba4c0f 100644 --- a/dali/internal/update/common/scene-graph-scene.h +++ b/dali/internal/update/common/scene-graph-scene.h @@ -2,7 +2,7 @@ #define DALI_INTERNAL_SCENE_GRAPH_SCENE_H /* - * 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. @@ -24,6 +24,7 @@ #include #include #include +#include #include namespace Dali @@ -256,6 +257,26 @@ public: } /** + * @brief Set a root of the Scene + * + * @param layer The root layer + */ + void SetRoot(SceneGraph::Layer* layer) + { + mRoot = layer; + } + + /** + * @brief Get a root of the Scene + * + * @return The root layer + */ + SceneGraph::Layer* GetRoot() const + { + return mRoot; + } + + /** * @brief Get ItemsDirtyRects * * @return the ItemsDirtyRects @@ -293,6 +314,8 @@ private: Graphics::UniquePtr mRenderPassNoClear{nullptr}; ///< The render pass created to render the surface without clearing color Graphics::UniquePtr mRenderTarget{nullptr}; ///< This is created in Update/Render thread when surface is created/resized/replaced + SceneGraph::Layer* mRoot{nullptr}; ///< Root node + std::vector mClearValues{}; ///< Clear colors std::vector mItemsDirtyRects{}; ///< Dirty rect list }; diff --git a/dali/internal/update/manager/update-manager.cpp b/dali/internal/update/manager/update-manager.cpp index c96b6ca..02ce60f 100644 --- a/dali/internal/update/manager/update-manager.cpp +++ b/dali/internal/update/manager/update-manager.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. @@ -480,7 +480,11 @@ void UpdateManager::RemoveRenderTaskList(RenderTaskList* taskList) void UpdateManager::AddScene(OwnerPointer& scene) { - mImpl->scenes.back()->scene = scene.Release(); + auto& sceneInfo = mImpl->scenes.back(); + sceneInfo->scene = scene.Release(); + + // Set root to the Scene + sceneInfo->scene->SetRoot(sceneInfo->root); // Initialize the context from render manager typedef MessageValue1 DerivedType; @@ -489,7 +493,7 @@ void UpdateManager::AddScene(OwnerPointer& scene) uint32_t* slot = mImpl->renderQueue.ReserveMessageSlot(mSceneGraphBuffers.GetUpdateBufferIndex(), sizeof(DerivedType)); // Construct message in the render queue memory; note that delete should not be called on the return value - SceneGraph::Scene& sceneObject = *mImpl->scenes.back()->scene; + SceneGraph::Scene& sceneObject = *sceneInfo->scene; new(slot) DerivedType(&mImpl->renderManager, &RenderManager::InitializeScene, &sceneObject); } -- 2.7.4