(Partial update) Change resetting the updated flag 83/267183/4
authorHeeyong Song <heeyong.song@samsung.com>
Fri, 26 Nov 2021 08:23:41 +0000 (17:23 +0900)
committerHeeyong Song <heeyong.song@samsung.com>
Tue, 25 Jan 2022 00:51:19 +0000 (09:51 +0900)
Reset the updated flag after calculating all damaged area of the scene

Change-Id: I6abf26012f3053689abb461d42c2960b09886895

dali/internal/render/common/render-manager.cpp
dali/internal/update/common/scene-graph-scene.h
dali/internal/update/manager/update-manager.cpp

index 3772183..bb35b69 100644 (file)
@@ -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<Rect<int>>&
               }
             }
           }
-
-          // 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<Rect<int>>&
 
   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)
index d8c8643..eba4c0f 100644 (file)
@@ -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 <dali/internal/common/message.h>
 #include <dali/internal/event/common/event-thread-services.h>
 #include <dali/internal/render/common/render-instruction-container.h>
+#include <dali/internal/update/nodes/scene-graph-layer.h>
 #include <dali/public-api/common/vector-wrapper.h>
 
 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<Graphics::RenderPass>   mRenderPassNoClear{nullptr}; ///< The render pass created to render the surface without clearing color
   Graphics::UniquePtr<Graphics::RenderTarget> mRenderTarget{nullptr};      ///< This is created in Update/Render thread when surface is created/resized/replaced
 
+  SceneGraph::Layer* mRoot{nullptr}; ///< Root node
+
   std::vector<Graphics::ClearValue>                  mClearValues{};     ///< Clear colors
   std::vector<Dali::Internal::SceneGraph::DirtyRect> mItemsDirtyRects{}; ///< Dirty rect list
 };
index c96b6ca..02ce60f 100644 (file)
@@ -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>& 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<RenderManager, SceneGraph::Scene*> DerivedType;
@@ -489,7 +493,7 @@ void UpdateManager::AddScene(OwnerPointer<Scene>& 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);
 }