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); } _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs