[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [ft-devel] ttinterp.c optimization
From: |
Werner LEMBERG |
Subject: |
Re: [ft-devel] ttinterp.c optimization |
Date: |
Tue, 02 Sep 2014 07:06:28 +0200 (CEST) |
> So after some additional discussions with Werner, I came up with the
> following patch, which speeds up FT_New_Face for Arial and Times by
> huge 18% and 27% respectively.
Thanks, we are getting nearer :-) The patch is not correct yet,
however.
> {
> /* non-square pixels, use the stretched routines */
> + CUR.func_cur_ppem = Current_Ppem_Stretched;
> CUR.func_read_cvt = Read_CVT_Stretched;
> CUR.func_write_cvt = Write_CVT_Stretched;
> CUR.func_move_cvt = Move_CVT_Stretched;
> @@ -8283,6 +8288,7 @@
> else
> {
> /* square pixels, use normal routines */
> + CUR.func_cur_ppem = Current_Ppem;
> CUR.func_read_cvt = Read_CVT;
> CUR.func_write_cvt = Write_CVT;
> CUR.func_move_cvt = Move_CVT;
Contrary to CVT values, which are computed before a glyph's bytecode
program gets executed, the ppem value is dependent on the projection
vector, which can be modified *by the bytecode itself*, namely by
SPVTCA and friends. In other words, you have to set `func_cur_ppem'
in `Compute_Funcs' and not `TT_RunIns'.
In most cases, the projection vector is either set to (1,0) or (0,1)
to handle horizontal and vertical hinting, respectively. For diagonal
lines it might be set to a different value, but this is rare compared
to the two special cases.
Werner