From 293cc2126ecb5d3ee5c14adb52fce865ffa5d8fe Mon Sep 17 00:00:00 2001 From: Luiz Fernando Silva Date: Wed, 11 Sep 2024 18:51:38 -0300 Subject: [PATCH] Avoid expensive sqrt operation in hot loop of BitMap.grow_mask --- scene/resources/bit_map.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/scene/resources/bit_map.cpp b/scene/resources/bit_map.cpp index 653a4f4949d..53f97fefc9f 100644 --- a/scene/resources/bit_map.cpp +++ b/scene/resources/bit_map.cpp @@ -559,6 +559,7 @@ void BitMap::grow_mask(int p_pixels, const Rect2i &p_rect) { bool bit_value = p_pixels > 0; p_pixels = Math::abs(p_pixels); + const int pixels2 = p_pixels * p_pixels; Rect2i r = Rect2i(0, 0, width, height).intersection(p_rect); @@ -588,8 +589,8 @@ void BitMap::grow_mask(int p_pixels, const Rect2i &p_rect) { } } - float d = Point2(j, i).distance_to(Point2(x, y)) - CMP_EPSILON; - if (d > p_pixels) { + float d = Point2(j, i).distance_squared_to(Point2(x, y)) - CMP_EPSILON2; + if (d > pixels2) { continue; }