Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeroen Bakker <jeroen@blender.org>2022-04-12 11:28:47 +0300
committerJeroen Bakker <jeroen@blender.org>2022-04-12 11:28:47 +0300
commit701c225675e334e35cb42b95e153ed547af83a2b (patch)
tree7f9865f05af41d548d660ecb45822273824b963d
parent9112d13e69dbae6a2b5841ef7acdab110f9472f5 (diff)
Encapsulate clear_dirty/mark_dirty.
-rw-r--r--source/blender/blenkernel/BKE_pbvh_pixels.hh21
-rw-r--r--source/blender/editors/sculpt_paint/sculpt_paint_image.cc7
2 files changed, 16 insertions, 12 deletions
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);
}
}