Crate lyon_tessellation [] [src]

Lyon Tessellation

This crate implements tools to compute the tessellation of 2d paths fill and stroke operations, in order to render them efficiently on the GPU.

Overview

The most interesting types and traits of this crate are:

  • FillTessellator - Tessellator for complex path fill operations.
  • StrokeTessellator - Tessellator for complex path stroke operations.
  • GeometryBuilder - (See the documentation of the geometry_builder module) Which the above two are built on. This trait provides an interface for types that help with building and assembling the vertices and triangles that form the tessellation, usually in the form of arbitrary vertex and index buffers.
  • The various specialised tessellators in the basic_shapes modules.

The tessellation pipeline

FillTessellator GeometryBuilder output VertexConstructor Iterator<PathEvent> builder.add_vertex(FillVertex) -> VertexId;builder.add_triangle(VertexId, VertexId, VertexId); FillVertex -> CustomVertex MoveTo(Point)LineTo(Point)Close

The figure above shows each step of the fill tessellation pipeline. Tessellating strokes works the same way using StrokeVertex instead of FillVertex.

The input: iterators

The path tessellators are not tied to a particular data structure. Instead they consume iterators of flattened path events. A Path struct in the crate lyon_path is provided for convenience (but is optional).

The output: geometry builders

The tessellators are parametrized over a type implementing the GeometryBuilder trait. This trait provides some simple methods to add vertices and triangles, without enforcing any particular representation for the resulting geometry. This is important because each application will usually want to work with its own vertex type tailored a certain rendering model.

Applications can implement the GeometryBuilder<Point> trait in order to generate vertex buffers and index buffers with custom vertex types.

The structs VertexBuffers and geometry_buider::BuffersBuilder are provided for convenience. VertexBuffers<T> is contains a Vec<T> for the vertices and a Vec<u16> for the indices.

BuffersBuilder is generic over a VertexConstructor<InputVertex, OutputVertex> trait which creates the application's output vertices from the tessellator input vertices (either FillVertex or StrokeVertex).

Rendering the tessellated geometry

The tessellators produce geometry in the form of vertex and index buffers which are expected to be rendered using the equivalent of OpenGL's glDrawElements with mode GL_TRIANGLES available under various names in the different graphics APIs. There is a basic example showing how it can be done with gfx-rs.

Flattening and tolerance

Most tessellators in this crate currently operate on flattened paths (paths or shapes represented by sequences of line segments). when paths contain bézier curves or arcs, the latter need to be approximated with sequences of line segments. This approximation depends on a tolerance parameter which represents the maximum distance between a curve and its flattened approximation.

More explanaion about flattening and tolerance in the lyon_geom crate.

Examples

Re-exports

pub extern crate lyon_path as path;

Modules

basic_shapes

Tessellation routines for simple shapes.

geom

Overview.

geometry_builder

Tools to help with generating vertex and index buffers.

math

Basic types that are used everywhere. Most other lyon crates reexport them.

Structs

BuffersBuilder

A temporary view on a VertexBuffers object which facilitate the population of vertex and index data.

Count

Number of vertices and indices added during the tessellation.

Edge
FillEvents

A sequence of edges sorted from top to bottom, to be used as the tessellator's input.

FillOptions

Parameters for the fill tessellator.

FillTessellator

A Context object that can tessellate fill operations for complex paths.

FillVertex

Vertex produced by the fill tessellators.

OrientedEdge
StrokeBuilder

A builder that tessellates a stroke directly without allocating any intermediate data structure.

StrokeOptions

Parameters for the tessellator.

StrokeTessellator

A Context object that can tessellate stroke operations for complex paths.

StrokeVertex

Vertex produced by the stroke tessellators.

VertexBuffers

Structure that holds the vertex and index data.

Enums

FillError

The fill tessellator's error enumeration.

FillRule

The fill rule defines how to determine what is inside and what is outside of the shape.

InternalError
LineCap

Line cap as defined by the SVG specification.

LineJoin

Line join as defined by the SVG specification.

OnError

Defines the tessellator the should try to behave when detecting an error.

Side

Left or right.

Traits

GeometryBuilder

An interface separating tessellators and other geometry generation algorithms from the actual vertex construction.

GeometryReceiver

An interface with similar goals to GeometryBuilder for algorithms that pre-build the vertex and index buffers.

VertexConstructor

A trait specifying how to create vertex values.

Type Definitions

FillResult

The fill tessellator's result type.