From: Heeyong Song Date: Fri, 14 Oct 2022 01:53:57 +0000 (+0900) Subject: [Tizen](Partial Update) Continue to calculate damaged rects even though there is... X-Git-Tag: accepted/tizen/7.0/unified/20221103.165443~8 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-core.git;a=commitdiff_plain;h=c96b5bf70c4a411d3916be6cab7a761f8bf91811 [Tizen](Partial Update) Continue to calculate damaged rects even though there is a 3D transformed item Change-Id: I58136911893f488664ecff2f2ef616593efb8658 --- diff --git a/dali/internal/render/common/render-manager.cpp b/dali/internal/render/common/render-manager.cpp index 3c6af61..bb686a0 100644 --- a/dali/internal/render/common/render-manager.cpp +++ b/dali/internal/render/common/render-manager.cpp @@ -521,6 +521,7 @@ void RenderManager::PreRender(Integration::Scene& scene, std::vector>& // Clean collected dirty/damaged rects on exit if 3d layer or 3d node or other conditions. DamagedRectsCleaner damagedRectCleaner(damagedRects, surfaceRect); + bool cleanDamagedRect = false; // Mark previous dirty rects in the sorted array. The array is already sorted by node and renderer, frame number. // so you don't need to sort: std::stable_sort(itemsDirtyRects.begin(), itemsDirtyRects.end()); @@ -604,7 +605,8 @@ void RenderManager::PreRender(Integration::Scene& scene, std::vector>& // If the item does 3D transformation, do early exit and clean the damaged rect array if(item.mUpdateArea == Vector4::ZERO) { - return; + cleanDamagedRect = true; + continue; } Rect rect; @@ -659,6 +661,12 @@ void RenderManager::PreRender(Integration::Scene& scene, std::vector>& { dirtyRectPos->visited = true; } + else + { + // The item is not in the list for some reason. Add it! + dirtyRectPos->visited = true; + itemsDirtyRects.insert(dirtyRectPos, dirtyRect); + } } } } @@ -685,7 +693,11 @@ void RenderManager::PreRender(Integration::Scene& scene, std::vector>& } itemsDirtyRects.resize(j - itemsDirtyRects.begin()); - damagedRectCleaner.SetCleanOnReturn(false); + + if(!cleanDamagedRect) + { + damagedRectCleaner.SetCleanOnReturn(false); + } // Reset updated flag from the root Layer* root = sceneObject->GetRoot();