logo
#[repr(C)]
pub enum VertexStepMode {
    Vertex,
    Instance,
}
Expand description

Whether a vertex buffer is indexed by vertex or by instance.

Consider a call to RenderPass::draw like this:

render_pass.draw(vertices, instances)

where vertices is a Range<u32> of vertex indices, and instances is a Range<u32> of instance indices.

For this call, wgpu invokes the vertex shader entry point once for every possible (v, i) pair, where v is drawn from vertices and i is drawn from instances. These invocations may happen in any order, and will usually run in parallel.

Each vertex buffer has a step mode, established by the step_mode field of its VertexBufferLayout, given when the pipeline was created. Buffers whose step mode is Vertex use v as the index into their contents, whereas buffers whose step mode is Instance use i. The indicated buffer element then contributes zero or more attribute values for the (v, i) vertex shader invocation to use, based on the VertexBufferLayout’s attributes list.

You can visualize the results from all these vertex shader invocations as a matrix with a row for each i from instances, and with a column for each v from vertices. In one sense, v and i are symmetrical: both are used to index vertex buffers and provide attribute values. But the key difference between v and i is that line and triangle primitives are built from the values of each row, along which i is constant and v varies, not the columns.

An indexed draw call works similarly:

render_pass.draw_indexed(indices, base_vertex, instances)

The only difference is that v values are drawn from the contents of the index buffer—specifically, the subrange of the index buffer given by indices—instead of simply being sequential integers, as they are in a draw call.

A non-instanced call, where instances is 0..1, is simply a matrix with only one row.

Corresponds to WebGPU GPUVertexStepMode.

Variants

Vertex

Vertex data is advanced every vertex.

Instance

Vertex data is advanced every instance.

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
Returns the “default value” for a type. Read more
Feeds this value into the given Hasher. Read more
Feeds a slice of this type into the given Hasher. Read more
This method tests for self and other values to be equal, and is used by ==. Read more
This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason. Read more

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
Compare self to key and return true if they are equal.

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 resulting type after obtaining ownership.
Creates owned data from borrowed data, usually by cloning. Read more
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.