Fix transform sceneId order issue 74/281674/3
authorEunki, Hong <eunkiki.hong@samsung.com>
Tue, 20 Sep 2022 11:13:27 +0000 (20:13 +0900)
committerEunki, Hong <eunkiki.hong@samsung.com>
Wed, 21 Sep 2022 11:23:44 +0000 (20:23 +0900)
When mIds[mPanret[i]] is bigger then i,
mOrderedCOmponents[~~].sceneId become garbage.

To fix this issue, let we store sceneId first,
and propargate sceneId later.

Note : sceneId become the lastest parent's sceneId.
So, it always valid.

Change-Id: I27c6e51cda0ae696bf1ff5179ddb735f3e24aa65
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
dali/internal/update/manager/transform-manager.cpp

index db4f042..8f7680e 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.
@@ -354,9 +354,10 @@ void TransformManager::ReorderComponents()
 {
   mOrderedComponents.Resize(mComponentCount);
 
-  unsigned int sceneId = 0;
-
+  uint16_t    sceneId = 0u;
   TransformId parentId;
+
+  // Create sceneId first
   for(TransformId i = 0; i < mComponentCount; ++i)
   {
     mOrderedComponents[i].id    = mComponentId[i];
@@ -367,12 +368,17 @@ void TransformManager::ReorderComponents()
     {
       mOrderedComponents[i].sceneId = sceneId++;
     }
+  }
 
+  // Propagate sceneId
+  for(TransformId i = 0; i < mComponentCount; ++i)
+  {
+    parentId = mParent[i];
     while(parentId != INVALID_TRANSFORM_ID)
     {
       mOrderedComponents[i].level++;
+      mOrderedComponents[i].sceneId = mOrderedComponents[mIds[parentId]].sceneId;
       parentId                      = mParent[mIds[parentId]];
-      mOrderedComponents[i].sceneId = mOrderedComponents[mIds[mParent[i]]].sceneId;
     }
   }