Skip to content

Commit 3dc6482

Browse files
committed
Separate the gated and ungated processed readers.
1 parent 641cdcc commit 3dc6482

File tree

2 files changed

+12
-5
lines changed

2 files changed

+12
-5
lines changed

crates/bevy_asset/src/io/processor_gated.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use super::{AsyncSeekForward, ErasedAssetReader};
1717
///
1818
/// [`AssetProcessor`]: crate::processor::AssetProcessor
1919
pub(crate) struct ProcessorGatedReader {
20-
reader: Box<dyn ErasedAssetReader>,
20+
reader: Arc<dyn ErasedAssetReader>,
2121
source: AssetSourceId<'static>,
2222
processing_state: Arc<ProcessingState>,
2323
}
@@ -26,7 +26,7 @@ impl ProcessorGatedReader {
2626
/// Creates a new [`ProcessorGatedReader`].
2727
pub(crate) fn new(
2828
source: AssetSourceId<'static>,
29-
reader: Box<dyn ErasedAssetReader>,
29+
reader: Arc<dyn ErasedAssetReader>,
3030
processing_state: Arc<ProcessingState>,
3131
) -> Self {
3232
Self {

crates/bevy_asset/src/io/source.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,12 @@ impl AssetSourceBuilder {
180180
id: id.clone(),
181181
reader,
182182
writer,
183-
processed_reader: self.processed_reader.as_mut().map(|r| r()),
183+
processed_reader: self
184+
.processed_reader
185+
.as_mut()
186+
.map(|r| r())
187+
.map(Into::<Arc<_>>::into),
188+
ungated_processed_reader: None,
184189
processed_writer,
185190
event_receiver: None,
186191
watcher: None,
@@ -386,7 +391,8 @@ pub struct AssetSource {
386391
id: AssetSourceId<'static>,
387392
reader: Box<dyn ErasedAssetReader>,
388393
writer: Option<Box<dyn ErasedAssetWriter>>,
389-
processed_reader: Option<Box<dyn ErasedAssetReader>>,
394+
processed_reader: Option<Arc<dyn ErasedAssetReader>>,
395+
ungated_processed_reader: Option<Arc<dyn ErasedAssetReader>>,
390396
processed_writer: Option<Box<dyn ErasedAssetWriter>>,
391397
watcher: Option<Box<dyn AssetWatcher>>,
392398
processed_watcher: Option<Box<dyn AssetWatcher>>,
@@ -562,7 +568,8 @@ impl AssetSource {
562568
/// the [`AssetProcessor`](crate::AssetProcessor) has finished processing the requested asset.
563569
pub(crate) fn gate_on_processor(&mut self, processing_state: Arc<ProcessingState>) {
564570
if let Some(reader) = self.processed_reader.take() {
565-
self.processed_reader = Some(Box::new(ProcessorGatedReader::new(
571+
self.ungated_processed_reader = Some(reader.clone());
572+
self.processed_reader = Some(Arc::new(ProcessorGatedReader::new(
566573
self.id(),
567574
reader,
568575
processing_state,

0 commit comments

Comments
 (0)