I agree that for FreeType it makes more sense to port the algorithms to C
than to complicate the build system by bringing in Rust. (I think Rust has
a lot of potential for this kind of work, but I see that as a quite
separate project).

I have come up with an extremely good algorithm for cubic to linear
conversion, it's at https://levien.com/tmp/flatten.html. The lyon people
have ported this to Rust, see https://github.com/nical/lyon/pull/552. It's
based on ideas from my blog post
https://raphlinus.github.io/graphics/curves/2019/12/23/flatten-quadbez.html but
goes beyond it. I believe that this algorithm is very near optimal in both
speed and quality. If selected as a mentor, I will write it up as a paper
(ideally for submission to jctg), and there would be an opportunity for the
student to coauthor that.

Experience on resvg is a good qualification for this work :)


On Wed, Mar 25, 2020 at 7:42 AM Werner LEMBERG <w...@gnu.org> wrote:

> Hello Moazin,
> > I am applying to GSoC this year as well and I am particularly
> > interested in the project "Port the font-rs/fontdue rendering engine
> > to FreeType".
> Great!
> > Firstly, I saw that the project obviously requires knowing Rust.
> > While I am not a Rust programmer, I do know many of the basics due
> > to my experience with `resvg' last year.  I'm able to easily read
> > and understand Rust code.  I'm also going to be improving my
> > knowledge of Rust as I further prepare the proposal.  I guess this
> > should be sufficient?
> Yes, I think.
> > [...] The actual raster part is mostly in `src/raster.rs' which is
> > quite small.  Also, creating a C wrapper for Rust code is an easy
> > process (compared to other programming languages).  Given the small
> > size of the rendering engine it seems that implementing it from
> > scratch in C inside FreeType isn't too hard either.  Though I don't
> > know if there is any advantage to doing that? The dependency issue
> > maybe?
> Please always have embedded systems in mind.  On such platforms it's
> rather unlikely to find a Rust compiler, thus a conversion to C sounds
> sensible.
> > Another thing I saw was that this engine can't handle Cubic Bezier
> > curves, only Quadratic.  FreeType does support font formats which
> > use Cubic Bezier curves. So maybe I can add this functionality to it
> > as part of this project.  (unless there is something in the
> > algorithm that can't be applied on Cubic curves or other font
> > formats in general)
> I think this would be a very useful addition.  Raph?
> > I think that porting can be done by:
> >
> > 1. Creating a C wrapper for font-rs (for the rendering part at
> >    least).
> Well, *only* the rendering part, since the rest is done by FreeType
> already.
> > 2. Creating a new rendering module in FreeType that can provide the
> >    necessary "glue" code.
> Yes.  As mentioned above, a conversion to C would be useful, too.
> I don't have any special tips or requirements for a proposal. :-)
>     Werner

Reply via email to