diff options
author | Jeroen Bakker <jeroen@blender.org> | 2022-04-12 11:28:47 +0300 |
---|---|---|
committer | Jeroen Bakker <jeroen@blender.org> | 2022-04-12 11:28:47 +0300 |
commit | 701c225675e334e35cb42b95e153ed547af83a2b (patch) | |
tree | 7f9865f05af41d548d660ecb45822273824b963d | |
parent | 9112d13e69dbae6a2b5841ef7acdab110f9472f5 (diff) |
Encapsulate clear_dirty/mark_dirty.
-rw-r--r-- | source/blender/blenkernel/BKE_pbvh_pixels.hh | 21 | ||||
-rw-r--r-- | source/blender/editors/sculpt_paint/sculpt_paint_image.cc | 7 |
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); } } |