diff options
| author | HampusM <hampus@hampusmat.com> | 2026-10-10 16:13:14 +0200 |
|---|---|---|
| committer | HampusM <hampus@hampusmat.com> | 2026-10-10 16:13:14 +0200 |
| commit | 7477c135c1d5bfba6ef246fbbc046944d681cd1c (patch) | |
| tree | 9930a017db0bf21b7366a121b8fc79ad3c8aa429 /engine/src/asset.rs | |
| parent | 168af2d80efca939c8cab30b33d820a793292361 (diff) | |
Diffstat (limited to 'engine/src/asset.rs')
| -rw-r--r-- | engine/src/asset.rs | 30 |
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(()) }; |
