pub struct PreparedStore<T: DataObject + 'static, U> { /* private fields */ }
Expand description
An optional companion to a DataStore. If you have data that needs initialization with a backend (for example, textures you need to upload to a GPU), PreparedStore provides a way to handle this in a two-step process that is borrow-checker-friendly.
Template parameter T
is the type of the source DataObject, and template parameter U
is the prepared
data. This system allows you to separate logical, backend-agnostic data from backend-specific resources.
For graphics, you might use T
to represent the raw image data and metadata such as width and height,
and use U
to represent a handle to the texture in VRAM.
In order to function, you should call PreparedStore::sync() once per frame before needing to use the resources in question in your backend. This will “prepare” or “unprepare” any resources as needed.
The PreparedStore instance must be associated with a DataStore. Only one PreparedStore can be associated with any given DataStore.
Implementations§
Source§impl<T: DataObject + 'static, U> PreparedStore<T, U>
impl<T: DataObject + 'static, U> PreparedStore<T, U>
Sourcepub fn new(
data_store: &mut DataStore<T>,
data_preparer: Box<dyn DataPreparer<T, U>>,
) -> Result<PreparedStore<T, U>, PreparedStoreError>
pub fn new( data_store: &mut DataStore<T>, data_preparer: Box<dyn DataPreparer<T, U>>, ) -> Result<PreparedStore<T, U>, PreparedStoreError>
Creates a new PreparedStore that holds prepared versions U
of DataObjects T
, and
associates with the given DataStore.
Sourcepub fn sync(
&mut self,
data_store: &mut DataStore<T>,
) -> Result<(), PreparedStoreError>
pub fn sync( &mut self, data_store: &mut DataStore<T>, ) -> Result<(), PreparedStoreError>
Synchronizes this store with the associated DataStore. If any DataObjects were recently loaded, they will be prepared by calling DataPreparer::prepare(). If any were recently unloaded, they will be “unprepared” (unloaded from the backend) by calling DataPreparer::unprepare().
Auto Trait Implementations§
impl<T, U> Freeze for PreparedStore<T, U>
impl<T, U> !RefUnwindSafe for PreparedStore<T, U>
impl<T, U> !Send for PreparedStore<T, U>
impl<T, U> !Sync for PreparedStore<T, U>
impl<T, U> Unpin for PreparedStore<T, U>where
U: Unpin,
impl<T, U> !UnwindSafe for PreparedStore<T, U>
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
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.