[Bf-blender-cvs] [d743ef91df7] blender-v3.1-release: Fix 3d texture painting artifacts.
Jeroen Bakker
noreply at git.blender.org
Tue Mar 1 10:46:51 CET 2022
Commit: d743ef91df743941a859a98fb6a94e3982c234b5
Author: Jeroen Bakker
Date: Tue Mar 1 10:45:19 2022 +0100
Branches: blender-v3.1-release
https://developer.blender.org/rBd743ef91df743941a859a98fb6a94e3982c234b5
Fix 3d texture painting artifacts.
When dimension of images aren't a multifold of 256 parts of the gpu
textures are not updated. This patch will calculate the correct part of
the image that needs to be reuploaded.
===================================================================
M source/blender/blenkernel/intern/image_gpu.cc
===================================================================
diff --git a/source/blender/blenkernel/intern/image_gpu.cc b/source/blender/blenkernel/intern/image_gpu.cc
index 42dcfcd7aa9..d854c043a3e 100644
--- a/source/blender/blenkernel/intern/image_gpu.cc
+++ b/source/blender/blenkernel/intern/image_gpu.cc
@@ -338,19 +338,25 @@ static void image_gpu_texture_partial_update_changes_available(
Image *image, PartialUpdateChecker<ImageTileData>::CollectResult &changes)
{
while (changes.get_next_change() == ePartialUpdateIterResult::ChangeAvailable) {
- const int tile_offset_x = changes.changed_region.region.xmin;
- const int tile_offset_y = changes.changed_region.region.ymin;
- const int tile_width = min_ii(changes.tile_data.tile_buffer->x,
- BLI_rcti_size_x(&changes.changed_region.region));
- const int tile_height = min_ii(changes.tile_data.tile_buffer->y,
- BLI_rcti_size_y(&changes.changed_region.region));
+ /* Calculate the clipping region with the tile buffer.
+ * TODO(jbakker): should become part of ImageTileData to deduplicate with image engine. */
+ rcti buffer_rect;
+ BLI_rcti_init(
+ &buffer_rect, 0, changes.tile_data.tile_buffer->x, 0, changes.tile_data.tile_buffer->y);
+ rcti clipped_update_region;
+ const bool has_overlap = BLI_rcti_isect(
+ &buffer_rect, &changes.changed_region.region, &clipped_update_region);
+ if (!has_overlap) {
+ continue;
+ }
+
image_update_gputexture_ex(image,
changes.tile_data.tile,
changes.tile_data.tile_buffer,
- tile_offset_x,
- tile_offset_y,
- tile_width,
- tile_height);
+ clipped_update_region.xmin,
+ clipped_update_region.ymin,
+ BLI_rcti_size_x(&clipped_update_region),
+ BLI_rcti_size_y(&clipped_update_region));
}
}
More information about the Bf-blender-cvs
mailing list