Struct bevy::render::render_resource::BufferVec
source · pub struct BufferVec<T>where
T: ShaderType + WriteInto,{ /* private fields */ }Expand description
Like RawBufferVec, but doesn’t require that the data type T be
NoUninit.
This is a high-performance data structure that you should use whenever
possible if your data is more complex than is suitable for RawBufferVec.
The ShaderType trait from the encase library is used to ensure that
the data is correctly aligned for use by the GPU.
For performance reasons, unlike RawBufferVec, this type doesn’t allow
CPU access to the data after it’s been added via BufferVec::push. If you
need CPU access to the data, consider another type, such as
[StorageBuffer].
Implementations§
source§impl<T> BufferVec<T>where
T: ShaderType + WriteInto,
impl<T> BufferVec<T>where
T: ShaderType + WriteInto,
sourcepub const fn new(buffer_usage: BufferUsages) -> BufferVec<T>
pub const fn new(buffer_usage: BufferUsages) -> BufferVec<T>
Creates a new BufferVec with the given BufferUsages.
sourcepub fn buffer(&self) -> Option<&Buffer>
pub fn buffer(&self) -> Option<&Buffer>
Returns a handle to the buffer, if the data has been uploaded.
sourcepub fn binding(&self) -> Option<BindingResource<'_>>
pub fn binding(&self) -> Option<BindingResource<'_>>
Returns the binding for the buffer if the data has been uploaded.
sourcepub fn capacity(&self) -> usize
pub fn capacity(&self) -> usize
Returns the amount of space that the GPU will use before reallocating.
sourcepub fn set_label(&mut self, label: Option<&str>)
pub fn set_label(&mut self, label: Option<&str>)
Changes the debugging label of the buffer.
The next time the buffer is updated (via [reserve]), Bevy will inform
the driver of the new label.
sourcepub fn reserve(&mut self, capacity: usize, device: &RenderDevice)
pub fn reserve(&mut self, capacity: usize, device: &RenderDevice)
Creates a Buffer on the RenderDevice with size
at least std::mem::size_of::<T>() * capacity, unless such a buffer already exists.
If a Buffer exists, but is too small, references to it will be discarded,
and a new Buffer will be created. Any previously created Buffers
that are no longer referenced will be deleted by the RenderDevice
once it is done using them (typically 1-2 frames).
In addition to any BufferUsages provided when
the BufferVec was created, the buffer on the RenderDevice
is marked as BufferUsages::COPY_DST.
sourcepub fn write_buffer(&mut self, device: &RenderDevice, queue: &RenderQueue)
pub fn write_buffer(&mut self, device: &RenderDevice, queue: &RenderQueue)
Queues writing of data from system RAM to VRAM using the RenderDevice
and the provided RenderQueue.
Before queuing the write, a reserve operation is
executed.
Auto Trait Implementations§
impl<T> Freeze for BufferVec<T>
impl<T> RefUnwindSafe for BufferVec<T>where
T: RefUnwindSafe,
impl<T> Send for BufferVec<T>where
T: Send,
impl<T> Sync for BufferVec<T>where
T: Sync,
impl<T> Unpin for BufferVec<T>where
T: Unpin,
impl<T> UnwindSafe for BufferVec<T>where
T: UnwindSafe,
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.