
# Objective - Alternative to and closes #19545 - Resolves #9790 by providing an alternative - `Mesh` is meant as format optimized for the renderer. There are no guarantees about how it looks, and breaking changes are expected - This makes it not feasible to implement `Reflect` for all its fields or `Serialize` it. - However, (de)serializing a mesh has an important use case: send a mesh over BRP to another process, like an editor! - In my case, I'm making a navmesh editor and need to copy the level that is running in the game into the editor process - Assets don't solve this because - They don't work over BRP #19709 and - The meshes may be procedural - So, we need a way to (de)serialize a mesh for short-term transmissions. ## Solution - Like `SerializedAnimationGraph` before, let's make a `SerializedMesh`! - This type's fields are all `private` because we want to keep the internals of `Mesh` hidden, and exposing them through this secondary struct would be counter-productive to that - All this struct can do is be serialized, be deserialized, and be converted to and from a mesh - It's not a lossless transmission: the handle for morph targets is ignored, and things like the render usages make no sense to be transmitted imo ## Future Work The same song and dance needs to happen for `Image`, but I can live with completely white meshes for the moment lol ## Testing - Added a simple test --------- Co-authored-by: atlv <email@atlasdostal.com>
56 lines
1.8 KiB
TOML
56 lines
1.8 KiB
TOML
[package]
|
|
name = "bevy_scene"
|
|
version = "0.17.0-dev"
|
|
edition = "2024"
|
|
description = "Provides scene functionality for Bevy Engine"
|
|
homepage = "https://bevy.org"
|
|
repository = "https://github.com/bevyengine/bevy"
|
|
license = "MIT OR Apache-2.0"
|
|
keywords = ["bevy"]
|
|
|
|
[features]
|
|
default = ["serialize"]
|
|
serialize = [
|
|
"dep:serde",
|
|
"uuid/serde",
|
|
"bevy_ecs/serialize",
|
|
"bevy_platform/serialize",
|
|
"bevy_render?/serialize",
|
|
]
|
|
|
|
[dependencies]
|
|
# bevy
|
|
bevy_app = { path = "../bevy_app", version = "0.17.0-dev" }
|
|
bevy_asset = { path = "../bevy_asset", version = "0.17.0-dev" }
|
|
bevy_derive = { path = "../bevy_derive", version = "0.17.0-dev" }
|
|
bevy_ecs = { path = "../bevy_ecs", version = "0.17.0-dev" }
|
|
bevy_reflect = { path = "../bevy_reflect", version = "0.17.0-dev" }
|
|
bevy_transform = { path = "../bevy_transform", version = "0.17.0-dev" }
|
|
bevy_utils = { path = "../bevy_utils", version = "0.17.0-dev" }
|
|
bevy_render = { path = "../bevy_render", version = "0.17.0-dev", optional = true }
|
|
bevy_platform = { path = "../bevy_platform", version = "0.17.0-dev", default-features = false, features = [
|
|
"std",
|
|
] }
|
|
|
|
# other
|
|
serde = { version = "1.0", features = ["derive"], optional = true }
|
|
uuid = { version = "1.13.1", features = ["v4"] }
|
|
thiserror = { version = "2", default-features = false }
|
|
derive_more = { version = "1", default-features = false, features = ["from"] }
|
|
|
|
[target.'cfg(target_arch = "wasm32")'.dependencies]
|
|
# TODO: Assuming all wasm builds are for the browser. Require `no_std` support to break assumption.
|
|
uuid = { version = "1.13.1", default-features = false, features = ["js"] }
|
|
|
|
[dev-dependencies]
|
|
postcard = { version = "1.0", features = ["alloc"] }
|
|
bincode = { version = "2.0", features = ["serde"] }
|
|
rmp-serde = "1.1"
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[package.metadata.docs.rs]
|
|
rustdoc-args = ["-Zunstable-options", "--generate-link-to-definition"]
|
|
all-features = true
|