diff options
author | Akira Kakuto <kakuto@fuk.kindai.ac.jp> | 2022-04-05 21:27:03 +0000 |
---|---|---|
committer | Akira Kakuto <kakuto@fuk.kindai.ac.jp> | 2022-04-05 21:27:03 +0000 |
commit | 37e731f0bd81249f8b43bada12adaa611b7a595b (patch) | |
tree | 99e477a2cd57a94782ae182b8c5e2c0024751356 /Build/source/libs/freetype2/freetype-src/src/sdf | |
parent | 7c200a413ce80d2d09a0dda338e9407bba0d3855 (diff) |
freetype2 : revert
git-svn-id: svn://tug.org/texlive/trunk@62919 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/libs/freetype2/freetype-src/src/sdf')
11 files changed, 50 insertions, 105 deletions
diff --git a/Build/source/libs/freetype2/freetype-src/src/sdf/ftbsdf.c b/Build/source/libs/freetype2/freetype-src/src/sdf/ftbsdf.c index 1328ac49880..8da5c9d9e07 100644 --- a/Build/source/libs/freetype2/freetype-src/src/sdf/ftbsdf.c +++ b/Build/source/libs/freetype2/freetype-src/src/sdf/ftbsdf.c @@ -4,7 +4,7 @@ * * Signed Distance Field support for bitmap fonts (body only). * - * Copyright (C) 2020-2022 by + * Copyright (C) 2020-2021 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * Written by Anuj Verma. @@ -177,11 +177,11 @@ * * @Fields: * dist :: - * Vector length of the `prox` parameter. Can be squared or absolute + * Vector length of the `near` parameter. Can be squared or absolute * depending on the `USE_SQUARED_DISTANCES` macro defined in file * `ftsdfcommon.h`. * - * prox :: + * near :: * Vector to the nearest edge. Can also be interpreted as shortest * distance of a point. * @@ -194,7 +194,7 @@ typedef struct ED_ { FT_16D16 dist; - FT_16D16_Vec prox; + FT_16D16_Vec near; FT_Byte alpha; } ED; @@ -595,18 +595,18 @@ worker->rows ) ) { /* approximate the edge distance for edge pixels */ - ed[index].prox = compute_edge_distance( ed + index, + ed[index].near = compute_edge_distance( ed + index, i, j, worker->width, worker->rows ); - ed[index].dist = VECTOR_LENGTH_16D16( ed[index].prox ); + ed[index].dist = VECTOR_LENGTH_16D16( ed[index].near ); } else { /* for non-edge pixels assign far away distances */ ed[index].dist = 400 * ONE; - ed[index].prox.x = 200 * ONE; - ed[index].prox.y = 200 * ONE; + ed[index].near.x = 200 * ONE; + ed[index].near.y = 200 * ONE; } } } @@ -756,6 +756,8 @@ byte = (FT_Byte)( 1 << mod ); t[t_index].alpha = pixel & byte ? 255 : 0; + + pixel = 0; } } } @@ -871,7 +873,7 @@ if ( dist < current->dist ) { - dist_vec = to_check->prox; + dist_vec = to_check->near; dist_vec.x += x_offset * ONE; dist_vec.y += y_offset * ONE; @@ -880,7 +882,7 @@ if ( dist < current->dist ) { current->dist = dist; - current->prox = dist_vec; + current->near = dist_vec; } } } @@ -1096,7 +1098,7 @@ FT_Int i, j; FT_SDFFormat* t_buffer; - FT_16D16 sp_sq, spread; + FT_16D16 spread; if ( !worker || !target ) @@ -1116,13 +1118,11 @@ goto Exit; } - spread = FT_INT_16D16( worker->params.spread ); - #if USE_SQUARED_DISTANCES - sp_sq = FT_INT_16D16( worker->params.spread * - worker->params.spread ); + spread = FT_INT_16D16( worker->params.spread * + worker->params.spread ); #else - sp_sq = FT_INT_16D16( worker->params.spread ); + spread = FT_INT_16D16( worker->params.spread ); #endif for ( j = 0; j < r; j++ ) @@ -1138,8 +1138,8 @@ index = j * w + i; dist = worker->distance_map[index].dist; - if ( dist < 0 || dist > sp_sq ) - dist = sp_sq; + if ( dist < 0 || dist > spread ) + dist = spread; #if USE_SQUARED_DISTANCES dist = square_root( dist ); diff --git a/Build/source/libs/freetype2/freetype-src/src/sdf/ftsdf.c b/Build/source/libs/freetype2/freetype-src/src/sdf/ftsdf.c index f0e45418cbd..f69cf49b471 100644 --- a/Build/source/libs/freetype2/freetype-src/src/sdf/ftsdf.c +++ b/Build/source/libs/freetype2/freetype-src/src/sdf/ftsdf.c @@ -4,7 +4,7 @@ * * Signed Distance Field support for outline fonts (body). * - * Copyright (C) 2020-2022 by + * Copyright (C) 2020-2021 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * Written by Anuj Verma. @@ -497,7 +497,7 @@ goto Exit; } - if ( !FT_QNEW( ptr ) ) + if ( !FT_QALLOC( ptr, sizeof ( *ptr ) ) ) { *ptr = null_edge; *edge = ptr; @@ -536,7 +536,7 @@ goto Exit; } - if ( !FT_QNEW( ptr ) ) + if ( !FT_QALLOC( ptr, sizeof ( *ptr ) ) ) { *ptr = null_contour; *contour = ptr; @@ -591,7 +591,7 @@ goto Exit; } - if ( !FT_QNEW( ptr ) ) + if ( !FT_QALLOC( ptr, sizeof ( *ptr ) ) ) { *ptr = null_shape; ptr->memory = memory; @@ -738,18 +738,6 @@ contour = shape->contours; - /* If the control point coincides with any of the end points */ - /* then it is a line and should be treated as one to avoid */ - /* unnecessary complexity later in the algorithm. */ - if ( ( contour->last_pos.x == control_1->x && - contour->last_pos.y == control_1->y ) || - ( control_1->x == to->x && - control_1->y == to->y ) ) - { - sdf_line_to( to, user ); - goto Exit; - } - FT_CALL( sdf_edge_new( memory, &edge ) ); edge->edge_type = SDF_EDGE_CONIC; @@ -776,9 +764,9 @@ const FT_26D6_Vec* to, void* user ) { - SDF_Shape* shape = ( SDF_Shape* )user; - SDF_Edge* edge = NULL; - SDF_Contour* contour = NULL; + SDF_Shape* shape = ( SDF_Shape* )user; + SDF_Edge* edge = NULL; + SDF_Contour* contour = NULL; FT_Error error = FT_Err_Ok; FT_Memory memory = shape->memory; @@ -1077,7 +1065,7 @@ static FT_Error split_sdf_conic( FT_Memory memory, FT_26D6_Vec* control_points, - FT_UInt max_splits, + FT_Int max_splits, SDF_Edge** out ) { FT_Error error = FT_Err_Ok; @@ -1146,41 +1134,26 @@ static FT_Error split_sdf_cubic( FT_Memory memory, FT_26D6_Vec* control_points, - FT_UInt max_splits, + FT_Int max_splits, SDF_Edge** out ) { - FT_Error error = FT_Err_Ok; - FT_26D6_Vec cpos[7]; - SDF_Edge* left, *right; - const FT_26D6 threshold = ONE_PIXEL / 4; + FT_Error error = FT_Err_Ok; + FT_26D6_Vec cpos[7]; + SDF_Edge* left,* right; - if ( !memory || !out ) + if ( !memory || !out ) { error = FT_THROW( Invalid_Argument ); goto Exit; } - /* split the cubic */ + /* split the conic */ cpos[0] = control_points[0]; cpos[1] = control_points[1]; cpos[2] = control_points[2]; cpos[3] = control_points[3]; - /* If the segment is flat enough we won't get any benefit by */ - /* splitting it further, so we can just stop splitting. */ - /* */ - /* Check the deviation of the Bezier curve and stop if it is */ - /* smaller than the pre-defined `threshold` value. */ - if ( FT_ABS( 2 * cpos[0].x - 3 * cpos[1].x + cpos[3].x ) < threshold && - FT_ABS( 2 * cpos[0].y - 3 * cpos[1].y + cpos[3].y ) < threshold && - FT_ABS( cpos[0].x - 3 * cpos[2].x + 2 * cpos[3].x ) < threshold && - FT_ABS( cpos[0].y - 3 * cpos[2].y + 2 * cpos[3].y ) < threshold ) - { - split_cubic( cpos ); - goto Append; - } - split_cubic( cpos ); /* If max number of splits is done */ @@ -1277,32 +1250,13 @@ /* Subdivide the curve and add it to the list. */ { FT_26D6_Vec ctrls[3]; - FT_26D6 dx, dy; - FT_UInt num_splits; ctrls[0] = edge->start_pos; ctrls[1] = edge->control_a; ctrls[2] = edge->end_pos; - dx = FT_ABS( ctrls[2].x + ctrls[0].x - 2 * ctrls[1].x ); - dy = FT_ABS( ctrls[2].y + ctrls[0].y - 2 * ctrls[1].y ); - if ( dx < dy ) - dx = dy; - - /* Calculate the number of necessary bisections. Each */ - /* bisection causes a four-fold reduction of the deviation, */ - /* hence we bisect the Bezier curve until the deviation */ - /* becomes less than 1/8th of a pixel. For more details */ - /* check file `ftgrays.c`. */ - num_splits = 1; - while ( dx > ONE_PIXEL / 8 ) - { - dx >>= 2; - num_splits <<= 1; - } - - error = split_sdf_conic( memory, ctrls, num_splits, &new_edges ); + error = split_sdf_conic( memory, ctrls, 32, &new_edges ); } break; @@ -1323,10 +1277,8 @@ default: error = FT_THROW( Invalid_Argument ); - } - - if ( error != FT_Err_Ok ) goto Exit; + } edges = edges->next; } @@ -3288,7 +3240,7 @@ buffer = (FT_SDFFormat*)bitmap->buffer; if ( USE_SQUARED_DISTANCES ) - sp_sq = FT_INT_16D16( (FT_Int)( spread * spread ) ); + sp_sq = fixed_spread * fixed_spread; else sp_sq = fixed_spread; @@ -3332,7 +3284,6 @@ FT_26D6_Vec grid_point = zero_vector; SDF_Signed_Distance dist = max_sdf; FT_UInt index = 0; - FT_16D16 diff = 0; if ( x < 0 || x >= width ) @@ -3360,7 +3311,7 @@ if ( dist.distance > sp_sq ) continue; - /* take the square root of the distance if required */ + /* square_root the values and fit in a 6.10 fixed-point */ if ( USE_SQUARED_DISTANCES ) dist.distance = square_root( dist.distance ); @@ -3372,15 +3323,11 @@ /* check whether the pixel is set or not */ if ( dists[index].sign == 0 ) dists[index] = dist; - else - { - diff = FT_ABS( dists[index].distance - dist.distance ); - - if ( diff <= CORNER_CHECK_EPSILON ) - dists[index] = resolve_corner( dists[index], dist ); - else if ( dists[index].distance > dist.distance ) - dists[index] = dist; - } + else if ( dists[index].distance > dist.distance ) + dists[index] = dist; + else if ( FT_ABS( dists[index].distance - dist.distance ) + < CORNER_CHECK_EPSILON ) + dists[index] = resolve_corner( dists[index], dist ); } } diff --git a/Build/source/libs/freetype2/freetype-src/src/sdf/ftsdf.h b/Build/source/libs/freetype2/freetype-src/src/sdf/ftsdf.h index 5f6b3f52aaf..187b418af3c 100644 --- a/Build/source/libs/freetype2/freetype-src/src/sdf/ftsdf.h +++ b/Build/source/libs/freetype2/freetype-src/src/sdf/ftsdf.h @@ -4,7 +4,7 @@ * * Signed Distance Field support (specification). * - * Copyright (C) 2020-2022 by + * Copyright (C) 2020-2021 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * Written by Anuj Verma. diff --git a/Build/source/libs/freetype2/freetype-src/src/sdf/ftsdfcommon.c b/Build/source/libs/freetype2/freetype-src/src/sdf/ftsdfcommon.c index 072a36ea6c2..91aa521bb31 100644 --- a/Build/source/libs/freetype2/freetype-src/src/sdf/ftsdfcommon.c +++ b/Build/source/libs/freetype2/freetype-src/src/sdf/ftsdfcommon.c @@ -4,7 +4,7 @@ * * Auxiliary data for Signed Distance Field support (body). * - * Copyright (C) 2020-2022 by + * Copyright (C) 2020-2021 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * Written by Anuj Verma. diff --git a/Build/source/libs/freetype2/freetype-src/src/sdf/ftsdfcommon.h b/Build/source/libs/freetype2/freetype-src/src/sdf/ftsdfcommon.h index af4490bbca2..44f6bba53f8 100644 --- a/Build/source/libs/freetype2/freetype-src/src/sdf/ftsdfcommon.h +++ b/Build/source/libs/freetype2/freetype-src/src/sdf/ftsdfcommon.h @@ -4,7 +4,7 @@ * * Auxiliary data for Signed Distance Field support (specification). * - * Copyright (C) 2020-2022 by + * Copyright (C) 2020-2021 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * Written by Anuj Verma. @@ -48,8 +48,6 @@ FT_BEGIN_HEADER #define MIN_SPREAD 2 /* maximum spread supported by the renderer */ #define MAX_SPREAD 32 - /* pixel size in 26.6 */ -#define ONE_PIXEL ( 1 << 6 ) /************************************************************************** diff --git a/Build/source/libs/freetype2/freetype-src/src/sdf/ftsdferrs.h b/Build/source/libs/freetype2/freetype-src/src/sdf/ftsdferrs.h index b28867609a6..dbb113d5379 100644 --- a/Build/source/libs/freetype2/freetype-src/src/sdf/ftsdferrs.h +++ b/Build/source/libs/freetype2/freetype-src/src/sdf/ftsdferrs.h @@ -4,7 +4,7 @@ * * Signed Distance Field error codes (specification only). * - * Copyright (C) 2020-2022 by + * Copyright (C) 2020-2021 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * Written by Anuj Verma. diff --git a/Build/source/libs/freetype2/freetype-src/src/sdf/ftsdfrend.c b/Build/source/libs/freetype2/freetype-src/src/sdf/ftsdfrend.c index 37dbd40d9c7..30f2e62a4fe 100644 --- a/Build/source/libs/freetype2/freetype-src/src/sdf/ftsdfrend.c +++ b/Build/source/libs/freetype2/freetype-src/src/sdf/ftsdfrend.c @@ -4,7 +4,7 @@ * * Signed Distance Field renderer interface (body). * - * Copyright (C) 2020-2022 by + * Copyright (C) 2020-2021 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * Written by Anuj Verma. diff --git a/Build/source/libs/freetype2/freetype-src/src/sdf/ftsdfrend.h b/Build/source/libs/freetype2/freetype-src/src/sdf/ftsdfrend.h index cdb9c5f02f0..bc88707ec24 100644 --- a/Build/source/libs/freetype2/freetype-src/src/sdf/ftsdfrend.h +++ b/Build/source/libs/freetype2/freetype-src/src/sdf/ftsdfrend.h @@ -4,7 +4,7 @@ * * Signed Distance Field renderer interface (specification). * - * Copyright (C) 2020-2022 by + * Copyright (C) 2020-2021 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * Written by Anuj Verma. diff --git a/Build/source/libs/freetype2/freetype-src/src/sdf/module.mk b/Build/source/libs/freetype2/freetype-src/src/sdf/module.mk index 772bc48bf7a..6be4b0c6d47 100644 --- a/Build/source/libs/freetype2/freetype-src/src/sdf/module.mk +++ b/Build/source/libs/freetype2/freetype-src/src/sdf/module.mk @@ -3,7 +3,7 @@ # -# Copyright (C) 2020-2022 by +# Copyright (C) 2020-2021 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/Build/source/libs/freetype2/freetype-src/src/sdf/rules.mk b/Build/source/libs/freetype2/freetype-src/src/sdf/rules.mk index 5239d643ffb..7e7e4fbe860 100644 --- a/Build/source/libs/freetype2/freetype-src/src/sdf/rules.mk +++ b/Build/source/libs/freetype2/freetype-src/src/sdf/rules.mk @@ -3,7 +3,7 @@ # -# Copyright (C) 2020-2022 by +# Copyright (C) 2020-2021 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/Build/source/libs/freetype2/freetype-src/src/sdf/sdf.c b/Build/source/libs/freetype2/freetype-src/src/sdf/sdf.c index 297ba9ab021..1bc3fc385cc 100644 --- a/Build/source/libs/freetype2/freetype-src/src/sdf/sdf.c +++ b/Build/source/libs/freetype2/freetype-src/src/sdf/sdf.c @@ -4,7 +4,7 @@ * * FreeType Signed Distance Field renderer module component (body only). * - * Copyright (C) 2020-2022 by + * Copyright (C) 2020-2021 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * Written by Anuj Verma. |