Revert "[Tizen] Fix partial update window rotation works well."
authorTaehyub Kim <taehyub.kim@samsung.com>
Wed, 14 Sep 2022 02:41:20 +0000 (11:41 +0900)
committerTaehyub Kim <taehyub.kim@samsung.com>
Wed, 14 Sep 2022 02:41:20 +0000 (11:41 +0900)
This reverts commit dd8d191705a2945b95ed1454a358d51bc10678a0.

dali/internal/window-system/common/window-render-surface.cpp

index 2eb946a..8dd26e9 100644 (file)
@@ -49,6 +49,27 @@ const float FULL_UPDATE_RATIO(0.8f);     ///< Force full update when the dirty a
 Debug::Filter* gWindowRenderSurfaceLogFilter = Debug::Filter::New(Debug::Verbose, false, "LOG_WINDOW_RENDER_SURFACE");
 #endif
 
+void MergeRects(Rect<int>& mergingRect, const std::vector<Rect<int>>& rects)
+{
+  uint32_t i = 0;
+  if(mergingRect.IsEmpty())
+  {
+    for(; i < rects.size(); i++)
+    {
+      if(!rects[i].IsEmpty())
+      {
+        mergingRect = rects[i];
+        break;
+      }
+    }
+  }
+
+  for(; i < rects.size(); i++)
+  {
+    mergingRect.Merge(rects[i]);
+  }
+}
+
 void InsertRects(WindowRenderSurface::DamagedRectsContainer& damagedRectsList, const Rect<int>& damagedRects)
 {
   damagedRectsList.insert(damagedRectsList.begin(), damagedRects);
@@ -97,7 +118,7 @@ using RecalculateRectFunction = Rect<int32_t> (*)(Rect<int32_t>&, const Rect<int
 
 RecalculateRectFunction RecalculateRect[4] = {RecalculateRect0, RecalculateRect90, RecalculateRect180, RecalculateRect270};
 
-void MergeIntersectingRectsAndRotate(Rect<int>& mergingRect, std::vector<Rect<int>>& damagedRects, int orientation, const Rect<int32_t>& surfaceRect)
+void MergeIntersectingRects(std::vector<Rect<int>>& damagedRects, int orientation, const Rect<int32_t>& surfaceRect)
 {
   const int n = damagedRects.size();
   for(int i = 0; i < n - 1; i++)
@@ -128,16 +149,6 @@ void MergeIntersectingRectsAndRotate(Rect<int>& mergingRect, std::vector<Rect<in
   {
     if(!damagedRects[i].IsEmpty())
     {
-      // Merge rects before rotate
-      if(mergingRect.IsEmpty())
-      {
-        mergingRect = damagedRects[i];
-      }
-      else
-      {
-        mergingRect.Merge(damagedRects[i]);
-      }
-
       damagedRects[j++] = RecalculateRect[orientation](damagedRects[i], surfaceRect);
     }
   }
@@ -867,7 +878,6 @@ void WindowRenderSurface::SetBufferDamagedRects(const std::vector<Rect<int>>& da
     {
       InsertRects(mBufferDamagedRects, surfaceRect);
       clippingRect = surfaceRect;
-      mDamagedRects.assign(1, RecalculateRect[orientation](surfaceRect, surfaceRect));
       return;
     }
 
@@ -875,7 +885,6 @@ void WindowRenderSurface::SetBufferDamagedRects(const std::vector<Rect<int>>& da
     {
       // Empty damaged rect. We don't need rendering
       clippingRect = Rect<int>();
-      mDamagedRects.clear();
       return;
     }
 
@@ -888,7 +897,6 @@ void WindowRenderSurface::SetBufferDamagedRects(const std::vector<Rect<int>>& da
     {
       InsertRects(mBufferDamagedRects, surfaceRect);
       clippingRect = surfaceRect;
-      mDamagedRects.assign(1, RecalculateRect[orientation](surfaceRect, surfaceRect));
       return;
     }
 
@@ -896,8 +904,10 @@ void WindowRenderSurface::SetBufferDamagedRects(const std::vector<Rect<int>>& da
 
     // Merge intersecting rects, form an array of non intersecting rects to help driver a bit
     // Could be optional and can be removed, needs to be checked with and without on platform
-    // And then, Make one clipping rect, and rotate rects by orientation.
-    MergeIntersectingRectsAndRotate(clippingRect, mDamagedRects, orientation, surfaceRect);
+    MergeIntersectingRects(mDamagedRects, orientation, surfaceRect);
+
+    // Make one clipping rect
+    MergeRects(clippingRect, mDamagedRects);
 
     // We push current frame damaged rects here, zero index for current frame
     InsertRects(mBufferDamagedRects, clippingRect);
@@ -930,7 +940,7 @@ void WindowRenderSurface::SetBufferDamagedRects(const std::vector<Rect<int>>& da
       std::vector<Rect<int>> damagedRegion;
       if(scene)
       {
-        damagedRegion.push_back(RecalculateRect[orientation](clippingRect, surfaceRect));
+        damagedRegion.push_back(RecalculateRect[std::min(scene.GetCurrentSurfaceOrientation() / 90, 3)](clippingRect, scene.GetCurrentSurfaceRect()));
       }
       else
       {