pub enum MaterialBindGroupAllocator {
Bindless(Box<MaterialBindGroupBindlessAllocator>),
NonBindless(Box<MaterialBindGroupNonBindlessAllocator>),
}
Expand description
A resource that places materials into bind groups and tracks their resources.
Internally, Bevy has separate allocators for bindless and non-bindless materials. This resource provides a common interface to the specific allocator in use.
Variants§
Bindless(Box<MaterialBindGroupBindlessAllocator>)
The allocator used when the material is bindless.
NonBindless(Box<MaterialBindGroupNonBindlessAllocator>)
The allocator used when the material is non-bindless.
Implementations§
Source§impl MaterialBindGroupAllocator
impl MaterialBindGroupAllocator
Sourcepub fn new(
render_device: &RenderDevice,
label: Option<&'static str>,
bindless_descriptor: Option<BindlessDescriptor>,
bind_group_layout: BindGroupLayout,
slab_capacity: Option<BindlessSlabResourceLimit>,
) -> MaterialBindGroupAllocator
pub fn new( render_device: &RenderDevice, label: Option<&'static str>, bindless_descriptor: Option<BindlessDescriptor>, bind_group_layout: BindGroupLayout, slab_capacity: Option<BindlessSlabResourceLimit>, ) -> MaterialBindGroupAllocator
Creates a new MaterialBindGroupAllocator
managing the data for a
single material.
Sourcepub fn get(&self, group: MaterialBindGroupIndex) -> Option<MaterialSlab<'_>>
pub fn get(&self, group: MaterialBindGroupIndex) -> Option<MaterialSlab<'_>>
Returns the slab with the given index, if one exists.
Sourcepub fn allocate_unprepared(
&mut self,
unprepared_bind_group: UnpreparedBindGroup,
bind_group_layout: &BindGroupLayout,
) -> MaterialBindingId
pub fn allocate_unprepared( &mut self, unprepared_bind_group: UnpreparedBindGroup, bind_group_layout: &BindGroupLayout, ) -> MaterialBindingId
Allocates an UnpreparedBindGroup
and returns the resulting binding ID.
This method should generally be preferred over
Self::allocate_prepared
, because this method supports both bindless
and non-bindless bind groups. Only use Self::allocate_prepared
if
you need to prepare the bind group yourself.
Sourcepub fn allocate_prepared(
&mut self,
prepared_bind_group: PreparedBindGroup,
) -> MaterialBindingId
pub fn allocate_prepared( &mut self, prepared_bind_group: PreparedBindGroup, ) -> MaterialBindingId
Places a pre-prepared bind group into a slab.
For bindless materials, the allocator internally manages the bind groups, so calling this method will panic if this is a bindless allocator. Only non-bindless allocators support this method.
It’s generally preferred to use Self::allocate_unprepared
, because
that method supports both bindless and non-bindless allocators. Only use
this method if you need to prepare the bind group yourself.
Sourcepub fn free(&mut self, material_binding_id: MaterialBindingId)
pub fn free(&mut self, material_binding_id: MaterialBindingId)
Deallocates the material with the given binding ID.
Any resources that are no longer referenced are removed from the slab.
Sourcepub fn prepare_bind_groups(
&mut self,
render_device: &RenderDevice,
fallback_bindless_resources: &FallbackBindlessResources,
fallback_image: &FallbackImage,
)
pub fn prepare_bind_groups( &mut self, render_device: &RenderDevice, fallback_bindless_resources: &FallbackBindlessResources, fallback_image: &FallbackImage, )
Recreates any bind groups corresponding to slabs that have been modified
since last calling MaterialBindGroupAllocator::prepare_bind_groups
.
Sourcepub fn write_buffers(
&mut self,
render_device: &RenderDevice,
render_queue: &RenderQueue,
)
pub fn write_buffers( &mut self, render_device: &RenderDevice, render_queue: &RenderQueue, )
Uploads the contents of all buffers that this
MaterialBindGroupAllocator
manages to the GPU.
Non-bindless allocators don’t currently manage any buffers, so this method only has an effect for bindless allocators.
Auto Trait Implementations§
impl Freeze for MaterialBindGroupAllocator
impl !RefUnwindSafe for MaterialBindGroupAllocator
impl Send for MaterialBindGroupAllocator
impl Sync for MaterialBindGroupAllocator
impl Unpin for MaterialBindGroupAllocator
impl !UnwindSafe for MaterialBindGroupAllocator
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>
, 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> 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> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync 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 more