[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