mirror of
https://github.com/bevyengine/bevy
synced 2024-11-10 07:04:33 +00:00
support assets of any size (#1997)
Fixes #1892 The following code is a cut down version of the issue, and crashes the same way: ```rust enum AssetLifecycleEvent <T> { Create(T), Free } fn main() { let (sender, _receiver) = crossbeam_channel::unbounded(); sender.send(AssetLifecycleEvent::<[u32; 32000]>::Free).unwrap(); } ``` - We're creating a channel that need to be able to hold `AssetLifecycleEvent::Create(T)` which has the size of our type `T` - The two variants of the enums have a very different size By keeping `T` boxed while sending through the channel, it doesn't crash
This commit is contained in:
parent
38feddb878
commit
0a8576b710
2 changed files with 3 additions and 3 deletions
|
@ -477,7 +477,7 @@ impl AssetServer {
|
|||
}
|
||||
}
|
||||
|
||||
let _ = assets.set(result.id, result.asset);
|
||||
let _ = assets.set(result.id, *result.asset);
|
||||
}
|
||||
Ok(AssetLifecycleEvent::Free(handle_id)) => {
|
||||
if let HandleId::AssetPathId(id) = handle_id {
|
||||
|
|
|
@ -139,7 +139,7 @@ impl<'a> LoadContext<'a> {
|
|||
/// The result of loading an asset of type `T`
|
||||
#[derive(Debug)]
|
||||
pub struct AssetResult<T: Component> {
|
||||
pub asset: T,
|
||||
pub asset: Box<T>,
|
||||
pub id: HandleId,
|
||||
pub version: usize,
|
||||
}
|
||||
|
@ -168,7 +168,7 @@ impl<T: AssetDynamic> AssetLifecycle for AssetLifecycleChannel<T> {
|
|||
self.sender
|
||||
.send(AssetLifecycleEvent::Create(AssetResult {
|
||||
id,
|
||||
asset: *asset,
|
||||
asset,
|
||||
version,
|
||||
}))
|
||||
.unwrap()
|
||||
|
|
Loading…
Reference in a new issue