GPU-based 2D graphics rendering in rust.
For now the goal is to provide efficient SVG-compliant path tessellation tools to help with rendering vector graphics on the GPU. 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 and games.
// Build a Path.
let mut builder = SvgPathBuilder::new(Path::builder());
builder.move_to(point(0.0, 0.0));
builder.line_to(point(1.0, 0.0));
builder.quadratic_bezier_to(point(2.0, 0.0), point(2.0, 1.0));
builder.cubic_bezier_to(point(1.0, 1.0), point(0.0, 1.0), point(0.0, 0.0));
builder.close();
let path = builder.build();
// Will contain the result of the tessellation.
let mut geometry_cpu: VertexBuffers<Vec2> = VertexBuffers::new();
let mut tessellator = FillTessellator::new();
{
// The simple builder uses the tessellator's vertex type.
// You can implement the GeometryBuilder trait to create custom vertices.
let mut vertex_builder = simple_builder(&mut geometry_cpu);
// Compute the tessellation.
tessellator.tessellate_path(
path.path_iter().flattened(0.1),
&FillOptions::default(),
&mut vertex_builder
).unwrap();
}
// The tessellated geometry is ready to be uploaded to the GPU.
println!(" -- {} vertices {} indices",
geometry_cpu.vertices.len(),
geometry_cpu.indices.len()
);
The project is split into small crates:
- - lyon_tessellation - Path tessellation routines.
- - lyon_path_builder - Tools to facilitate building paths.
- - lyon_path_iterator - Tools to facilitate iteratring over paths.
- - lyon_path - A simple optional path data structure, provided for convenience.
- - lyon_bezier - Cubic and quadratic 2d bezier math.
- - lyon_svg - Create paths using SVG's path syntax.
- - lyon_extra - Additional testing and debugging tools.
- - lyon_core - Common types to most lyon crates.
There is also a toy command-line tool to tessellate SVG path from your favorite terminal.
Have a look at the basic and advanced gfx-rs examples to see how integrating the tessellators in a renderer can look like.
The github issues is the most up to date list of things to do in the near future. Some of these issues have the "help wanted" label which indicates that they are approachable for people who are not already familiar with the code. The ones with the easy label are good places to start for anyone looking to contribute for the first time.
Need help working on or with lyon? File an issue, ask questions on gitter, or contact @nical by e-mail.
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.
There is useful information for contributors in the contribution guidelines.
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.