#[repr(C)]pub enum VertexStepMode {
Vertex = 0,
Instance = 1,
}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 = 0
Vertex data is advanced every vertex.
Instance = 1
Vertex data is advanced every instance.
Trait Implementations§
source§impl Clone for VertexStepMode
impl Clone for VertexStepMode
source§fn clone(&self) -> VertexStepMode
fn clone(&self) -> VertexStepMode
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moresource§impl Debug for VertexStepMode
impl Debug for VertexStepMode
source§impl Default for VertexStepMode
impl Default for VertexStepMode
source§fn default() -> VertexStepMode
fn default() -> VertexStepMode
source§impl Hash for VertexStepMode
impl Hash for VertexStepMode
source§impl PartialEq for VertexStepMode
impl PartialEq for VertexStepMode
source§fn eq(&self, other: &VertexStepMode) -> bool
fn eq(&self, other: &VertexStepMode) -> bool
self and other values to be equal, and is used
by ==.impl Copy for VertexStepMode
impl Eq for VertexStepMode
impl StructuralPartialEq for VertexStepMode
Auto Trait Implementations§
impl Freeze for VertexStepMode
impl RefUnwindSafe for VertexStepMode
impl Send for VertexStepMode
impl Sync for VertexStepMode
impl Unpin for VertexStepMode
impl UnwindSafe for VertexStepMode
Blanket Implementations§
source§impl<T, U> AsBindGroupShaderType<U> for T
impl<T, U> AsBindGroupShaderType<U> for T
source§fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
T ShaderType for self. When used in AsBindGroup
derives, it is safe to assume that all images in self exist.source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.source§impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
source§fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Self using data from the given World.