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.
This is just a StorageBuffer, but also allows you to set dynamic offsets.
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 pushed 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>, 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> 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, 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