Sort transform components in breadth first order per scene 11/267211/5
authorRichard Huang <r.huang@samsung.com>
Mon, 29 Nov 2021 17:43:05 +0000 (17:43 +0000)
committerRichard <r.huang@samsung.com>
Thu, 2 Dec 2021 16:31:11 +0000 (16:31 +0000)
Change-Id: Iad835c30b6d83554bc2a150516c23dbd19183937

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

index d61acc2..fe4d4f3 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 abb830b..26936a8 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();