diff --git a/ChangeLog b/ChangeLog index c48fb806b..c6456e906 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2002-01-09 Maxim Shemanarev + + * src/smooth/ftgrays.c (gray_render_line): small optimisation to + the smooth anti-aliased renderer that deals with vertical segments. + This results in a 5-7% speedup in rendering speed.. + 2002-01-08 David Turner * configure, install: added some wrapper scripts to make diff --git a/src/smooth/ftgrays.c b/src/smooth/ftgrays.c index d93533824..edd8b0e88 100644 --- a/src/smooth/ftgrays.c +++ b/src/smooth/ftgrays.c @@ -635,6 +635,45 @@ goto End; } + /* vertical line - avoids calling gray_render_scanline */ + incr = 1; + + if( dx == 0 ) + { + TScan ex = TRUNC( ras.x ); + TScan two_fx = ( ras.x - SUBPIXELS( ex ) ) << 1; + TPos area; + + first = ONE_PIXEL; + if( dy < 0 ) + { + first = 0; + incr = -1; + } + + delta = first - fy1; + ras.area += (TArea)two_fx * delta; + ras.cover += delta; + ey1 += incr; + + gray_set_cell( raster, ex, ey1 ); + + delta = first + first - ONE_PIXEL; + area = (TArea)two_fx * delta; + while( ey1 != ey2 ) + { + ras.area += area; + ras.cover += delta; + ey1 += incr; + gray_set_cell( raster, ex, ey1 ); + } + + delta = fy2 - ONE_PIXEL + first; + ras.area += (TArea)two_fx * delta; + ras.cover += delta; + goto End; + } + /* ok, we have to render several scanlines */ p = ( ONE_PIXEL - fy1 ) * dx; first = ONE_PIXEL;