[HarfBuzz] No kerning?

Jamie Dale jamiedale88+harfbuzz at gmail.com
Mon Oct 5 14:02:33 PDT 2015


Sure, I've attached the font file we're using.

Unfortunately, I don't think our caching solution is anything that could be
easily made HarfBuzz friendly, as it builds upon our existing font caching
mechanisms (our use case here is real-time games) and uses a font atlas
(plus a series of granular caches) to avoid repeatedly asking FreeType for
the same data. It is itself heavily reliant on our engine code, and makes
extensive use of our custom user-definable composite fonts (which allow
users to create their own localisable font families). Our composite fonts
also allow you to specify which hinting method to use for each font face
(as this can produce nicer results for certain fonts, such as using light
hinting with thin fonts), which is why we need to preserve this FreeType
hinting behaviour with HarfBuzz (they're just extra FreeType load flags).

-Jamie.

On 5 October 2015 at 21:24, Behdad Esfahbod <behdad.esfahbod at gmail.com>
wrote:

> I'm not sure what's wrong.  Can you send me the font file?
>
> Also, I'm interested to hear more about your caching and load-flags
> stuff.  I
> like to upstream them to the extent that makes sense.
>
> behdad
>
> On 15-10-05 03:32 PM, Jamie Dale wrote:
> > Hey all,
> >
> > In our application we have two text shaping backends; a simple "kerning
> only"
> > implementation using our existing font rendering code (fast, but can't
> handle
> > complex languages), and a HarfBuzz based implementation for when we need
> to
> > support complex languages (although ideally the HarfBuzz implementation
> should
> > be able to produce mostly equivalent results when compared to our
> existing
> > font rendering when dealing with languages like English).
> >
> > If you've seen my previous email entitled "Using FreeType load flags",
> then
> > you'll know I'm using some custom font functions to try and ensure
> HarfBuzz
> > uses the correct FreeType hinting flags, as well as cache a lot of
> FreeType
> > calls, and use the correct scale.
> >
> > So far this has worked out really well, however I've noticed that the
> HarfBuzz
> > implementation isn't applying kerning when shaping English text (probably
> > other languages too).
> >
> > The images below are using the Roboto font, and show the output from each
> > implementation.
> > The top image is using our "kerning only" implementation, and the bottom
> image
> > is using HarfBuzz. Note that the "T" and "e" characters are further
> apart in
> > the bottom image.
> > Inline images 2
> > Inline images 1
> >
> > Here's the (slightly cut down) code I'm using to create my HarfBuzz font:
> >
> > hb_font_t* CreateHarfBuzzFont(FT_Face InFace, const uint32 InGlyphFlags,
> const
> > int32 InFontSize, const float InFontScale)
> > {
> > hb_font_t* HarfBuzzFont = nullptr;
> >
> > // Set the character size to render at (needs to be in 1/64 of a "point")
> > FT_Set_Char_Size(InFace, 0, InFontSize * 64, 96, 96);
> >
> > if (InFontScale != 1.0f)
> > {
> > FT_Matrix ScaleMatrix;
> > ScaleMatrix.xy = 0;
> > ScaleMatrix.xx = (FT_Fixed)(InFontScale * 65536);
> > ScaleMatrix.yy = (FT_Fixed)(InFontScale * 65536);
> > ScaleMatrix.yx = 0;
> > FT_Set_Transform(InFace, &ScaleMatrix, nullptr);
> > }
> > else
> > {
> > FT_Set_Transform(InFace, nullptr, nullptr);
> > }
> >
> > {
> > // Create a sub-font from the default FreeType implementation so we can
> > override some font functions to provide low-level caching
> > hb_font_t* HarfBuzzFTFont = hb_ft_font_create(InFace, nullptr);
> > HarfBuzzFont = hb_font_create_sub_font(HarfBuzzFTFont);
> > hb_font_destroy(HarfBuzzFTFont);
> > }
> >
> > hb_font_set_funcs(...); // Sets functions that use the user-data below,
> > implementations are mostly default, but with a caching layer, and usage
> of
> > FreeType hinting flags
> > hb_font_set_user_data(...); // Ensures we have access to InGlyphFlags
> and the
> > low-level caches
> > hb_font_set_scale(HarfBuzzFont, InFontScale, InFontScale);
> >
> > return HarfBuzzFont;
> > }
> >
> > Am I just missing something simple? I tried calling hb_font_set_ppem but
> that
> > didn't seem to make any difference.
> >
> > Thanks,
> > Jamie.
> >
> >
> > _______________________________________________
> > HarfBuzz mailing list
> > HarfBuzz at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/harfbuzz
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/harfbuzz/attachments/20151005/9e034ad6/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Roboto-Regular.ttf
Type: application/x-font-ttf
Size: 158604 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/harfbuzz/attachments/20151005/9e034ad6/attachment-0001.bin>


More information about the HarfBuzz mailing list