* src/smooth/ftgrays.c (FT_INTEGRATE): New convenience macro.

(gray_render_line, gray_render_scanline): Use it.
This commit is contained in:
Alexei Podtelezhnikov 2021-03-11 22:08:45 -05:00
parent 8516849977
commit d5b7de5541
2 changed files with 29 additions and 38 deletions

View File

@ -1,3 +1,8 @@
2021-03-10 Alexei Podtelezhnikov <apodtele@gmail.com>
* src/smooth/ftgrays.c (FT_INTEGRATE): New convenience macro.
(gray_render_line, gray_render_scanline): Use it.
2021-03-09 Alexei Podtelezhnikov <apodtele@gmail.com>
* src/smooth/ftgrays.c (gray_render_line): Rearrange conditionals.

View File

@ -483,6 +483,9 @@ typedef ptrdiff_t FT_PtrDist;
static gray_TWorker ras;
#endif
#define FT_INTEGRATE( ras, a, b ) \
ras.cover += (a), ras.area += (a) * (TArea)(b)
typedef struct gray_TRaster_
{
@ -655,10 +658,9 @@ typedef ptrdiff_t FT_PtrDist;
/* XXX: y-delta and x-delta below should be related. */
FT_DIV_MOD( TCoord, p, dx, delta, mod );
ras.area += (TArea)( ( fx1 + first ) * delta );
ras.cover += delta;
y1 += delta;
ex1 += incr;
FT_INTEGRATE( ras, delta, fx1 + first );
y1 += delta;
ex1 += incr;
gray_set_cell( RAS_VAR_ ex1, ey );
if ( ex1 != ex2 )
@ -679,10 +681,9 @@ typedef ptrdiff_t FT_PtrDist;
delta++;
}
ras.area += (TArea)( ONE_PIXEL * delta );
ras.cover += delta;
y1 += delta;
ex1 += incr;
FT_INTEGRATE( ras, delta, ONE_PIXEL );
y1 += delta;
ex1 += incr;
gray_set_cell( RAS_VAR_ ex1, ey );
} while ( ex1 != ex2 );
}
@ -690,10 +691,7 @@ typedef ptrdiff_t FT_PtrDist;
fx1 = ONE_PIXEL - first;
End:
dy = y2 - y1;
ras.area += (TArea)( ( fx1 + fx2 ) * dy );
ras.cover += dy;
FT_INTEGRATE( ras, y2 - y1, fx1 + fx2 );
}
@ -736,7 +734,6 @@ typedef ptrdiff_t FT_PtrDist;
{
TCoord ex = TRUNC( ras.x );
TCoord two_fx = FRACT( ras.x ) << 1;
TArea area;
if ( dy > 0)
@ -750,27 +747,23 @@ typedef ptrdiff_t FT_PtrDist;
incr = -1;
}
delta = first - fy1;
ras.area += (TArea)two_fx * delta;
ras.cover += delta;
ey1 += incr;
delta = first - fy1;
FT_INTEGRATE( ras, delta, two_fx);
ey1 += incr;
gray_set_cell( RAS_VAR_ ex, ey1 );
delta = first + first - ONE_PIXEL;
area = (TArea)two_fx * delta;
while ( ey1 != ey2 )
{
ras.area += area;
ras.cover += delta;
ey1 += incr;
FT_INTEGRATE( ras, delta, two_fx);
ey1 += incr;
gray_set_cell( RAS_VAR_ ex, ey1 );
}
delta = fy2 - ONE_PIXEL + first;
ras.area += (TArea)two_fx * delta;
ras.cover += delta;
delta = fy2 - ONE_PIXEL + first;
FT_INTEGRATE( ras, delta, two_fx);
goto End;
}
@ -883,8 +876,7 @@ typedef ptrdiff_t FT_PtrDist;
do
{
fy2 = ONE_PIXEL;
ras.cover += ( fy2 - fy1 );
ras.area += ( fy2 - fy1 ) * fx1 * 2;
FT_INTEGRATE( ras, fy2 - fy1, fx1 * 2 );
fy1 = 0;
ey1++;
gray_set_cell( RAS_VAR_ ex1, ey1 );
@ -893,8 +885,7 @@ typedef ptrdiff_t FT_PtrDist;
do
{
fy2 = 0;
ras.cover += ( fy2 - fy1 );
ras.area += ( fy2 - fy1 ) * fx1 * 2;
FT_INTEGRATE( ras, fy2 - fy1, fx1 * 2 );
fy1 = ONE_PIXEL;
ey1--;
gray_set_cell( RAS_VAR_ ex1, ey1 );
@ -918,8 +909,7 @@ typedef ptrdiff_t FT_PtrDist;
fx2 = 0;
fy2 = FT_UDIV( -prod, -dx );
prod -= dy * ONE_PIXEL;
ras.cover += ( fy2 - fy1 );
ras.area += ( fy2 - fy1 ) * ( fx1 + fx2 );
FT_INTEGRATE( ras, fy2 - fy1, fx1 + fx2 );
fx1 = ONE_PIXEL;
fy1 = fy2;
ex1--;
@ -930,8 +920,7 @@ typedef ptrdiff_t FT_PtrDist;
prod -= dx * ONE_PIXEL;
fx2 = FT_UDIV( -prod, dy );
fy2 = ONE_PIXEL;
ras.cover += ( fy2 - fy1 );
ras.area += ( fy2 - fy1 ) * ( fx1 + fx2 );
FT_INTEGRATE( ras, fy2 - fy1, fx1 + fx2 );
fx1 = fx2;
fy1 = 0;
ey1++;
@ -942,8 +931,7 @@ typedef ptrdiff_t FT_PtrDist;
prod += dy * ONE_PIXEL;
fx2 = ONE_PIXEL;
fy2 = FT_UDIV( prod, dx );
ras.cover += ( fy2 - fy1 );
ras.area += ( fy2 - fy1 ) * ( fx1 + fx2 );
FT_INTEGRATE( ras, fy2 - fy1, fx1 + fx2 );
fx1 = 0;
fy1 = fy2;
ex1++;
@ -954,8 +942,7 @@ typedef ptrdiff_t FT_PtrDist;
fx2 = FT_UDIV( prod, -dy );
fy2 = 0;
prod += dx * ONE_PIXEL;
ras.cover += ( fy2 - fy1 );
ras.area += ( fy2 - fy1 ) * ( fx1 + fx2 );
FT_INTEGRATE( ras, fy2 - fy1, fx1 + fx2 );
fx1 = fx2;
fy1 = ONE_PIXEL;
ey1--;
@ -968,8 +955,7 @@ typedef ptrdiff_t FT_PtrDist;
fx2 = FRACT( to_x );
fy2 = FRACT( to_y );
ras.cover += ( fy2 - fy1 );
ras.area += ( fy2 - fy1 ) * ( fx1 + fx2 );
FT_INTEGRATE( ras, fy2 - fy1, fx1 + fx2 );
End:
ras.x = to_x;