ref: 9ef02bd41a42fb08355c83522331b9d0dab4d685
parent: 884e4e67ee434bd99fbf2edac6b77dc1ebd07263
author: Alexei Podtelezhnikov <[email protected]>
date: Mon Jun 29 18:39:10 EDT 2015
[base] Speed up emboldening. * src/base/ftoutln.c (FT_Outline_EmboldenXY): Use `FT_Vector_NormLen'.
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
2015-06-29 Alexei Podtelezhnikov <[email protected]>
+ [base] Speed up emboldening.
+
+ * src/base/ftoutln.c (FT_Outline_EmboldenXY): Use `FT_Vector_NormLen'.
+
+2015-06-29 Alexei Podtelezhnikov <[email protected]>
+
[base] Implement fast vector normalization.
The function uses Newton's iterations instead of dividing vector
--- a/src/base/ftoutln.c
+++ b/src/base/ftoutln.c
@@ -946,12 +946,7 @@
/* compute incoming normalized vector */
in.x = v_cur.x - v_prev.x;
in.y = v_cur.y - v_prev.y;
- l_in = FT_Vector_Length( &in );
- if ( l_in )
- {
- in.x = FT_DivFix( in.x, l_in );
- in.y = FT_DivFix( in.y, l_in );
- }
+ l_in = FT_Vector_NormLen( &in );
for ( n = first; n <= last; n++ )
{
@@ -963,12 +958,7 @@
/* compute outgoing normalized vector */
out.x = v_next.x - v_cur.x;
out.y = v_next.y - v_cur.y;
- l_out = FT_Vector_Length( &out );
- if ( l_out )
- {
- out.x = FT_DivFix( out.x, l_out );
- out.y = FT_DivFix( out.y, l_out );
- }
+ l_out = FT_Vector_NormLen( &out );
d = FT_MulFix( in.x, out.x ) + FT_MulFix( in.y, out.y );