Struct keeshond_datapack::PreparedStore
source · [−]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
sourceimpl<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> !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
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> Downcast for T where
T: Any,
impl<T> Downcast for T where
T: Any,
sourcefn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
Convert 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
. Read more
sourcefn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
Convert Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
. Read more
sourcefn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert &Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s. Read more
sourcefn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert &mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s. Read more