freetype-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[freetype2] fix-sdf-squared-distances a75690c85: [sdf] Fix sdf computati


From: Werner Lemberg
Subject: [freetype2] fix-sdf-squared-distances a75690c85: [sdf] Fix sdf computation while `USE_SQUARED_DISTANCES`.
Date: Thu, 27 Jan 2022 04:59:51 -0500 (EST)

branch: fix-sdf-squared-distances
commit a75690c85556a076b35b4d1464f201a94c2d33f1
Author: Anuj Verma <anujv@posteo.net>
Commit: Anuj Verma <anujv@posteo.net>

    [sdf] Fix sdf computation while `USE_SQUARED_DISTANCES`.
    
    Function `map_fixed_to_sdf` expect spread to be absolute
    and not squared.
    
    * src/sdf/ftbsdf.c (finalize_sdf): Pass absolute spread
    while `map_fixed_to_sdf`.
    
    * src/sdf/ftsdf.c (sdf_generate_bounding_box): Ditto.
---
 src/sdf/ftbsdf.c | 14 ++++++++------
 src/sdf/ftsdf.c  |  2 +-
 2 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/src/sdf/ftbsdf.c b/src/sdf/ftbsdf.c
index f33330ff9..1328ac498 100644
--- a/src/sdf/ftbsdf.c
+++ b/src/sdf/ftbsdf.c
@@ -1096,7 +1096,7 @@
     FT_Int  i, j;
 
     FT_SDFFormat*  t_buffer;
-    FT_16D16       spread;
+    FT_16D16       sp_sq, spread;
 
 
     if ( !worker || !target )
@@ -1116,11 +1116,13 @@
       goto Exit;
     }
 
+    spread = FT_INT_16D16( worker->params.spread );
+
 #if USE_SQUARED_DISTANCES
-    spread = FT_INT_16D16( worker->params.spread *
-                           worker->params.spread );
+    sp_sq = FT_INT_16D16( worker->params.spread *
+                          worker->params.spread );
 #else
-    spread = FT_INT_16D16( worker->params.spread );
+    sp_sq = FT_INT_16D16( worker->params.spread );
 #endif
 
     for ( j = 0; j < r; j++ )
@@ -1136,8 +1138,8 @@
         index = j * w + i;
         dist  = worker->distance_map[index].dist;
 
-        if ( dist < 0 || dist > spread )
-          dist = spread;
+        if ( dist < 0 || dist > sp_sq )
+          dist = sp_sq;
 
 #if USE_SQUARED_DISTANCES
         dist = square_root( dist );
diff --git a/src/sdf/ftsdf.c b/src/sdf/ftsdf.c
index 46ef7b14d..f5e5551e6 100644
--- a/src/sdf/ftsdf.c
+++ b/src/sdf/ftsdf.c
@@ -3242,7 +3242,7 @@
     buffer   = (FT_SDFFormat*)bitmap->buffer;
 
     if ( USE_SQUARED_DISTANCES )
-      sp_sq = fixed_spread * fixed_spread;
+      sp_sq = FT_INT_16D16( spread * spread );
     else
       sp_sq = fixed_spread;
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]