Hello,

While you guys are on the subject of better splines. I propose to fix
grey_render_conic too. I think that interpreting the control point as a
corner is a simplistic overestimation. A little algebra gives the
exact boundary position.

Nothing breaks at the firsts glance in my testing. Whether this speeds
things up,
I do not know how to measure. Lastly. the equation below assumes that conic
really means quadratic, in agreement with the logic of grey_split_conic.

Comments?
Alexi



--- a/src/smooth/ftgrays.c      2010-07-12 15:09:25.000000000 -0400
+++ b/src/smooth/ftgrays.c      2010-10-01 21:58:05.182637518 -0400
@@ -936,16 +936,18 @@
         TPos  min, max, y;


+        /* set the boundaries based on the endpoints */
         min = max = arc[0].y;

-        y = arc[1].y;
-        if ( y < min ) min = y;
-        if ( y > max ) max = y;
-
         y = arc[2].y;
         if ( y < min ) min = y;
         if ( y > max ) max = y;

+        /* amend the boundaries based on the control point */
+        y = arc[1].y;
+        if ( y < min ) min = (min * max - y * y) / (min + max - 2 * y);
+        if ( y > max ) max = (min * max - y * y) / (min + max - 2 * y);
+
         if ( TRUNC( min ) >= ras.max_ey || TRUNC( max ) < ras.min_ey )
           goto Draw;

_______________________________________________
Freetype-devel mailing list
Freetype-devel@nongnu.org
http://lists.nongnu.org/mailman/listinfo/freetype-devel

Reply via email to