[−][src]Struct keeshond_datapack::PreparedStore
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.
Methods
impl<T: DataObject + 'static, U> PreparedStore<T, U>
[src]
pub fn new(
data_store: &mut DataStore<T>,
data_preparer: Box<dyn DataPreparer<T, U>>
) -> Result<PreparedStore<T, U>, PreparedStoreError>
[src]
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.
pub fn get(&self, index: DataId) -> Option<&U>
[src]
Returns a reference to the prepared data by the given DataId, if one exists. Otherwise returns None.
pub fn get_mut(&mut self, index: DataId) -> Option<&mut U>
[src]
Returns a mutable reference to the prepared data by the given DataId, if one exists. Otherwise returns None.
pub fn sync(
&mut self,
data_store: &mut DataStore<T>
) -> Result<(), PreparedStoreError>
[src]
&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,
U: Unpin,
impl<T, U> !UnwindSafe for PreparedStore<T, U>
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,