pub struct DynamicStorageBuffer<T: ShaderType> { /* private fields */ }
Expand description
Stores data to be transferred to the GPU and made accessible to shaders as a dynamic storage buffer.
Dynamic storage buffers can be made available to shaders in some combination of read/write mode, and can store large amounts
of data. Note however that WebGL2 does not support storage buffers, so consider alternative options in this case. Dynamic
storage buffers support multiple separate bindings at dynamic byte offsets and so have a
push
method.
The contained data is stored in system RAM. write_buffer
queues copying of the data from system RAM to VRAM. The data within a storage buffer binding must conform to
std430 alignment/padding requirements. DynamicStorageBuffer
takes care of serializing the inner type to conform to
these requirements. Each item push
ed into this structure
will additionally be aligned to meet dynamic offset alignment requirements.
Other options for storing GPU-accessible data are:
Implementations§
Source§impl<T: ShaderType + WriteInto> DynamicStorageBuffer<T>
impl<T: ShaderType + WriteInto> DynamicStorageBuffer<T>
pub fn buffer(&self) -> Option<&Buffer>
pub fn binding(&self) -> Option<BindingResource<'_>>
pub fn is_empty(&self) -> bool
pub fn push(&mut self, value: T) -> u32
pub fn set_label(&mut self, label: Option<&str>)
pub fn get_label(&self) -> Option<&str>
Sourcepub fn add_usages(&mut self, usage: BufferUsages)
pub fn add_usages(&mut self, usage: BufferUsages)
Add more BufferUsages
to the buffer.
This method only allows addition of flags to the default usage flags.
The default values for buffer usage are BufferUsages::COPY_DST
and BufferUsages::STORAGE
.
pub fn write_buffer(&mut self, device: &RenderDevice, queue: &RenderQueue)
pub fn clear(&mut self)
Trait Implementations§
Source§impl<T: ShaderType> Default for DynamicStorageBuffer<T>
impl<T: ShaderType> Default for DynamicStorageBuffer<T>
Source§impl<'a, T: ShaderType + WriteInto> IntoBinding<'a> for &'a DynamicStorageBuffer<T>
impl<'a, T: ShaderType + WriteInto> IntoBinding<'a> for &'a DynamicStorageBuffer<T>
fn into_binding(self) -> BindingResource<'a>
Auto Trait Implementations§
impl<T> Freeze for DynamicStorageBuffer<T>
impl<T> !RefUnwindSafe for DynamicStorageBuffer<T>
impl<T> Send for DynamicStorageBuffer<T>
impl<T> Sync for DynamicStorageBuffer<T>
impl<T> Unpin for DynamicStorageBuffer<T>
impl<T> !UnwindSafe for DynamicStorageBuffer<T>
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<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()
.
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