diff options
author | Anuj Verma <anujv@posteo.net> | 2022-01-27 15:23:47 +0530 |
---|---|---|
committer | Anuj Verma <anujv@posteo.net> | 2022-01-27 15:23:47 +0530 |
commit | a75690c85556a076b35b4d1464f201a94c2d33f1 (patch) | |
tree | 39abc3f9060ffdf9678ca155ffde8a2a59169555 | |
parent | 3d77756e73c61ab37eb020a32730cda8efab79ff (diff) | |
download | freetype2-fix-sdf-squared-distances.tar.gz |
[sdf] Fix sdf computation while `USE_SQUARED_DISTANCES`.fix-sdf-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.
-rw-r--r-- | src/sdf/ftbsdf.c | 14 | ||||
-rw-r--r-- | 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; |