Skip to content

[Skrifa] Minor speedup to iup mechanism #1514

@behdad

Description

@behdad

PoC:

diff --git a/skrifa/src/outline/glyf/deltas.rs b/skrifa/src/outline/glyf/deltas.rs
index c59021a7..426cd86b 100644
--- a/skrifa/src/outline/glyf/deltas.rs
+++ b/skrifa/src/outline/glyf/deltas.rs
@@ -265,6 +265,18 @@ where
                     } else {
                         D::zeroed()
                     };
+                    if scale == D::zeroed() {
+                        let d1 = out1 - in1;
+                        for (point, out_point) in self
+                            .points
+                            .get(range.clone())?
+                            .iter()
+                            .zip(self.out_points.get_mut(range.clone())?)
+                        {
+                            out_point.$coord = d1 + D::from(point.$coord);
+                        }
+                        return Some(());
+                    }
                     let d1 = out1 - in1;
                     let d2 = out2 - in2;
                     for (point, out_point) in self

I measured 1.5% with mega var font.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions