
# 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>
52 lines
1.7 KiB
TOML
52 lines
1.7 KiB
TOML
[package]
|
|
name = "bevy_mesh"
|
|
version = "0.17.0-dev"
|
|
edition = "2024"
|
|
description = "Provides mesh types for Bevy Engine"
|
|
homepage = "https://bevy.org"
|
|
repository = "https://github.com/bevyengine/bevy"
|
|
license = "MIT OR Apache-2.0"
|
|
keywords = ["bevy"]
|
|
|
|
[dependencies]
|
|
# bevy
|
|
bevy_asset = { path = "../bevy_asset", version = "0.17.0-dev" }
|
|
bevy_image = { path = "../bevy_image", version = "0.17.0-dev" }
|
|
bevy_math = { path = "../bevy_math", version = "0.17.0-dev" }
|
|
bevy_reflect = { path = "../bevy_reflect", version = "0.17.0-dev" }
|
|
bevy_ecs = { path = "../bevy_ecs", version = "0.17.0-dev" }
|
|
bevy_transform = { path = "../bevy_transform", version = "0.17.0-dev" }
|
|
bevy_mikktspace = { path = "../bevy_mikktspace", version = "0.17.0-dev" }
|
|
bevy_derive = { path = "../bevy_derive", version = "0.17.0-dev" }
|
|
bevy_utils = { path = "../bevy_utils", version = "0.17.0-dev" }
|
|
bevy_platform = { path = "../bevy_platform", version = "0.17.0-dev", default-features = false, features = [
|
|
"std",
|
|
"serialize",
|
|
] }
|
|
|
|
# other
|
|
bitflags = { version = "2.3", features = ["serde"] }
|
|
bytemuck = { version = "1.5" }
|
|
wgpu-types = { version = "24", default-features = false }
|
|
serde = { version = "1", default-features = false, features = [
|
|
"derive",
|
|
], optional = true }
|
|
hexasphere = "15.0"
|
|
thiserror = { version = "2", default-features = false }
|
|
tracing = { version = "0.1", default-features = false, features = ["std"] }
|
|
|
|
[dev-dependencies]
|
|
serde_json = "1.0.140"
|
|
|
|
[features]
|
|
default = []
|
|
## Adds serialization support through `serde`.
|
|
serialize = ["dep:serde", "wgpu-types/serde"]
|
|
|
|
[lints]
|
|
workspace = true
|
|
|
|
[package.metadata.docs.rs]
|
|
rustdoc-args = ["-Zunstable-options", "--generate-link-to-definition"]
|
|
all-features = true
|