diff --git a/.gitignore b/.gitignore index 2930712..9d065d0 100644 --- a/.gitignore +++ b/.gitignore @@ -25,5 +25,6 @@ headless_output/ www/assets/ *.glb +*.stackdump tex/*.pdf diff --git a/Cargo.lock b/Cargo.lock index 0cb00b4..2fdd956 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -20,44 +20,44 @@ checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" [[package]] name = "accesskit" -version = "0.17.1" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3d3b8f9bae46a948369bc4a03e815d4ed6d616bd00de4051133a5019dc31c5a" +checksum = "becf0eb5215b6ecb0a739c31c21bd83c4f326524c9b46b7e882d77559b60a529" [[package]] name = "accesskit_consumer" -version = "0.26.0" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f47983a1084940ba9a39c077a8c63e55c619388be5476ac04c804cfbd1e63459" +checksum = "d0bf66a7bf0b7ea4fd7742d50b64782a88f99217cf246b3f93b4162528dde520" dependencies = [ "accesskit", - "hashbrown 0.15.2", + "hashbrown", "immutable-chunkmap", ] [[package]] name = "accesskit_macos" -version = "0.18.1" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7329821f3bd1101e03a7d2e03bd339e3ac0dc64c70b4c9f9ae1949e3ba8dece1" +checksum = "09e230718177753b4e4ad9e1d9f6cfc2f4921212d4c1c480b253f526babb258d" dependencies = [ "accesskit", "accesskit_consumer", - "hashbrown 0.15.2", - "objc2", - "objc2-app-kit", - "objc2-foundation", + "hashbrown", + "objc2 0.5.2", + "objc2-app-kit 0.2.2", + "objc2-foundation 0.2.2", ] [[package]] name = "accesskit_windows" -version = "0.24.1" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24fcd5d23d70670992b823e735e859374d694a3d12bfd8dd32bd3bd8bedb5d81" +checksum = "65178f3df98a51e4238e584fcb255cb1a4f9111820848eeddd37663be40a625f" dependencies = [ "accesskit", "accesskit_consumer", - "hashbrown 0.15.2", + "hashbrown", "paste", "static_assertions", "windows", @@ -66,9 +66,9 @@ dependencies = [ [[package]] name = "accesskit_winit" -version = "0.23.1" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6a48dad5530b6deb9fc7a52cc6c3bf72cdd9eb8157ac9d32d69f2427a5e879" +checksum = "34d941bb8c414caba6e206de669c7dc0dbeb305640ea890772ee422a40e6b89f" dependencies = [ "accesskit", "accesskit_macos", @@ -90,11 +90,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", - "const-random", - "getrandom", + "getrandom 0.2.16", "once_cell", "version_check", - "zerocopy", + "zerocopy 0.7.35", ] [[package]] @@ -112,12 +111,6 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1" -[[package]] -name = "allocator-api2" -version = "0.2.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" - [[package]] name = "android-activity" version = "0.6.0" @@ -125,7 +118,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" dependencies = [ "android-properties", - "bitflags 2.8.0", + "bitflags 2.9.0", "cc", "cesu8", "jni", @@ -136,7 +129,7 @@ dependencies = [ "ndk-context", "ndk-sys 0.6.0+11769913", "num_enum", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -147,9 +140,9 @@ checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" [[package]] name = "android_log-sys" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ecc8056bf6ab9892dcd53216c83d1597487d7dacac16c8df6b877d127df9937" +checksum = "84521a3cf562bc62942e294181d9eef17eb38ceb8c68677bc49f144e4c3d4f8d" [[package]] name = "android_system_properties" @@ -218,9 +211,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.95" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" +checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" [[package]] name = "approx" @@ -239,19 +232,21 @@ checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" [[package]] name = "arboard" -version = "3.4.1" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df099ccb16cd014ff054ac1bf392c67feeef57164b05c42f037cd40f5d4357f4" +checksum = "c1df21f715862ede32a0c525ce2ca4d52626bb0007f8c18b87a384503ac33e70" dependencies = [ "clipboard-win", - "core-graphics", "image", "log", - "objc2", - "objc2-app-kit", - "objc2-foundation", + "objc2 0.6.1", + "objc2-app-kit 0.3.1", + "objc2-core-foundation", + "objc2-core-graphics", + "objc2-foundation 0.3.1", "parking_lot", - "windows-sys 0.48.0", + "percent-encoding", + "windows-sys 0.59.0", "x11rb", ] @@ -312,12 +307,14 @@ dependencies = [ [[package]] name = "async-broadcast" -version = "0.5.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b" +checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" dependencies = [ - "event-listener 2.5.3", + "event-listener", + "event-listener-strategy", "futures-core", + "pin-project-lite", ] [[package]] @@ -362,7 +359,7 @@ version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "event-listener 5.4.0", + "event-listener", "event-listener-strategy", "pin-project-lite", ] @@ -372,18 +369,28 @@ name = "async-task" version = "4.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" +dependencies = [ + "portable-atomic", +] [[package]] name = "atomic-waker" version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" +dependencies = [ + "portable-atomic", +] [[package]] name = "atomicow" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "467163b50876d3a4a44da5f4dbd417537e522fc059ede8d518d57941cfb3d745" +checksum = "f52e8890bb9844440d0c412fa74b67fd2f14e85248b6e00708059b6da9e5f8bf" +dependencies = [ + "portable-atomic", + "portable-atomic-util", +] [[package]] name = "autocfg" @@ -407,9 +414,9 @@ dependencies = [ [[package]] name = "avif-serialize" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e335041290c43101ca215eed6f43ec437eb5a42125573f600fc3fa42b9bddd62" +checksum = "98922d6a4cfbcb08820c69d8eeccc05bb1f29bfa06b4f5b1dbfe9a868bd7608e" dependencies = [ "arrayvec", ] @@ -428,9 +435,9 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "bevy" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eaad7fe854258047680c51c3cacb804468553c04241912f6254c841c67c0198" +checksum = "2a5cd3b24a5adb7c7378da7b3eea47639877643d11b6b087fc8a8094f2528615" dependencies = [ "bevy_dylib", "bevy_internal", @@ -438,23 +445,22 @@ dependencies = [ [[package]] name = "bevy-inspector-egui" -version = "0.28.1" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36172627eb6fd8586600972bcbba2880ed6f59e4e243dcf2ed7ff68d987577ce" +checksum = "4971e763f289921fd4616418628458bec26a6fc13fe4299c0e4066f39d7ceaa2" dependencies = [ "bevy-inspector-egui-derive", "bevy_app", "bevy_asset", "bevy_color", - "bevy_core", "bevy_core_pipeline", "bevy_ecs", "bevy_egui", - "bevy_hierarchy", "bevy_image", "bevy_log", "bevy_math", "bevy_pbr", + "bevy_platform", "bevy_reflect", "bevy_render", "bevy_state", @@ -467,14 +473,15 @@ dependencies = [ "fuzzy-matcher", "image", "smallvec", + "uuid", "winit", ] [[package]] name = "bevy-inspector-egui-derive" -version = "0.28.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3afc67826e0a4347414545e022e748f42550a577a502b26af44e6d03742c9266" +checksum = "2656316165dbe2af6b3acaa763332f5dbdd12f809d59f5bf4304e0642a8005c9" dependencies = [ "proc-macro2", "quote", @@ -483,9 +490,9 @@ dependencies = [ [[package]] name = "bevy_a11y" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245a938f754f70a380687b89f1c4dac75b62d58fae90ae969fcfb8ecd91ed879" +checksum = "91ed969a58fbe449ef35ebec58ab19578302537f34ee8a35d04e5a038b3c40f5" dependencies = [ "accesskit", "bevy_app", @@ -496,28 +503,32 @@ dependencies = [ [[package]] name = "bevy_app" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0ac033a388b8699d241499a43783a09e6a3bab2430f1297c6bd4974095efb3f" +checksum = "a2b6267ac23a9947d5b2725ff047a1e1add70076d85fa9fb73d044ab9bea1f3c" dependencies = [ "bevy_derive", "bevy_ecs", + "bevy_platform", "bevy_reflect", "bevy_tasks", "bevy_utils", + "cfg-if", "console_error_panic_hook", "ctrlc", - "derive_more", - "downcast-rs", + "downcast-rs 2.0.1", + "log", + "thiserror 2.0.12", + "variadics_please", "wasm-bindgen", "web-sys", ] [[package]] name = "bevy_args" -version = "1.7.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e48faacd79c4754e2a29cd34245eb2173ffd191eff24a561fb699dc6f4623d36" +checksum = "ac904a740526b144edf9fc089976b300736f6e5a46e1d6a314bc2adb22788536" dependencies = [ "bevy", "clap", @@ -530,9 +541,9 @@ dependencies = [ [[package]] name = "bevy_asset" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73fd901b3be016088c4dda2f628bda96b7cb578b9bc8ae684bbf30bec0a9483e" +checksum = "0698040d63199391ea77fd02e039630748e3e335c3070c6d932fd96cbf80f5d6" dependencies = [ "async-broadcast", "async-fs", @@ -541,16 +552,17 @@ dependencies = [ "bevy_app", "bevy_asset_macros", "bevy_ecs", + "bevy_platform", "bevy_reflect", "bevy_tasks", "bevy_utils", "bevy_window", - "bitflags 2.8.0", + "bitflags 2.9.0", "blake3", "crossbeam-channel", "derive_more", "disqualified", - "downcast-rs", + "downcast-rs 2.0.1", "either", "futures-io", "futures-lite", @@ -559,6 +571,8 @@ dependencies = [ "ron", "serde", "stackfuture", + "thiserror 2.0.12", + "tracing", "uuid", "wasm-bindgen", "wasm-bindgen-futures", @@ -567,9 +581,9 @@ dependencies = [ [[package]] name = "bevy_asset_macros" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6725a785789ece8d8c73bba25fdac5e50494d959530e89565bbcea9f808b7181" +checksum = "0bf8c00b5d532f8e5ac7b49af10602f9f7774a2d522cf0638323b5dfeee7b31c" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -579,9 +593,9 @@ dependencies = [ [[package]] name = "bevy_color" -version = "0.15.4" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a87b7137ffa9844ae542043769fb98c35efbf2f8a8429ff2a73d8ef30e58baaa" +checksum = "ddf6a5ad35496bbc41713efbcf06ab72b9a310fabcab0f9db1debb56e8488c6e" dependencies = [ "bevy_math", "bevy_reflect", @@ -589,55 +603,45 @@ dependencies = [ "derive_more", "encase", "serde", + "thiserror 2.0.12", "wgpu-types", ] -[[package]] -name = "bevy_core" -version = "0.15.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9ce8da8e4016f63c1d361b52e61aaf4348c569829c74f1a5bbedfd8d3d57a3" -dependencies = [ - "bevy_app", - "bevy_ecs", - "bevy_reflect", - "bevy_tasks", - "bevy_utils", - "uuid", -] - [[package]] name = "bevy_core_pipeline" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee0ff0f4723f30a5a6578915dbfe0129f2befaec8438dde70ac1fb363aee01f5" +checksum = "55c2310717b9794e4a45513ee5946a7be0838852a4c1e185884195e1a8688ff3" dependencies = [ "bevy_app", "bevy_asset", "bevy_color", - "bevy_core", "bevy_derive", + "bevy_diagnostic", "bevy_ecs", "bevy_image", "bevy_math", + "bevy_platform", "bevy_reflect", "bevy_render", "bevy_transform", "bevy_utils", "bevy_window", - "bitflags 2.8.0", - "derive_more", + "bitflags 2.9.0", + "bytemuck", "nonmax", "radsort", "serde", "smallvec", + "thiserror 2.0.12", + "tracing", ] [[package]] name = "bevy_derive" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d94761ce947b0a2402fd949fe1e7a5b1535293130ba4cd9893be6295d4680a" +checksum = "f626531b9c05c25a758ede228727bd11c2c2c8498ecbed9925044386d525a2a3" dependencies = [ "bevy_macro_utils", "quote", @@ -646,56 +650,63 @@ dependencies = [ [[package]] name = "bevy_diagnostic" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e83c65979f063b593917ab9b1d7328c5854dba4b6ddf1ab78156c0105831fdf" +checksum = "048a1ff3944a534b8472516866284181eef0a75b6dd4d39b6e5925715e350766" dependencies = [ "bevy_app", - "bevy_core", "bevy_ecs", + "bevy_platform", "bevy_tasks", "bevy_time", "bevy_utils", "const-fnv1a-hash", + "log", + "serde", ] [[package]] name = "bevy_dylib" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "381b2a0773cfe9d27256fba1e5005a14968b34f751c09397ee4e278f0fb235db" +checksum = "843c7ce266dfc46e49d01fbf9aa1829d33b70a1859b9ed6a526ac03070c52e97" dependencies = [ "bevy_internal", ] [[package]] name = "bevy_ecs" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1597106cc01e62e6217ccb662e0748b2ce330893f27c7dc17bac33e0bb99bca9" +checksum = "d9e807b5d9aab3bb8dfe47e7a44c9ff088bad2ceefe299b80ac77609a87fe9d4" dependencies = [ "arrayvec", "bevy_ecs_macros", + "bevy_platform", "bevy_ptr", "bevy_reflect", "bevy_tasks", "bevy_utils", - "bitflags 2.8.0", + "bitflags 2.9.0", + "bumpalo", "concurrent-queue", "derive_more", "disqualified", - "fixedbitset 0.5.7", + "fixedbitset", + "indexmap", + "log", "nonmax", - "petgraph", "serde", "smallvec", + "thiserror 2.0.12", + "variadics_please", ] [[package]] name = "bevy_ecs_macros" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f453adf07712b39826bc5845e5b0887ce03204ee8359bbe6b40a9afda60564a1" +checksum = "467d7bb98aeb8dd30f36e6a773000c12a891d4f1bee2adc3841ec89cc8eaf54e" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -705,9 +716,9 @@ dependencies = [ [[package]] name = "bevy_egui" -version = "0.31.1" +version = "0.34.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "954fbe8551af4b40767ea9390ec7d32fe1070a6ab55d524cf0868c17f8469a55" +checksum = "3a3d58a8afdb6100bca50251043a85320391742cae125d559f6cca3a16b84cdd" dependencies = [ "arboard", "bevy_app", @@ -718,31 +729,33 @@ dependencies = [ "bevy_input", "bevy_log", "bevy_math", + "bevy_picking", + "bevy_platform", "bevy_reflect", "bevy_render", "bevy_time", - "bevy_utils", "bevy_window", "bevy_winit", "bytemuck", "crossbeam-channel", "egui", "encase", + "image", "js-sys", - "log", "thread_local", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", + "webbrowser", "wgpu-types", "winit", ] [[package]] name = "bevy_encase_derive" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f37ad69d36bb9e8479a88d481ef9748f5d7ab676040531d751d3a44441dcede7" +checksum = "b8bb31dc1090c6f8fabbf6b21994d19a12766e786885ee48ffc547f0f1fa7863" dependencies = [ "bevy_macro_utils", "encase_derive_impl", @@ -750,9 +763,9 @@ dependencies = [ [[package]] name = "bevy_gizmos" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1614516d0922ad60e87cc39658422286ed684aaf4b3162d25051bc105eed814" +checksum = "54af8145b35ab2a830a6dd1058e23c1e1ddc4b893db79d295259ef82f51c7520" dependencies = [ "bevy_app", "bevy_asset", @@ -770,13 +783,14 @@ dependencies = [ "bevy_transform", "bevy_utils", "bytemuck", + "tracing", ] [[package]] name = "bevy_gizmos_macros" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0edb9e0dca64e0fc9d6b1d9e6e2178396e339e3e2b9f751e2504e3ea4ddf4508" +checksum = "40137ace61f092b7a09eba41d7d1e6aef941f53a7818b06ef86dcce7b6a1fd3f" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -786,117 +800,129 @@ dependencies = [ [[package]] name = "bevy_gltf" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa8364f34bc08fe067ce32418e22ee96e177101dbf1bc00803aaeb2b262615be" +checksum = "aa25b809ee024ef2682bafc1ca22ca8275552edb549dc6f69a030fdffd976c63" dependencies = [ "base64 0.22.1", "bevy_app", "bevy_asset", "bevy_color", - "bevy_core", "bevy_core_pipeline", "bevy_ecs", - "bevy_hierarchy", "bevy_image", "bevy_math", + "bevy_mesh", "bevy_pbr", + "bevy_platform", "bevy_reflect", "bevy_render", "bevy_scene", "bevy_tasks", "bevy_transform", "bevy_utils", - "derive_more", + "fixedbitset", "gltf", + "itertools 0.14.0", "percent-encoding", "serde", "serde_json", "smallvec", -] - -[[package]] -name = "bevy_hierarchy" -version = "0.15.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ced04e04437d0a439fe4722544c2a4678c1fe3412b57ee489d817c11884045" -dependencies = [ - "bevy_app", - "bevy_core", - "bevy_ecs", - "bevy_reflect", - "bevy_utils", - "disqualified", - "smallvec", + "thiserror 2.0.12", + "tracing", ] [[package]] name = "bevy_image" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b384d1ce9c87f6151292a76233897a628c2a50b3560487c4d74472225d49826" +checksum = "840b25f7f58894c641739f756959028a04f519c448db7e2cd3e2e29fc5fd188d" dependencies = [ + "bevy_app", "bevy_asset", "bevy_color", "bevy_math", + "bevy_platform", "bevy_reflect", "bevy_utils", - "bitflags 2.8.0", + "bitflags 2.9.0", "bytemuck", - "derive_more", "futures-lite", + "guillotiere", + "half", "image", "ktx2", + "rectangle-pack", "ruzstd", "serde", - "wgpu", + "thiserror 2.0.12", + "tracing", + "wgpu-types", ] [[package]] name = "bevy_input" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52589939ca09695c69d629d166c5edf1759feaaf8f2078904aae9c33d08f5c3" +checksum = "763410715714f3d4d2dcdf077af276e2e4ea93fd8081b183d446d060ea95baaa" dependencies = [ "bevy_app", - "bevy_core", "bevy_ecs", "bevy_math", + "bevy_platform", "bevy_reflect", "bevy_utils", "derive_more", + "log", "smol_str", + "thiserror 2.0.12", +] + +[[package]] +name = "bevy_input_focus" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7e7b4ed65e10927a39a987cf85ef98727dd319aafb6e6835f2cb05b883c6d66" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_input", + "bevy_math", + "bevy_reflect", + "bevy_window", + "log", + "thiserror 2.0.12", ] [[package]] name = "bevy_internal" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1e0c1d980d276e11558184d0627c8967ad8b70dab3e54a0f377bb53b98515b6" +checksum = "526ffd64c58004cb97308826e896c07d0e23dc056c243b97492e31cdf72e2830" dependencies = [ "bevy_a11y", "bevy_app", "bevy_asset", "bevy_color", - "bevy_core", "bevy_core_pipeline", "bevy_derive", "bevy_diagnostic", "bevy_ecs", "bevy_gizmos", "bevy_gltf", - "bevy_hierarchy", "bevy_image", "bevy_input", + "bevy_input_focus", "bevy_log", "bevy_math", "bevy_pbr", - "bevy_picking", + "bevy_platform", "bevy_ptr", "bevy_reflect", "bevy_render", "bevy_scene", "bevy_sprite", + "bevy_state", "bevy_tasks", "bevy_text", "bevy_time", @@ -909,14 +935,15 @@ dependencies = [ [[package]] name = "bevy_log" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b381a22e01f24af51536ef1eace94298dd555d06ffcf368125d16317f5f179cb" +checksum = "7156df8d2f11135cf71c03eb4c11132b65201fd4f51648571e59e39c9c9ee2f6" dependencies = [ "android_log-sys", "bevy_app", "bevy_ecs", "bevy_utils", + "tracing", "tracing-log", "tracing-oslog", "tracing-subscriber", @@ -925,10 +952,11 @@ dependencies = [ [[package]] name = "bevy_macro_utils" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bb6ded1ddc124ea214f6a2140e47a78d1fe79b0638dad39419cdeef2e1133f1" +checksum = "7a2473db70d8785b5c75d6dd951a2e51e9be2c2311122db9692c79c9d887517b" dependencies = [ + "parking_lot", "proc-macro2", "quote", "syn", @@ -937,25 +965,29 @@ dependencies = [ [[package]] name = "bevy_math" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c2650169161b64f9a93e41f13253701fdf971dc95265ed667d17bea6d2a334f" +checksum = "f1a3a926d02dc501c6156a047510bdb538dcb1fa744eeba13c824b73ba88de55" dependencies = [ + "approx", "bevy_reflect", "derive_more", "glam", - "itertools 0.13.0", + "itertools 0.14.0", + "libm", "rand", "rand_distr", "serde", "smallvec", + "thiserror 2.0.12", + "variadics_please", ] [[package]] name = "bevy_mesh" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "760f3c41b4c61a5f0d956537f454c49f79b8ed0fd0781b1a879ead8e69d95283" +checksum = "12af58280c7453e32e2f083d86eaa4c9b9d03ea8683977108ded8f1930c539f2" dependencies = [ "bevy_asset", "bevy_derive", @@ -963,31 +995,33 @@ dependencies = [ "bevy_image", "bevy_math", "bevy_mikktspace", + "bevy_platform", "bevy_reflect", "bevy_transform", "bevy_utils", - "bitflags 2.8.0", + "bitflags 2.9.0", "bytemuck", - "derive_more", "hexasphere", "serde", - "wgpu", + "thiserror 2.0.12", + "tracing", + "wgpu-types", ] [[package]] name = "bevy_mikktspace" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "226f663401069ded4352ed1472a85bb1f43e2b7305d6a50e53a4f6508168e380" +checksum = "75e0258423c689f764556e36b5d9eebdbf624b29a1fd5b33cd9f6c42dcc4d5f3" dependencies = [ "glam", ] [[package]] name = "bevy_panorbit_camera" -version = "0.21.2" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55e54a2fbf69a596957134b387093009c1d4dc046a6c9f3d62f37230525dca19" +checksum = "ca6e15e297754d0bcb7665620c390c4f05665d4ac4ac91b4b5d3c66b9fe1f0e6" dependencies = [ "bevy", "bevy_egui", @@ -995,87 +1029,116 @@ dependencies = [ [[package]] name = "bevy_pbr" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4d54c840d4352dac51f2a27cf915ac99b2f93db008d8fb1be8d23b09d522acf" +checksum = "d9fe0de43b68bf9e5090a33efc963f125e9d3f9d97be9ebece7bcfdde1b6da80" dependencies = [ "bevy_app", "bevy_asset", "bevy_color", "bevy_core_pipeline", "bevy_derive", + "bevy_diagnostic", "bevy_ecs", "bevy_image", "bevy_math", + "bevy_platform", "bevy_reflect", "bevy_render", "bevy_transform", "bevy_utils", "bevy_window", - "bitflags 2.8.0", + "bitflags 2.9.0", "bytemuck", "derive_more", - "fixedbitset 0.5.7", + "fixedbitset", "nonmax", + "offset-allocator", "radsort", "smallvec", "static_assertions", + "thiserror 2.0.12", + "tracing", ] [[package]] name = "bevy_picking" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2091a495c0f9c8962abb1e30f9d99696296c332b407e1f6fe1fe28aab96a8629" +checksum = "f73674f62b1033006bd75c89033f5d3516386cfd7d43bb9f7665012c0ab14d22" dependencies = [ "bevy_app", "bevy_asset", "bevy_derive", "bevy_ecs", - "bevy_hierarchy", "bevy_input", "bevy_math", + "bevy_platform", "bevy_reflect", "bevy_render", "bevy_time", "bevy_transform", "bevy_utils", "bevy_window", + "tracing", "uuid", ] +[[package]] +name = "bevy_platform" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "704db2c11b7bc31093df4fbbdd3769f9606a6a5287149f4b51f2680f25834ebc" +dependencies = [ + "cfg-if", + "critical-section", + "foldhash", + "getrandom 0.2.16", + "hashbrown", + "portable-atomic", + "portable-atomic-util", + "serde", + "spin", + "web-time", +] + [[package]] name = "bevy_ptr" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89fe0b0b919146939481a3a7c38864face2c6d0fd2c73ab3d430dc693ecd9b11" +checksum = "86f1275dfb4cfef4ffc90c3fa75408964864facf833acc932413d52aa5364ba4" [[package]] name = "bevy_reflect" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ddbca0a39e88eff2c301dc794ee9d73a53f4b08d47b2c9b5a6aac182fae6217" +checksum = "607ebacc31029cf2f39ac330eabf1d4bc411b159528ec08dbe6b0593eaccfd41" dependencies = [ "assert_type_match", + "bevy_platform", "bevy_ptr", "bevy_reflect_derive", "bevy_utils", "derive_more", "disqualified", - "downcast-rs", + "downcast-rs 2.0.1", "erased-serde", + "foldhash", "glam", "serde", "smallvec", "smol_str", + "thiserror 2.0.12", "uuid", + "variadics_please", + "wgpu-types", ] [[package]] name = "bevy_reflect_derive" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d62affb769db17d34ad0b75ff27eca94867e2acc8ea350c5eca97d102bd98709" +checksum = "cf35e45e4eb239018369f63f2adc2107a54c329f9276d020e01eee1625b0238b" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -1086,23 +1149,22 @@ dependencies = [ [[package]] name = "bevy_render" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4aa9d7df5c2b65540093b8402aceec0a55d67b54606e57ce2969abe280b4c48" +checksum = "85a7306235b3343b032801504f3e884b93abfb7ba58179fc555c479df509f349" dependencies = [ "async-channel", "bevy_app", "bevy_asset", "bevy_color", - "bevy_core", "bevy_derive", "bevy_diagnostic", "bevy_ecs", "bevy_encase_derive", - "bevy_hierarchy", "bevy_image", "bevy_math", "bevy_mesh", + "bevy_platform", "bevy_reflect", "bevy_render_macros", "bevy_tasks", @@ -1110,13 +1172,16 @@ dependencies = [ "bevy_transform", "bevy_utils", "bevy_window", + "bitflags 2.9.0", "bytemuck", "codespan-reporting", "derive_more", - "downcast-rs", + "downcast-rs 2.0.1", "encase", + "fixedbitset", "futures-lite", "image", + "indexmap", "js-sys", "ktx2", "naga", @@ -1126,6 +1191,9 @@ dependencies = [ "send_wrapper", "serde", "smallvec", + "thiserror 2.0.12", + "tracing", + "variadics_please", "wasm-bindgen", "web-sys", "wgpu", @@ -1133,9 +1201,9 @@ dependencies = [ [[package]] name = "bevy_render_macros" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3469307d1b5ca5c37b7f9269be033845357412ebad33eace46826e59da592f66" +checksum = "b85c4fb26b66d3a257b655485d11b9b6df9d3c85026493ba8092767a5edfc1b2" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -1145,29 +1213,30 @@ dependencies = [ [[package]] name = "bevy_scene" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdfe819202aa97bbb206d79fef83504b34d45529810563aafc2fe02cc10e3ee4" +checksum = "e7b628f560f2d2fe9f35ecd4526627ba3992f082de03fd745536e4053a0266fe" dependencies = [ "bevy_app", "bevy_asset", "bevy_derive", "bevy_ecs", - "bevy_hierarchy", + "bevy_platform", "bevy_reflect", "bevy_render", "bevy_transform", "bevy_utils", "derive_more", "serde", + "thiserror 2.0.12", "uuid", ] [[package]] name = "bevy_sprite" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27411a31704117002787c9e8cc1f2f89babf5e67572508aa029366d4643f8d01" +checksum = "01f97bf54fb1c37a1077139b59bb32bc77f7ca53149cfcaa512adbb69a2d492c" dependencies = [ "bevy_app", "bevy_asset", @@ -1177,41 +1246,41 @@ dependencies = [ "bevy_ecs", "bevy_image", "bevy_math", - "bevy_picking", + "bevy_platform", "bevy_reflect", "bevy_render", "bevy_transform", "bevy_utils", - "bevy_window", - "bitflags 2.8.0", + "bitflags 2.9.0", "bytemuck", "derive_more", - "fixedbitset 0.5.7", - "guillotiere", + "fixedbitset", "nonmax", "radsort", - "rectangle-pack", + "tracing", ] [[package]] name = "bevy_state" -version = "0.15.2" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "309a822106bf032ae71a3e99716c6c1d275116c76357ed647544e1eee20d7093" +checksum = "682c343c354b191fe6669823bce3b0695ee1ae4ac36f582e29c436a72b67cdd5" dependencies = [ "bevy_app", "bevy_ecs", - "bevy_hierarchy", + "bevy_platform", "bevy_reflect", "bevy_state_macros", "bevy_utils", + "log", + "variadics_please", ] [[package]] name = "bevy_state_macros" -version = "0.15.2" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9f8706d4c2a548f3d4d2ac5a205cef8000326de94c1eaad5424163c4bfd3bcc" +checksum = "55b4bf3970c4f0e60572901df4641656722172c222d71a80c430d36b0e31426c" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -1221,33 +1290,41 @@ dependencies = [ [[package]] name = "bevy_tasks" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "028630ddc355563bd567df1076db3515858aa26715ddf7467d2086f9b40e5ab1" +checksum = "444c450b65e108855f42ecb6db0c041a56ea7d7f10cc6222f0ca95e9536a7d19" dependencies = [ "async-channel", "async-executor", + "async-task", + "atomic-waker", + "bevy_platform", + "cfg-if", "concurrent-queue", + "crossbeam-queue", + "derive_more", "futures-channel", "futures-lite", + "heapless", "pin-project", "wasm-bindgen-futures", ] [[package]] name = "bevy_text" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "872b0b627cedf6d1bd97b75bc4d59c16f67afdd4f2fed8f7d808a258d6cb982e" +checksum = "8ef071262c5a9afbc39caba4c0b282c7d045fbb5cf33bdab1924bd2343403833" dependencies = [ "bevy_app", "bevy_asset", "bevy_color", "bevy_derive", "bevy_ecs", - "bevy_hierarchy", "bevy_image", + "bevy_log", "bevy_math", + "bevy_platform", "bevy_reflect", "bevy_render", "bevy_sprite", @@ -1255,45 +1332,52 @@ dependencies = [ "bevy_utils", "bevy_window", "cosmic-text", - "derive_more", "serde", "smallvec", "sys-locale", + "thiserror 2.0.12", + "tracing", "unicode-bidi", ] [[package]] name = "bevy_time" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b2051ec56301b994f7c182a2a6eb1490038149ad46d95eee715e1a922acdfd9" +checksum = "456369ca10f8e039aaf273332744674844827854833ee29e28f9e161702f2f55" dependencies = [ "bevy_app", "bevy_ecs", + "bevy_platform", "bevy_reflect", - "bevy_utils", "crossbeam-channel", + "log", + "serde", ] [[package]] name = "bevy_transform" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8109b1234b0e58931f51df12bc8895daa69298575cf92da408848f79a4ce201" +checksum = "8479cdd5461246943956a7c8347e4e5d6ff857e57add889fb50eee0b5c26ab48" dependencies = [ "bevy_app", "bevy_ecs", - "bevy_hierarchy", + "bevy_log", "bevy_math", "bevy_reflect", + "bevy_tasks", + "bevy_utils", "derive_more", + "serde", + "thiserror 2.0.12", ] [[package]] name = "bevy_ui" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e534590222d044c875bf3511e5d0b3da78889bb21ad797953484ce011af77b46" +checksum = "110dc5d0059f112263512be8cd7bfe0466dfb7c26b9bf4c74529355249fd23f9" dependencies = [ "accesskit", "bevy_a11y", @@ -1303,11 +1387,10 @@ dependencies = [ "bevy_core_pipeline", "bevy_derive", "bevy_ecs", - "bevy_hierarchy", "bevy_image", "bevy_input", "bevy_math", - "bevy_picking", + "bevy_platform", "bevy_reflect", "bevy_render", "bevy_sprite", @@ -1320,82 +1403,68 @@ dependencies = [ "nonmax", "smallvec", "taffy", + "thiserror 2.0.12", + "tracing", ] [[package]] name = "bevy_utils" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63c2174d43a0de99f863c98a472370047a2bfa7d1e5cec8d9d647fb500905d9d" +checksum = "ac2da3b3c1f94dadefcbe837aaa4aa119fcea37f7bdc5307eb05b4ede1921e24" dependencies = [ - "ahash", - "bevy_utils_proc_macros", - "getrandom", - "hashbrown 0.14.5", + "bevy_platform", "thread_local", - "tracing", - "web-time", -] - -[[package]] -name = "bevy_utils_proc_macros" -version = "0.15.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94847541f6dd2e28f54a9c2b0e857da5f2631e2201ebc25ce68781cdcb721391" -dependencies = [ - "proc-macro2", - "quote", - "syn", ] [[package]] name = "bevy_window" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1e1e7c6713c04404a3e7cede48a9c47b76c30efc764664ec1246147f6fb9878" +checksum = "0d83327cc5584da463d12b7a88ddb97f9e006828832287e1564531171fffdeb4" dependencies = [ "android-activity", - "bevy_a11y", "bevy_app", "bevy_ecs", "bevy_input", "bevy_math", + "bevy_platform", "bevy_reflect", "bevy_utils", + "log", "raw-window-handle", + "serde", "smol_str", ] [[package]] name = "bevy_winit" -version = "0.15.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e158a73d6d896b1600a61bc115017707ecb467d1a5ad49231c5e58294f6f6e13" +checksum = "57b14928923ae4274f4b867dce3d0e7b2c8a31bebcb0f6e65a4261c3e0765064" dependencies = [ "accesskit", "accesskit_winit", "approx", "bevy_a11y", "bevy_app", - "bevy_asset", "bevy_derive", "bevy_ecs", - "bevy_hierarchy", - "bevy_image", "bevy_input", + "bevy_input_focus", "bevy_log", "bevy_math", + "bevy_platform", "bevy_reflect", "bevy_tasks", "bevy_utils", "bevy_window", - "bytemuck", "cfg-if", "crossbeam-channel", "raw-window-handle", + "tracing", "wasm-bindgen", "web-sys", - "wgpu-types", "winit", ] @@ -1406,6 +1475,7 @@ dependencies = [ "bevy", "bevy-inspector-egui", "bevy_args", + "bevy_egui", "bevy_panorbit_camera", "clap", "console_error_panic_hook", @@ -1419,8 +1489,8 @@ dependencies = [ "rand", "rayon", "serde", - "strum", - "strum_macros", + "strum 0.27.1", + "strum_macros 0.27.1", "wasm-bindgen", "web-sys", "wgpu", @@ -1450,7 +1520,7 @@ version = "0.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f49d8fed880d473ea71efb9bf597651e77201bdd4893efe54c9e5d65ae04ce6f" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "cexpr", "clang-sys", "itertools 0.13.0", @@ -1508,9 +1578,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" +checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" dependencies = [ "serde", ] @@ -1523,9 +1593,9 @@ checksum = "6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2" [[package]] name = "blake3" -version = "1.5.5" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8ee0c1824c4dea5b5f81736aff91bae041d2c07ee1192bec91054e10e3e601e" +checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" dependencies = [ "arrayref", "arrayvec", @@ -1546,7 +1616,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" dependencies = [ - "objc2", + "objc2 0.5.2", ] [[package]] @@ -1576,18 +1646,18 @@ checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "bytemuck" -version = "1.21.0" +version = "1.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" +checksum = "b6b1fc10dbac614ebc03540c9dbd60e83887fda27794998c6528f1782047d540" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.8.1" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fa76293b4f7bb636ab88fd78228235b5248b4d05cc589aed610f954af5d7c7a" +checksum = "7ecc273b49b3205b83d648f0690daa588925572cc5063745bfe547fe7ec8e1a1" dependencies = [ "proc-macro2", "quote", @@ -1608,9 +1678,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" [[package]] name = "bytes" -version = "1.10.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "calloop" @@ -1618,12 +1688,12 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "log", "polling", "rustix", "slab", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -1655,9 +1725,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.14" +version = "1.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c3d1b2e905a3a7b00a6141adb0e4c0bb941d11caf55349d863942a1cc44e3c9" +checksum = "04da6a0d40b948dfc4fa8f5bbf402b0fc1a64a28dbf7d12ffd683550f2c1b63a" dependencies = [ "jobserver", "libc", @@ -1695,12 +1765,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "cfg_aliases" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" - [[package]] name = "cfg_aliases" version = "0.2.1" @@ -1747,9 +1811,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.30" +version = "4.5.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92b7b18d71fad5313a1e320fa9897994228ce274b60faa4d694fe0ea89cd9e6d" +checksum = "eccb054f56cbd38340b380d4a8e69ef1f02f1af43db2f0cc817a4774d80ae071" dependencies = [ "clap_builder", "clap_derive", @@ -1757,9 +1821,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.30" +version = "4.5.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a35db2071778a7344791a4fb4f95308b5673d219dee3ae348b86642574ecc90c" +checksum = "efd9466fac8543255d3b1fcad4762c5e116ffe808c8a3043d4263cd4fd4862a2" dependencies = [ "anstream", "anstyle", @@ -1769,9 +1833,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.28" +version = "4.5.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed" +checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" dependencies = [ "heck", "proc-macro2", @@ -1833,6 +1897,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" dependencies = [ "crossbeam-utils", + "portable-atomic", ] [[package]] @@ -1851,26 +1916,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32b13ea120a812beba79e34316b3942a857c86ec1593cb34f27bb28272ce2cca" -[[package]] -name = "const-random" -version = "0.1.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" -dependencies = [ - "const-random-macro", -] - -[[package]] -name = "const-random-macro" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" -dependencies = [ - "getrandom", - "once_cell", - "tiny-keccak", -] - [[package]] name = "const_panic" version = "0.2.12" @@ -1908,6 +1953,16 @@ dependencies = [ "libc", ] +[[package]] +name = "core-foundation" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" version = "0.8.7" @@ -1921,7 +1976,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" dependencies = [ "bitflags 1.3.2", - "core-foundation", + "core-foundation 0.9.4", "core-graphics-types", "foreign-types", "libc", @@ -1934,24 +1989,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" dependencies = [ "bitflags 1.3.2", - "core-foundation", + "core-foundation 0.9.4", "libc", ] [[package]] name = "cosmic-text" -version = "0.12.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59fd57d82eb4bfe7ffa9b1cec0c05e2fd378155b47f255a67983cb4afe0e80c2" +checksum = "e418dd4f5128c3e93eab12246391c54a20c496811131f85754dc8152ee207892" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "fontdb", "log", "rangemap", - "rayon", "rustc-hash", "rustybuzz", "self_cell", + "smol_str", "swash", "sys-locale", "ttf-parser 0.21.1", @@ -2006,11 +2061,17 @@ dependencies = [ "itertools 0.10.5", ] +[[package]] +name = "critical-section" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" + [[package]] name = "crossbeam-channel" -version = "0.5.14" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" +checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" dependencies = [ "crossbeam-utils", ] @@ -2034,6 +2095,15 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "crossbeam-queue" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" version = "0.8.21" @@ -2048,9 +2118,9 @@ checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" [[package]] name = "ctrlc" -version = "3.4.5" +version = "3.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90eeab0aa92f3f9b4e87f258c72b139c207d251f9cbc1080a0086b86a8870dd3" +checksum = "697b5419f348fd5ae2478e8018cb016c00a5881c7f46c717de98ffd135a5651c" dependencies = [ "nix", "windows-sys 0.59.0", @@ -2064,9 +2134,9 @@ checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991" [[package]] name = "data-encoding" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010" +checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" [[package]] name = "derive_more" @@ -2095,6 +2165,27 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" +[[package]] +name = "dispatch2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" +dependencies = [ + "bitflags 2.9.0", + "objc2 0.6.1", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "disqualified" version = "1.0.0" @@ -2125,6 +2216,12 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" +[[package]] +name = "downcast-rs" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea8a8b81cacc08888170eef4d13b775126db426d0b348bee9d18c2c1eaf123cf" + [[package]] name = "dpi" version = "0.1.1" @@ -2133,9 +2230,9 @@ checksum = "f25c0e292a7ca6d6498557ff1df68f32c99850012b6ea401cf8daf771f22ff53" [[package]] name = "ecolor" -version = "0.29.1" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "775cfde491852059e386c4e1deb4aef381c617dc364184c6f6afee99b87c402b" +checksum = "bc4feb366740ded31a004a0e4452fbf84e80ef432ecf8314c485210229672fd1" dependencies = [ "bytemuck", "emath", @@ -2143,27 +2240,29 @@ dependencies = [ [[package]] name = "egui" -version = "0.29.1" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53eafabcce0cb2325a59a98736efe0bf060585b437763f8c476957fb274bb974" +checksum = "25dd34cec49ab55d85ebf70139cb1ccd29c977ef6b6ba4fe85489d6877ee9ef3" dependencies = [ "ahash", + "bitflags 2.9.0", "emath", "epaint", "nohash-hasher", + "profiling", ] [[package]] name = "either" -version = "1.13.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "emath" -version = "0.29.1" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1fe0049ce51d0fb414d029e668dd72eb30bc2b739bf34296ed97bd33df544f3" +checksum = "9e4cadcff7a5353ba72b7fea76bf2122b5ebdbc68e8155aa56dfdea90083fe1b" dependencies = [ "bytemuck", ] @@ -2177,7 +2276,7 @@ dependencies = [ "const_panic", "encase_derive", "glam", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -2202,9 +2301,9 @@ dependencies = [ [[package]] name = "epaint" -version = "0.29.1" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a32af8da821bd4f43f2c137e295459ee2e1661d87ca8779dfa0eaf45d870e20f" +checksum = "41fcc0f5a7c613afd2dee5e4b30c3e6acafb8ad6f0edb06068811f708a67c562" dependencies = [ "ab_glyph", "ahash", @@ -2214,13 +2313,14 @@ dependencies = [ "epaint_default_fonts", "nohash-hasher", "parking_lot", + "profiling", ] [[package]] name = "epaint_default_fonts" -version = "0.29.1" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "483440db0b7993cf77a20314f08311dbe95675092405518c0677aa08c151a3ea" +checksum = "fc7e7a64c02cf7a5b51e745a9e45f60660a286f151c238b9d397b3e923f5082f" [[package]] name = "equivalent" @@ -2230,9 +2330,9 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "erased-serde" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24e2389d65ab4fab27dc2a5de7b191e1f6617d1f1c8855c0dc569c94a4cbb18d" +checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7" dependencies = [ "serde", "typeid", @@ -2240,9 +2340,9 @@ dependencies = [ [[package]] name = "errno" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" +checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e" dependencies = [ "libc", "windows-sys 0.59.0", @@ -2263,12 +2363,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "event-listener" -version = "2.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" - [[package]] name = "event-listener" version = "5.4.0" @@ -2282,11 +2376,11 @@ dependencies = [ [[package]] name = "event-listener-strategy" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c3e4e0dd3673c1139bf041f3008816d9cf2946bbfac2945c09e523b8d7b05b2" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" dependencies = [ - "event-listener 5.4.0", + "event-listener", "pin-project-lite", ] @@ -2320,12 +2414,6 @@ dependencies = [ "simd-adler32", ] -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - [[package]] name = "fixedbitset" version = "0.5.7" @@ -2334,9 +2422,9 @@ checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" [[package]] name = "flate2" -version = "1.0.35" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" +checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece" dependencies = [ "crc32fast", "miniz_oxide", @@ -2344,15 +2432,15 @@ dependencies = [ [[package]] name = "foldhash" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" [[package]] name = "font-types" -version = "0.7.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3971f9a5ca983419cdc386941ba3b9e1feba01a0ab888adf78739feb2798492" +checksum = "1fa6a5e5a77b5f3f7f9e32879f484aa5b3632ddfbe568a16266c904a6f32cdaf" dependencies = [ "bytemuck", ] @@ -2407,6 +2495,15 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + [[package]] name = "futures-channel" version = "0.3.31" @@ -2473,17 +2570,29 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", "js-sys", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.2+wasi-0.2.4", +] + [[package]] name = "gif" version = "0.13.1" @@ -2507,11 +2616,12 @@ dependencies = [ [[package]] name = "glam" -version = "0.29.2" +version = "0.29.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc46dd3ec48fdd8e693a98d2b8bafae273a2d54c1de02a2a7e3d57d501f39677" +checksum = "8babf46d4c1c9d92deac9f7be466f76dfc4482b6452fc5024b5e8daf6ffeb3ee" dependencies = [ "bytemuck", + "libm", "rand", "serde", ] @@ -2524,9 +2634,9 @@ checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" [[package]] name = "glow" -version = "0.14.2" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d51fa363f025f5c111e03f13eda21162faeacb6911fe8caa0c0349f9cf0c4483" +checksum = "c5e5ea60d70410161c8bf5da3fdfeaa1c72ed2c15f8bbb9d19fe3a4fad085f08" dependencies = [ "js-sys", "slotmap", @@ -2585,7 +2695,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "gpu-alloc-types", ] @@ -2595,7 +2705,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", ] [[package]] @@ -2606,7 +2716,7 @@ checksum = "c151a2a5ef800297b4e79efa4f4bec035c5f51d5ae587287c9b952bdf734cacd" dependencies = [ "log", "presser", - "thiserror", + "thiserror 1.0.69", "windows", ] @@ -2616,9 +2726,9 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcf29e94d6d243368b7a56caa16bc213e4f9f8ed38c4d9557069527b5d5281ca" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "gpu-descriptor-types", - "hashbrown 0.15.2", + "hashbrown", ] [[package]] @@ -2627,14 +2737,14 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", ] [[package]] name = "grid" -version = "0.14.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be136d9dacc2a13cc70bb6c8f902b414fb2641f8db1314637c6b7933411a8f82" +checksum = "36119f3a540b086b4e436bb2b588cf98a68863470e0e880f4d0842f112a3183a" [[package]] name = "guillotiere" @@ -2648,23 +2758,21 @@ dependencies = [ [[package]] name = "half" -version = "2.4.1" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9" dependencies = [ "cfg-if", "crunchy", ] [[package]] -name = "hashbrown" -version = "0.14.5" +name = "hash32" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" dependencies = [ - "ahash", - "allocator-api2", - "serde", + "byteorder", ] [[package]] @@ -2673,7 +2781,20 @@ version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" dependencies = [ + "equivalent", "foldhash", + "serde", +] + +[[package]] +name = "heapless" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" +dependencies = [ + "hash32", + "portable-atomic", + "stable_deref_trait", ] [[package]] @@ -2688,6 +2809,12 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" +[[package]] +name = "hermit-abi" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbd780fe5cc30f81464441920d82ac8740e2e46b29a6fad543ddd075229ce37e" + [[package]] name = "hexasphere" version = "15.1.0" @@ -2705,11 +2832,159 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" +[[package]] +name = "home" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + [[package]] name = "image" -version = "0.25.5" +version = "0.25.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd6f44aed642f18953a158afeb30206f4d50da59fbc66ecb53c66488de73563b" +checksum = "db35664ce6b9810857a38a906215e75a9c879f0696556a39f59c62829710251a" dependencies = [ "bytemuck", "byteorder-lite", @@ -2755,19 +3030,20 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.7.1" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" +checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e" dependencies = [ "equivalent", - "hashbrown 0.15.2", + "hashbrown", + "serde", ] [[package]] name = "indoc" -version = "2.0.5" +version = "2.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" +checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd" [[package]] name = "inflections" @@ -2788,11 +3064,11 @@ dependencies = [ [[package]] name = "is-terminal" -version = "0.4.15" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e19b23d53f35ce9f56aebc7d1bb4e6ac1e9c0db7ac85c8d1760c04379edced37" +checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" dependencies = [ - "hermit-abi", + "hermit-abi 0.5.0", "libc", "windows-sys 0.59.0", ] @@ -2841,9 +3117,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "jni" @@ -2856,7 +3132,7 @@ dependencies = [ "combine", "jni-sys", "log", - "thiserror", + "thiserror 1.0.69", "walkdir", "windows-sys 0.45.0", ] @@ -2869,10 +3145,11 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a" dependencies = [ + "getrandom 0.3.2", "libc", ] @@ -2932,9 +3209,9 @@ checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" [[package]] name = "libc" -version = "0.2.169" +version = "0.2.172" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" +checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" [[package]] name = "libfuzzer-sys" @@ -2958,9 +3235,9 @@ dependencies = [ [[package]] name = "libm" -version = "0.2.11" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" +checksum = "c9627da5196e5d8ed0b0495e61e518847578da83483c37288316d9b2e03a7f72" [[package]] name = "libredox" @@ -2968,9 +3245,9 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "libc", - "redox_syscall 0.5.8", + "redox_syscall 0.5.11", ] [[package]] @@ -2979,6 +3256,12 @@ version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" +[[package]] +name = "litemap" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" + [[package]] name = "litrs" version = "0.4.1" @@ -2997,9 +3280,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.25" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] name = "loop9" @@ -3074,11 +3357,11 @@ dependencies = [ [[package]] name = "metal" -version = "0.29.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21" +checksum = "f569fb946490b5743ad69813cb19629130ce9374034abe31614a36402d18f99e" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "block", "core-graphics-types", "foreign-types", @@ -3095,9 +3378,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.4" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3b1c9bd4fe1f0f8b387f6eb9eb3b4a1aa26185e5750efb9140301703f62cd1b" +checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a" dependencies = [ "adler2", "simd-adler32", @@ -3105,14 +3388,14 @@ dependencies = [ [[package]] name = "naga" -version = "23.1.0" +version = "24.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "364f94bc34f61332abebe8cad6f6cd82a5b65cff22c828d05d0968911462ca4f" +checksum = "e380993072e52eef724eddfcde0ed013b0c023c3f0417336ed041aa9f076994e" dependencies = [ "arrayvec", "bit-set 0.8.0", - "bitflags 2.8.0", - "cfg_aliases 0.1.1", + "bitflags 2.9.0", + "cfg_aliases", "codespan-reporting", "hexf-parse", "indexmap", @@ -3120,16 +3403,17 @@ dependencies = [ "pp-rs", "rustc-hash", "spirv", + "strum 0.26.3", "termcolor", - "thiserror", + "thiserror 2.0.12", "unicode-xid", ] [[package]] name = "naga_oil" -version = "0.16.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31ea1f080bb359927cd5404d0af1e5e6758f4f2d82ecfbebb0a0c434764e40f1" +checksum = "0ca507a365f886f95f74420361b75442a3709c747a8a6e8b6c45b8667f45a82c" dependencies = [ "bit-set 0.5.3", "codespan-reporting", @@ -3140,7 +3424,7 @@ dependencies = [ "regex", "regex-syntax 0.8.5", "rustc-hash", - "thiserror", + "thiserror 1.0.69", "tracing", "unicode-ident", ] @@ -3168,13 +3452,13 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "jni-sys", "log", "ndk-sys 0.6.0+11769913", "num_enum", "raw-window-handle", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -3213,9 +3497,9 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "cfg-if", - "cfg_aliases 0.2.1", + "cfg_aliases", "libc", ] @@ -3374,33 +3658,54 @@ dependencies = [ "objc2-encode", ] +[[package]] +name = "objc2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88c6597e14493ab2e44ce58f2fdecf095a51f12ca57bec060a11c57332520551" +dependencies = [ + "objc2-encode", +] + [[package]] name = "objc2-app-kit" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "block2", "libc", - "objc2", + "objc2 0.5.2", "objc2-core-data", "objc2-core-image", - "objc2-foundation", + "objc2-foundation 0.2.2", "objc2-quartz-core", ] +[[package]] +name = "objc2-app-kit" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc" +dependencies = [ + "bitflags 2.9.0", + "objc2 0.6.1", + "objc2-core-graphics", + "objc2-foundation 0.3.1", +] + [[package]] name = "objc2-cloud-kit" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "block2", - "objc2", + "objc2 0.5.2", "objc2-core-location", - "objc2-foundation", + "objc2-foundation 0.2.2", ] [[package]] @@ -3409,21 +3714,45 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" dependencies = [ - "block2", - "objc2", - "objc2-foundation", + "block2", + "objc2 0.5.2", + "objc2-foundation 0.2.2", +] + +[[package]] +name = "objc2-core-data" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" +dependencies = [ + "bitflags 2.9.0", + "block2", + "objc2 0.5.2", + "objc2-foundation 0.2.2", +] + +[[package]] +name = "objc2-core-foundation" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" +dependencies = [ + "bitflags 2.9.0", + "dispatch2", + "objc2 0.6.1", ] [[package]] -name = "objc2-core-data" -version = "0.2.2" +name = "objc2-core-graphics" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" +checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4" dependencies = [ - "bitflags 2.8.0", - "block2", - "objc2", - "objc2-foundation", + "bitflags 2.9.0", + "dispatch2", + "objc2 0.6.1", + "objc2-core-foundation", + "objc2-io-surface", ] [[package]] @@ -3433,8 +3762,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" dependencies = [ "block2", - "objc2", - "objc2-foundation", + "objc2 0.5.2", + "objc2-foundation 0.2.2", "objc2-metal", ] @@ -3445,9 +3774,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" dependencies = [ "block2", - "objc2", + "objc2 0.5.2", "objc2-contacts", - "objc2-foundation", + "objc2-foundation 0.2.2", ] [[package]] @@ -3462,11 +3791,33 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "block2", "dispatch", "libc", - "objc2", + "objc2 0.5.2", +] + +[[package]] +name = "objc2-foundation" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c" +dependencies = [ + "bitflags 2.9.0", + "objc2 0.6.1", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-io-surface" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7282e9ac92529fa3457ce90ebb15f4ecbc383e8338060960760fa2cf75420c3c" +dependencies = [ + "bitflags 2.9.0", + "objc2 0.6.1", + "objc2-core-foundation", ] [[package]] @@ -3476,9 +3827,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" dependencies = [ "block2", - "objc2", - "objc2-app-kit", - "objc2-foundation", + "objc2 0.5.2", + "objc2-app-kit 0.2.2", + "objc2-foundation 0.2.2", ] [[package]] @@ -3487,10 +3838,10 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "block2", - "objc2", - "objc2-foundation", + "objc2 0.5.2", + "objc2-foundation 0.2.2", ] [[package]] @@ -3499,10 +3850,10 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "block2", - "objc2", - "objc2-foundation", + "objc2 0.5.2", + "objc2-foundation 0.2.2", "objc2-metal", ] @@ -3512,8 +3863,8 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" dependencies = [ - "objc2", - "objc2-foundation", + "objc2 0.5.2", + "objc2-foundation 0.2.2", ] [[package]] @@ -3522,14 +3873,14 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "block2", - "objc2", + "objc2 0.5.2", "objc2-cloud-kit", "objc2-core-data", "objc2-core-image", "objc2-core-location", - "objc2-foundation", + "objc2-foundation 0.2.2", "objc2-link-presentation", "objc2-quartz-core", "objc2-symbols", @@ -3544,8 +3895,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" dependencies = [ "block2", - "objc2", - "objc2-foundation", + "objc2 0.5.2", + "objc2-foundation 0.2.2", ] [[package]] @@ -3554,11 +3905,11 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "block2", - "objc2", + "objc2 0.5.2", "objc2-core-location", - "objc2-foundation", + "objc2-foundation 0.2.2", ] [[package]] @@ -3573,15 +3924,15 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.20.3" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "oorandom" -version = "11.1.4" +version = "11.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9" +checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" [[package]] name = "orbclient" @@ -3592,6 +3943,15 @@ dependencies = [ "libredox", ] +[[package]] +name = "ordered-float" +version = "4.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" +dependencies = [ + "num-traits", +] + [[package]] name = "overload" version = "0.1.1" @@ -3631,7 +3991,7 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.8", + "redox_syscall 0.5.11", "smallvec", "windows-targets 0.52.6", ] @@ -3648,30 +4008,20 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" -[[package]] -name = "petgraph" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" -dependencies = [ - "fixedbitset 0.4.2", - "indexmap", -] - [[package]] name = "pin-project" -version = "1.1.9" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfe2e71e1471fe07709406bf725f710b02927c9c54b2b5b2ec0e8087d97c327d" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.9" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6e859e6e5bd50440ab63c47e3ebabc90f26251f7c73c3d3e837b74a1cc3fa67" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", @@ -3697,9 +4047,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "plotters" @@ -3750,7 +4100,7 @@ checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" dependencies = [ "cfg-if", "concurrent-queue", - "hermit-abi", + "hermit-abi 0.4.0", "pin-project-lite", "rustix", "tracing", @@ -3765,9 +4115,9 @@ checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3" [[package]] name = "portable-atomic" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" +checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" [[package]] name = "portable-atomic-util" @@ -3789,11 +4139,11 @@ dependencies = [ [[package]] name = "ppv-lite86" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "zerocopy", + "zerocopy 0.8.25", ] [[package]] @@ -3804,9 +4154,9 @@ checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" [[package]] name = "prettyplease" -version = "0.2.29" +version = "0.2.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6924ced06e1f7dfe3fa48d57b9f74f55d8915f5036121bef647ef4b204895fac" +checksum = "664ec5419c51e34154eec046ebcba56312d5a2fc3b09a06da188e1ad21afadf6" dependencies = [ "proc-macro2", "syn", @@ -3814,18 +4164,18 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.2.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" dependencies = [ "toml_edit", ] [[package]] name = "proc-macro2" -version = "1.0.93" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" +checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" dependencies = [ "unicode-ident", ] @@ -3851,9 +4201,9 @@ dependencies = [ [[package]] name = "pyo3" -version = "0.23.4" +version = "0.23.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57fe09249128b3173d092de9523eaa75136bf7ba85e0d69eca241c7939c933cc" +checksum = "7778bffd85cf38175ac1f545509665d0b9b92a198ca7941f131f85f7a4f9a872" dependencies = [ "cfg-if", "indoc", @@ -3869,9 +4219,9 @@ dependencies = [ [[package]] name = "pyo3-build-config" -version = "0.23.4" +version = "0.23.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd3927b5a78757a0d71aa9dff669f903b1eb64b54142a9bd9f757f8fde65fd7" +checksum = "94f6cbe86ef3bf18998d9df6e0f3fc1050a8c5efa409bf712e661a4366e010fb" dependencies = [ "once_cell", "target-lexicon", @@ -3879,9 +4229,9 @@ dependencies = [ [[package]] name = "pyo3-ffi" -version = "0.23.4" +version = "0.23.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dab6bb2102bd8f991e7749f130a70d05dd557613e39ed2deeee8e9ca0c4d548d" +checksum = "e9f1b4c431c0bb1c8fb0a338709859eed0d030ff6daa34368d3b152a63dfdd8d" dependencies = [ "libc", "pyo3-build-config", @@ -3889,9 +4239,9 @@ dependencies = [ [[package]] name = "pyo3-log" -version = "0.12.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be5bb22b77965a7b5394e9aae9897a0607b51df5167561ffc3b02643b4200bc7" +checksum = "7079e412e909af5d6be7c04a7f29f6a2837a080410e1c529c9dee2c367383db4" dependencies = [ "arc-swap", "log", @@ -3900,9 +4250,9 @@ dependencies = [ [[package]] name = "pyo3-macros" -version = "0.23.4" +version = "0.23.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91871864b353fd5ffcb3f91f2f703a22a9797c91b9ab497b1acac7b07ae509c7" +checksum = "fbc2201328f63c4710f68abdf653c89d8dbc2858b88c5d88b0ff38a75288a9da" dependencies = [ "proc-macro2", "pyo3-macros-backend", @@ -3912,9 +4262,9 @@ dependencies = [ [[package]] name = "pyo3-macros-backend" -version = "0.23.4" +version = "0.23.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43abc3b80bc20f3facd86cd3c60beed58c3e2aa26213f3cda368de39c60a27e4" +checksum = "fca6726ad0f3da9c9de093d6f116a93c1a38e417ed73bf138472cf4064f72028" dependencies = [ "heck", "proc-macro2", @@ -3940,22 +4290,28 @@ checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" [[package]] name = "quick-xml" -version = "0.37.2" +version = "0.37.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "165859e9e55f79d67b96c5d96f4e88b6f2695a1972849c15a6a3f5c59fc2c003" +checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb" dependencies = [ "memchr", ] [[package]] name = "quote" -version = "1.0.38" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" + [[package]] name = "radsort" version = "0.1.1" @@ -3989,7 +4345,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.16", ] [[package]] @@ -4053,16 +4409,16 @@ dependencies = [ "rand_chacha", "simd_helpers", "system-deps", - "thiserror", + "thiserror 1.0.69", "v_frame", "wasm-bindgen", ] [[package]] name = "ravif" -version = "0.11.11" +version = "0.11.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2413fd96bd0ea5cdeeb37eaf446a22e6ed7b981d792828721e74ded1980a45c6" +checksum = "d6a5f31fcf7500f9401fea858ea4ab5525c99f2322cfcee732c0e6c74208c0c6" dependencies = [ "avif-serialize", "imgref", @@ -4107,9 +4463,9 @@ dependencies = [ [[package]] name = "read-fonts" -version = "0.22.7" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69aacb76b5c29acfb7f90155d39759a29496aebb49395830e928a9703d2eec2f" +checksum = "f6f9e8a4f503e5c8750e4cd3b32a4e090035c46374b305a15c70bad833dca05f" dependencies = [ "bytemuck", "font-types", @@ -4132,11 +4488,11 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.8" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" +checksum = "d2f103c6d277498fbceb16e84d317e2a400f160f46904d5f5410848c829511a3" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", ] [[package]] @@ -4202,7 +4558,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" dependencies = [ "base64 0.21.7", - "bitflags 2.8.0", + "bitflags 2.9.0", "serde", "serde_derive", ] @@ -4225,7 +4581,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "errno", "libc", "linux-raw-sys", @@ -4234,9 +4590,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" +checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" [[package]] name = "rustybuzz" @@ -4244,7 +4600,7 @@ version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfb9cf8877777222e4a3bc7eb247e398b56baba500c38c1c46842431adc8b55c" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "bytemuck", "libm", "smallvec", @@ -4257,24 +4613,24 @@ dependencies = [ [[package]] name = "ruzstd" -version = "0.7.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fad02996bfc73da3e301efe90b1837be9ed8f4a462b6ed410aa35d00381de89f" +checksum = "c581601827da5c717bfae77d7b187e54293d23d8fb6b700b4b5e9b5828a13cc3" dependencies = [ "twox-hash", ] [[package]] name = "ryu" -version = "1.0.19" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "safetensors" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0436dbfa2778e4ec1a00801b0ae24a1dd619499247d48b0589b679103379d0d4" +checksum = "cc0cdb7198d738a111f6df8fef42cb175412c311d0c4ac9126ff4e550ad1a0e8" dependencies = [ "serde", "serde_json", @@ -4316,9 +4672,9 @@ dependencies = [ [[package]] name = "self_cell" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2fdfc24bc566f839a2da4c4295b82db7d25a24253867d5c64355abb5799bdbe" +checksum = "0f7d95a54511e0c7be3f51e8867aa8cf35148d7b9445d44de2f943e2b206e749" [[package]] name = "send_wrapper" @@ -4328,18 +4684,18 @@ checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" [[package]] name = "serde" -version = "1.0.217" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.217" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", @@ -4348,9 +4704,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.138" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ "itoa", "memchr", @@ -4399,9 +4755,9 @@ dependencies = [ [[package]] name = "skrifa" -version = "0.22.3" +version = "0.26.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e1c44ad1f6c5bdd4eefed8326711b7dbda9ea45dfd36068c427d332aa382cbe" +checksum = "8cc1aa86c26dbb1b63875a7180aa0819709b33348eb5b1491e4321fae388179d" dependencies = [ "bytemuck", "read-fonts", @@ -4427,9 +4783,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.14.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" +checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" [[package]] name = "smithay-client-toolkit" @@ -4437,7 +4793,7 @@ version = "0.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "calloop", "calloop-wayland-source", "cursor-icon", @@ -4445,7 +4801,7 @@ dependencies = [ "log", "memmap2", "rustix", - "thiserror", + "thiserror 1.0.69", "wayland-backend", "wayland-client", "wayland-csd-frame", @@ -4465,15 +4821,30 @@ dependencies = [ "serde", ] +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "portable-atomic", +] + [[package]] name = "spirv" version = "0.3.0+sdk-1.3.268.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", ] +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "stackfuture" version = "0.3.0" @@ -4498,12 +4869,34 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" +dependencies = [ + "strum_macros 0.26.4", +] + [[package]] name = "strum" version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f64def088c51c9510a8579e3c5d67c65349dcf755e5479ad3d010aa6454e2c32" +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn", +] + [[package]] name = "strum_macros" version = "0.27.1" @@ -4519,15 +4912,15 @@ dependencies = [ [[package]] name = "svg_fmt" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce5d813d71d82c4cbc1742135004e4a79fd870214c155443451c139c9470a0aa" +checksum = "0193cc4331cfd2f3d2011ef287590868599a2f33c3e69bc22c1a3d3acf9e02fb" [[package]] name = "swash" -version = "0.1.19" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbd59f3f359ddd2c95af4758c18270eddd9c730dde98598023cdabff472c2ca2" +checksum = "fae9a562c7b46107d9c78cd78b75bbe1e991c16734c0aee8ff0ee711fb8b620a" dependencies = [ "skrifa", "yazi", @@ -4536,15 +4929,26 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.98" +version = "2.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" +checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "sys-locale" version = "0.3.2" @@ -4569,13 +4973,12 @@ dependencies = [ [[package]] name = "taffy" -version = "0.5.2" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cb893bff0f80ae17d3a57e030622a967b8dbc90e38284d9b4b1442e23873c94" +checksum = "ab4f4d046dd956a47a7e1a2947083d7ac3e6aa3cfaaead36173ceaa5ab11878c" dependencies = [ "arrayvec", "grid", - "num-traits", "serde", "slotmap", ] @@ -4601,7 +5004,16 @@ version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" +dependencies = [ + "thiserror-impl 2.0.12", ] [[package]] @@ -4615,6 +5027,17 @@ dependencies = [ "syn", ] +[[package]] +name = "thiserror-impl" +version = "2.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "thread_local" version = "1.1.8" @@ -4636,15 +5059,6 @@ dependencies = [ "weezl", ] -[[package]] -name = "tiny-keccak" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" -dependencies = [ - "crunchy", -] - [[package]] name = "tiny-skia" version = "0.11.4" @@ -4670,6 +5084,16 @@ dependencies = [ "strict-num", ] +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tinytemplate" version = "1.2.1" @@ -4682,9 +5106,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.8.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" +checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71" dependencies = [ "tinyvec_macros", ] @@ -4697,9 +5121,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "toml" -version = "0.8.20" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" +checksum = "900f6c86a685850b1bc9f6223b20125115ee3f31e01207d81655bbcc0aea9231" dependencies = [ "serde", "serde_spanned", @@ -4709,18 +5133,18 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.8" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3" dependencies = [ "serde", ] [[package]] name = "toml_edit" -version = "0.22.24" +version = "0.22.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" +checksum = "10558ed0bd2a1562e630926a2d1f0b98c827da99fabd3fe20920a59642504485" dependencies = [ "indexmap", "serde", @@ -4836,19 +5260,15 @@ checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" [[package]] name = "twox-hash" -version = "1.6.3" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" -dependencies = [ - "cfg-if", - "static_assertions", -] +checksum = "e7b17f197b3050ba473acf9181f7b1d3b66d1cf7356c6cc57886662276e65908" [[package]] name = "typeid" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e13db2e0ccd5e14a544e8a246ba2312cd25223f616442d7f2cb0e3db614236e" +checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" [[package]] name = "unicode-bidi" @@ -4870,9 +5290,9 @@ checksum = "1df77b101bcc4ea3d78dafc5ad7e4f58ceffe0b2b16bf446aeb50b6cb4157656" [[package]] name = "unicode-ident" -version = "1.0.16" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] name = "unicode-linebreak" @@ -4912,9 +5332,32 @@ checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "unindent" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce" +checksum = "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3" + +[[package]] +name = "url" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "utf8parse" @@ -4924,12 +5367,14 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.12.1" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3758f5e68192bb96cc8f9b7e2c2cfdabb435499a28499a42f8f984092adad4b" +checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9" dependencies = [ - "getrandom", + "getrandom 0.3.2", + "js-sys", "serde", + "wasm-bindgen", ] [[package]] @@ -4949,6 +5394,17 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" +[[package]] +name = "variadics_please" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41b6d82be61465f97d42bd1d15bf20f3b0a3a0905018f38f9d6f6962055b0b5c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "version-compare" version = "0.2.0" @@ -4977,6 +5433,15 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi" +version = "0.14.2+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "wasm-bindgen" version = "0.2.100" @@ -5055,7 +5520,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7208998eaa3870dad37ec8836979581506e0c5c64c20c9e79e9d2a10d6f47bf" dependencies = [ "cc", - "downcast-rs", + "downcast-rs 1.2.1", "rustix", "scoped-tls", "smallvec", @@ -5068,7 +5533,7 @@ version = "0.31.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2120de3d33638aaef5b9f4472bff75f07c56379cf76ea320bd3a3d65ecaf73f" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "rustix", "wayland-backend", "wayland-scanner", @@ -5080,7 +5545,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "cursor-icon", "wayland-backend", ] @@ -5102,7 +5567,7 @@ version = "0.32.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0781cf46869b37e36928f7b432273c0995aa8aed9552c556fb18754420541efc" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "wayland-backend", "wayland-client", "wayland-scanner", @@ -5114,7 +5579,7 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ccaacc76703fefd6763022ac565b590fcade92202492381c95b2edfdf7d46b3" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -5127,7 +5592,7 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "248a02e6f595aad796561fa82d25601bd2c8c3b145b1c7453fc8f94c1a58f8b2" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "wayland-backend", "wayland-client", "wayland-protocols", @@ -5177,6 +5642,23 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webbrowser" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5df295f8451142f1856b1bd86a606dfe9587d439bc036e319c827700dbd555e" +dependencies = [ + "core-foundation 0.10.0", + "home", + "jni", + "log", + "ndk-context", + "objc2 0.6.1", + "objc2-foundation 0.3.1", + "url", + "web-sys", +] + [[package]] name = "weezl" version = "0.1.8" @@ -5185,12 +5667,13 @@ checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" [[package]] name = "wgpu" -version = "23.0.1" +version = "24.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80f70000db37c469ea9d67defdc13024ddf9a5f1b89cb2941b812ad7cde1735a" +checksum = "35904fb00ba2d2e0a4d002fcbbb6e1b89b574d272a50e5fc95f6e81cf281c245" dependencies = [ "arrayvec", - "cfg_aliases 0.1.1", + "bitflags 2.9.0", + "cfg_aliases", "document-features", "js-sys", "log", @@ -5210,14 +5693,14 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "23.0.1" +version = "24.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d63c3c478de8e7e01786479919c8769f62a22eec16788d8c2ac77ce2c132778a" +checksum = "671c25545d479b47d3f0a8e373aceb2060b67c6eb841b24ac8c32348151c7a0c" dependencies = [ "arrayvec", "bit-vec 0.8.0", - "bitflags 2.8.0", - "cfg_aliases 0.1.1", + "bitflags 2.9.0", + "cfg_aliases", "document-features", "indexmap", "log", @@ -5228,25 +5711,25 @@ dependencies = [ "raw-window-handle", "rustc-hash", "smallvec", - "thiserror", + "thiserror 2.0.12", "wgpu-hal", "wgpu-types", ] [[package]] name = "wgpu-hal" -version = "23.0.1" +version = "24.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89364b8a0b211adc7b16aeaf1bd5ad4a919c1154b44c9ce27838213ba05fd821" +checksum = "f112f464674ca69f3533248508ee30cb84c67cf06c25ff6800685f5e0294e259" dependencies = [ "android_system_properties", "arrayvec", "ash", "bit-set 0.8.0", - "bitflags 2.8.0", + "bitflags 2.9.0", "block", "bytemuck", - "cfg_aliases 0.1.1", + "cfg_aliases", "core-graphics-types", "glow", "glutin_wgl_sys", @@ -5263,6 +5746,7 @@ dependencies = [ "ndk-sys 0.5.0+25.2.9519653", "objc", "once_cell", + "ordered-float", "parking_lot", "profiling", "range-alloc", @@ -5270,7 +5754,7 @@ dependencies = [ "renderdoc-sys", "rustc-hash", "smallvec", - "thiserror", + "thiserror 2.0.12", "wasm-bindgen", "web-sys", "wgpu-types", @@ -5280,12 +5764,14 @@ dependencies = [ [[package]] name = "wgpu-types" -version = "23.0.0" +version = "24.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "610f6ff27778148c31093f3b03abc4840f9636d58d597ca2f5977433acfe0068" +checksum = "50ac044c0e76c03a0378e7786ac505d010a873665e2d51383dcff8dd227dc69c" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "js-sys", + "log", + "serde", "web-sys", ] @@ -5393,15 +5879,6 @@ dependencies = [ "windows-targets 0.42.2", ] -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] - [[package]] name = "windows-sys" version = "0.52.0" @@ -5607,13 +6084,13 @@ dependencies = [ "ahash", "android-activity", "atomic-waker", - "bitflags 2.8.0", + "bitflags 2.9.0", "block2", "bytemuck", "calloop", - "cfg_aliases 0.2.1", + "cfg_aliases", "concurrent-queue", - "core-foundation", + "core-foundation 0.9.4", "core-graphics", "cursor-icon", "dpi", @@ -5621,9 +6098,9 @@ dependencies = [ "libc", "memmap2", "ndk", - "objc2", - "objc2-app-kit", - "objc2-foundation", + "objc2 0.5.2", + "objc2-app-kit 0.2.2", + "objc2-foundation 0.2.2", "objc2-ui-kit", "orbclient", "percent-encoding", @@ -5652,13 +6129,34 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.2" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59690dea168f2198d1a3b0cac23b8063efcd11012f10ae4698f284808c8ef603" +checksum = "6cb8234a863ea0e8cd7284fcdd4f145233eb00fee02bbdd9861aec44e6477bc5" dependencies = [ "memchr", ] +[[package]] +name = "wit-bindgen-rt" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags 2.9.0", +] + +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + [[package]] name = "x11-dl" version = "2.21.0" @@ -5703,7 +6201,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" dependencies = [ - "bitflags 2.8.0", + "bitflags 2.9.0", "dlib", "log", "once_cell", @@ -5718,21 +6216,45 @@ checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" [[package]] name = "xml-rs" -version = "0.8.25" +version = "0.8.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5b940ebc25896e71dd073bad2dbaa2abfe97b0a391415e22ad1326d9c54e3c4" +checksum = "a62ce76d9b56901b19a74f19431b0d8b3bc7ca4ad685a746dfd78ca8f4fc6bda" [[package]] name = "yazi" -version = "0.1.6" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01738255b5a16e78bbb83e7fbba0a1e7dd506905cfc53f4622d89015a03fbb5" + +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c94451ac9513335b5e23d7a8a2b61a7102398b8cca5160829d313e84c9d98be1" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] [[package]] name = "zeno" -version = "0.2.3" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd15f8e0dbb966fd9245e7498c7e9e5055d9e5c8b676b95bd67091cd11a1e697" +checksum = "cc0de2315dc13d00e5df3cd6b8d2124a6eaec6a2d4b6a1c5f37b7efad17fcc17" [[package]] name = "zerocopy" @@ -5740,8 +6262,16 @@ version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ - "byteorder", - "zerocopy-derive", + "zerocopy-derive 0.7.35", +] + +[[package]] +name = "zerocopy" +version = "0.8.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb" +dependencies = [ + "zerocopy-derive 0.8.25", ] [[package]] @@ -5755,6 +6285,60 @@ dependencies = [ "syn", ] +[[package]] +name = "zerocopy-derive" +version = "0.8.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "zune-core" version = "0.4.12" diff --git a/Cargo.toml b/Cargo.toml index e9d016a..6735212 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -59,6 +59,7 @@ plucker = [] python = ["extension-module", "pyo3", "webgpu"] viewer = [ + "bevy_egui", "bevy-inspector-egui", "bevy_panorbit_camera", "bevy/bevy_ui", @@ -76,9 +77,10 @@ webgpu = [ [dependencies] -bevy_args = "1.7.1" -bevy-inspector-egui = { version = "0.28", optional = true } -bevy_panorbit_camera = { version = "0.21", optional = true, features = ["bevy_egui"] } +bevy_args = "1.8" +bevy_egui = { version = "0.34", optional = true } +bevy-inspector-egui = { version = "0.31", optional = true } +bevy_panorbit_camera = { version = "0.26", optional = true, features = ["bevy_egui"] } clap = { version = "4.5", features = ["derive"] } futures-intrusive = "0.5" glob = "0.3" @@ -91,7 +93,7 @@ rayon = { version = "1.10", optional = true } serde = "1.0" strum = "0.27" strum_macros = "0.27" -wgpu = "23.0.1" +wgpu = "24" [target.'cfg(target_arch = "wasm32")'.dependencies] @@ -100,13 +102,14 @@ wasm-bindgen = "0.2" [dependencies.bevy] -version = "0.15" +version = "0.16" default-features = false features = [ "bevy_asset", "bevy_core_pipeline", "bevy_gizmos", "bevy_gltf", + "bevy_log", "bevy_pbr", "bevy_render", "bevy_winit", diff --git a/README.md b/README.md index d62b5fa..f203c19 100644 --- a/README.md +++ b/README.md @@ -65,6 +65,7 @@ requires nvjpeg: https://developer.nvidia.com/nvjpeg | `bevy_zeroverse` | `bevy` | | :-- | :-- | +| `0.8` | `0.16` | | `0.6` | `0.15` | | `0.2` | `0.14` | | `0.1` | `0.13` | diff --git a/ffi/Cargo.toml b/ffi/Cargo.toml index efa499e..b55a371 100644 --- a/ffi/Cargo.toml +++ b/ffi/Cargo.toml @@ -32,7 +32,7 @@ serde = "1.0" [dependencies.bevy] -version = "0.15" +version = "0.16" default-features = false features = [ "bevy_asset", diff --git a/ffi/python/bevy_zeroverse_dataloader/__init__.py b/ffi/python/bevy_zeroverse_dataloader/__init__.py index d72fbda..760bf4a 100644 --- a/ffi/python/bevy_zeroverse_dataloader/__init__.py +++ b/ffi/python/bevy_zeroverse_dataloader/__init__.py @@ -4,12 +4,12 @@ from pathlib import Path from PIL import Image import random -from typing import Optional +from typing import Literal, Optional import imageio import numpy as np from safetensors import safe_open -from safetensors.torch import load_file, save_file +from safetensors.torch import load as load_bytes, load_file, save as serialize, save_file import torch import torch.distributed as dist from torch.utils.data import DataLoader, Dataset, IterableDataset, get_worker_info @@ -18,6 +18,9 @@ from torchvision.transforms.functional import to_pil_image, to_tensor from torchvision.utils import save_image +import lz4.frame as lz4 +import zstandard as zstd + import bevy_zeroverse_ffi @@ -44,7 +47,6 @@ def normalize_hdr_image_tonemap(hdr_image: torch.Tensor) -> torch.Tensor: return normalized_image.clamp(0.0, 1.0) -# TODO: add sample-level world rotation augment class View: def __init__( self, @@ -286,6 +288,24 @@ def __getitem__(self, idx): return sample.to_tensors() +def _compress(data: bytes, codec: str, level: int = 0) -> bytes: + if codec == "lz4": + return lz4.compress(data, compression_level=level) + if codec == "zstd": + c = zstd.ZstdCompressor(level=level) + return c.compress(data) + return data + +def _decompress_bytes(path: Path) -> bytes: + raw = path.read_bytes() + if path.suffix == ".lz4": + return lz4.decompress(raw) + if path.suffix == ".zst": + d = zstd.ZstdDecompressor() + return d.decompress(raw) + return raw + + def decode_jpg_tensor(jpg_tensor: torch.Tensor) -> torch.Tensor: buffer = BytesIO(jpg_tensor.numpy().tobytes()) img = Image.open(buffer).convert("RGB") @@ -305,6 +325,7 @@ def chunk_and_save( samples_per_chunk: Optional[int] = None, n_workers: int = 1, jpg_quality: int = 75, + compression: Optional[Literal["lz4", "zstd"]] = "zstd", ): """ if samples_per_chunk is not None, the dataset will be chunked into chunks of size samples_per_chunk, regardless of bytes_per_chunk. @@ -335,9 +356,9 @@ def chunk_and_save( def save_chunk(): nonlocal chunk_size, chunk_index, chunk, chunk_file_paths - chunk_key = f"{chunk_index:0>6}" - print(f"saving chunk {chunk_key} of {total_chunks} ({chunk_size / 1e6:.2f} MB).") - file_path = output_dir / f"{chunk_key}.safetensors" + key = f"{chunk_index:0>6}" + print(f"saving chunk {key} of {total_chunks} ({chunk_size / 1e6:.2f} MB).") + base_name = f"{key}.safetensors" B = len(chunk) batch = {} @@ -362,9 +383,18 @@ def save_chunk(): flat_tensors = { key: torch.stack(tensors, dim=0) if '_jpg' not in key and '_shape' not in key else tensors for key, tensors in batch.items() } - save_file(flat_tensors, str(file_path)) - chunk_file_paths.append(file_path) + if compression is None: + final_path = output_dir / base_name + save_file(flat_tensors, str(final_path)) + else: + blob = serialize(flat_tensors) + encoded = _compress(blob, compression) + ext = ".lz4" if compression == "lz4" else ".zst" + final_path = output_dir / (base_name + ext) + final_path.write_bytes(encoded) + + chunk_file_paths.append(final_path) chunk_size = 0 chunk_index += 1 chunk = [] @@ -433,8 +463,9 @@ def crop(tensor, shape, channels_last=True): return tensor_cropped -def load_chunk(file_path: Path): - tensors = load_file(str(file_path)) +# TODO: support optional compression of chunks +def load_chunk(path: Path): + tensors = load_bytes(_decompress_bytes(path)) batch = {} jpeg_groups = {} @@ -474,19 +505,27 @@ def load_chunk(file_path: Path): return batch -def get_chunk_sample_count(file_path: Path): - with safe_open(str(file_path), framework="pt") as f: - if "color_shape" in f.keys(): - return f.get_tensor("color_shape")[0].item() - elif "near" in f.keys(): - return f.get_tensor("near").shape[0] - else: - raise ValueError("no shape key found in chunk file") + + +def get_chunk_sample_count(path: Path): + if path.suffix in {".lz4", ".zst"}: + tensors = load_bytes(_decompress_bytes(path)) + else: + tensors = load_file(str(path)) + + if "color_shape" in tensors: + return tensors["color_shape"][0].item() + if "near" in tensors: + return tensors["near"].shape[0] + + raise ValueError("no shape key found in chunk file") + + class ChunkedIteratorDataset(IterableDataset): def __init__(self, output_dir: Path, shuffle: bool = False): self.output_dir = Path(output_dir) - self.chunk_files = sorted(self.output_dir.glob("*.safetensors")) + self.chunk_files = sorted(self.output_dir.glob("*.safetensors*")) self.shuffle = shuffle self.cache_file = self.output_dir / "chunk_sizes_cache.json" diff --git a/ffi/src/generate.rs b/ffi/src/generate.rs index 5351da3..63e92b5 100644 --- a/ffi/src/generate.rs +++ b/ffi/src/generate.rs @@ -373,7 +373,7 @@ fn save_chunk( ) { let stacked_views = stack_samples(chunk_samples.to_vec(), zeroverse_config); - let file_name = format!("{:06}.safetensors", chunk_index); + let file_name = format!("{chunk_index:06}.safetensors"); let output_dir = Path::new(generator_config.output_dir.as_str()); if !output_dir.exists() { diff --git a/ffi/src/lib.rs b/ffi/src/lib.rs index d75fe3d..43ce55f 100644 --- a/ffi/src/lib.rs +++ b/ffi/src/lib.rs @@ -103,11 +103,11 @@ impl View { } fn __str__(&self) -> PyResult { - Ok(format!("{:?}", self)) + Ok(format!("{self:?}")) } fn __repr__(&self) -> PyResult { - Ok(format!("{:?}", self)) + Ok(format!("{self:?}")) } } @@ -134,11 +134,11 @@ impl Sample { } fn __str__(&self) -> PyResult { - Ok(format!("{:?}", self)) + Ok(format!("{self:?}")) } fn __repr__(&self) -> PyResult { - Ok(format!("{:?}", self)) + Ok(format!("{self:?}")) } } @@ -231,7 +231,7 @@ fn signaled_runner(mut app: App) -> AppExit { .map(|i| { let x = i as f32 * args.playback_step; if x > 1.0 { - panic!("timestep value {} has range [0.0, 1.0]", x); + panic!("timestep value {x} has range [0.0, 1.0]"); } x }) @@ -357,7 +357,7 @@ fn sample_stream( } } - let scene_aabb = scene.single().1; + let scene_aabb = scene.single().unwrap().1; buffered_sample.aabb = [ scene_aabb.min.into(), scene_aabb.max.into(), @@ -385,6 +385,7 @@ fn sample_stream( view.far = perspective.far; } Projection::Orthographic(_) => panic!("orthographic projection not supported"), + Projection::Custom(_) => panic!("custom projection not supported"), }; let world_from_view = camera_transform.compute_matrix().to_cols_array_2d(); @@ -394,7 +395,8 @@ fn sample_stream( .get(&image_copier.dst_image) .unwrap() .clone() - .data; + .data + .unwrap(); match write_to { RenderMode::Color => view.color = image_data, @@ -436,7 +438,7 @@ fn sample_stream( sender.send(sample).unwrap(); if state.regenerate_scene { - regenerate_event.send(RegenerateSceneEvent); + regenerate_event.write(RegenerateSceneEvent); } state.enabled = false; diff --git a/src/app.rs b/src/app.rs index e28b184..dbeac94 100644 --- a/src/app.rs +++ b/src/app.rs @@ -33,6 +33,9 @@ use bevy_args::{ Parser, Serialize, }; + +#[cfg(feature = "viewer")] +use bevy_egui::EguiPlugin; #[cfg(feature = "viewer")] use bevy_inspector_egui::quick::WorldInspectorPlugin; #[cfg(feature = "viewer")] @@ -211,11 +214,11 @@ impl BevyZeroverseConfig { } fn __str__(&self) -> PyResult { - Ok(format!("{:?}", self)) + Ok(format!("{self:?}")) } fn __repr__(&self) -> PyResult { - Ok(format!("{:?}", self)) + Ok(format!("{self:?}")) } } @@ -301,7 +304,7 @@ pub struct BevyZeroverseConfig { #[arg(long, value_enum, default_value_t = ZeroverseSceneType::Object)] pub scene_type: ZeroverseSceneType, - #[arg(long, default_value = "true")] + #[arg(long, default_value = "false")] pub rotation_augmentation: bool, #[arg(long, default_value = "0.0")] @@ -342,7 +345,7 @@ impl Default for BevyZeroverseConfig { render_mode: Default::default(), render_modes: vec![], scene_type: Default::default(), - rotation_augmentation: true, + rotation_augmentation: false, max_camera_radius: 0.0, playback_mode: PlaybackMode::PingPong, playback_speed: 0.2, @@ -443,6 +446,7 @@ pub fn viewer_app( #[cfg(feature = "viewer")] if args.editor { app.register_type::(); + app.add_plugins(EguiPlugin { enable_multipass_for_primary_context: true }); app.add_plugins(WorldInspectorPlugin::new()); } @@ -452,7 +456,7 @@ pub fn viewer_app( app.add_plugins(BevyZeroversePlugin); - app.insert_resource(args.render_mode); // TODO: replicate on args changed + app.insert_resource(args.render_mode); app.insert_resource(DefaultZeroverseCamera { resolution: UVec2::new(args.width as u32, args.height as u32).into(), @@ -498,11 +502,11 @@ fn setup_camera( } material_grid_cameras.iter().for_each(|entity| { - commands.entity(entity).despawn_recursive(); + commands.entity(entity).despawn(); }); editor_cameras.iter().for_each(|entity| { - commands.entity(entity).despawn_recursive(); + commands.entity(entity).despawn(); }); // TODO: add a check for dataloader/headless mode @@ -575,7 +579,7 @@ fn setup_camera_grid( scene_loaded.clear(); if !camera_grids.is_empty() { - commands.entity(camera_grids.single()).despawn_recursive(); + commands.entity(camera_grids.single().unwrap()).despawn(); } if args.camera_grid { @@ -603,7 +607,7 @@ fn setup_camera_grid( }; builder.spawn(ImageNode { - image: texture, + image: texture.handle, ..default() }); } @@ -630,7 +634,7 @@ fn setup_material_grid( materials_loaded.clear(); if !material_grids.is_empty() { - commands.entity(material_grids.single()).despawn_recursive(); + commands.entity(material_grids.single().unwrap()).despawn(); } if args.material_grid { @@ -672,7 +676,7 @@ fn setup_material_grid( fn setup_scene( mut regenerate_event: EventWriter, ) { - regenerate_event.send(RegenerateSceneEvent); + regenerate_event.write(RegenerateSceneEvent); } #[allow(clippy::too_many_arguments)] @@ -691,7 +695,7 @@ fn regenerate_scene_system( regenerate_scene |= keys.just_pressed(KeyCode::KeyR); if regenerate_scene { - regenerate_event.send(RegenerateSceneEvent); + regenerate_event.write(RegenerateSceneEvent); regenerate_stopwatch.reset(); } } @@ -738,8 +742,8 @@ fn press_m_shuffle_materials_and_meshes( mut shuffle_meshes_events: EventWriter, ) { if keys.just_pressed(KeyCode::KeyM) { - shuffle_material_events.send(ShuffleMaterialsEvent); - shuffle_meshes_events.send(ShuffleMeshesEvent); + shuffle_material_events.write(ShuffleMaterialsEvent); + shuffle_meshes_events.write(ShuffleMeshesEvent); } } @@ -749,6 +753,6 @@ fn press_esc_close( mut exit: EventWriter ) { if keys.just_pressed(KeyCode::Escape) { - exit.send(AppExit::Success); + exit.write(AppExit::Success); } } diff --git a/src/camera.rs b/src/camera.rs index 0b109f2..69aa0d9 100644 --- a/src/camera.rs +++ b/src/camera.rs @@ -19,6 +19,7 @@ use bevy::{ render::{ camera::{ Exposure, + ImageRenderTarget, RenderTarget, }, renderer::RenderDevice, @@ -769,7 +770,9 @@ fn insert_cameras( }; render_target.resize(size); let render_target = images.add(render_target); - let target = RenderTarget::Image(render_target.clone()); + let target = RenderTarget::Image( + ImageRenderTarget::from(render_target.clone()) + ); // TODO: modulate fov let mut camera = commands.entity(entity); @@ -1058,7 +1061,7 @@ pub fn draw_camera_gizmo( let color = Color::srgb(1.0, 0.0, 1.0); - let scene_transform = match scene.get_single() { + let scene_transform = match scene.single() { Ok(scene_transform) => scene_transform.compute_transform(), Err(_) => Transform::default(), }; @@ -1075,6 +1078,7 @@ pub fn draw_camera_gizmo( Projection::Orthographic(_) => { (1.0, 0.0) } + Projection::Custom(_) => todo!(), }; let tan_half_fov_y = (fov_y * 0.5).tan(); diff --git a/src/io.rs b/src/io.rs index 763d388..d2e9823 100644 --- a/src/io.rs +++ b/src/io.rs @@ -14,10 +14,14 @@ pub mod image_copy { use bevy::render::render_resource::{ Buffer, BufferDescriptor, BufferUsages, CommandEncoderDescriptor, Extent3d, - ImageCopyBuffer, ImageDataLayout, MapMode, + MapMode, }; use pollster::FutureExt; - use wgpu::Maintain; + use wgpu::{ + Maintain, + TexelCopyBufferInfo, + TexelCopyBufferLayout, + }; use std::sync::atomic::{AtomicBool, Ordering}; @@ -46,7 +50,10 @@ pub mod image_copy { render_device.poll(Maintain::Wait); rx.receive().await.unwrap().unwrap(); if let Some(image) = images.get_mut(&image_copier.dst_image) { - image.data = buffer_slice.get_mapped_range().to_vec(); + image.data = buffer_slice + .get_mapped_range() + .to_vec() + .into(); } image_copier.buffer.unmap(); @@ -163,21 +170,21 @@ pub mod image_copy { let block_size = src_image.texture_format.block_copy_size(None).unwrap(); let padded_bytes_per_row = RenderDevice::align_copy_bytes_per_row( - (src_image.size.x as usize / block_dimensions.0 as usize) + (src_image.size.width as usize / block_dimensions.0 as usize) * block_size as usize, ); let texture_extent = Extent3d { - width: src_image.size.x, - height: src_image.size.y, + width: src_image.size.width, + height: src_image.size.height, depth_or_array_layers: 1, }; encoder.copy_texture_to_buffer( src_image.texture.as_image_copy(), - ImageCopyBuffer { + TexelCopyBufferInfo { buffer: &image_copier.buffer, - layout: ImageDataLayout { + layout: TexelCopyBufferLayout { offset: 0, bytes_per_row: Some( std::num::NonZeroU32::new(padded_bytes_per_row as u32) @@ -215,10 +222,14 @@ pub mod prepass_copy { use bevy::render::render_resource::{ Buffer, BufferDescriptor, BufferUsages, CommandEncoderDescriptor, Extent3d, - ImageCopyBuffer, ImageDataLayout, MapMode, + MapMode, }; use pollster::FutureExt; - use wgpu::Maintain; + use wgpu::{ + Maintain, + TexelCopyBufferInfo, + TexelCopyBufferLayout, + }; use std::sync::atomic::{AtomicBool, Ordering}; @@ -249,7 +260,10 @@ pub mod prepass_copy { render_device.poll(Maintain::Wait); rx.receive().await.unwrap().unwrap(); if let Some(image) = images.get_mut(&prepass_copier.dst_image) { - image.data = buffer_slice.get_mapped_range().to_vec(); + image.data = buffer_slice + .get_mapped_range() + .to_vec() + .into(); } prepass_copier.buffer.unmap(); @@ -399,9 +413,9 @@ pub mod prepass_copy { // TODO: image as a compute node target, single sample encoder.copy_texture_to_buffer( src_texture.texture.as_image_copy(), - ImageCopyBuffer { + TexelCopyBufferInfo { buffer: &prepass_copier.buffer, - layout: ImageDataLayout { + layout: TexelCopyBufferLayout { offset: 0, bytes_per_row: Some( std::num::NonZeroU32::new(padded_bytes_per_row as u32) diff --git a/src/material.rs b/src/material.rs index dbafbf3..154d28f 100644 --- a/src/material.rs +++ b/src/material.rs @@ -164,7 +164,7 @@ fn load_materials( info!("loaded {} materials", zeroverse_materials.materials.len()); - load_event.send(MaterialsLoadedEvent); + load_event.write(MaterialsLoadedEvent); } @@ -212,6 +212,6 @@ fn material_exchange( if *scene_counter >= args.regenerate_scene_material_shuffle_period { *scene_counter = 0; - shuffle_events.send(ShuffleMaterialsEvent); + shuffle_events.write(ShuffleMaterialsEvent); } } diff --git a/src/mesh.rs b/src/mesh.rs index 6ac1bb1..e045a67 100644 --- a/src/mesh.rs +++ b/src/mesh.rs @@ -161,8 +161,8 @@ fn load_meshes( for path in &selected_paths { let path_str = path.to_string_lossy(); - let glb_path = format!("{}#Mesh0/Primitive0", path_str); - let material_path = format!("{}#Material0", path_str); + let glb_path = format!("{path_str}#Mesh0/Primitive0"); + let material_path = format!("{path_str}#Material0"); let mesh_handle = asset_server.load(glb_path); let material_handle = asset_server.load(material_path); @@ -185,7 +185,7 @@ fn load_meshes( info!("loaded total of {} meshes", zeroverse_meshes.meshes.len()); - load_event.send(MeshesLoadedEvent); + load_event.write(MeshesLoadedEvent); } @@ -233,7 +233,7 @@ fn mesh_exchange( if *scene_counter >= args.regenerate_scene_mesh_shuffle_period { *scene_counter = 0; - shuffle_events.send(ShuffleMeshesEvent); + shuffle_events.write(ShuffleMeshesEvent); } } diff --git a/src/plucker/mod.rs b/src/plucker/mod.rs index 2fa4feb..f543701 100644 --- a/src/plucker/mod.rs +++ b/src/plucker/mod.rs @@ -1,6 +1,9 @@ use bevy::{ prelude::*, - asset::load_internal_asset, + asset::{ + load_internal_asset, + weak_handle, + }, core_pipeline::core_3d::graph::{ Core3d, Node3d, @@ -78,7 +81,7 @@ pub struct PluckerOutput { } -const PLUCKER_SHADER_HANDLE: Handle = Handle::weak_from_u128(793429261847); +const PLUCKER_SHADER_HANDLE: Handle = weak_handle!("1347c9b1-c46a-4515-6782-023a354b7cac"); #[derive( Debug, @@ -290,7 +293,7 @@ fn create_plucker_output( >, | { if plucker_visualization.get(visualization_entity).is_ok() { - commands.entity(visualization_entity).despawn_recursive(); + commands.entity(visualization_entity).despawn(); } }); } diff --git a/src/primitive.rs b/src/primitive.rs index 9a38ffb..a586c8c 100644 --- a/src/primitive.rs +++ b/src/primitive.rs @@ -51,7 +51,7 @@ impl Plugin for ZeroversePrimitivePlugin { app.register_type::(); #[cfg(not(target_family = "wasm"))] // note: web does not handle `POLYGON_MODE_LINE`, so we skip wireframes - app.add_plugins(bevy::pbr::wireframe::WireframePlugin); + app.add_plugins(bevy::pbr::wireframe::WireframePlugin::default()); app.add_systems(Update, process_primitives); } @@ -239,6 +239,18 @@ impl Default for PositionSampler { } impl PositionSampler { + pub fn is_valid(&self) -> bool { + match *self { + PositionSampler::Band { size } => size.x > 0.0 && size.y > 0.0 && size.z > 0.0, + PositionSampler::Capsule { radius, length } => radius > 0.0 && length > 0.0, + PositionSampler::Cube { extents } => extents.x > 0.0 && extents.y > 0.0 && extents.z > 0.0, + PositionSampler::Cylinder { radius, height } => radius > 0.0 && height > 0.0, + PositionSampler::Exact { position: _ } => true, + PositionSampler::Origin => true, + PositionSampler::Sphere { radius } => radius > 0.0, + } + } + pub fn sample(&self) -> Vec3 { let rng = &mut rand::thread_rng(); @@ -273,7 +285,7 @@ pub struct ZeroversePrimitive; fn build_primitive( - commands: &mut ChildBuilder, + commands: &mut ChildSpawnerCommands, settings: &ZeroversePrimitiveSettings, meshes: &mut ResMut>, standard_materials: &mut ResMut>, diff --git a/src/render/depth.rs b/src/render/depth.rs index 0b08659..2998644 100644 --- a/src/render/depth.rs +++ b/src/render/depth.rs @@ -1,6 +1,9 @@ use bevy::{ prelude::*, - asset::load_internal_asset, + asset::{ + load_internal_asset, + weak_handle, + }, pbr::{ ExtendedMaterial, MaterialExtension, @@ -11,7 +14,7 @@ use bevy::{ use crate::render::DisabledPbrMaterial; -pub const DEPTH_SHADER_HANDLE: Handle = Handle::weak_from_u128(63456234534534); +pub const DEPTH_SHADER_HANDLE: Handle = weak_handle!("2e8b51ab-6faf-4b40-b342-0250d5b75323"); #[derive(Component, Debug, Clone, Default, Reflect, Eq, PartialEq)] #[reflect(Component, Default)] @@ -52,7 +55,7 @@ fn apply_depth_material( mut materials: ResMut>, ) { for e in removed_depths.read() { - if let Some(mut commands) = commands.get_entity(e) { + if let Ok(mut commands) = commands.get_entity(e) { commands.remove::>(); } } diff --git a/src/render/normal.rs b/src/render/normal.rs index 2908927..a3c7c6d 100644 --- a/src/render/normal.rs +++ b/src/render/normal.rs @@ -1,6 +1,9 @@ use bevy::{ prelude::*, - asset::load_internal_asset, + asset::{ + load_internal_asset, + weak_handle, + }, pbr::{ ExtendedMaterial, MaterialExtension, @@ -11,7 +14,7 @@ use bevy::{ use crate::render::DisabledPbrMaterial; -pub const NORMAL_SHADER_HANDLE: Handle = Handle::weak_from_u128(234253434561); +pub const NORMAL_SHADER_HANDLE: Handle = weak_handle!("93f535c9-7353-4160-920b-9493b0a2c1ee"); #[derive(Component, Debug, Clone, Default, Reflect, Eq, PartialEq)] #[reflect(Component, Default)] @@ -52,7 +55,7 @@ fn apply_normal_material( mut materials: ResMut>, ) { for e in removed_normals.read() { - if let Some(mut commands) = commands.get_entity(e) { + if let Ok(mut commands) = commands.get_entity(e) { commands.remove::>(); } } diff --git a/src/render/optical_flow.rs b/src/render/optical_flow.rs index cc7fd36..d27a1c7 100644 --- a/src/render/optical_flow.rs +++ b/src/render/optical_flow.rs @@ -1,6 +1,9 @@ use bevy::{ prelude::*, - asset::load_internal_asset, + asset::{ + load_internal_asset, + weak_handle, + }, pbr::{ ExtendedMaterial, MaterialExtension, @@ -11,7 +14,7 @@ use bevy::{ use crate::render::DisabledPbrMaterial; -pub const OPTICAL_FLOW_SHADER_HANDLE: Handle = Handle::weak_from_u128(67489367583); +pub const OPTICAL_FLOW_SHADER_HANDLE: Handle = weak_handle!("3f3f9390-7b0d-483e-b197-a8b79123205d"); #[derive(Component, Debug, Clone, Default, Reflect, Eq, PartialEq)] #[reflect(Component, Default)] @@ -52,7 +55,7 @@ fn apply_optical_flow_material( mut materials: ResMut>, ) { for e in removed_optical_flows.read() { - if let Some(mut commands) = commands.get_entity(e) { + if let Ok(mut commands) = commands.get_entity(e) { commands.remove::>(); } } diff --git a/src/render/position.rs b/src/render/position.rs index f4e17c5..00f4125 100644 --- a/src/render/position.rs +++ b/src/render/position.rs @@ -1,6 +1,9 @@ use bevy::{ prelude::*, - asset::load_internal_asset, + asset::{ + load_internal_asset, + weak_handle, + }, pbr::{ ExtendedMaterial, MaterialExtension, @@ -14,7 +17,7 @@ use crate::{ }; -pub const POSITION_SHADER_HANDLE: Handle = Handle::weak_from_u128(612356441234); +pub const POSITION_SHADER_HANDLE: Handle = weak_handle!("ade99152-1098-445a-9174-e9f60406a582"); #[derive(Component, Debug, Clone, Default, Reflect, Eq, PartialEq)] #[reflect(Component, Default)] @@ -56,12 +59,12 @@ fn apply_position_material( mut materials: ResMut>, ) { for e in removed_positions.read() { - if let Some(mut commands) = commands.get_entity(e) { + if let Ok(mut commands) = commands.get_entity(e) { commands.remove::>(); } } - let Ok(aabb) = aabb.get_single() else { return }; + let Ok(aabb) = aabb.single() else { return }; for ( e, diff --git a/src/render/semantic.rs b/src/render/semantic.rs index 8293625..b10b1c2 100644 --- a/src/render/semantic.rs +++ b/src/render/semantic.rs @@ -1,6 +1,9 @@ use bevy::{ prelude::*, - asset::load_internal_asset, + asset::{ + load_internal_asset, + weak_handle, + }, pbr::{ ExtendedMaterial, MaterialExtension, @@ -11,7 +14,7 @@ use bevy::{ use crate::render::DisabledPbrMaterial; -pub const SEMANTIC_SHADER_HANDLE: Handle = Handle::weak_from_u128(5639572395); +pub const SEMANTIC_SHADER_HANDLE: Handle = weak_handle!("e1b272d1-bae5-48ed-8214-2adbafa43cad"); #[derive(Component, Debug, Clone, Default, Reflect, Eq, PartialEq)] #[reflect(Component)] @@ -148,7 +151,7 @@ fn propagate_semantic_labels( ) { // TODO: capture frame delay based on hierarchy propagation, determine delay from hierarchy depth or apply full-tree update for (label, children) in semantic_parents.iter() { - for &child in children.iter() { + for child in children.iter() { commands.entity(child).insert(label.clone()); } } @@ -170,7 +173,7 @@ fn apply_semantic_material( mut materials: ResMut>, ) { for e in removed_semantics.read() { - if let Some(mut commands) = commands.get_entity(e) { + if let Ok(mut commands) = commands.get_entity(e) { commands.remove::>(); } } diff --git a/src/scene/cornell_cube.rs b/src/scene/cornell_cube.rs index 99fc3ca..782ae75 100644 --- a/src/scene/cornell_cube.rs +++ b/src/scene/cornell_cube.rs @@ -275,7 +275,7 @@ fn setup_scene( }).insert(ZeroverseScene); } - load_event.send(SceneLoadedEvent); + load_event.write(SceneLoadedEvent); } @@ -301,7 +301,7 @@ fn regenerate_scene( regenerate_events.clear(); for entity in clear_zeroverse_scenes.iter() { - commands.entity(entity).despawn_recursive(); + commands.entity(entity).despawn(); } setup_scene( diff --git a/src/scene/human.rs b/src/scene/human.rs index 1cdf5ab..562978d 100644 --- a/src/scene/human.rs +++ b/src/scene/human.rs @@ -129,7 +129,7 @@ fn setup_scene( } }); - load_event.send(SceneLoadedEvent); + load_event.write(SceneLoadedEvent); } @@ -161,7 +161,7 @@ fn regenerate_scene( *recover_from_wait = false; for entity in clear_zeroverse_scenes.iter() { - commands.entity(entity).despawn_recursive(); + commands.entity(entity).despawn(); } setup_lighting( diff --git a/src/scene/mod.rs b/src/scene/mod.rs index ef0aa29..46932e4 100644 --- a/src/scene/mod.rs +++ b/src/scene/mod.rs @@ -40,6 +40,7 @@ impl Plugin for ZeroverseScenePlugin { app.register_type::(); app.register_type::(); + app.register_type::(); app.add_plugins(( semantic_room::ZeroverseSemanticRoomPlugin, @@ -110,6 +111,8 @@ pub struct RegenerateSceneEvent; pub struct SceneLoadedEvent; +#[derive(Component, Debug, Reflect)] +pub struct SceneAabbNode; #[derive(Component, Debug, Reflect)] pub struct SceneAabb { @@ -190,19 +193,20 @@ fn create_scene_aabb( children: Query<&Children>, bounding_boxes: Query<(&Aabb, &GlobalTransform)>, ) { - for (entity, _instance, global_transform) in scene_instances.iter() { - let mut scene_aabb = SceneAabb::new(global_transform.translation()); - - if children.iter_descendants(entity).count() == 0 { - continue; + for (entity, _root_tag, root_tf) in &scene_instances { + let mut scene_aabb = SceneAabb::new(root_tf.translation()); + + let merged_any = children + .iter_descendants(entity) + .filter_map(|child| bounding_boxes.get(child).ok()) + .any(|(bb, tf)| { + scene_aabb.merge_aabb(bb, tf); + true + }); + + if merged_any { + commands.entity(entity).insert(scene_aabb); } - - for child in children.iter_descendants(entity) { - let Ok((bb, transform)) = bounding_boxes.get(child) else { continue }; - scene_aabb.merge_aabb(bb, transform); - } - - commands.entity(entity).insert(scene_aabb); } } diff --git a/src/scene/object.rs b/src/scene/object.rs index 5c00567..0f9cf04 100644 --- a/src/scene/object.rs +++ b/src/scene/object.rs @@ -86,7 +86,7 @@ fn setup_scene( } }); - load_event.send(SceneLoadedEvent); + load_event.write(SceneLoadedEvent); } @@ -109,7 +109,7 @@ fn regenerate_scene( regenerate_events.clear(); for entity in clear_zeroverse_scenes.iter() { - commands.entity(entity).despawn_recursive(); + commands.entity(entity).despawn(); } setup_lighting( diff --git a/src/scene/room.rs b/src/scene/room.rs index c34d14e..178c9a1 100644 --- a/src/scene/room.rs +++ b/src/scene/room.rs @@ -334,7 +334,7 @@ fn setup_scene( } }); - load_event.send(SceneLoadedEvent); + load_event.write(SceneLoadedEvent); } @@ -357,7 +357,7 @@ fn regenerate_scene( regenerate_events.clear(); for entity in clear_zeroverse_scenes.iter() { - commands.entity(entity).despawn_recursive(); + commands.entity(entity).despawn(); } setup_lighting( diff --git a/src/scene/semantic_room.rs b/src/scene/semantic_room.rs index ae19076..2450a7c 100644 --- a/src/scene/semantic_room.rs +++ b/src/scene/semantic_room.rs @@ -1,3 +1,5 @@ +use std::collections::HashMap; + use bevy::{ prelude::*, render::render_resource::Face, @@ -20,6 +22,7 @@ use crate::{ }, RegenerateSceneEvent, RotationAugment, + SceneAabbNode, SceneLoadedEvent, ZeroverseScene, ZeroverseSceneRoot, @@ -68,6 +71,10 @@ pub struct ZeroverseSemanticRoomSettings { pub human_count: CountSampler, pub human_settings: ZeroversePrimitiveSettings, // TODO: support parametric SMPL morphing pub table_settings: ZeroversePrimitiveSettings, // TODO: table scale relative to room scale + pub window_probability: f32, + pub window_size_min: Vec2, + pub window_size_max: Vec2, + pub neighborhood_depth: usize, } impl Default for ZeroverseSemanticRoomSettings { @@ -154,6 +161,10 @@ impl Default for ZeroverseSemanticRoomSettings { smooth_normals_probability: 0.0, ..default() }, + window_probability: 0.25, + window_size_min: Vec2::new(0.25, 0.25), + window_size_max: Vec2::new(0.75, 0.75), + neighborhood_depth: 2, } } } @@ -192,182 +203,197 @@ fn check_aabb_collision( } -fn setup_scene( - mut commands: Commands, - mut load_event: EventWriter, - room_settings: Res, - scene_settings: Res, +const CLEARANCE: f32 = 1e-4; + +#[allow(clippy::too_many_arguments)] +fn spawn_face( + commands: &mut ChildSpawnerCommands, + room_settings: &ZeroverseSemanticRoomSettings, + origin: Vec3, + basis: Quat, + half_extents: Vec3, + cull_mode: Option, + invert_normals: bool, + label: SemanticLabel, + name: &str, + wall: bool, ) { let mut rng = rand::thread_rng(); - let room_scale = room_settings.room_size.sample(); + let base = ZeroversePrimitiveSettings { + cull_mode, + invert_normals, + available_types: vec![ZeroversePrimitives::Plane], + components: CountSampler::Exact(1), + wireframe_probability: 0.0, + noise_probability: 0.0, + cast_shadows: false, + rotation_sampler: RotationSampler::Exact(basis), + ..default() + }; + + let mut spawn_segment = |pos: Vec3, half_size: Vec3, suffix: &str| { + commands.spawn(( + ZeroversePrimitiveSettings { + position_sampler: PositionSampler::Exact { position: origin + basis * pos }, + scale_sampler: ScaleSampler::Exact(half_size), + ..base.clone() + }, + Name::new(format!("{name}{suffix}")), + label.clone(), + )); + }; - // TODO: set global Y rotation to prevent wall aligned plucker embeddings + let make_window = wall && rng.gen_bool(room_settings.window_probability as f64); - commands.spawn(( - Name::new("room"), - RotationAugment, - ZeroverseSceneRoot, - ZeroverseScene, - )) - .with_children(|commands| { - {// outer walls - let base_plane_settings = ZeroversePrimitiveSettings { - cull_mode: Some(Face::Front), - available_types: vec![ZeroversePrimitives::Plane], - components: CountSampler::Exact(1), - wireframe_probability: 0.0, - noise_probability: 0.0, - cast_shadows: false, - position_sampler: PositionSampler::Exact { - position: Vec3::ZERO, - }, - rotation_sampler: RotationSampler::Identity, - scale_sampler: ScaleSampler::Exact(Vec3::ONE), - ..default() - }; + if !make_window { + spawn_segment(Vec3::ZERO, half_extents, ""); + return; + } - // top plane - let top_plane_settings = ZeroversePrimitiveSettings { - invert_normals: true, - position_sampler: PositionSampler::Exact { - position: Vec3::new(0.0, room_scale.y, 0.0), - }, - scale_sampler: ScaleSampler::Exact(Vec3::new(room_scale.x / 2.0, 1.0, room_scale.z / 2.0)), - ..base_plane_settings.clone() - }; - // bottom plane - let bottom_plane_settings = ZeroversePrimitiveSettings { - cull_mode: Some(Face::Back), - position_sampler: PositionSampler::Exact { - position: Vec3::new(0.0, 0.0, 0.0), - }, - scale_sampler: ScaleSampler::Exact(Vec3::new(room_scale.x / 2.0, 1.0, room_scale.z / 2.0)), - ..base_plane_settings.clone() - }; + let hx = half_extents.x; + let hz = half_extents.z; - // front plane - let front_plane_settings = ZeroversePrimitiveSettings { - invert_normals: true, - position_sampler: PositionSampler::Exact { - position: Vec3::new(0.0, room_scale.y / 2.0, room_scale.z / 2.0), - }, - rotation_sampler: RotationSampler::Exact(Quat::from_rotation_x(90.0_f32.to_radians())), - scale_sampler: ScaleSampler::Exact(Vec3::new(room_scale.x / 2.0, 1.0, room_scale.y / 2.0)), - ..base_plane_settings.clone() - }; + let max_w_frac = 1.0 - CLEARANCE / hx; + let max_h_frac = 1.0 - CLEARANCE / hz; - // back plane - let back_plane_settings = ZeroversePrimitiveSettings { - cull_mode: Some(Face::Back), - position_sampler: PositionSampler::Exact { - position: Vec3::new(0.0, room_scale.y / 2.0, -room_scale.z / 2.0), - }, - rotation_sampler: RotationSampler::Exact(Quat::from_rotation_x(90.0_f32.to_radians())), - scale_sampler: ScaleSampler::Exact(Vec3::new(room_scale.x / 2.0, 1.0, room_scale.y / 2.0)), - ..base_plane_settings.clone() - }; + let min_w_frac = room_settings.window_size_min.x.clamp(0.0, max_w_frac); + let max_w_frac = room_settings.window_size_max.x.clamp(min_w_frac, max_w_frac); + let min_h_frac = room_settings.window_size_min.y.clamp(0.0, max_h_frac); + let max_h_frac = room_settings.window_size_max.y.clamp(min_h_frac, max_h_frac); - // left plane - let left_plane_settings = ZeroversePrimitiveSettings { - invert_normals: true, - position_sampler: PositionSampler::Exact { - position: Vec3::new(-room_scale.x / 2.0, room_scale.y / 2.0, 0.0), - }, - rotation_sampler: RotationSampler::Exact(Quat::from_rotation_z(90.0_f32.to_radians())), - scale_sampler: ScaleSampler::Exact(Vec3::new(room_scale.y / 2.0, 1.0, room_scale.z / 2.0)), - ..base_plane_settings.clone() - }; + let w_frac = rng.gen_range(min_w_frac..=max_w_frac); + let h_frac = rng.gen_range(min_h_frac..=max_h_frac); - // right plane - let right_plane_settings = ZeroversePrimitiveSettings { - cull_mode: Some(Face::Back), - position_sampler: PositionSampler::Exact { - position: Vec3::new(room_scale.x / 2.0, room_scale.y / 2.0, 0.0), - }, - rotation_sampler: RotationSampler::Exact(Quat::from_rotation_z(90.0_f32.to_radians())), - scale_sampler: ScaleSampler::Exact(Vec3::new(room_scale.y / 2.0, 1.0, room_scale.z / 2.0)), - ..base_plane_settings.clone() - }; + let half_win_w = hx * w_frac; + let half_win_h = hz * h_frac; - commands.spawn(( - top_plane_settings, - Name::new("room_top_plane"), - SemanticLabel::Ceiling, - )); + let win_cx = rng.gen_range((-hx + half_win_w + CLEARANCE)..=(hx - half_win_w - CLEARANCE)); + let win_cz = rng.gen_range((-hz + half_win_h + CLEARANCE)..=(hz - half_win_h - CLEARANCE)); - commands.spawn(( - bottom_plane_settings, - Name::new("room_bottom_plane"), - SemanticLabel::Floor, - )); - commands.spawn(( - front_plane_settings, - Name::new("room_front_plane"), - SemanticLabel::Wall, - )); + let top_half_h = (hz - (win_cz + half_win_h)) / 2.0; + spawn_segment( + Vec3::new(0.0, 0.0, win_cz + half_win_h + top_half_h), + Vec3::new(hx, half_extents.y, top_half_h), + "_top", + ); - commands.spawn(( - back_plane_settings, - Name::new("room_back_plane"), - SemanticLabel::Wall, - )); + let bottom_half_h = (win_cz - half_win_h + hz) / 2.0; + spawn_segment( + Vec3::new(0.0, 0.0, win_cz - half_win_h - bottom_half_h), + Vec3::new(hx, half_extents.y, bottom_half_h), + "_bottom", + ); - commands.spawn(( - left_plane_settings, - Name::new("room_left_plane"), - SemanticLabel::Wall, - )); - commands.spawn(( - right_plane_settings, - Name::new("room_right_plane"), - SemanticLabel::Wall, - )); - } + let left_half_w = (win_cx - half_win_w + hx) / 2.0; + spawn_segment( + Vec3::new(-hx + left_half_w, 0.0, win_cz), + Vec3::new(left_half_w, half_extents.y, half_win_h), + "_left", + ); - let mut aabb_colliders: Vec<(Vec3, Vec3)> = Vec::new(); + let right_half_w = (hx - (win_cx + half_win_w)) / 2.0; + spawn_segment( + Vec3::new(hx - right_half_w, 0.0, win_cz), + Vec3::new(right_half_w, half_extents.y, half_win_h), + "_right", + ); +} - { // table - let mut table_scale = room_settings.table_settings.scale_sampler.sample(); - let room_half_x = room_scale.x / 2.0; - let room_half_z = room_scale.z / 2.0; +// TODO: support bailing on room spawn if required room features are too large (e.g. no door) +fn spawn_room( + commands: &mut ChildSpawnerCommands, + room_scale: &Vec3, + room_settings: &ZeroverseSemanticRoomSettings, +) { + let mut rng = rand::thread_rng(); - let max_half_table_scale_x = room_half_x - room_settings.table_wall_padding; - let max_half_table_scale_z = room_half_z - room_settings.table_wall_padding; + {// outer walls + let hx = room_scale.x / 2.0; + let hy = room_scale.y; + let hz = room_scale.z / 2.0; + + let faces = [ + (Vec3::new(0.0, hy, 0.0), Quat::IDENTITY, Vec3::new(hx, 1.0, hz), Some(Face::Front), true, SemanticLabel::Ceiling, "top", false), + (Vec3::new(0.0, 0.0, 0.0), Quat::IDENTITY, Vec3::new(hx, 1.0, hz), Some(Face::Back), false, SemanticLabel::Floor, "bottom", false), + (Vec3::new(0.0, hy / 2.0, hz), Quat::from_rotation_x(90_f32.to_radians()), Vec3::new(hx, 1.0, hy / 2.0), Some(Face::Front), true, SemanticLabel::Wall, "front", true), + (Vec3::new(0.0, hy / 2.0, -hz),Quat::from_rotation_x(90_f32.to_radians()), Vec3::new(hx, 1.0, hy / 2.0), Some(Face::Back), false, SemanticLabel::Wall, "back", true), + (Vec3::new(-hx, hy / 2.0, 0.0),Quat::from_rotation_z(90_f32.to_radians()), Vec3::new(hy / 2.0, 1.0, hz), Some(Face::Front), true, SemanticLabel::Wall, "left", true), + (Vec3::new(hx, hy / 2.0, 0.0), Quat::from_rotation_z(90_f32.to_radians()), Vec3::new(hy / 2.0, 1.0, hz), Some(Face::Back), false, SemanticLabel::Wall, "right", true), + ]; + + faces.iter().for_each(|( + origin, + basis, + half, + cull, + invert, + label, + name, + wall, + )| { + // TODO: if spawning adjacent room, use the same wall + spawn_face( + commands, + room_settings, + *origin, + *basis, + *half, + *cull, + *invert, + label.clone(), + name, + *wall, + ); + }); + } - let max_half_table_scale_x = if max_half_table_scale_x > 0.0 { - max_half_table_scale_x - } else { - 0.1 - }; + let mut aabb_colliders: Vec<(Vec3, Vec3)> = Vec::new(); - let max_half_table_scale_z = if max_half_table_scale_z > 0.0 { - max_half_table_scale_z - } else { - 0.1 - }; + { // table + let mut table_scale = room_settings.table_settings.scale_sampler.sample(); - table_scale.x = table_scale.x.min(max_half_table_scale_x * 2.0); - table_scale.z = table_scale.z.min(max_half_table_scale_z * 2.0); + let room_half_x = room_scale.x / 2.0; + let room_half_z = room_scale.z / 2.0; - let half_table_scale = table_scale * 0.5; - let height_offset = Vec3::new( - 0.0, - table_scale.y / 4.0, - 0.0, - ); + let max_half_table_scale_x = room_half_x - room_settings.table_wall_padding; + let max_half_table_scale_z = room_half_z - room_settings.table_wall_padding; - let center_sampler = PositionSampler::Cube { - extents: Vec3::new( - room_half_x - room_settings.table_wall_padding - half_table_scale.x, - 0.00001, - room_half_z - room_settings.table_wall_padding - half_table_scale.z, - ), - }; + let max_half_table_scale_x = if max_half_table_scale_x > 0.0 { + max_half_table_scale_x + } else { + 0.1 + }; + + let max_half_table_scale_z = if max_half_table_scale_z > 0.0 { + max_half_table_scale_z + } else { + 0.1 + }; + + table_scale.x = table_scale.x.min(max_half_table_scale_x * 2.0); + table_scale.z = table_scale.z.min(max_half_table_scale_z * 2.0); + + let half_table_scale = table_scale * 0.5; + let height_offset = Vec3::new( + 0.0, + table_scale.y / 4.0, + 0.0, + ); + + let center_sampler = PositionSampler::Cube { + extents: Vec3::new( + room_half_x - room_settings.table_wall_padding - half_table_scale.x, + 0.00001, + room_half_z - room_settings.table_wall_padding - half_table_scale.z, + ), + }; + + if center_sampler.is_valid() { let position = center_sampler.sample() + height_offset; aabb_colliders.push((position, table_scale)); @@ -386,25 +412,27 @@ fn setup_scene( SemanticLabel::Table, )); } + } - { // chairs - let chair_scale = room_settings.chair_settings.scale_sampler.sample(); - let chair_scale = Vec3::new(chair_scale.x, chair_scale.y, chair_scale.x); - let center_sampler = PositionSampler::Cube { - extents: Vec3::new( - room_scale.x / 2.0 - room_settings.chair_wall_padding - chair_scale.x / 2.0, - 0.00001, - room_scale.z / 2.0 - room_settings.chair_wall_padding - chair_scale.z / 2.0, - ), - }; - let chair_scale_sampler = ScaleSampler::Exact(chair_scale); + { // chairs + let chair_scale = room_settings.chair_settings.scale_sampler.sample(); + let chair_scale = Vec3::new(chair_scale.x, chair_scale.y, chair_scale.x); + let center_sampler = PositionSampler::Cube { + extents: Vec3::new( + room_scale.x / 2.0 - room_settings.chair_wall_padding - chair_scale.x / 2.0, + 0.00001, + room_scale.z / 2.0 - room_settings.chair_wall_padding - chair_scale.z / 2.0, + ), + }; + let chair_scale_sampler = ScaleSampler::Exact(chair_scale); - let height_offset = Vec3::new( - 0.0, - chair_scale.y / 4.0, - 0.0, - ); + let height_offset = Vec3::new( + 0.0, + chair_scale.y / 4.0, + 0.0, + ); + if center_sampler.is_valid() { for _ in 0..room_settings.chair_count.sample() { let mut position = center_sampler.sample() + height_offset; @@ -435,27 +463,30 @@ fn setup_scene( )); } } + } - // TODO: tv, whiteboard, door, rug - { // door - let face = rng.gen_range(0..4); - let mut door_scale = room_settings.door_settings.scale_sampler.sample(); - - let hw = door_scale.x / 2.0; - let (x_offset, z_offset) = match face { - 0 => (0.0, hw), - 1 => (0.0, hw), - 2 => (hw, 0.0), - 3 => (hw, 0.0), - _ => unreachable!(), - }; - - let perimeter = Vec3::new( - room_scale.x / 2.0 - 0.001 - x_offset, - 0.0, - room_scale.z / 2.0 - 0.001 - z_offset, - ); + // TODO: tv, whiteboard, door, rug + { // door + let face = rng.gen_range(0..4); + let mut door_scale = room_settings.door_settings.scale_sampler.sample(); + + let hw = door_scale.x / 2.0; + let (x_offset, z_offset) = match face { + 0 => (0.0, hw), + 1 => (0.0, hw), + 2 => (hw, 0.0), + 3 => (hw, 0.0), + _ => unreachable!(), + }; + + let perimeter = Vec3::new( + room_scale.x / 2.0 - 0.001 - x_offset, + 0.0, + room_scale.z / 2.0 - 0.001 - z_offset, + ); + let perimeter_is_valid = perimeter.x > 0.0 && perimeter.z > 0.0; + if perimeter_is_valid { let (x, z) = match face { 0 => (-perimeter.x / 2.0, rng.gen_range(-perimeter.z / 2.0..perimeter.z / 2.0)), 1 => (perimeter.x / 2.0, rng.gen_range(-perimeter.z / 2.0..perimeter.z / 2.0)), @@ -487,54 +518,218 @@ fn setup_scene( SemanticLabel::Door, )); } + } - { // humans - for _ in 0..room_settings.human_count.sample() { - let human_scale = room_settings.human_settings.scale_sampler.sample(); - let human_scale = Vec3::new(human_scale.x, human_scale.y, human_scale.x); - let center_sampler = PositionSampler::Cube { - extents: Vec3::new( - room_scale.x / 2.0 - room_settings.human_wall_padding - human_scale.x / 2.0, - 0.00001, - room_scale.z / 2.0 - room_settings.human_wall_padding - human_scale.z / 2.0, - ), - }; - let human_scale_sampler = ScaleSampler::Exact(human_scale); + { // humans + for _ in 0..room_settings.human_count.sample() { + let human_scale = room_settings.human_settings.scale_sampler.sample(); + let human_scale = Vec3::new(human_scale.x, human_scale.y, human_scale.x); + let center_sampler = PositionSampler::Cube { + extents: Vec3::new( + room_scale.x / 2.0 - room_settings.human_wall_padding - human_scale.x / 2.0, + 0.00001, + room_scale.z / 2.0 - room_settings.human_wall_padding - human_scale.z / 2.0, + ), + }; - let height_offset = Vec3::new( - 0.0, - 0.0, - 0.0, - ); + if !center_sampler.is_valid() { + continue; + } - let mut position = center_sampler.sample() + height_offset; + let human_scale_sampler = ScaleSampler::Exact(human_scale); - let mut max_attempts = 100; - while check_aabb_collision(position, human_scale, &aabb_colliders) && max_attempts > 0 { - position = center_sampler.sample() + height_offset; - max_attempts -= 1; - } + let height_offset = Vec3::new( + 0.0, + 0.0, + 0.0, + ); - if max_attempts == 0 { - continue; - } + let mut position = center_sampler.sample() + height_offset; - aabb_colliders.push((position, human_scale)); + let mut max_attempts = 100; + while check_aabb_collision(position, human_scale, &aabb_colliders) && max_attempts > 0 { + position = center_sampler.sample() + height_offset; + max_attempts -= 1; + } - commands.spawn(( - ZeroversePrimitiveSettings { - position_sampler: PositionSampler::Exact { - position, - }, - scale_sampler: human_scale_sampler.clone(), - ..room_settings.human_settings.clone() + if max_attempts == 0 { + continue; + } + + aabb_colliders.push((position, human_scale)); + + commands.spawn(( + ZeroversePrimitiveSettings { + position_sampler: PositionSampler::Exact { + position, }, - Transform::from_translation(position), - Name::new("human"), - SemanticLabel::Human, - )); + scale_sampler: human_scale_sampler.clone(), + ..room_settings.human_settings.clone() + }, + Transform::from_translation(position), + Name::new("human"), + SemanticLabel::Human, + )); + } + } +} + + +const MAX_SHRINK_ITERS: usize = 8; +const MIN_FRACTION: f32 = 0.20; +const ROOM_GAP: f32 = 0.05; + +#[inline] +fn overlaps(a_pos: Vec3, a_scale: Vec3, b_pos: Vec3, b_scale: Vec3) -> bool { + let dx = (a_pos.x - b_pos.x).abs(); + let dz = (a_pos.z - b_pos.z).abs(); + dx + ROOM_GAP < (a_scale.x + b_scale.x) * 0.5 && + dz + ROOM_GAP < (a_scale.z + b_scale.z) * 0.5 +} + +#[allow(clippy::too_many_arguments)] +fn spawn_room_rec( + commands: &mut ChildSpawnerCommands, + coord: (i32, i32), + parent_coord: (i32, i32), + dir: (i32, i32), + depth_left: i32, + base_scale: Vec3, + rooms: &mut HashMap<(i32, i32), (Vec3, Vec3)>, + settings: &ZeroverseSemanticRoomSettings, +) { + let mut my_scale = settings.room_size.sample(); + my_scale.y = base_scale.y; + + let update_pos = |scale: Vec3| { + let (parent_pos, parent_scale) = rooms[&parent_coord]; + let mut p = parent_pos; + + if dir.0 != 0 { + p.x += dir.0 as f32 * ((parent_scale.x + scale.x) * 0.5 + ROOM_GAP); + } + if dir.1 != 0 { + p.z += dir.1 as f32 * ((parent_scale.z + scale.z) * 0.5 + ROOM_GAP); + } + p + }; + let mut my_pos = update_pos(my_scale); + + // TODO: fix overlaps (at depth >2, rooms overlap more frequently) + for _ in 0..MAX_SHRINK_ITERS { + let mut shrink_x: f32 = 0.0; + let mut shrink_z: f32 = 0.0; + + for &(other_pos, other_scale) in rooms.values() { + if overlaps(my_pos, my_scale, other_pos, other_scale) { + let dx = (my_pos.x - other_pos.x).abs(); + let dz = (my_pos.z - other_pos.z).abs(); + shrink_x = shrink_x.max((my_scale.x + other_scale.x) * 0.5 - dx + ROOM_GAP); + shrink_z = shrink_z.max((my_scale.z + other_scale.z) * 0.5 - dz + ROOM_GAP); + } + } + + if shrink_x == 0.0 && shrink_z == 0.0 { + break; + } + + if shrink_x > 0.0 { + my_scale.x = (my_scale.x - shrink_x).max(base_scale.x * MIN_FRACTION); + } + if shrink_z > 0.0 { + my_scale.z = (my_scale.z - shrink_z).max(base_scale.z * MIN_FRACTION); + } + + my_pos = update_pos(my_scale); + } + + rooms.insert(coord, (my_pos, my_scale)); + commands + .spawn(( + Name::new(format!("room_{}_{}", coord.0, coord.1)), + Transform::from_translation(my_pos), + InheritedVisibility::default(), + Visibility::default(), + )) + .with_children(|c| spawn_room(c, &my_scale, settings)); + + if depth_left > 0 { + for &(sx, sz) in &[(1, 0), (-1, 0), (0, 1), (0, -1)] { + let next = (coord.0 + sx, coord.1 + sz); + if !rooms.contains_key(&next) { + spawn_room_rec( + commands, + next, + coord, + (sx, sz), + depth_left - 1, + base_scale, + rooms, + settings, + ); } } + } +} + +// TODO: support similar windows across adjacent room faces +fn spawn_room_neighborhood( + commands: &mut ChildSpawnerCommands, + base_scale: &Vec3, + settings: &ZeroverseSemanticRoomSettings, +) { + commands + .spawn(( + InheritedVisibility::default(), + Name::new("room"), + SceneAabbNode, + Transform::default(), + Visibility::default(), + )) + .with_children(|commands| { + spawn_room(commands, base_scale, settings); + }); + + let mut rooms: HashMap<(i32, i32), (Vec3, Vec3)> = HashMap::new(); + rooms.insert((0, 0), (Vec3::ZERO, *base_scale)); + + for &(dx, dz) in &[(1, 0), (-1, 0), (0, 1), (0, -1)] { + spawn_room_rec( + commands, + (dx, dz), + (0, 0), + (dx, dz), + settings.neighborhood_depth as i32 - 1, + *base_scale, + &mut rooms, + settings, + ); + } +} + + +fn setup_scene( + mut commands: Commands, + mut load_event: EventWriter, + room_settings: Res, + scene_settings: Res, +) { + let room_scale = room_settings.room_size.sample(); + + // TODO: set global Y rotation to prevent wall aligned plucker embeddings + + commands.spawn(( + Name::new("rooms"), + RotationAugment, + ZeroverseSceneRoot, + ZeroverseScene, + )) + .with_children(|commands| { + spawn_room_neighborhood( + commands, + &room_scale, + &room_settings, + ); { // cameras let size: Vec3 = Vec3::new( @@ -608,7 +803,7 @@ fn setup_scene( } }); - load_event.send(SceneLoadedEvent); + load_event.write(SceneLoadedEvent); } @@ -641,7 +836,7 @@ fn regenerate_scene( *recover_from_wait = false; for entity in clear_zeroverse_scenes.iter() { - commands.entity(entity).despawn_recursive(); + commands.entity(entity).despawn(); } setup_lighting( diff --git a/src/wireframe/mod.rs b/src/wireframe/mod.rs index 9c8b584..605e829 100644 --- a/src/wireframe/mod.rs +++ b/src/wireframe/mod.rs @@ -1,6 +1,6 @@ use crate::{Material, MaterialPipeline, MaterialPipelineKey, MaterialPlugin}; use bevy_app::{Plugin, Startup, Update}; -use bevy_asset::{load_internal_asset, Asset, Assets, Handle}; +use bevy_asset::{load_internal_asset, weak_handle, Asset, Assets, Handle}; use bevy_ecs::prelude::*; use bevy_reflect::{std_traits::ReflectDefault, Reflect, TypePath}; use bevy_render::{ @@ -15,7 +15,7 @@ use bevy_render::{ // TODO: strip out global wireframe config -pub const WIREFRAME_SHADER_HANDLE: Handle = Handle::weak_from_u128(571204738553); +pub const WIREFRAME_SHADER_HANDLE: Handle = weak_handle!("ab62b4af-d81b-40e8-855d-af1b2f669b2c"); /// A [`Plugin`] that draws wireframes. /// @@ -156,7 +156,7 @@ fn apply_wireframe_material( global_material: Res, ) { for e in removed_wireframes.read().chain(no_wireframes.iter()) { - if let Some(mut commands) = commands.get_entity(e) { + if let Ok(mut commands) = commands.get_entity(e) { commands.remove::>(); } }