Skip to main content

GpuBuffer

Struct GpuBuffer 

Source
pub struct GpuBuffer<T: Pod> { /* private fields */ }
Expand description

GPU buffer wrapper with type safety.

This struct wraps a WGPU buffer and provides type-safe operations for uploading and downloading data to/from the GPU.

Implementations§

Source§

impl<T: Pod> GpuBuffer<T>

Source

pub fn new( context: &GpuContext, len: usize, usage: BufferUsages, ) -> GpuResult<Self>

Create a new GPU buffer with the specified size and usage.

§Errors

Returns an error if buffer creation fails or size is invalid.

Source

pub fn from_data( context: &GpuContext, data: &[T], usage: BufferUsages, ) -> GpuResult<Self>

Create a GPU buffer from existing data.

§Errors

Returns an error if buffer creation or upload fails.

Source

pub fn staging(context: &GpuContext, len: usize) -> GpuResult<Self>

Create a staging buffer for CPU-GPU transfers.

§Errors

Returns an error if buffer creation fails.

Source

pub fn write(&mut self, data: &[T]) -> GpuResult<()>

Write data to the GPU buffer.

§Errors

Returns an error if the buffer doesn’t support writes or data size doesn’t match buffer size.

Source

pub async fn read(&self) -> GpuResult<Vec<T>>

Read data from the GPU buffer asynchronously.

§Errors

Returns an error if the buffer doesn’t support reads or mapping fails.

Source

pub async fn read_async(&self) -> GpuResult<Vec<T>>

Read data from the GPU buffer asynchronously using a Future.

This is the primary async entry-point for GPU→CPU readback. It uses a futures::channel::oneshot channel so the mapping callback resolves the returned Future without blocking any thread.

Equivalent to calling .read().await, but named explicitly so downstream code can refer to the async path by a stable, unambiguous name when both read_blocking and the async variant need to co-exist in the same scope.

§Errors

Returns an error if the buffer doesn’t support reads (MAP_READ usage must be set), if the oneshot channel is dropped before resolution (GpuError::BufferMapping("Channel closed")), or if wgpu reports a mapping failure.

Source

pub fn read_blocking(&self) -> GpuResult<Vec<T>>

Read data from the GPU buffer synchronously (blocking).

§Errors

Returns an error if the buffer doesn’t support reads or mapping fails.

Source

pub fn copy_from(&mut self, source: &GpuBuffer<T>) -> GpuResult<()>

Copy data from another GPU buffer.

§Errors

Returns an error if buffer sizes don’t match or copy is not supported.

Source

pub fn len(&self) -> usize

Get the number of elements in the buffer.

Source

pub fn is_empty(&self) -> bool

Check if the buffer is empty.

Source

pub fn size_bytes(&self) -> u64

Get the buffer size in bytes.

Source

pub fn buffer(&self) -> &Buffer

Get the underlying WGPU buffer.

Source

pub fn usage(&self) -> BufferUsages

Get buffer usage flags.

Trait Implementations§

Source§

impl<T: Pod> Clone for GpuBuffer<T>

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T: Pod> Debug for GpuBuffer<T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<T> !RefUnwindSafe for GpuBuffer<T>

§

impl<T> !UnwindSafe for GpuBuffer<T>

§

impl<T> Freeze for GpuBuffer<T>

§

impl<T> Send for GpuBuffer<T>
where T: Send,

§

impl<T> Sync for GpuBuffer<T>
where T: Sync,

§

impl<T> Unpin for GpuBuffer<T>
where T: Unpin,

§

impl<T> UnsafeUnpin for GpuBuffer<T>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSendSync for T

Source§

impl<T> WasmNotSync for T
where T: Sync,

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more