freetype
[Top][All Lists]
Advanced

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

Math differences between FT_Set_Transform and FT_Glyph_Transform


From: Derek Nylen
Subject: Math differences between FT_Set_Transform and FT_Glyph_Transform
Date: Fri, 19 Jun 2020 20:51:55 -0700

I've been integrating FreeType for text rendering in a game engine and have 
everything I need working, but I recently ran into an oddity. When switching 
from using FT_Set_Transform before loading a glyph to FT_Glyph_Transform on the 
copy of the glyph I render with, I noticed that the glyph advances were 
slightly different between the two transform functions, even though both use 
FT_Vector_Transform.

What seems to be going on is that when the advance is transformed in 
FT_Set_Transform, FT_MulFix is multiplying a 26.6 fixed-point value (the face 
advance vector) by a 16.16 value (the matrix), whereas FT_Glyph_Transform is 
multiplying two 16.16 values (the glyph advance is 16.16). The side-effect is 
that when FT_MulFix adds 1/2 to round the intermediate value, the math is 
different depending on the fixed-point precision of that intermediate value.

The difference is minor (and not visible from what I can tell), but I'm seeing 
a couple off-by-one errors when calculating control boxes after transforming 
with FT_Glyph_Transform.

I’m not really sure this is something that should be fixed, and I have a simple 
workaround by converting the glyph advance to 26.6 before transforming, then 
back to 16.16 afterwards. It's definitely odd that you can get different values 
for the advance depending on when the transform is applied, though.

I don't really have a question beyond: is my understanding of what's going on 
correct?


— Derek


reply via email to

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