Some improvements to make the new anti-alias algorithm faster when

large glyph images are generated (e.g. ` fttimer -g' runs 20% faster).

For small pixel sizes (i.e. typically less than 64 pixels), rendering
speed is unaffected.
This commit is contained in:
David Turner 1999-12-28 18:36:10 +00:00
parent b4a98378e1
commit 34b3032045
1 changed files with 36 additions and 19 deletions

View File

@ -2990,7 +2990,6 @@
/*************************************************************************/ /*************************************************************************/
/*************************************************************************/ /*************************************************************************/
#ifdef FT_RASTER_OPTION_ANTI_ALIAS #ifdef FT_RASTER_OPTION_ANTI_ALIAS
/*************************************************************************/ /*************************************************************************/
@ -3043,11 +3042,10 @@
TPos x1, TPos x1,
TPos x2 ) TPos x2 )
{ {
TPos e1, e2; TPos e1, e2;
int shift = ras.precision_bits - 6; int shift = ras.precision_bits - 6;
PByte target; PByte target;
UNUSED( y ); UNUSED( y );
x1 += ras.precision_half; x1 += ras.precision_half;
@ -3086,19 +3084,20 @@
if ( e2 > 0 ) if ( e2 > 0 )
{ {
target[0] += (Byte)(64-x1); if (x1 > 0) target[0] += (Byte)(64-x1) << 1;
else target[0] = 127;
e2--; e2--;
while (e2 > 0) while (e2 > 0)
{ {
*(++target) += 64; *(++target) = 127;
e2--; e2--;
} }
if (x2) if (x2)
target[1] += (Byte)x2; target[1] += (Byte)x2 << 1;
} }
else else
{ {
target[0] += (Byte)(x2-x1); target[0] += (Byte)(x2-x1) << 1;
} }
} }
} }
@ -3167,7 +3166,7 @@
if (color < 64) if (color < 64)
color = 64; color = 64;
*pixel = ( color >= 128 ? 128 : (unsigned char)color ); *pixel = ( color >= 127 ? 127 : (unsigned char)color );
} }
} }
@ -3256,10 +3255,11 @@
TPos x1, TPos x1,
TPos x2 ) TPos x2 )
{ {
TPos e1, e2; TPos e1, e2;
int shift = ras.precision_bits - 6; int shift = ras.precision_bits - 6;
int incr; int incr;
PByte bits; PByte bits;
Byte b;
UNUSED( y ); UNUSED( y );
@ -3305,20 +3305,36 @@
if ( e2 > 0 ) if ( e2 > 0 )
{ {
bits[0] += (Byte)(64-x1); b = bits[0];
if (b < 127) b++;
bits[0] = (64-x1) + (b >> 1);
e2--; e2--;
while (e2 > 0) while (e2 > 0)
{ {
bits += incr; bits += incr;
bits[0] += 64; b = bits[0];
if (b < 127)
bits[0] = (Byte)(63+((b+1) >> 1));
e2--; e2--;
} }
if (x2) if (x2)
bits[incr] += (Byte)x2; {
bits += incr;
b = bits[0];
if (b < 127) b++;
bits[0] = (Byte)(x2 + (b >> 1));
}
} }
else else
{ {
bits[0] += (Byte)(x2-x1); b = bits[0];
if (b < 127) b++;
bits[0] = (Byte)((b >> 1)+(x2-x1));
} }
} }
} }
@ -3391,8 +3407,9 @@
color += *pixel; color += *pixel;
if (color < 64) if (color < 64)
color = 64; color = 64;
/*
*pixel = (color >= 128 ? 128 : (unsigned char)color ); *pixel = (color >= 127 ? 127 : (unsigned char)color );
*/
} }
} }