summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexei Podtelezhnikov <apodtele@gmail.com>2017-10-21 22:57:43 -0400
committerAlexei Podtelezhnikov <apodtele@gmail.com>2017-10-21 22:57:43 -0400
commit91015cb41d8f56777f93394f5a60914bc0c0f330 (patch)
tree06bd92df523ecfc3650fc060b7eca8950b224161
parentd74440a327d6437b5eecd7d552576dbf22e12028 (diff)
downloadfreetype2-91015cb41d8f56777f93394f5a60914bc0c0f330.tar.gz
[smooth] Improve complex rendering at high ppem.
At large sizes almost but not exactly horizontal segments can quickly drain the rendering pool. This patch at least avoids filling the pool with trivial cells. Beyond this, we can only increase the pool size. Reported, analyzed, and tested by Colin Fahey. * src/smooth/ftgrays.c (gray_set_cell): Do not record trivial cells.
-rw-r--r--ChangeLog14
-rw-r--r--src/smooth/ftgrays.c4
2 files changed, 15 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 7340978ce..afe63fc84 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,17 @@
2017-10-20 Alexei Podtelezhnikov <apodtele@gmail.com>
+ [smooth] Improve complex rendering at high ppem.
+
+ At large sizes almost but not exactly horizontal segments can quickly
+ drain the rendering pool. This patch at least avoids filling the pool
+ with trivial cells. Beyond this, we can only increase the pool size.
+
+ Reported, analyzed, and tested by Colin Fahey.
+
+ * src/smooth/ftgrays.c (gray_set_cell): Do not record trivial cells.
+
+2017-10-20 Alexei Podtelezhnikov <apodtele@gmail.com>
+
[base] Improve tracing in FT_Load_Glyph, FT_*_Size.
* src/base/ftobjs.c (FT_Load_Glyph): Tag tracing messages with
@@ -43,7 +55,7 @@
2017-10-14 Alexei Podtelezhnikov <apodtele@gmail.com>
* builds/windows/ftdebug.c (FT_Message): Print to stderr.
- * builds/wince/ftdebug.c (FT_Message): Ditto.
+ * builds/wince/ftdebug.c (FT_Message): Ditto.
2017-10-14 Behdad Esfahbod <behdad@behdad.org>
diff --git a/src/smooth/ftgrays.c b/src/smooth/ftgrays.c
index e84e38d85..fa488ecb9 100644
--- a/src/smooth/ftgrays.c
+++ b/src/smooth/ftgrays.c
@@ -582,8 +582,8 @@ typedef ptrdiff_t FT_PtrDist;
if ( ex < ras.min_ex )
ex = ras.min_ex - 1;
- /* record the current one if it is valid */
- if ( !ras.invalid )
+ /* record the current one if it is substantial and valid */
+ if ( ( ras.area || ras.cover ) && !ras.invalid )
gray_record_cell( RAS_VAR );
ras.area = 0;