#[repr(C)]pub struct IndirectParametersMetadata {
pub base_output_index: u32,
pub batch_set_index: u32,
pub mesh_index: u32,
pub early_instance_count: u32,
pub late_instance_count: u32,
}Expand description
A structure, written and read on GPU, that records how many instances of each mesh are actually to be drawn.
The GPU mesh preprocessing shader increments the
Self::early_instance_count and Self::late_instance_count as it
determines that meshes are visible. The indirect parameter building shader
reads this metadata in order to construct the indirect draw parameters.
Each batch will have one instance of this structure.
Fields§
§base_output_index: u32The index of the first instance of this mesh in the array of
MeshUniforms.
Note that this is the first output index in this batch. Since each
instance of this structure refers to arbitrarily many instances, the
MeshUniforms corresponding to this batch span the indices
base_output_index..(base_output_index + instance_count).
batch_set_index: u32The index of the batch set that this batch belongs to in the
IndirectBatchSet buffer.
A batch set is a set of meshes that may be multi-drawn together.
Multiple batches (and therefore multiple instances of
IndirectParametersMetadata structures) can be part of the same batch
set.
mesh_index: u32The index of the first mesh in this batch in the array of
MeshInputUniforms.
early_instance_count: u32The number of instances that were judged visible last frame.
The uniform allocation pass sets this value to 0, and the mesh preprocessing shader increments it as it culls mesh instances.
late_instance_count: u32The number of instances that have been judged potentially visible this frame that weren’t in the last frame’s potentially visible set.
The uniform allocation pass sets this value to 0, and the mesh preprocessing shader increments it as it culls mesh instances.
Trait Implementations§
Source§impl Clone for IndirectParametersMetadata
impl Clone for IndirectParametersMetadata
Source§fn clone(&self) -> IndirectParametersMetadata
fn clone(&self) -> IndirectParametersMetadata
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for IndirectParametersMetadata
Source§impl CreateFrom for IndirectParametersMetadatawhere
IndirectParametersMetadata: ShaderType<ExtraMetadata = StructMetadata<5>>,
u32: for<'__> CreateFrom + for<'__> CreateFrom + for<'__> CreateFrom + for<'__> CreateFrom + for<'__> CreateFrom,
impl CreateFrom for IndirectParametersMetadatawhere
IndirectParametersMetadata: ShaderType<ExtraMetadata = StructMetadata<5>>,
u32: for<'__> CreateFrom + for<'__> CreateFrom + for<'__> CreateFrom + for<'__> CreateFrom + for<'__> CreateFrom,
fn create_from<B>(reader: &mut Reader<B>) -> IndirectParametersMetadatawhere
B: BufferRef,
Source§impl Default for IndirectParametersMetadata
impl Default for IndirectParametersMetadata
Source§fn default() -> IndirectParametersMetadata
fn default() -> IndirectParametersMetadata
impl Pod for IndirectParametersMetadata
Source§impl ReadFrom for IndirectParametersMetadatawhere
IndirectParametersMetadata: ShaderType<ExtraMetadata = StructMetadata<5>>,
u32: for<'__> ReadFrom + for<'__> ReadFrom + for<'__> ReadFrom + for<'__> ReadFrom + for<'__> ReadFrom,
impl ReadFrom for IndirectParametersMetadatawhere
IndirectParametersMetadata: ShaderType<ExtraMetadata = StructMetadata<5>>,
u32: for<'__> ReadFrom + for<'__> ReadFrom + for<'__> ReadFrom + for<'__> ReadFrom + for<'__> ReadFrom,
Source§impl ShaderSize for IndirectParametersMetadatawhere
u32: ShaderSize,
impl ShaderSize for IndirectParametersMetadatawhere
u32: ShaderSize,
Source§const SHADER_SIZE: NonZero<u64> = _
const SHADER_SIZE: NonZero<u64> = _
ShaderType::min_size)Source§impl ShaderType for IndirectParametersMetadata
impl ShaderType for IndirectParametersMetadata
Source§fn assert_uniform_compat()
fn assert_uniform_compat()
Self meets the requirements of the
uniform address space restrictions on stored values and the
uniform address space layout constraints Read moreSource§impl WriteInto for IndirectParametersMetadatawhere
IndirectParametersMetadata: ShaderType<ExtraMetadata = StructMetadata<5>>,
u32: for<'__> WriteInto + for<'__> WriteInto + for<'__> WriteInto + for<'__> WriteInto + for<'__> WriteInto,
impl WriteInto for IndirectParametersMetadatawhere
IndirectParametersMetadata: ShaderType<ExtraMetadata = StructMetadata<5>>,
u32: for<'__> WriteInto + for<'__> WriteInto + for<'__> WriteInto + for<'__> WriteInto + for<'__> WriteInto,
fn write_into<B>(&self, writer: &mut Writer<B>)where
B: BufferMut,
Auto Trait Implementations§
impl Freeze for IndirectParametersMetadata
impl RefUnwindSafe for IndirectParametersMetadata
impl Send for IndirectParametersMetadata
impl Sync for IndirectParametersMetadata
impl Unpin for IndirectParametersMetadata
impl UnsafeUnpin for IndirectParametersMetadata
impl UnwindSafe for IndirectParametersMetadata
Blanket Implementations§
impl<T> AnyBitPattern for Twhere
T: Pod,
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CheckedBitPattern for Twhere
T: AnyBitPattern,
impl<T> CheckedBitPattern for Twhere
T: AnyBitPattern,
Source§type Bits = T
type Bits = T
Self must have the same layout as the specified Bits except for
the possible invalid bit patterns being checked during
is_valid_bit_pattern.Source§fn is_valid_bit_pattern(_bits: &T) -> bool
fn is_valid_bit_pattern(_bits: &T) -> bool
bits
as &Self.Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> ConditionalSend for Twhere
T: Send,
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>, which can then be
downcast into Box<dyn 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>, which 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> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> FromTemplate for T
impl<T> FromTemplate for T
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
Creates Self using default().
impl<T> GpuArrayBufferable for T
Source§impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
Source§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoResult<T> for T
impl<T> IntoResult<T> for T
Source§fn into_result(self) -> Result<T, RunSystemError>
fn into_result(self) -> Result<T, RunSystemError>
impl<T> NoUninit for Twhere
T: Pod,
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
impl<T> Settings for T
Source§impl<T> Template for T
impl<T> Template for T
Source§fn build_template(
&self,
_context: &mut TemplateContext<'_, '_>,
) -> Result<<T as Template>::Output, BevyError>
fn build_template( &self, _context: &mut TemplateContext<'_, '_>, ) -> Result<<T as Template>::Output, BevyError>
entity context to produce a Template::Output.Source§fn clone_template(&self) -> T
fn clone_template(&self) -> T
Clone.Source§impl<T> TypeData for T
impl<T> TypeData for T
Source§fn clone_type_data(&self) -> Box<dyn TypeData>
fn clone_type_data(&self) -> Box<dyn TypeData>
self.