Revert "[Tizen] Revert "Sort transform components in breadth first order per scene""
authorHeeyong Song <heeyong.song@samsung.com>
Mon, 26 Sep 2022 02:37:37 +0000 (11:37 +0900)
committerHeeyong Song <heeyong.song@samsung.com>
Mon, 26 Sep 2022 02:37:44 +0000 (11:37 +0900)
This reverts commit 04bd51fd533c33f49fcd27ceaad081935beb57a5.

dali/internal/update/manager/transform-manager.cpp
dali/internal/update/manager/transform-manager.h

index a5fc34c..db4f042 100644 (file)
@@ -354,6 +354,8 @@ void TransformManager::ReorderComponents()
 {
   mOrderedComponents.Resize(mComponentCount);
 
+  unsigned int sceneId = 0;
+
   TransformId parentId;
   for(TransformId i = 0; i < mComponentCount; ++i)
   {
@@ -361,10 +363,16 @@ void TransformManager::ReorderComponents()
     mOrderedComponents[i].level = 0u;
 
     parentId = mParent[i];
+    if(parentId == INVALID_TRANSFORM_ID)
+    {
+      mOrderedComponents[i].sceneId = sceneId++;
+    }
+
     while(parentId != INVALID_TRANSFORM_ID)
     {
       mOrderedComponents[i].level++;
-      parentId = mParent[mIds[parentId]];
+      parentId                      = mParent[mIds[parentId]];
+      mOrderedComponents[i].sceneId = mOrderedComponents[mIds[mParent[i]]].sceneId;
     }
   }
 
index 28f1f77..97294e2 100644 (file)
@@ -376,11 +376,19 @@ private:
   {
     bool operator<(const SOrderItem& item) const
     {
-      return level < item.level;
+      if(sceneId != item.sceneId)
+      {
+        return sceneId < item.sceneId;
+      }
+      else
+      {
+        return level < item.level;
+      }
     }
 
     TransformId id;
-    uint32_t    level;
+    uint16_t    sceneId;
+    uint16_t    level;
   };
 
   /**
@@ -392,7 +400,8 @@ private:
 
   /**
    * Reorders components in hierarchical order so update can iterate sequentially
-   * updating the world transforms
+   * updating the world transforms. The components are sorted in the breadth first
+   * order for each scene and grouped per scene.
    */
   void ReorderComponents();