Enum bevy::render::render_resource::VertexStepMode
[−]#[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
impl Clone for VertexStepMode
impl Clone for VertexStepMode
fn clone(&self) -> VertexStepMode
fn clone(&self) -> VertexStepMode
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source
. Read more
impl Debug for VertexStepMode
impl Debug for VertexStepMode
impl Default for VertexStepMode
impl Default for VertexStepMode
fn default() -> VertexStepMode
fn default() -> VertexStepMode
Returns the “default value” for a type. Read more
impl Hash for VertexStepMode
impl Hash for VertexStepMode
impl PartialEq<VertexStepMode> for VertexStepMode
impl PartialEq<VertexStepMode> for VertexStepMode
fn eq(&self, other: &VertexStepMode) -> bool
fn eq(&self, other: &VertexStepMode) -> bool
This method tests for self
and other
values to be equal, and is used
by ==
. Read more
impl Copy for VertexStepMode
impl Eq for VertexStepMode
impl StructuralEq for VertexStepMode
impl StructuralPartialEq for VertexStepMode
Auto Trait Implementations
impl RefUnwindSafe for VertexStepMode
impl Send for VertexStepMode
impl Sync for VertexStepMode
impl Unpin for VertexStepMode
impl UnwindSafe for VertexStepMode
Blanket Implementations
impl<T, U> AsBindGroupShaderType<U> for T where
U: ShaderType,
&'a T: for<'a> Into<U>,
impl<T, U> AsBindGroupShaderType<U> for T where
U: ShaderType,
&'a T: for<'a> Into<U>,
fn as_bind_group_shader_type(
&self,
_images: &HashMap<Handle<Image>, <Image as RenderAsset>::PreparedAsset, RandomState, Global>
) -> U
fn as_bind_group_shader_type(
&self,
_images: &HashMap<Handle<Image>, <Image as RenderAsset>::PreparedAsset, RandomState, Global>
) -> U
Return the T
ShaderType
for self
. When used in AsBindGroup
derives, it is safe to assume that all images in self
exist. Read more
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<T> Downcast for T where
T: Any,
impl<T> Downcast for T where
T: Any,
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
Convert 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
. Read more
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
Convert Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
. Read more
fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert &Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s. Read more
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert &mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s. Read more
sourceimpl<Q, K> Equivalent<K> for Q where
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Q where
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
sourcefn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to key
and return true
if they are equal.
impl<T> FromWorld for T where
T: Default,
impl<T> FromWorld for T where
T: Default,
fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Creates Self
using data from the given World
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>ⓘNotable traits for Instrumented<T>impl<T> Future for Instrumented<T> where
T: Future, type Output = <T as Future>::Output;
fn instrument(self, span: Span) -> Instrumented<Self>ⓘNotable traits for Instrumented<T>impl<T> Future for Instrumented<T> where
T: Future, type Output = <T as Future>::Output;
T: Future, type Output = <T as Future>::Output;
sourcefn in_current_span(self) -> Instrumented<Self>ⓘNotable traits for Instrumented<T>impl<T> Future for Instrumented<T> where
T: Future, type Output = <T as Future>::Output;
fn in_current_span(self) -> Instrumented<Self>ⓘNotable traits for Instrumented<T>impl<T> Future for Instrumented<T> where
T: Future, type Output = <T as Future>::Output;
T: Future, type Output = <T as Future>::Output;
impl<T> TypeData for T where
T: 'static + Send + Sync + Clone,
impl<T> TypeData for T where
T: 'static + Send + Sync + Clone,
fn clone_type_data(&self) -> Box<dyn TypeData + 'static, Global>
sourceimpl<T> WithSubscriber for T
impl<T> WithSubscriber for T
sourcefn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>ⓘNotable traits for WithDispatch<T>impl<T> Future for WithDispatch<T> where
T: Future, type Output = <T as Future>::Output;
where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>ⓘNotable traits for WithDispatch<T>impl<T> Future for WithDispatch<T> where
T: Future, type Output = <T as Future>::Output;
where
S: Into<Dispatch>,
T: Future, type Output = <T as Future>::Output;
Attaches the provided Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
sourcefn with_current_subscriber(self) -> WithDispatch<Self>ⓘNotable traits for WithDispatch<T>impl<T> Future for WithDispatch<T> where
T: Future, type Output = <T as Future>::Output;
fn with_current_subscriber(self) -> WithDispatch<Self>ⓘNotable traits for WithDispatch<T>impl<T> Future for WithDispatch<T> where
T: Future, type Output = <T as Future>::Output;
T: Future, type Output = <T as Future>::Output;
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more