[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.
fix-sdf-squared-distances
Anuj Verma 3 years ago
parent 3d77756e73
commit a75690c855
  1. 14
      src/sdf/ftbsdf.c
  2. 2
      src/sdf/ftsdf.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 );

@ -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;

Loading…
Cancel
Save