pub struct Mesh { /* private fields */ }
Expand description

A 2D mesh that can be drawn to the screen.

A Mesh is a wrapper for a VertexBuffer, which allows it to be drawn in combination with several optional modifiers:

  • A Texture that individual vertices can sample from.
  • An IndexBuffer that can be used to modify the order/subset of vertices that are drawn.
  • A winding order, which determines which side of the geometry is front-facing.
  • A backface culling flag, which determines whether back-facing geometry should be drawn.
  • A draw range, which can be used to draw subsections of the mesh.

Without a texture set, the mesh will be drawn in white - the color attribute on the vertex data or DrawParams can be used to change this.

Performance

Creating or cloning a mesh is a very cheap operation, as they are effectively just bundles of resources that live on the GPU (such as buffers and textures). However, creating or modifying those underlying resources may be slow - make sure you read the docs for each type to understand their performance characteristics.

Note that, unlike most rendering in Tetra, mesh rendering is not batched by default - each time you draw the mesh will result in a seperate draw call.

Examples

The mesh example demonstrates how to build and draw a simple mesh.

The shapes example demonstrates how to draw primitive shapes, both through the simplified API on Mesh, and the more powerful GeometryBuilder API.

Implementations

Creates a new mesh, using the provided vertex buffer.

Creates a new mesh, using the provided vertex and index buffers.

Draws the mesh to the screen (or to a canvas, if one is enabled).

Draws multiple instances of the mesh to the screen (or to a canvas, if one is enabled).

You will need to use a custom Shader in order to pass unique properties to each instance. Currently, the easiest way of doing this is via uniform arrays - however, there is a hardware-determined limit on how many uniform locations an individual shader can use, so this may not work if you’re rendering a large number of objects.

This should usually only be used for complex meshes - instancing can be inefficient for simple geometry (e.g. quads). That said, as with all things performance-related, benchmark it before coming to any conclusions!

Gets a reference to the vertex buffer contained within this mesh.

Sets the vertex buffer that will be used when drawing the mesh.

Gets a reference to the index buffer contained within this mesh.

Returns None if this mesh does not currently have an index buffer attatched.

Sets the index buffer that will be used when drawing the mesh.

Resets the mesh to no longer use indexed drawing.

Gets a reference to the texture contained within this mesh.

Returns None if this mesh does not currently have an texture attatched.

Sets the texture that will be used when drawing the mesh.

Resets the mesh to be untextured.

Returns which winding order represents front-facing geometry in this mesh.

Back-facing geometry will be culled (not rendered) by default, but this can be changed via set_backface_culling.

The default winding order is counter-clockwise.

Sets which winding order represents front-facing geometry in this mesh.

Back-facing geometry will be culled (not rendered) by default, but this can be changed via set_backface_culling.

The default winding order is counter-clockwise.

Returns whether or not this mesh will cull (not render) back-facing geometry.

By default, backface culling is enabled, counter-clockwise vertices are considered front-facing, and clockwise vertices are considered back-facing. This can be modified via set_backface_culling and set_front_face_winding.

Sets whether or not this mesh will cull (not render) back-facing geometry.

By default, backface culling is enabled, counter-clockwise vertices are considered front-facing, and clockwise vertices are considered back-facing. This can be modified via this function and set_front_face_winding.

Sets the range of vertices (or indices, if the mesh is indexed) that should be included when drawing this mesh.

This can be useful if you have a large mesh but you only want to want to draw a subsection of it, or if you want to draw a mesh in multiple stages.

Sets the mesh to include all of its data when drawing.

Creates a new rectangle mesh.

If you need to draw multiple shapes, consider using GeometryBuilder to generate a combined mesh instead.

Errors

Creates a new rounded rectangle mesh.

If you need to draw multiple shapes, consider using GeometryBuilder to generate a combined mesh instead.

Errors

Creates a new circle mesh.

If you need to draw multiple shapes, consider using GeometryBuilder to generate a combined mesh instead.

Errors

Creates a new ellipse mesh.

If you need to draw multiple shapes, consider using GeometryBuilder to generate a combined mesh instead.

Errors

Creates a new polygon mesh.

If you need to draw multiple shapes, consider using GeometryBuilder to generate a combined mesh instead.

Errors

Creates a new polyline mesh.

If you need to draw multiple shapes, consider using GeometryBuilder to generate a combined mesh instead.

Errors

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

Converts to this type from the input type.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The alignment of pointer.

The type for initializers.

Initializes a with the given initializer. Read more

Dereferences the given pointer. Read more

Mutably dereferences the given pointer. Read more

Drops the object pointed to by the given pointer. Read more

The resulting type after obtaining ownership.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.