rendy-mesh 0.3.1

Rendy's mesh
Documentation

# `rendy-mesh`


Helper crate for `gfx-hal` to create and use meshes with vertex semantics.

# Vertex semantics


Vertex formats usually have semantics attached to field names.  A common example is for a
vertex to be composed of a position, normal, color and texture coordinate field.
This crate provides traits and types to have semantics explicitly defined for a vertex at the type level.

`Position`, `Normal`, `TexCoord` etc. are attributes that have unambiguous semantics.
Users can define their own attribute types by implementing the `Attribute` trait.

While the attribute type on its own is a trivial vertex format (with single attribute), complex vertex formats are created by composing attribute types.

The `WithAttribute` trait allows to get formatting info for individual attributes defined in a vertex format.
The `Query` trait allows to get formatting info for several attributes at once.

`VertexFormat` queried from vertex formats can be used to build graphics pipelines and bind required vertex buffers from mesh to command buffer.

To define a custom vertex format type, the `AsVertexFormat` trait must be implemented providing a `VertexFormat` associated constant.

`WithAttribute` can be implemented also for all attributes and the `VertexFormat` associated constant in `AsVertexFormat` can be defined more clearly by utilizing the `WithAttribute` implementation.  `Query` is automatically implemented.

# Mesh


`Mesh` is a collection of vertex buffers and optionally an index buffer together with vertex formats of the buffers and index type. Also there is a primitive type specified which defines how vertices form primitives (lines, triangles etc).
To create instances of `Mesh` you need to use `MeshBuilder`.

1. Fill `MeshBuilder` with typed vertex data.
1. Provide the index data.
1. Set the primitive type (Triangles list by default).
1. Call `MeshBuilder::build`. It uses `Factory` from `gfx-render` to create buffers and upload data.

Here is your fresh new `Mesh`. Or an `Error` from `gfx-render`.

To bind vertex buffers to a command buffer use `Mesh::bind` with a sorted array of `VertexFormat`s (the same that was used to setup the graphics pipeline).