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:
authorChris Blackbourn <chrisbblend@gmail.com>2022-07-24 05:48:30 +0300
committerChris Blackbourn <chrisbblend@gmail.com>2022-07-24 05:48:30 +0300
commit0fcc04e7bfe1edf390bec06f488aa9a4ee220983 (patch)
tree4bfb3fa06fdfca0336325f8ac048b0530ebab7af
parentf1f2c26223efd4ff0a99c5b7510da917fc606205 (diff)
Cleanup: Fix off-by-half-errors with udim search
-rw-r--r--source/blender/blenkernel/intern/image.cc18
1 files changed, 9 insertions, 9 deletions
diff --git a/source/blender/blenkernel/intern/image.cc b/source/blender/blenkernel/intern/image.cc
index 7fa3a5ad14d..c2b8ec95a46 100644
--- a/source/blender/blenkernel/intern/image.cc
+++ b/source/blender/blenkernel/intern/image.cc
@@ -867,28 +867,28 @@ int BKE_image_find_nearest_tile_with_offset(const Image *image,
const float co[2],
float r_uv_offset[2])
{
- const float co_floor[2] = {floorf(co[0]), floorf(co[1])};
- /* Distance to the closest UDIM tile. */
+ /* Distance squared to the closest UDIM tile. */
float dist_best_sq = FLT_MAX;
float uv_offset_best[2] = {0, 0};
int tile_number_best = -1;
+ const float co_offset[2] = {co[0] - 0.5f, co[1] - 0.5f};
+
LISTBASE_FOREACH (const ImageTile *, tile, &image->tiles) {
float uv_offset[2];
BKE_image_get_tile_uv(image, tile->tile_number, uv_offset);
- if (equals_v2v2(co_floor, uv_offset)) {
- copy_v2_v2(r_uv_offset, uv_offset);
- return tile->tile_number;
- }
-
- /* Distance between co[2] and UDIM tile. */
- const float dist_sq = len_squared_v2v2(uv_offset, co);
+ /* Distance squared between co[2] and center of UDIM tile. */
+ const float dist_sq = len_squared_v2v2(uv_offset, co_offset);
if (dist_sq < dist_best_sq) {
dist_best_sq = dist_sq;
tile_number_best = tile->tile_number;
copy_v2_v2(uv_offset_best, uv_offset);
+
+ if (dist_best_sq < 0.5f * 0.5f) {
+ break; /* No other tile can be closer. */
+ }
}
}
if (tile_number_best != -1) {