freetype-commit
[Top][All Lists]
Advanced

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

[freetype2] master 1e4496c: [truetype] Speed up variation IUP.


From: Alexei Podtelezhnikov
Subject: [freetype2] master 1e4496c: [truetype] Speed up variation IUP.
Date: Wed, 31 Oct 2018 23:18:15 -0400 (EDT)

branch: master
commit 1e4496c54c010843c1bac56e5d344115d1a49620
Author: Alexei Podtelezhnikov <address@hidden>
Commit: Alexei Podtelezhnikov <address@hidden>

    [truetype] Speed up variation IUP.
    
    * src/truetype/ttgxvar.c (tt_delta_interpolate): Separate trivial
    snapping to the same position from true interpolation.
---
 ChangeLog              |  7 +++++++
 src/truetype/ttgxvar.c | 21 ++++++++++++++++++---
 2 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 2b75088..40eb273 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2018-10-31  Alexei Podtelezhnikov <address@hidden>
+
+       [truetype] Speed up variation IUP.
+
+       * src/truetype/ttgxvar.c (tt_delta_interpolate): Separate trivial
+       snapping to the same position from true interpolation.
+
 2018-10-31  Alexei Podtelezhnikov  <address@hidden>
 
        * src/type1/t1load.c (t1_set_mm_blend): Optimized.
diff --git a/src/truetype/ttgxvar.c b/src/truetype/ttgxvar.c
index 336fad1..6a45e42 100644
--- a/src/truetype/ttgxvar.c
+++ b/src/truetype/ttgxvar.c
@@ -3516,10 +3516,25 @@
 
       /* If the reference points have the same coordinate but different */
       /* delta, inferred delta is zero.  Otherwise interpolate.         */
-      if ( in1 != in2 || out1 == out2 )
+      if ( in1 == in2 || out1 == out2 )
       {
-        FT_Fixed  scale = in1 != in2 ? FT_DivFix( out2 - out1, in2 - in1 )
-                                     : 0;
+        for ( p = p1; p <= p2; p++ )
+        {
+          out = in_points[p].x;
+
+          if ( out <= in1 )
+            out += d1;
+          else if ( out >= in2 )
+            out += d2;
+          else
+            out = out1;
+
+          out_points[p].x = out;
+        }
+      }
+      else
+      {
+        FT_Fixed  scale = FT_DivFix( out2 - out1, in2 - in1 );
 
 
         for ( p = p1; p <= p2; p++ )



reply via email to

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