pub struct Buffer {
pub label: String,
pub buffer: Buffer,
}Expand description
Create and manage GPU buffers.
§Examples
Write once, render many:
use wde_wgpu::{buffer::{Buffer, BufferUsage}, instance::RenderInstanceData};
let vertices: &[f32] = &[0.0, 0.5, 0.0, -0.5, -0.5, 0.0, 0.5, -0.5, 0.0];
let mut vertex_buffer = Buffer::new(
instance,
"triangle-vertices",
vertices.len() * std::mem::size_of::<f32>(),
BufferUsage::VERTEX | BufferUsage::COPY_DST,
None,
);
vertex_buffer.write(instance, bytemuck::cast_slice(vertices), 0);Read back GPU results:
use wde_wgpu::{buffer::{Buffer, BufferUsage}, instance::RenderInstanceData};
let readback = Buffer::new(
instance,
"readback",
1024,
BufferUsage::MAP_READ | BufferUsage::COPY_DST,
None,
);
readback.map_read(instance, |view| {
let floats: &[f32] = bytemuck::cast_slice(&view);
println!("first value = {}", floats.get(0).unwrap_or(&0.0));
});Copy between GPU resources:
use wde_wgpu::{buffer::{Buffer, BufferUsage}, instance::RenderInstanceData};
let src = Buffer::new(instance, "src", 256, BufferUsage::COPY_SRC, Some(&[1u8; 256]));
let dst = Buffer::new(instance, "dst", 256, BufferUsage::COPY_DST, None);
dst.copy_from_buffer(instance, &src);Fields§
§label: String§buffer: BufferImplementations§
Source§impl Buffer
impl Buffer
Sourcepub fn new(
instance: &RenderInstanceData<'_>,
label: &str,
size: usize,
usage: BufferUsage,
content: Option<&[u8]>,
) -> Self
pub fn new( instance: &RenderInstanceData<'_>, label: &str, size: usize, usage: BufferUsage, content: Option<&[u8]>, ) -> Self
Create a new buffer.
§Arguments
instance- The render instance.label- The label of the buffer.size- The size of the buffer.usage- The usage of the buffer (vertex, index, uniform, storage).content- The content of the buffer.
Sourcepub fn copy_from_buffer(
&self,
instance: &RenderInstanceData<'_>,
buffer: &Buffer,
)
pub fn copy_from_buffer( &self, instance: &RenderInstanceData<'_>, buffer: &Buffer, )
Copy data to the buffer from another buffer. Note that the buffer must have the COPY_DST usage.
§Arguments
instance- The render instance.buffer- The buffer to copy from.
Sourcepub fn copy_from_buffer_offset(
&self,
instance: &RenderInstanceData<'_>,
buffer: &Buffer,
source_offset: u64,
destination_offset: u64,
size: u64,
)
pub fn copy_from_buffer_offset( &self, instance: &RenderInstanceData<'_>, buffer: &Buffer, source_offset: u64, destination_offset: u64, size: u64, )
Copy data to the buffer from another buffer offset by a given offset. Note that the buffer must have the COPY_DST usage.
§Arguments
instance- The render instance.buffer- The buffer to copy from.source_offset- The offset in the source buffer to start copying from.destination_offset- The offset in the destination buffer to start copying to.size- The size of the data to copy.
Sourcepub fn copy_from_texture(
&mut self,
instance: &RenderInstanceData<'_>,
texture: &Texture,
)
pub fn copy_from_texture( &mut self, instance: &RenderInstanceData<'_>, texture: &Texture, )
Copy data to the buffer from a texture. Note that the buffer must have the COPY_DST usage.
§Arguments
instance- The render instance.texture- The texture to copy from.
Sourcepub fn write(
&self,
instance: &RenderInstanceData<'_>,
content: &[u8],
offset: usize,
)
pub fn write( &self, instance: &RenderInstanceData<'_>, content: &[u8], offset: usize, )
Write data to the buffer. Note that the buffer must have the COPY_DST usage.
§Arguments
instance- The render instance.content- The content to write to the buffer.offset- The offset to write the content to.
Sourcepub fn map_read(
&self,
instance: &RenderInstanceData<'_>,
callback: impl FnOnce(BufferView),
)
pub fn map_read( &self, instance: &RenderInstanceData<'_>, callback: impl FnOnce(BufferView), )
Map the buffer. The access to the buffer is read-only. This will wait for the buffer to be mapped. Note that the buffer must have the MAP_READ usage.
§Arguments
instance- The render instance.callback- A closure that takes a reference to the buffer. The callback takes reference to the buffer.
Sourcepub fn map_write(
&self,
instance: &RenderInstanceData<'_>,
callback: impl FnOnce(BufferViewMut),
)
pub fn map_write( &self, instance: &RenderInstanceData<'_>, callback: impl FnOnce(BufferViewMut), )
Map the buffer as mutable. This allows to write to the buffer. This will wait for the buffer to be mapped. Note that the buffer must have the MAP_WRITE usage.
§Arguments
instance- The render instance.callback- A closure that takes a mutable reference to the buffer. The callback takes a mutable reference to the buffer.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Buffer
impl !RefUnwindSafe for Buffer
impl Send for Buffer
impl Sync for Buffer
impl Unpin for Buffer
impl !UnwindSafe for Buffer
Blanket Implementations§
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<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§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.§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.§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.§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.§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§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.§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.§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.§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.§impl<T> DowncastSend for T
impl<T> DowncastSend for T
§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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