[Bf-blender-cvs] [701c225675e] temp-T96710-pbvh-pixels: Encapsulate clear_dirty/mark_dirty.

Jeroen Bakker noreply at git.blender.org
Tue Apr 12 12:10:44 CEST 2022


Commit: 701c225675e334e35cb42b95e153ed547af83a2b
Author: Jeroen Bakker
Date:   Tue Apr 12 10:28:47 2022 +0200
Branches: temp-T96710-pbvh-pixels
https://developer.blender.org/rB701c225675e334e35cb42b95e153ed547af83a2b

Encapsulate clear_dirty/mark_dirty.

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

M	source/blender/blenkernel/BKE_pbvh_pixels.hh
M	source/blender/editors/sculpt_paint/sculpt_paint_image.cc

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

diff --git a/source/blender/blenkernel/BKE_pbvh_pixels.hh b/source/blender/blenkernel/BKE_pbvh_pixels.hh
index a2dc79bae7f..1e70eb5cbbf 100644
--- a/source/blender/blenkernel/BKE_pbvh_pixels.hh
+++ b/source/blender/blenkernel/BKE_pbvh_pixels.hh
@@ -161,10 +161,16 @@ struct UDIMTilePixels {
     BLI_rcti_init_minmax(&dirty_region);
   }
 
-  void mark_region(Image &image, const image::ImageTileWrapper &image_tile, ImBuf &image_buffer)
+  void mark_dirty(const PackedPixelRow &pixel_row)
+  {
+    int2 start_image_coord(pixel_row.start_image_coordinate.x, pixel_row.start_image_coordinate.y);
+    BLI_rcti_do_minmax_v(&dirty_region, start_image_coord);
+    BLI_rcti_do_minmax_v(&dirty_region, start_image_coord + int2(pixel_row.num_pixels + 1, 0));
+    flags.dirty = true;
+  }
+
+  void clear_dirty()
   {
-    BKE_image_partial_update_mark_region(
-        &image, image_tile.image_tile, &image_buffer, &dirty_region);
     BLI_rcti_init_minmax(&dirty_region);
     flags.dirty = false;
   }
@@ -200,8 +206,10 @@ struct NodeData {
   void mark_region(Image &image, const image::ImageTileWrapper &image_tile, ImBuf &image_buffer)
   {
     UDIMTilePixels *tile = find_tile_data(image_tile);
-    if (tile) {
-      tile->mark_region(image, image_tile, image_buffer);
+    if (tile && tile->flags.dirty) {
+      BKE_image_partial_update_mark_region(
+          &image, image_tile.image_tile, &image_buffer, &tile->dirty_region);
+      tile->clear_dirty();
     }
   }
 
@@ -219,7 +227,8 @@ struct NodeData {
 };
 
 Triangles &BKE_pbvh_pixels_triangles_get(PBVHNode &node);
-UDIMTilePixels *BKE_pbvh_pixels_tile_data_get(PBVHNode &node, const image::ImageTileWrapper &image_tile);
+UDIMTilePixels *BKE_pbvh_pixels_tile_data_get(PBVHNode &node,
+                                              const image::ImageTileWrapper &image_tile);
 void BKE_pbvh_pixels_mark_dirty(PBVHNode &node);
 void BKE_pbvh_pixels_mark_image_dirty(PBVHNode &node, Image &image, ImageUser &image_user);
 /** Extend pixels to fix uv seams for the given nodes. */
diff --git a/source/blender/editors/sculpt_paint/sculpt_paint_image.cc b/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
index c50db65d425..9196b062800 100644
--- a/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
+++ b/source/blender/editors/sculpt_paint/sculpt_paint_image.cc
@@ -358,12 +358,7 @@ static void do_paint_pixels(void *__restrict userdata,
       }
 
       if (pixels_painted) {
-        int2 start_image_coord(pixel_row.start_image_coordinate.x,
-                               pixel_row.start_image_coordinate.y);
-        BLI_rcti_do_minmax_v(&tile_data->dirty_region, start_image_coord);
-        BLI_rcti_do_minmax_v(&tile_data->dirty_region,
-                             start_image_coord + int2(pixel_row.num_pixels + 1, 0));
-        tile_data->flags.dirty = true;
+        tile_data->mark_dirty(pixel_row);
       }
     }



More information about the Bf-blender-cvs mailing list