[Bf-blender-cvs] [245fb6472cd] temp-T97352-3d-texturing-seam-bleeding: Use partial updates.

Jeroen Bakker noreply at git.blender.org
Wed Apr 20 14:35:55 CEST 2022


Commit: 245fb6472cdae14b48fae329efb1f45871359dbd
Author: Jeroen Bakker
Date:   Wed Apr 20 14:35:45 2022 +0200
Branches: temp-T97352-3d-texturing-seam-bleeding
https://developer.blender.org/rB245fb6472cdae14b48fae329efb1f45871359dbd

Use partial updates.

===================================================================

M	source/blender/blenkernel/BKE_pbvh_pixels.hh
M	source/blender/blenkernel/intern/pbvh_pixels_seams.cc

===================================================================

diff --git a/source/blender/blenkernel/BKE_pbvh_pixels.hh b/source/blender/blenkernel/BKE_pbvh_pixels.hh
index f2ba99df720..63e110775e9 100644
--- a/source/blender/blenkernel/BKE_pbvh_pixels.hh
+++ b/source/blender/blenkernel/BKE_pbvh_pixels.hh
@@ -138,13 +138,16 @@ struct SeamFix {
 };
 
 struct UDIMSeamFixes {
-  ushort src_tile_number;
-  ushort dst_tile_number;
+  uint16_t src_tile_number;
+  uint16_t dst_tile_number;
   Vector<SeamFix> pixels;
+  /* Region of the dst image buffer for partial update. Should cover all `pixels.dst_pixels`. */
+  rcti dst_partial_region;
 
   UDIMSeamFixes(uint16_t src_tile_number, uint16_t dst_tile_number)
       : src_tile_number(src_tile_number), dst_tile_number(dst_tile_number)
   {
+    BLI_rcti_init_minmax(&dst_partial_region);
   }
 };
 
@@ -155,7 +158,6 @@ struct NodeData {
 
   Vector<UDIMTilePixels> tiles;
   Triangles triangles;
-  /* TODO: This should be ordered between source and destination UDIM tiles. */
   Vector<UDIMSeamFixes> seams;
 
   NodeData()
diff --git a/source/blender/blenkernel/intern/pbvh_pixels_seams.cc b/source/blender/blenkernel/intern/pbvh_pixels_seams.cc
index b35663dd283..5b973c5092c 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels_seams.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels_seams.cc
@@ -234,6 +234,7 @@ static void add_seam_fix(PBVHNode &node,
 {
   NodeData &node_data = BKE_pbvh_pixels_node_data_get(node);
   UDIMSeamFixes &seam_fixes = node_data.ensure_seam_fixes(src_tile_number, dst_tile_number);
+  BLI_rcti_do_minmax_v(&seam_fixes.dst_partial_region, dst_pixel);
   seam_fixes.pixels.append(SeamFix{src_pixel, dst_pixel});
 }
 
@@ -522,9 +523,16 @@ void BKE_pbvh_pixels_fix_seams(PBVHNode *node, Image *image, ImageUser *image_us
       }
     }
 
-    /* TODO: should be narrowed to the part of the image that needs to be updated. Requires
-     * access to the image tile. can be stored in the UDIMSeamFixes struct.  */
-    BKE_image_partial_update_mark_full_update(image);
+    /* Mark dst_image_buffer region dirty covering each dst_pixel. */
+    LISTBASE_FOREACH (ImageTile *, image_tile, &image->tiles) {
+      if (image_tile->tile_number != fixes.dst_tile_number) {
+        continue;
+      }
+
+      BKE_image_partial_update_mark_region(
+          image, image_tile, dst_image_buffer, &fixes.dst_partial_region);
+      break;
+    }
     BKE_image_release_ibuf(image, src_image_buffer, nullptr);
     BKE_image_release_ibuf(image, dst_image_buffer, nullptr);
   }



More information about the Bf-blender-cvs mailing list