summaryrefslogtreecommitdiff
path: root/engine/src/asset.rs
diff options
context:
space:
mode:
Diffstat (limited to 'engine/src/asset.rs')
-rw-r--r--engine/src/asset.rs30
1 files changed, 21 insertions, 9 deletions
diff --git a/engine/src/asset.rs b/engine/src/asset.rs
index 34f7a85..ea0037c 100644
--- a/engine/src/asset.rs
+++ b/engine/src/asset.rs
@@ -654,13 +654,14 @@ impl Default for Assets
pub struct Submitter<'path>
{
+ pending_messages: Vec<ImportWorkMessage>,
import_work_msg_sender: MpscSender<ImportWorkMessage>,
asset_path: &'path Path,
}
impl Submitter<'_>
{
- pub fn submit_store<AssetT>(&self, asset: AssetT)
+ pub fn submit_store<AssetT>(&mut self, asset: AssetT)
where
AssetT: Asset,
{
@@ -669,7 +670,7 @@ impl Submitter<'_>
name: None,
};
- let _ = self.import_work_msg_sender.send(ImportWorkMessage::Store {
+ self.pending_messages.push(ImportWorkMessage::Store {
do_store: Box::new(move |assets, label| {
assets.store_with_label::<AssetT>(label.as_label(), asset);
}),
@@ -677,7 +678,7 @@ impl Submitter<'_>
});
}
- pub fn submit_store_named<AssetT>(&self, name: impl AsRef<str>, asset: AssetT)
+ pub fn submit_store_named<AssetT>(&mut self, name: impl AsRef<str>, asset: AssetT)
where
AssetT: Asset,
{
@@ -686,13 +687,20 @@ impl Submitter<'_>
name: Some(name.as_ref().into()),
};
- let _ = self.import_work_msg_sender.send(ImportWorkMessage::Store {
+ self.pending_messages.push(ImportWorkMessage::Store {
do_store: Box::new(move |assets, label| {
assets.store_with_label::<AssetT>(label.as_label(), asset);
}),
label,
});
}
+
+ fn perform_submissions(&mut self)
+ {
+ for msg in self.pending_messages.drain(..) {
+ let _ = self.import_work_msg_sender.send(msg);
+ }
+ }
}
/// Asset handle.
@@ -857,12 +865,16 @@ impl WrappedImporterFn
})
.transpose()?;
- inner_func(
- &mut Submitter { import_work_msg_sender, asset_path },
+ let mut submitter = Submitter {
+ pending_messages: Vec::with_capacity(2),
+ import_work_msg_sender,
asset_path,
- asset_settings,
- )
- .map_err(|err| ImporterError::Other(Box::new(err)))?;
+ };
+
+ inner_func(&mut submitter, asset_path, asset_settings)
+ .map_err(|err| ImporterError::Other(Box::new(err)))?;
+
+ submitter.perform_submissions();
Ok(())
};