From a9ba4457c6f9fd6b90f66c3f7e910fe7fe922c5f Mon Sep 17 00:00:00 2001 From: pyao12 Date: Sat, 6 Jun 2026 10:24:42 +0800 Subject: [PATCH] =?UTF-8?q?[optm]=20=E6=9D=82=E7=BA=BF=E5=87=8F=E5=B0=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fonts/ttf/ttf_render.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/fonts/ttf/ttf_render.cpp b/fonts/ttf/ttf_render.cpp index d6b469c..fbf7a7c 100644 --- a/fonts/ttf/ttf_render.cpp +++ b/fonts/ttf/ttf_render.cpp @@ -79,7 +79,11 @@ void ttf_outline_to_segments(const ttf_outline_t* outline, } } } - if (pending >= 0) PUSH_QUAD(anchor, pending, start); + if (pending >= 0) { + PUSH_QUAD(anchor, pending, start); + } else if (anchor != start) { + PUSH_LINE(anchor, start); + } #undef GET_X #undef GET_Y @@ -193,11 +197,10 @@ void ttf_rasterize(const ttf_seg_t* segs, SUINT32 num_segs, while (j > 0 && xs[j-1] > v) { xs[j] = xs[j-1]; j--; } xs[j] = v; } - // Deduplicate: merge intersections within 1 pixel (64 in 26.6) + // Deduplicate: merge intersections within 1/16 pixel (4 in 26.6) SUINT32 nxd = 0; for (SUINT32 i = 0; i < nxs; i++) { - if (nxd > 0 && (xs[i] - xs[nxd - 1]) < 64) { - // Near-duplicate — skip to avoid spurious fill slivers + if (nxd > 0 && (xs[i] - xs[nxd - 1]) < 4) { continue; } xs[nxd++] = xs[i];