diff --git a/crates/bevy_asset/src/loader.rs b/crates/bevy_asset/src/loader.rs index cbc5aac3c1..452e8027db 100644 --- a/crates/bevy_asset/src/loader.rs +++ b/crates/bevy_asset/src/loader.rs @@ -50,7 +50,7 @@ pub trait ErasedAssetLoader: Send + Sync + 'static { fn load<'a>( &'a self, reader: &'a mut dyn Reader, - meta: Box, + meta: &'a dyn AssetMetaDyn, load_context: LoadContext<'a>, ) -> BoxedFuture< 'a, @@ -81,7 +81,7 @@ where fn load<'a>( &'a self, reader: &'a mut dyn Reader, - meta: Box, + meta: &'a dyn AssetMetaDyn, mut load_context: LoadContext<'a>, ) -> BoxedFuture< 'a, @@ -96,7 +96,7 @@ where let asset = ::load(self, reader, settings, &mut load_context) .await .map_err(Into::into)?; - Ok(load_context.finish(asset, Some(meta)).into()) + Ok(load_context.finish(asset).into()) }) } @@ -147,12 +147,11 @@ pub struct LoadedAsset { pub(crate) dependencies: HashSet, pub(crate) loader_dependencies: HashMap, AssetHash>, pub(crate) labeled_assets: HashMap, LabeledAsset>, - pub(crate) meta: Option>, } impl LoadedAsset { /// Create a new loaded asset. This will use [`VisitAssetDependencies`](crate::VisitAssetDependencies) to populate `dependencies`. - pub fn new_with_dependencies(value: A, meta: Option>) -> Self { + pub fn new_with_dependencies(value: A) -> Self { let mut dependencies = >::default(); value.visit_dependencies(&mut |id| { dependencies.insert(id); @@ -162,7 +161,6 @@ impl LoadedAsset { dependencies, loader_dependencies: HashMap::default(), labeled_assets: HashMap::default(), - meta, } } @@ -192,7 +190,7 @@ impl LoadedAsset { impl From for LoadedAsset { fn from(asset: A) -> Self { - LoadedAsset::new_with_dependencies(asset, None) + LoadedAsset::new_with_dependencies(asset) } } @@ -202,7 +200,6 @@ pub struct ErasedLoadedAsset { pub(crate) dependencies: HashSet, pub(crate) loader_dependencies: HashMap, AssetHash>, pub(crate) labeled_assets: HashMap, LabeledAsset>, - pub(crate) meta: Option>, } impl From> for ErasedLoadedAsset { @@ -212,7 +209,6 @@ impl From> for ErasedLoadedAsset { dependencies: asset.dependencies, loader_dependencies: asset.loader_dependencies, labeled_assets: asset.labeled_assets, - meta: asset.meta, } } } @@ -254,7 +250,6 @@ impl ErasedLoadedAsset { /// Cast this loaded asset as the given type. If the type does not match, /// the original type-erased asset is returned. - #[expect(clippy::result_large_err, reason = "Function returns `Self` on error.")] pub fn downcast(mut self) -> Result, ErasedLoadedAsset> { match self.value.downcast::() { Ok(value) => Ok(LoadedAsset { @@ -262,7 +257,6 @@ impl ErasedLoadedAsset { dependencies: self.dependencies, loader_dependencies: self.loader_dependencies, labeled_assets: self.labeled_assets, - meta: self.meta, }), Err(value) => { self.value = value; @@ -364,7 +358,7 @@ impl<'a> LoadContext<'a> { /// for i in 0..2 { /// let mut labeled = load_context.begin_labeled_asset(); /// handles.push(std::thread::spawn(move || { - /// (i.to_string(), labeled.finish(Image::default(), None)) + /// (i.to_string(), labeled.finish(Image::default())) /// })); /// } /// @@ -397,7 +391,7 @@ impl<'a> LoadContext<'a> { ) -> Handle { let mut context = self.begin_labeled_asset(); let asset = load(&mut context); - let loaded_asset = context.finish(asset, None); + let loaded_asset = context.finish(asset); self.add_loaded_labeled_asset(label, loaded_asset) } @@ -451,13 +445,12 @@ impl<'a> LoadContext<'a> { /// "Finishes" this context by populating the final [`Asset`] value (and the erased [`AssetMeta`] value, if it exists). /// The relevant asset metadata collected in this context will be stored in the returned [`LoadedAsset`]. - pub fn finish(self, value: A, meta: Option>) -> LoadedAsset { + pub fn finish(self, value: A) -> LoadedAsset { LoadedAsset { value, dependencies: self.dependencies, loader_dependencies: self.loader_dependencies, labeled_assets: self.labeled_assets, - meta, } } @@ -524,7 +517,7 @@ impl<'a> LoadContext<'a> { pub(crate) async fn load_direct_internal( &mut self, path: AssetPath<'static>, - meta: Box, + meta: &dyn AssetMetaDyn, loader: &dyn ErasedAssetLoader, reader: &mut dyn Reader, ) -> Result { @@ -543,10 +536,7 @@ impl<'a> LoadContext<'a> { dependency: path.clone(), error, })?; - let info = loaded_asset - .meta - .as_ref() - .and_then(|m| m.processed_info().as_ref()); + let info = meta.processed_info().as_ref(); let hash = info.map(|i| i.full_hash).unwrap_or_default(); self.loader_dependencies.insert(path, hash); Ok(loaded_asset) diff --git a/crates/bevy_asset/src/loader_builders.rs b/crates/bevy_asset/src/loader_builders.rs index 681bd16cbc..7ebc6608ad 100644 --- a/crates/bevy_asset/src/loader_builders.rs +++ b/crates/bevy_asset/src/loader_builders.rs @@ -428,7 +428,7 @@ impl<'builder, 'reader, T> NestedLoader<'_, '_, T, Immediate<'builder, 'reader>> let asset = self .load_context - .load_direct_internal(path.clone(), meta, &*loader, reader.as_mut()) + .load_direct_internal(path.clone(), meta.as_ref(), &*loader, reader.as_mut()) .await?; Ok((loader, asset)) } diff --git a/crates/bevy_asset/src/processor/process.rs b/crates/bevy_asset/src/processor/process.rs index 5b084de849..64370824dc 100644 --- a/crates/bevy_asset/src/processor/process.rs +++ b/crates/bevy_asset/src/processor/process.rs @@ -326,14 +326,7 @@ impl<'a> ProcessContext<'a> { let loader = server.get_asset_loader_with_type_name(loader_name).await?; let mut reader = SliceReader::new(self.asset_bytes); let loaded_asset = server - .load_with_meta_loader_and_reader( - self.path, - Box::new(meta), - &*loader, - &mut reader, - false, - true, - ) + .load_with_meta_loader_and_reader(self.path, &meta, &*loader, &mut reader, false, true) .await?; for (path, full_hash) in &loaded_asset.loader_dependencies { self.new_processed_info diff --git a/crates/bevy_asset/src/server/mod.rs b/crates/bevy_asset/src/server/mod.rs index 6a2e475219..bfeb7a40f9 100644 --- a/crates/bevy_asset/src/server/mod.rs +++ b/crates/bevy_asset/src/server/mod.rs @@ -488,11 +488,8 @@ impl AssetServer { match server.load_untyped_async(path).await { Ok(handle) => server.send_asset_event(InternalAssetEvent::Loaded { id, - loaded_asset: LoadedAsset::new_with_dependencies( - LoadedUntypedAsset { handle }, - None, - ) - .into(), + loaded_asset: LoadedAsset::new_with_dependencies(LoadedUntypedAsset { handle }) + .into(), }), Err(err) => { error!("{err}"); @@ -647,7 +644,14 @@ impl AssetServer { }; match self - .load_with_meta_loader_and_reader(&base_path, meta, &*loader, &mut *reader, true, false) + .load_with_meta_loader_and_reader( + &base_path, + meta.as_ref(), + &*loader, + &mut *reader, + true, + false, + ) .await { Ok(loaded_asset) => { @@ -735,7 +739,7 @@ impl AssetServer { /// After the asset has been fully loaded by the [`AssetServer`], it will show up in the relevant [`Assets`] storage. #[must_use = "not using the returned strong handle may result in the unexpected release of the asset"] pub fn add(&self, asset: A) -> Handle { - self.load_asset(LoadedAsset::new_with_dependencies(asset, None)) + self.load_asset(LoadedAsset::new_with_dependencies(asset)) } pub(crate) fn load_asset(&self, asset: impl Into>) -> Handle { @@ -798,7 +802,7 @@ impl AssetServer { let task = IoTaskPool::get().spawn(async move { match future.await { Ok(asset) => { - let loaded_asset = LoadedAsset::new_with_dependencies(asset, None).into(); + let loaded_asset = LoadedAsset::new_with_dependencies(asset).into(); event_sender .send(InternalAssetEvent::Loaded { id, loaded_asset }) .unwrap(); @@ -928,7 +932,6 @@ impl AssetServer { id, loaded_asset: LoadedAsset::new_with_dependencies( LoadedFolder { handles }, - None, ) .into(), }), @@ -1314,7 +1317,7 @@ impl AssetServer { pub(crate) async fn load_with_meta_loader_and_reader( &self, asset_path: &AssetPath<'_>, - meta: Box, + meta: &dyn AssetMetaDyn, loader: &dyn ErasedAssetLoader, reader: &mut dyn Reader, load_dependencies: bool, diff --git a/crates/bevy_gltf/src/loader.rs b/crates/bevy_gltf/src/loader.rs index 319bfa7590..0e754a83b7 100644 --- a/crates/bevy_gltf/src/loader.rs +++ b/crates/bevy_gltf/src/loader.rs @@ -923,7 +923,7 @@ async fn load_gltf<'a, 'b, 'c>( joints: joint_entities, }); } - let loaded_scene = scene_load_context.finish(Scene::new(world), None); + let loaded_scene = scene_load_context.finish(Scene::new(world)); let scene_handle = load_context.add_loaded_labeled_asset(scene_label(&scene), loaded_scene); if let Some(name) = scene.name() {