Lyon
GPU-based 2D graphics rendering experiments in rust.
Goals
For now the goal is to provide efficient SVG-compliant path tessellation tools to help with rendering vector graphics on the GPU. If things go well the project could eventually grow into including a (partial) SVG renderer in a separate crate, but for now think of this library as a way to turn complex paths into triangles for use in your own rendering engine.
The intent is for this library to be useful in projects like Servo.
The project is split into small crates:
- lyon: A meta-crate that imports the other crates.
- lyon_core: Contains types common to most lyon crates.
- lyon_tessellator: The tessellation routines (where most of the focus is for now).
- lyon_path: A simple vector path data structure provided for convenience, but not required by the other crates.
- lyon_path_iterator: A set of iterator abstractions over vector paths.
- lyon_path_builder: Tools to build paths.
- lyon_bezier: 2d quadratic and cubic bezier curve maths, including an efficient flattening algorithm.
- lyon_extra: various optional utilities.
Status
The focus right now is on implementing a SVG compliant path tessellator (rather than an actual SVG render).
- path
- bezier curves (through path flattening)
- SVG 1.1
- builder API
- iterator API
- complex fill
- fill shape types
- concave shapes
- self-intersections
- holes
- fill rule
- even-odd
- non-zero
- vertex-aa
- clip rect
- stable API
- fill shape types
- complex stroke
- line cap
- butt
- square
- round
- line join
- miter
- miter clip
- round
- bevel
- arcs
- vertex-aa
- clip rect
- stable API
- line cap
- basic shapes
- quad
- fill
- stroke
- rectangle
- fill
- stroke
- rounded rectangle
- fill
- stroke
- ellipsis
- fill
- stroke
- convex polygon
- fill
- stroke
- nine-patch
- quad
- path flattening
- builder
- iterator
- testing
- fill
- test suite
- automatic test-case reduction
- reference testing
- fuzzing
- stroke
- basic shapes
- fill
TODO
There are the unticked items above as well as a rough list of things to do. If you are interested in contributing, please let me know on twitter (@nicalsilva) or by e-mail.
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.