Skip to content

Commit

Permalink
Document VertexStepMode.
Browse files Browse the repository at this point in the history
  • Loading branch information
jimblandy committed May 22, 2022
1 parent 84efe2b commit 00b8053
Showing 1 changed file with 52 additions and 1 deletion.
53 changes: 52 additions & 1 deletion wgpu-types/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2515,10 +2515,61 @@ impl CompareFunction {
}
}

/// Rate that determines when vertex data is advanced.
/// Whether a vertex buffer is indexed by vertex or by instance.
///
/// Consider a call to [`RenderPass::draw`] like this:
///
/// ```ignore
/// 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`.
///
/// Each vertex buffer has a `VertexStepMode`, given by the
/// [`step_mode`] field of its [`VertexBufferLayout`] provided when
/// the pipeline was created. Vertex 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 vertex shader to consume, based on the
/// [`VertexBufferLayout`]'s [`attributes`] list.
///
/// You can visualize all the vertex shader results 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:
///
/// ```ignore
/// render_pass.draw_indexed(indices, base_vertex, instances)
/// ```
///
/// The only difference is that `v` values are drawn from the contents
/// of the index buffer&mdash;specifically, the subrange of the index
/// buffer given by `indices`&mdash;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`](
/// https://gpuweb.github.io/gpuweb/#enumdef-gpuvertexstepmode).
///
/// [`RenderPass::draw`]: ../wgpu/struct.RenderPass.html#method.draw
/// [`VertexBufferLayout`]: ../wgpu/struct.VertexBufferLayout.html
/// [`step_mode`]: ../wgpu/struct.VertexBufferLayout.html#structfield.step_mode
/// [`attributes`]: ../wgpu/struct.VertexBufferLayout.html#structfield.attributes
/// [`Vertex`]: VertexStepMode::Vertex
/// [`Instance`]: VertexStepMode::Instance
#[repr(C)]
#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)]
#[cfg_attr(feature = "trace", derive(Serialize))]
Expand Down

0 comments on commit 00b8053

Please sign in to comment.