mirror of https://github.com/freetype/freetype
[sdf, bsdf] Use shared FT_SqrtFixed.
FT_SqrtFixed (95b0fe2a6d
) is faster and does not overflow.
* src/sdf/ftsdfcommin.h (square_root): Replace with a macro.
* src/sdf/ftsdfcommin.c (square_root): Remove function.
This commit is contained in:
parent
2edfd7e168
commit
d0e3239f32
|
@ -22,49 +22,6 @@
|
||||||
#include "ftsdfcommon.h"
|
#include "ftsdfcommon.h"
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************************
|
|
||||||
*
|
|
||||||
* common functions
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Original algorithm:
|
|
||||||
*
|
|
||||||
* https://github.com/chmike/fpsqrt
|
|
||||||
*
|
|
||||||
* Use this to compute the square root of a 16.16 fixed-point number.
|
|
||||||
*/
|
|
||||||
FT_LOCAL_DEF( FT_16D16 )
|
|
||||||
square_root( FT_16D16 val )
|
|
||||||
{
|
|
||||||
FT_ULong t, q, b, r;
|
|
||||||
|
|
||||||
|
|
||||||
r = (FT_ULong)val;
|
|
||||||
b = 0x40000000L;
|
|
||||||
q = 0;
|
|
||||||
|
|
||||||
while ( b > 0x40L )
|
|
||||||
{
|
|
||||||
t = q + b;
|
|
||||||
|
|
||||||
if ( r >= t )
|
|
||||||
{
|
|
||||||
r -= t;
|
|
||||||
q = t + b;
|
|
||||||
}
|
|
||||||
|
|
||||||
r <<= 1;
|
|
||||||
b >>= 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
q >>= 8;
|
|
||||||
|
|
||||||
return (FT_16D16)q;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
*
|
*
|
||||||
* format and sign manipulating functions
|
* format and sign manipulating functions
|
||||||
|
|
|
@ -122,8 +122,7 @@ FT_BEGIN_HEADER
|
||||||
typedef FT_BBox FT_CBox; /* control box of a curve */
|
typedef FT_BBox FT_CBox; /* control box of a curve */
|
||||||
|
|
||||||
|
|
||||||
FT_LOCAL( FT_16D16 )
|
#define square_root( x ) (FT_16D16)FT_SqrtFixed( (FT_UInt32)( x ) )
|
||||||
square_root( FT_16D16 val );
|
|
||||||
|
|
||||||
FT_LOCAL( FT_SDFFormat )
|
FT_LOCAL( FT_SDFFormat )
|
||||||
map_fixed_to_sdf( FT_16D16 dist,
|
map_fixed_to_sdf( FT_16D16 dist,
|
||||||
|
|
Loading…
Reference in New Issue