* src/smooth/ftgrays.c (FT_INTEGRATE): New convenience macro.
(gray_render_line, gray_render_scanline): Use it.
This commit is contained in:
parent
8516849977
commit
d5b7de5541
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue