From 5c171d1ebe8c8cf60f6828128aeef5061e0957b4 Mon Sep 17 00:00:00 2001 From: Schmarni Date: Sun, 7 Jul 2024 16:55:31 +0200 Subject: [PATCH 01/13] update d3d12 and fix readme Signed-off-by: Schmarni --- README.md | 2 +- crates/bevy_openxr/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8326e68..9fac103 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ A crate for adding openxr (and in the future webxr) support to Bevy. -To see it in action run the example in `crates/bevy_openxr/examples` with `cargo run -p bevy_openxr --example 3d_scene` +To see it in action run the example in `crates/bevy_openxr/examples` with `cargo run -p bevy_mod_openxr --example 3d_scene` ## Discord diff --git a/crates/bevy_openxr/Cargo.toml b/crates/bevy_openxr/Cargo.toml index 389478c..83b9eb0 100644 --- a/crates/bevy_openxr/Cargo.toml +++ b/crates/bevy_openxr/Cargo.toml @@ -42,4 +42,4 @@ wgpu = { version = "0.19.3", features = ["vulkan-portability"] } [target.'cfg(target_family = "windows")'.dependencies] openxr = { version = "0.18.0", features = ["mint", "static"] } winapi = { version = "0.3.9", optional = true } -d3d12 = { version = "0.19", features = ["libloading"], optional = true } +d3d12 = { version = "0.20", features = ["libloading"], optional = true } From 7320ae8dac457178254eb07bd1dff773290cfae6 Mon Sep 17 00:00:00 2001 From: Schmarni Date: Wed, 20 Nov 2024 10:04:49 +0100 Subject: [PATCH 02/13] update to bevy 0.15 rc Signed-off-by: Schmarni --- Cargo.lock | 1588 ++++++++++------- Cargo.toml | 9 +- crates/bevy_openxr/Cargo.toml | 24 +- crates/bevy_openxr/examples/3d_scene.rs | 57 +- crates/bevy_openxr/examples/actions.rs | 32 +- .../bevy_openxr/examples/android/Cargo.toml | 4 +- .../bevy_openxr/examples/android/src/lib.rs | 33 +- crates/bevy_openxr/examples/overlay.rs | 39 +- crates/bevy_openxr/examples/raw_actions.rs | 62 +- crates/bevy_openxr/examples/sessions.rs | 30 +- crates/bevy_openxr/examples/tracking_utils.rs | 77 +- .../bevy_openxr/examples/transform_utils.rs | 74 +- .../bevy_openxr/src/openxr/action_binding.rs | 4 +- .../src/openxr/action_set_attaching.rs | 2 +- .../src/openxr/features/handtracking.rs | 8 +- crates/bevy_openxr/src/openxr/graphics.rs | 31 +- .../bevy_openxr/src/openxr/graphics/vulkan.rs | 60 +- .../bevy_openxr/src/openxr/helper_traits.rs | 26 +- crates/bevy_openxr/src/openxr/init.rs | 21 +- .../bevy_openxr/src/openxr/layer_builder.rs | 14 +- crates/bevy_openxr/src/openxr/mod.rs | 4 +- crates/bevy_openxr/src/openxr/render.rs | 18 +- crates/bevy_openxr/src/openxr/resources.rs | 10 +- crates/bevy_openxr/src/openxr/spaces.rs | 28 +- crates/bevy_openxr/src/openxr/types.rs | 2 +- crates/bevy_webxr/Cargo.toml | 8 +- crates/bevy_xr/src/actions.rs | 4 +- crates/bevy_xr/src/camera.rs | 16 +- crates/bevy_xr/src/hands.rs | 15 +- crates/bevy_xr/src/session.rs | 6 +- crates/bevy_xr/src/types.rs | 28 +- crates/bevy_xr_utils/Cargo.toml | 6 +- crates/bevy_xr_utils/src/hand_gizmos.rs | 6 +- crates/bevy_xr_utils/src/tracking_utils.rs | 71 +- 34 files changed, 1338 insertions(+), 1079 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fcf9449..34fb32f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,33 +2,17 @@ # It is not intended for manual editing. version = 3 -[[package]] -name = "ab_glyph" -version = "0.2.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79faae4620f45232f599d9bc7b290f88247a0834162c4495ab2f02d60004adfb" -dependencies = [ - "ab_glyph_rasterizer", - "owned_ttf_parser", -] - -[[package]] -name = "ab_glyph_rasterizer" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" - [[package]] name = "accesskit" -version = "0.14.0" +version = "0.16.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cf780eb737f2d4a49ffbd512324d53ad089070f813f7be7f99dbd5123a7f448" +checksum = "99b76d84ee70e30a4a7e39ab9018e2b17a6a09e31084176cc7c0b2dec036ba45" [[package]] name = "accesskit_consumer" -version = "0.22.0" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bdfa1638ddd6eb9c752def95568df8b3ad832df252e9156d2eb783b201ca8a9" +checksum = "7a12dc159d52233c43d9fe5415969433cbdd52c3d6e0df51bda7d447427b9986" dependencies = [ "accesskit", "immutable-chunkmap", @@ -36,9 +20,9 @@ dependencies = [ [[package]] name = "accesskit_macos" -version = "0.15.0" +version = "0.17.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c236a84ff1111defc280cee755eaa953d0b24398786851b9d28322c6d3bb1ebd" +checksum = "bfc6c1ecd82053d127961ad80a8beaa6004fb851a3a5b96506d7a6bd462403f6" dependencies = [ "accesskit", "accesskit_consumer", @@ -50,22 +34,23 @@ dependencies = [ [[package]] name = "accesskit_windows" -version = "0.20.0" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d7f43d24b16b3e76bef248124fbfd2493c3a9860edb5aae1010c890e826de5e" +checksum = "974e96c347384d9133427167fb8a58c340cb0496988dacceebdc1ed27071023b" dependencies = [ "accesskit", "accesskit_consumer", "paste", "static_assertions", - "windows 0.54.0", + "windows 0.58.0", + "windows-core 0.58.0", ] [[package]] name = "accesskit_winit" -version = "0.20.4" +version = "0.22.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "755535e6bf711a42dac28b888b884b10fc00ff4010d9d3bd871c5f5beae5aa78" +checksum = "aea3522719f1c44564d03e9469a8e2f3a98b3a8a880bd66d0789c6b9c4a669dd" dependencies = [ "accesskit", "accesskit_macos", @@ -113,6 +98,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", + "const-random", "getrandom", "once_cell", "version_check", @@ -174,7 +160,7 @@ dependencies = [ "ndk-context", "ndk-sys 0.6.0+11769913", "num_enum", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -198,6 +184,12 @@ dependencies = [ "libc", ] +[[package]] +name = "anyhow" +version = "1.0.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" + [[package]] name = "approx" version = "0.5.1" @@ -236,11 +228,22 @@ checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" [[package]] name = "ash" -version = "0.37.3+1.3.251" +version = "0.38.0+1.3.281" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e9c3835d686b0a6084ab4234fcd1b07dbf6e4767dce60874b12356a25ecd4a" +checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" dependencies = [ - "libloading 0.7.4", + "libloading", +] + +[[package]] +name = "assert_type_match" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f548ad2c4031f2902e3edc1f29c29e835829437de49562d8eb5dc5584d3a1043" +dependencies = [ + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -289,6 +292,25 @@ dependencies = [ "futures-lite", ] +[[package]] +name = "async-io" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" +dependencies = [ + "async-lock", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite", + "parking", + "polling", + "rustix", + "slab", + "tracing", + "windows-sys 0.59.0", +] + [[package]] name = "async-lock" version = "3.4.0" @@ -312,6 +334,12 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" +[[package]] +name = "atomicow" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "467163b50876d3a4a44da5f4dbd417537e522fc059ede8d518d57941cfb3d745" + [[package]] name = "autocfg" version = "1.3.0" @@ -347,31 +375,33 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "bevy" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8ece0d8dde51890fb52dcba5b04fd1c657617a4022908c327b2d6e83d173a32" +checksum = "ac8e850ce5420a008f058bc0edffad2c10480220708678d91df013854ba48624" dependencies = [ "bevy_internal", ] [[package]] name = "bevy_a11y" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82d84e0ae7155afa21c4926fb8b89ebe0cbd66239ac817fdb834025327c4089b" +checksum = "5443a6ed74462023305a0dd799a88c5581df05f230ed9c6dc7debd92231aae7c" dependencies = [ "accesskit", "bevy_app", "bevy_derive", "bevy_ecs", + "bevy_reflect", ] [[package]] name = "bevy_animation" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abec61c2d9d19329d8d9f0d7f1ce0188f6ed2c6d74d90412b238efc38c7d7794" +checksum = "9e02b9d777a4d1f71e480dcdc932c89b945a8945b2894397e52c30b543828a94" dependencies = [ + "bevy_animation_derive", "bevy_app", "bevy_asset", "bevy_color", @@ -387,20 +417,33 @@ dependencies = [ "bevy_transform", "bevy_utils", "blake3", - "fixedbitset 0.5.7", + "derive_more", + "either", "petgraph", "ron", "serde", - "thiserror", + "smallvec", "thread_local", "uuid", ] [[package]] -name = "bevy_app" -version = "0.14.1" +name = "bevy_animation_derive" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0af99549f5de61cc91c8c23303b13aa07f97b73fbace39695dee0a0a32cec9d4" +checksum = "5d1dbda00d5c940a96993ca366cb489b00a3432d387b885442d391f7c420838b" +dependencies = [ + "bevy_macro_utils", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "bevy_app" +version = "0.15.0-rc.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f037ca5cd5fd455ec110cb17d096e842cad7230c3d489f2434c3022beff5583d" dependencies = [ "bevy_derive", "bevy_ecs", @@ -408,38 +451,44 @@ dependencies = [ "bevy_tasks", "bevy_utils", "console_error_panic_hook", + "ctrlc", + "derive_more", "downcast-rs", - "thiserror", "wasm-bindgen", "web-sys", ] [[package]] name = "bevy_asset" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6533d17f13b44ea4fb5177f83b0900269ed13c0fd45772ccffd19a69980647ec" +checksum = "cdf65a1e047fb303c72bc3dc524ad0fc6d50858759934e1c34ba77452375e8f4" dependencies = [ "async-broadcast", "async-fs", "async-lock", + "atomicow", "bevy_app", "bevy_asset_macros", "bevy_ecs", "bevy_reflect", "bevy_tasks", "bevy_utils", - "bevy_winit", + "bevy_window", + "bitflags 2.6.0", "blake3", "crossbeam-channel", + "derive_more", + "disqualified", "downcast-rs", + "either", "futures-io", "futures-lite", "js-sys", "parking_lot", "ron", "serde", - "thiserror", + "stackfuture", "uuid", "wasm-bindgen", "wasm-bindgen-futures", @@ -448,21 +497,21 @@ dependencies = [ [[package]] name = "bevy_asset_macros" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74b0e132a89e254c0f5c8bc8deebb0f2490f5662f4aa2215a6996701446d6a7b" +checksum = "850737671990e7d73d0cff461e246347d8207ea7fc8468e4fa0d388c30c96ac3" dependencies = [ "bevy_macro_utils", "proc-macro2", "quote", - "syn 2.0.77", + "syn", ] [[package]] name = "bevy_audio" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3050cb7244560313800b284e4b5eafcf91e833464e44d8407b20ec6c65974fc" +checksum = "78b0af3841b62e88c3b965e3b38412b5a28476249bf05ef2d0edab1b81b5e498" dependencies = [ "bevy_app", "bevy_asset", @@ -479,24 +528,24 @@ dependencies = [ [[package]] name = "bevy_color" -version = "0.14.2" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82c031f121b8d72e7637c94ef139097613bd32935784d36728f83e77cfdf26f4" +checksum = "2d916eabd2b5ed453e739b075b5cc9a07ff04d69b231974e6b2a050a38cc7db5" dependencies = [ "bevy_math", "bevy_reflect", "bytemuck", + "derive_more", "encase", "serde", - "thiserror", - "wgpu-types 0.20.0", + "wgpu-types", ] [[package]] name = "bevy_core" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccc7118a2865267136afb5e6a2c0aed30994e522f298b2ba0b088878e6ddf59" +checksum = "01967cdcbabb12beadc9fdebfb94edd629390b5e4ad0ad36602434363da9a24b" dependencies = [ "bevy_app", "bevy_ecs", @@ -508,9 +557,9 @@ dependencies = [ [[package]] name = "bevy_core_pipeline" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "559ad1dc48c3fa6bbace503df2fe44a7de38c8dfe11bee911ec0ffaf93e3e57d" +checksum = "906e078fae9c6b3af37737ed5ba97f16a1f7cbc44b34144c701fcb43fe15439d" dependencies = [ "bevy_app", "bevy_asset", @@ -518,35 +567,37 @@ dependencies = [ "bevy_core", "bevy_derive", "bevy_ecs", + "bevy_image", "bevy_math", "bevy_reflect", "bevy_render", "bevy_transform", "bevy_utils", + "bevy_window", "bitflags 2.6.0", + "derive_more", "nonmax", "radsort", "serde", "smallvec", - "thiserror", ] [[package]] name = "bevy_derive" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8675f337f374b2b8ae90539982b947d171f9adb302d00c032b823bd5231f8978" +checksum = "705ccd9cc85510faa67d0261e57b6fe196465f372ec9b6e9fe88642737fe652d" dependencies = [ "bevy_macro_utils", "quote", - "syn 2.0.77", + "syn", ] [[package]] name = "bevy_diagnostic" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdcc1d7ba5797e4285a7867227134d4cabaaf8cabfb7cdc42eb697d3b3db0460" +checksum = "570e296eee8be3230059c8dc396f7be1bcba7cc01fb0a96d530389d14514a5fb" dependencies = [ "bevy_app", "bevy_core", @@ -560,9 +611,9 @@ dependencies = [ [[package]] name = "bevy_ecs" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a3eed7f144811946ebfa1c740da9e3bcd6dd2dd4da844eda085249d29bc9fef" +checksum = "061d0e0972c55694ec8eb58a7a7345588a5f8cc77002cd39b0a1bed01d6bdefc" dependencies = [ "arrayvec", "bevy_ecs_macros", @@ -572,30 +623,32 @@ dependencies = [ "bevy_utils", "bitflags 2.6.0", "concurrent-queue", + "derive_more", + "disqualified", "fixedbitset 0.5.7", "nonmax", "petgraph", "serde", - "thiserror", + "smallvec", ] [[package]] name = "bevy_ecs_macros" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d523630f2eb9fde6727e6c5ea48fa708079c5345da21ffeb1a4bd8ca761830da" +checksum = "cd7c1e5d04c7e51105d262775cab02518ea20e2d44e037af892e33fe2e7346a3" dependencies = [ "bevy_macro_utils", "proc-macro2", "quote", - "syn 2.0.77", + "syn", ] [[package]] name = "bevy_encase_derive" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a20ec101b103f430481112591e280a8fc3f2db6741579f885595372073b749b" +checksum = "59449eb107c9354d2ba227f04889a2578b9f6f9d8eb26d81e3346b45137b86f2" dependencies = [ "bevy_macro_utils", "encase_derive_impl", @@ -603,24 +656,24 @@ dependencies = [ [[package]] name = "bevy_gilrs" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a64d84c2cbc6a027ba2c293752f9508e6777607acb1d98d03c25eb2a80d55372" +checksum = "7fbc844d475260de2b2a7a4d25258e45a004b3130f5a59ca154de1a219f402e8" dependencies = [ "bevy_app", "bevy_ecs", "bevy_input", "bevy_time", "bevy_utils", + "derive_more", "gilrs", - "thiserror", ] [[package]] name = "bevy_gizmos" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248324352331d719071b0d1545a43e3d63470f4730e75312edee575f210d3a77" +checksum = "3d5fd067b32e6b6aefdfb5b239d547b0921c8c5f8c2fa4a7762349b151f919f9" dependencies = [ "bevy_app", "bevy_asset", @@ -641,21 +694,21 @@ dependencies = [ [[package]] name = "bevy_gizmos_macros" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbe1708bb0e45a1d0fe0f32e998557689231dfe7bdae62083326e8008e97de23" +checksum = "3f70a1bcd58c4ca067738d66837a18b4a57c6b25c1cf2f0bd66cca98dfe87e5b" dependencies = [ "bevy_macro_utils", "proc-macro2", "quote", - "syn 2.0.77", + "syn", ] [[package]] name = "bevy_gltf" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb57239cb4209e52354268062cd1973892af3a2077ccbdb4d19259cbbc2d2c2d" +checksum = "8efaa3887d9b1f7635fcc95109d1738573412b666065b86ae42cc21251c2399f" dependencies = [ "base64 0.22.1", "bevy_animation", @@ -666,6 +719,7 @@ dependencies = [ "bevy_core_pipeline", "bevy_ecs", "bevy_hierarchy", + "bevy_image", "bevy_math", "bevy_pbr", "bevy_reflect", @@ -674,48 +728,72 @@ dependencies = [ "bevy_tasks", "bevy_transform", "bevy_utils", + "derive_more", "gltf", "percent-encoding", "serde", "serde_json", "smallvec", - "thiserror", ] [[package]] name = "bevy_hierarchy" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb332d2789442ca1577c765977bafefea1dcd4db29479713ec8c6932dfb82cdb" +checksum = "53dec1d455b8be41eb918e7bf081972d6e02ba5660502e11ed107ed25f7982b8" dependencies = [ "bevy_app", "bevy_core", "bevy_ecs", "bevy_reflect", "bevy_utils", + "disqualified", "smallvec", ] [[package]] -name = "bevy_input" -version = "0.14.1" +name = "bevy_image" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9ce5f27a8729b473205b01927cd6a5c4898a004cb8fcffa7c896e19ba999d98" +checksum = "1ef230cdd23c883c0fc269093358d4dac0a0d339d493edc87b952f86149d0e60" +dependencies = [ + "bevy_asset", + "bevy_color", + "bevy_math", + "bevy_reflect", + "bevy_utils", + "bitflags 2.6.0", + "bytemuck", + "derive_more", + "futures-lite", + "image", + "ktx2", + "ruzstd", + "serde", + "wgpu", +] + +[[package]] +name = "bevy_input" +version = "0.15.0-rc.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dc505f1c055b711c08b80d37f10d98151aafca9fcb6b153ee00c7a4dcae3f75" dependencies = [ "bevy_app", + "bevy_core", "bevy_ecs", "bevy_math", "bevy_reflect", "bevy_utils", + "derive_more", "smol_str", - "thiserror", ] [[package]] name = "bevy_internal" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2463102e46d7d67440dbfe3bc97d34bf529c93191c4f4bb41395f4982062ff3" +checksum = "e6ad66535730bc578a82aa7c006107c9027108ff76903acfd55c69c3ff365298" dependencies = [ "bevy_a11y", "bevy_animation", @@ -732,12 +810,15 @@ dependencies = [ "bevy_gizmos", "bevy_gltf", "bevy_hierarchy", + "bevy_image", "bevy_input", "bevy_log", "bevy_math", "bevy_pbr", + "bevy_picking", "bevy_ptr", "bevy_reflect", + "bevy_remote", "bevy_render", "bevy_scene", "bevy_sprite", @@ -754,50 +835,76 @@ dependencies = [ [[package]] name = "bevy_log" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52f2c0c374af59007396793a51f747f6b10d74ca4acfb080ce0ade267118827b" +checksum = "b2d8a9f9f6875598e986ac8de8d17873871eb6e816d7842f32da204cd074b9f1" dependencies = [ "android_log-sys", "bevy_app", "bevy_ecs", "bevy_utils", "tracing-log", + "tracing-oslog", "tracing-subscriber", "tracing-wasm", ] [[package]] name = "bevy_macro_utils" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ec4a585ec2a6dedd4f4143c07219d120ae142121929f0d83e68d82a452cdc9b" +checksum = "6c5594703cac7b78469f2691652c562f190b24a4f3cb78f862d9c98e98bfb804" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn", "toml_edit", ] [[package]] name = "bevy_math" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40253578fe83a5ffe5f4fcb4dfa196b7d9c50f36dc8efaa231a53344bf4b3e57" +checksum = "a5a696cc7629ca5ce5ffb416ae5c868ae8e3cfcb0a51739296c91a776a355297" dependencies = [ "bevy_reflect", + "derive_more", "glam", + "itertools 0.13.0", "rand", + "rand_distr", "serde", "smallvec", - "thiserror", +] + +[[package]] +name = "bevy_mesh" +version = "0.15.0-rc.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e798db51029ff3f7f41eef55f77265ce4a77868acce1ef8c4d6fb8030410726d" +dependencies = [ + "bevy_asset", + "bevy_derive", + "bevy_ecs", + "bevy_image", + "bevy_math", + "bevy_mikktspace", + "bevy_reflect", + "bevy_transform", + "bevy_utils", + "bitflags 2.6.0", + "bytemuck", + "derive_more", + "hexasphere", + "serde", + "wgpu", ] [[package]] name = "bevy_mikktspace" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24a1ad15685c6035e01bdc9d5ea082558ef1438e9d40d69fc552857dd7e83e71" +checksum = "4fa55db38ee370b8a01675e61ac7112d59ee2f31305cc7c7f0cfb3acab0d0354" dependencies = [ "glam", ] @@ -810,13 +917,12 @@ dependencies = [ "bevy", "bevy_mod_xr", "bevy_xr_utils", - "d3d12 0.20.0", "jni 0.20.0", "ndk-context", "openxr", - "thiserror", - "wgpu 0.20.1", - "wgpu-hal 0.21.1", + "thiserror 2.0.3", + "wgpu", + "wgpu-hal", "winapi", ] @@ -826,9 +932,9 @@ version = "0.0.0" dependencies = [ "bevy", "bevy_mod_xr", - "thiserror", - "wgpu 0.19.4", - "wgpu-hal 0.19.5", + "thiserror 2.0.3", + "wgpu", + "wgpu-hal", ] [[package]] @@ -851,9 +957,9 @@ dependencies = [ [[package]] name = "bevy_pbr" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "588998ba295db4a14dec54e571f272490f2885e5aaac59191fb4fa32a25835d0" +checksum = "efbddf2fdeee2ed28a764210162ecac00e635a67f1b1d3235ba588699a4e53ca" dependencies = [ "bevy_app", "bevy_asset", @@ -869,6 +975,7 @@ dependencies = [ "bevy_window", "bitflags 2.6.0", "bytemuck", + "derive_more", "fixedbitset 0.5.7", "nonmax", "radsort", @@ -877,20 +984,47 @@ dependencies = [ ] [[package]] -name = "bevy_ptr" -version = "0.14.1" +name = "bevy_picking" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ed72afbb6249a6803a3ed7bd2f68ff080d9392f550475e050b34c1e1c1e3e8f" +checksum = "71585d3e9cf557cf2b32190aa92b001d100144e1bed60e185c09790169f80bcb" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_derive", + "bevy_ecs", + "bevy_hierarchy", + "bevy_input", + "bevy_math", + "bevy_mesh", + "bevy_reflect", + "bevy_render", + "bevy_time", + "bevy_transform", + "bevy_utils", + "bevy_window", + "crossbeam-channel", + "uuid", +] + +[[package]] +name = "bevy_ptr" +version = "0.15.0-rc.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bba1b455f5a688bf70fd712c4e40068014287964b865a31080c6a8e6db5eecb" [[package]] name = "bevy_reflect" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb37e8fc3c61d04da480c95cc8c303aa7781afed6be01dae333b336af493c38e" +checksum = "4a24644d96fcff7f1c141e87f08586c97dada3f7142552cb1d615631cf7f9d52" dependencies = [ + "assert_type_match", "bevy_ptr", "bevy_reflect_derive", "bevy_utils", + "derive_more", + "disqualified", "downcast-rs", "erased-serde", "glam", @@ -898,28 +1032,50 @@ dependencies = [ "serde", "smallvec", "smol_str", - "thiserror", "uuid", ] [[package]] name = "bevy_reflect_derive" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc00d5086f5bf534b4c2dbeba549a6b8d3223515f3cb5ba4fdaabe953ec6cea" +checksum = "e282d0186ac099a2cb91d9320dadd9fcdf52a8c3e565b9b6d86e7dc22fa11996" dependencies = [ "bevy_macro_utils", "proc-macro2", "quote", - "syn 2.0.77", + "syn", "uuid", ] [[package]] -name = "bevy_render" -version = "0.14.1" +name = "bevy_remote" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f570f36154296ae5377587d5ef19e1feb4c5734923785c571f55a9fff091701" +checksum = "8557de19918af71897cef3dbe33d6cc6f400e818af4b8d9198e0b6bc555f3510" +dependencies = [ + "anyhow", + "async-channel", + "async-io", + "bevy_app", + "bevy_derive", + "bevy_ecs", + "bevy_hierarchy", + "bevy_reflect", + "bevy_tasks", + "bevy_utils", + "http-body-util", + "hyper", + "serde", + "serde_json", + "smol-hyper", +] + +[[package]] +name = "bevy_render" +version = "0.15.0-rc.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6d74663d2c95823d7b354fc01b9ce5eecd197c9191ff8f665c08c78f9d69942" dependencies = [ "async-channel", "bevy_app", @@ -931,8 +1087,9 @@ dependencies = [ "bevy_ecs", "bevy_encase_derive", "bevy_hierarchy", + "bevy_image", "bevy_math", - "bevy_mikktspace", + "bevy_mesh", "bevy_reflect", "bevy_render_macros", "bevy_tasks", @@ -940,46 +1097,44 @@ dependencies = [ "bevy_transform", "bevy_utils", "bevy_window", - "bitflags 2.6.0", "bytemuck", "codespan-reporting", + "derive_more", "downcast-rs", "encase", "futures-lite", - "hexasphere", "image", "js-sys", "ktx2", - "naga 0.20.0", + "naga", "naga_oil", "nonmax", - "ruzstd", + "offset-allocator", "send_wrapper", "serde", "smallvec", - "thiserror", "wasm-bindgen", "web-sys", - "wgpu 0.20.1", + "wgpu", ] [[package]] name = "bevy_render_macros" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe2d5008c7b4a8a516ef7b58452b8e40e4c2317068fc7505398bedf34e8d45f7" +checksum = "7a66e09c0ea65f28b0b790690a588b74adbf89899f37531c7062a55805a1214a" dependencies = [ "bevy_macro_utils", "proc-macro2", "quote", - "syn 2.0.77", + "syn", ] [[package]] name = "bevy_scene" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3910087f6fc45e7833fb62e4de282c36a7012ff381c0584eb2cc84dede02e72f" +checksum = "d0521c672d32480a789d8b00c950f4690336b38babc630a25fbd016c0e32c6d3" dependencies = [ "bevy_app", "bevy_asset", @@ -990,16 +1145,16 @@ dependencies = [ "bevy_render", "bevy_transform", "bevy_utils", + "derive_more", "serde", - "thiserror", "uuid", ] [[package]] name = "bevy_sprite" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fffdfb9a18968c8606286b6be83c9323ff9008b5cc043a23a3ecc95ff72fb20c" +checksum = "8ec69e32c0bae51346de8a91ca0d7bb572967c2da0f924af14a174ebce1fd60d" dependencies = [ "bevy_app", "bevy_asset", @@ -1008,24 +1163,27 @@ dependencies = [ "bevy_derive", "bevy_ecs", "bevy_math", + "bevy_picking", "bevy_reflect", "bevy_render", "bevy_transform", "bevy_utils", + "bevy_window", "bitflags 2.6.0", "bytemuck", + "derive_more", "fixedbitset 0.5.7", "guillotiere", + "nonmax", "radsort", "rectangle-pack", - "thiserror", ] [[package]] name = "bevy_state" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21066e7bb8014d1b1dd4f611f28c0f4ea9c7738cec2325281e4260a65072d509" +checksum = "4e127e147f4336bf12eeaade1dabc18f3473a9dd77c154f7a0478887384633ae" dependencies = [ "bevy_app", "bevy_ecs", @@ -1037,40 +1195,43 @@ dependencies = [ [[package]] name = "bevy_state_macros" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8a449823c420d1cc1fa6cf3d484570b08358e5eeedc1b86de1efcf9c10399b5" +checksum = "20eba83d61d49d86904fa828bfbab2b37dd126f58c8a5f2e928d913484f9d18a" dependencies = [ "bevy_macro_utils", "proc-macro2", "quote", - "syn 2.0.77", + "syn", ] [[package]] name = "bevy_tasks" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84f5414c3f49c96e02ceccf5fa12fb6cfbf8b271d2a820902d6f622e9c2fa681" +checksum = "35a350a7ffdd7150bd16f903780464b313b136ae6c17437e2f2b4c7c2bb9890e" dependencies = [ "async-channel", "async-executor", "concurrent-queue", + "futures-channel", "futures-lite", + "pin-project", "wasm-bindgen-futures", ] [[package]] name = "bevy_text" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3e77dd86def15f5380e6e7c178ec54e5e356b3f464e2ad35794a08d5ecb82e4" +checksum = "c13f2e64593cb976b357d8134c2d17b1a25cad6b2a7f920d2ba6b6fc183a3f1d" dependencies = [ - "ab_glyph", "bevy_app", "bevy_asset", "bevy_color", + "bevy_derive", "bevy_ecs", + "bevy_hierarchy", "bevy_math", "bevy_reflect", "bevy_render", @@ -1078,46 +1239,49 @@ dependencies = [ "bevy_transform", "bevy_utils", "bevy_window", - "glyph_brush_layout", + "cosmic-text", + "derive_more", "serde", - "thiserror", + "smallvec", + "sys-locale", + "unicode-bidi", ] [[package]] name = "bevy_time" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3fb18cfac62098e07786e422e84b4f45f469f27ccb5b572b409500bef465f33" +checksum = "812a471a73b4b25a8630f67b891f714f2fc8998e00a9987caad8916eba3e7294" dependencies = [ "bevy_app", "bevy_ecs", "bevy_reflect", "bevy_utils", "crossbeam-channel", - "thiserror", ] [[package]] name = "bevy_transform" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ff09cea0dd0d4e6a3ed5f7dcbd4fbbcec07e518ceb64a4c8a75dedbe294ab60" +checksum = "5eef74f21fd938b63c8dcb4d582bb4fd96af9630d289f71624e72e426fe37db2" dependencies = [ "bevy_app", "bevy_ecs", "bevy_hierarchy", "bevy_math", "bevy_reflect", - "thiserror", + "derive_more", ] [[package]] name = "bevy_ui" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50684629a03b7d4891b5953e84dd971c7a8bbd290751bab5ce06e119b692220b" +checksum = "7206ca33419b9745b6a9588a69cbb34cee6f6fe01a4df9dbe68860879449a0e0" dependencies = [ "bevy_a11y", + "bevy_animation", "bevy_app", "bevy_asset", "bevy_color", @@ -1127,6 +1291,7 @@ dependencies = [ "bevy_hierarchy", "bevy_input", "bevy_math", + "bevy_picking", "bevy_reflect", "bevy_render", "bevy_sprite", @@ -1135,17 +1300,17 @@ dependencies = [ "bevy_utils", "bevy_window", "bytemuck", + "derive_more", "nonmax", "smallvec", "taffy", - "thiserror", ] [[package]] name = "bevy_utils" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6efbe5a621b56cc4ffa41074929eca84107e242302496b9bb7550675e6bf2e7" +checksum = "9e73bb014ee7754c8e6de9a89206139482a0aac29db0fa416f8fbcb640985314" dependencies = [ "ahash", "bevy_utils_proc_macros", @@ -1158,24 +1323,26 @@ dependencies = [ [[package]] name = "bevy_utils_proc_macros" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36a1e91b4294cad2d08620ac062509395d4f65247b636946d6497eaeccf4dbfd" +checksum = "20ae93d5e25b072af3637f3e1c83865c59d8a8e77a5ab87465e4a00dd4766d0d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn", ] [[package]] name = "bevy_window" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ba11880f05a3b267ecfa4149fe789b0c046c35fd8418dd8899fad3a4359c986" +checksum = "fc64e1a8acd775c78db7a1c6afb8f4ec31ffce7e61bd39bbc19a3177ac4276cc" dependencies = [ + "android-activity", "bevy_a11y", "bevy_app", "bevy_ecs", + "bevy_input", "bevy_math", "bevy_reflect", "bevy_utils", @@ -1185,17 +1352,19 @@ dependencies = [ [[package]] name = "bevy_winit" -version = "0.14.1" +version = "0.15.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5aeb4b2e3b1ece189fcf37ea2de625ceab93e6ac2a14d4b15b0393351e4c18b" +checksum = "6e05f94f7b207237b9f5903946e5969ea01b70e8b557aa2126f7903ce14780db" dependencies = [ "accesskit_winit", "approx", "bevy_a11y", "bevy_app", + "bevy_asset", "bevy_derive", "bevy_ecs", "bevy_hierarchy", + "bevy_image", "bevy_input", "bevy_log", "bevy_math", @@ -1203,11 +1372,13 @@ dependencies = [ "bevy_tasks", "bevy_utils", "bevy_window", + "bytemuck", "cfg-if", "crossbeam-channel", "raw-window-handle", "wasm-bindgen", "web-sys", + "wgpu-types", "winit", ] @@ -1230,7 +1401,7 @@ dependencies = [ "bitflags 2.6.0", "cexpr", "clang-sys", - "itertools", + "itertools 0.12.1", "lazy_static", "lazycell", "proc-macro2", @@ -1238,7 +1409,27 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.77", + "syn", +] + +[[package]] +name = "bindgen" +version = "0.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f49d8fed880d473ea71efb9bf597651e77201bdd4893efe54c9e5d65ae04ce6f" +dependencies = [ + "bitflags 2.6.0", + "cexpr", + "clang-sys", + "itertools 0.12.1", + "log", + "prettyplease", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn", ] [[package]] @@ -1247,7 +1438,16 @@ version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" dependencies = [ - "bit-vec", + "bit-vec 0.6.3", +] + +[[package]] +name = "bit-set" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" +dependencies = [ + "bit-vec 0.8.0", ] [[package]] @@ -1256,6 +1456,12 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" +[[package]] +name = "bit-vec" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" + [[package]] name = "bitflags" version = "1.3.2" @@ -1329,9 +1535,9 @@ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytemuck" -version = "1.17.1" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773d90827bc3feecfb67fab12e24de0749aad83c74b9504ecde46237b5cd24e2" +checksum = "8334215b81e418a0a7bdb8ef0849474f40bb10c8b71f1c4ed315cff49f32494d" dependencies = [ "bytemuck_derive", ] @@ -1344,7 +1550,7 @@ checksum = "0cc8b54b395f2fcfbb3d90c47b01c7f444d94d05bdeb775811dec868ac3bbc26" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn", ] [[package]] @@ -1397,7 +1603,7 @@ dependencies = [ "polling", "rustix", "slab", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -1462,7 +1668,7 @@ checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" dependencies = [ "glob", "libc", - "libloading 0.8.5", + "libloading", ] [[package]] @@ -1484,37 +1690,6 @@ dependencies = [ "unicode-width", ] -[[package]] -name = "com" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e17887fd17353b65b1b2ef1c526c83e26cd72e74f598a8dc1bee13a48f3d9f6" -dependencies = [ - "com_macros", -] - -[[package]] -name = "com_macros" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d375883580a668c7481ea6631fc1a8863e33cc335bf56bfad8d7e6d4b04b13a5" -dependencies = [ - "com_macros_support", - "proc-macro2", - "syn 1.0.109", -] - -[[package]] -name = "com_macros_support" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad899a1087a9296d5644792d7cb72b8e34c1bec8e7d4fbc002230169a6e8710c" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "combine" version = "4.6.7" @@ -1550,6 +1725,26 @@ 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.9" @@ -1587,6 +1782,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" @@ -1600,7 +1805,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 0.5.0", "libc", @@ -1613,7 +1818,7 @@ 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", ] @@ -1634,7 +1839,30 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f01585027057ff5f0a5bf276174ae4c1594a2c5bde93d5f46a016d76270f5a9" dependencies = [ - "bindgen", + "bindgen 0.69.4", +] + +[[package]] +name = "cosmic-text" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59fd57d82eb4bfe7ffa9b1cec0c05e2fd378155b47f255a67983cb4afe0e80c2" +dependencies = [ + "bitflags 2.6.0", + "fontdb", + "log", + "rangemap", + "rayon", + "rustc-hash", + "rustybuzz", + "self_cell", + "swash", + "sys-locale", + "ttf-parser 0.21.1", + "unicode-bidi", + "unicode-linebreak", + "unicode-script", + "unicode-segmentation", ] [[package]] @@ -1702,12 +1930,37 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + [[package]] name = "crypto-common" version = "0.1.6" @@ -1718,34 +1971,22 @@ dependencies = [ "typenum", ] +[[package]] +name = "ctrlc" +version = "3.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90eeab0aa92f3f9b4e87f258c72b139c207d251f9cbc1080a0086b86a8870dd3" +dependencies = [ + "nix", + "windows-sys 0.59.0", +] + [[package]] name = "cursor-icon" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991" -[[package]] -name = "d3d12" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e3d747f100290a1ca24b752186f61f6637e1deffe3bf6320de6fcb29510a307" -dependencies = [ - "bitflags 2.6.0", - "libloading 0.8.5", - "winapi", -] - -[[package]] -name = "d3d12" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b28bfe653d79bd16c77f659305b195b82bb5ce0c0eb2a4846b82ddbd77586813" -dependencies = [ - "bitflags 2.6.0", - "libloading 0.8.5", - "winapi", -] - [[package]] name = "dasp_sample" version = "0.11.0" @@ -1781,7 +2022,28 @@ checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn", +] + +[[package]] +name = "derive_more" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "unicode-xid", ] [[package]] @@ -1809,16 +2071,22 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn", ] +[[package]] +name = "disqualified" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9c272297e804878a2a4b707cfcfc6d2328b5bb936944613b4fdf2b9269afdfd" + [[package]] name = "dlib" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" dependencies = [ - "libloading 0.8.5", + "libloading", ] [[package]] @@ -1850,34 +2118,34 @@ checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "encase" -version = "0.8.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a9299a95fa5671ddf29ecc22b00e121843a65cb9ff24911e394b4ae556baf36" +checksum = "b0a05902cf601ed11d564128448097b98ebe3c6574bd7b6a653a3d56d54aa020" dependencies = [ "const_panic", "encase_derive", "glam", - "thiserror", + "thiserror 1.0.69", ] [[package]] name = "encase_derive" -version = "0.8.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e09decb3beb1fe2db6940f598957b2e1f7df6206a804d438ff6cb2a9cddc10" +checksum = "181d475b694e2dd56ae919ce7699d344d1fd259292d590c723a50d1189a2ea85" dependencies = [ "encase_derive_impl", ] [[package]] name = "encase_derive_impl" -version = "0.8.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd31dbbd9743684d339f907a87fe212cb7b51d75b9e8e74181fe363199ee9b47" +checksum = "f97b51c5cc57ef7c5f7a0c57c250251c49ee4c28f819f87ac32f4aceabc36792" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn", ] [[package]] @@ -1994,6 +2262,38 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "font-types" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3971f9a5ca983419cdc386941ba3b9e1feba01a0ab888adf78739feb2798492" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "fontconfig-parser" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1fcfcd44ca6e90c921fee9fa665d530b21ef1327a4c1a6c5250ea44b776ada7" +dependencies = [ + "roxmltree", +] + +[[package]] +name = "fontdb" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0299020c3ef3f60f526a4f64ab4a3d4ce116b1acbf24cdd22da0068e5d81dc3" +dependencies = [ + "fontconfig-parser", + "log", + "memmap2", + "slotmap", + "tinyvec", + "ttf-parser 0.20.0", +] + [[package]] name = "foreign-types" version = "0.3.2" @@ -2021,7 +2321,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn", ] [[package]] @@ -2143,9 +2443,9 @@ dependencies = [ [[package]] name = "gilrs" -version = "0.10.9" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfb8c78963a8856a5b10015c9349176ff5edbc8095384d52aada467a848bc03a" +checksum = "bbb2c998745a3c1ac90f64f4f7b3a54219fd3612d7705e7798212935641ed18f" dependencies = [ "fnv", "gilrs-core", @@ -2156,11 +2456,11 @@ dependencies = [ [[package]] name = "gilrs-core" -version = "0.5.15" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "732dadc05170599ddec9a89653f10d7a2af54da9181b3fa6e2bd49907ec8f7e4" +checksum = "495af945e45efd6386227613cd9fb7bd7c43d3c095040e30c5304c489e6abed5" dependencies = [ - "core-foundation", + "core-foundation 0.10.0", "inotify", "io-kit-sys", "js-sys", @@ -2194,9 +2494,9 @@ dependencies = [ [[package]] name = "glam" -version = "0.27.0" +version = "0.29.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e05e7e6723e3455f4818c7b26e855439f7546cf617ef669d1adedb8669e5cb9" +checksum = "dc46dd3ec48fdd8e693a98d2b8bafae273a2d54c1de02a2a7e3d57d501f39677" dependencies = [ "bytemuck", "rand", @@ -2211,9 +2511,9 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "glow" -version = "0.13.1" +version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd348e04c43b32574f2de31c8bb397d96c9fcfa1371bd4ca6d8bdc464ab121b1" +checksum = "d51fa363f025f5c111e03f13eda21162faeacb6911fe8caa0c0349f9cf0c4483" dependencies = [ "js-sys", "slotmap", @@ -2242,7 +2542,7 @@ dependencies = [ "inflections", "proc-macro2", "quote", - "syn 2.0.77", + "syn", ] [[package]] @@ -2259,24 +2559,13 @@ dependencies = [ [[package]] name = "glutin_wgl_sys" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8098adac955faa2d31079b65dc48841251f69efd3ac25477903fc424362ead" +checksum = "0a4e1951bbd9434a81aa496fe59ccc2235af3820d27b85f9314e279609211e2c" dependencies = [ "gl_generator", ] -[[package]] -name = "glyph_brush_layout" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1e288bfd2f6c0313f78bf5aa538356ad481a3bb97e9b7f93220ab0066c5992" -dependencies = [ - "ab_glyph", - "approx", - "xi-unicode", -] - [[package]] name = "gpu-alloc" version = "0.6.0" @@ -2298,26 +2587,14 @@ dependencies = [ [[package]] name = "gpu-allocator" -version = "0.25.0" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f56f6318968d03c18e1bcf4857ff88c61157e9da8e47c5f29055d60e1228884" +checksum = "c151a2a5ef800297b4e79efa4f4bec035c5f51d5ae587287c9b952bdf734cacd" dependencies = [ "log", "presser", - "thiserror", - "winapi", - "windows 0.52.0", -] - -[[package]] -name = "gpu-descriptor" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc11df1ace8e7e564511f53af41f3e42ddc95b56fd07b3f4445d2a6048bc682c" -dependencies = [ - "bitflags 2.6.0", - "gpu-descriptor-types 0.1.2", - "hashbrown", + "thiserror 1.0.69", + "windows 0.58.0", ] [[package]] @@ -2327,19 +2604,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c08c1f623a8d0b722b8b99f821eb0ba672a1618f0d3b16ddbee1cedd2dd8557" dependencies = [ "bitflags 2.6.0", - "gpu-descriptor-types 0.2.0", + "gpu-descriptor-types", "hashbrown", ] -[[package]] -name = "gpu-descriptor-types" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bf0b36e6f090b7e1d8a4b49c0cb81c1f8376f72198c65dd3ad9ff3556b8b78c" -dependencies = [ - "bitflags 2.6.0", -] - [[package]] name = "gpu-descriptor-types" version = "0.2.0" @@ -2395,21 +2663,6 @@ dependencies = [ "serde", ] -[[package]] -name = "hassle-rs" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af2a7e73e1f34c48da31fb668a907f250794837e08faa144fd24f0b8b741e890" -dependencies = [ - "bitflags 2.6.0", - "com", - "libc", - "libloading 0.8.5", - "thiserror", - "widestring", - "winapi", -] - [[package]] name = "hermit-abi" version = "0.3.9" @@ -2424,9 +2677,9 @@ checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" [[package]] name = "hexasphere" -version = "12.0.0" +version = "15.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edd6b038160f086b0a7496edae34169ae22f328793cbe2b627a5a3d8373748ec" +checksum = "741ab88b8cc670443da777c3daab02cebf5a3caccfc04e3c052f55c94d1643fe" dependencies = [ "constgebra", "glam", @@ -2487,6 +2740,12 @@ version = "1.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + [[package]] name = "hyper" version = "1.4.1" @@ -2500,6 +2759,7 @@ dependencies = [ "http", "http-body", "httparse", + "httpdate", "itoa", "pin-project-lite", "smallvec", @@ -2609,11 +2869,11 @@ checksum = "a257582fdcde896fd96463bf2d40eefea0580021c0712a0e2b028b60b47a837a" [[package]] name = "inotify" -version = "0.10.2" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdd168d97690d0b8c412d6b6c10360277f4d7ee495c5d0d5d5fe0854923255cc" +checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "inotify-sys", "libc", ] @@ -2661,6 +2921,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.11" @@ -2677,7 +2946,7 @@ dependencies = [ "combine", "jni-sys", "log", - "thiserror", + "thiserror 1.0.69", "walkdir", ] @@ -2692,7 +2961,7 @@ dependencies = [ "combine", "jni-sys", "log", - "thiserror", + "thiserror 1.0.69", "walkdir", "windows-sys 0.45.0", ] @@ -2714,9 +2983,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.70" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" +checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" dependencies = [ "wasm-bindgen", ] @@ -2728,7 +2997,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" dependencies = [ "libc", - "libloading 0.8.5", + "libloading", "pkg-config", ] @@ -2776,16 +3045,6 @@ version = "0.2.158" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" -[[package]] -name = "libloading" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" -dependencies = [ - "cfg-if", - "winapi", -] - [[package]] name = "libloading" version = "0.8.5" @@ -2796,6 +3055,12 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "libm" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" + [[package]] name = "libredox" version = "0.0.2" @@ -2895,25 +3160,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] -name = "metal" -version = "0.27.0" +name = "memmap2" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43f73953f8cbe511f021b58f18c3ce1c3d1ae13fe953293e13345bf83217f25" +checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" dependencies = [ - "bitflags 2.6.0", - "block", - "core-graphics-types", - "foreign-types 0.5.0", - "log", - "objc", - "paste", + "libc", ] [[package]] name = "metal" -version = "0.28.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5637e166ea14be6063a3f8ba5ccb9a4159df7d8f6d61c02fc3d480b1f90dcfcb" +checksum = "7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21" dependencies = [ "bitflags 2.6.0", "block", @@ -2975,62 +3234,42 @@ dependencies = [ [[package]] name = "naga" -version = "0.19.2" +version = "23.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50e3524642f53d9af419ab5e8dd29d3ba155708267667c2f3f06c88c9e130843" -dependencies = [ - "bit-set", - "bitflags 2.6.0", - "codespan-reporting", - "hexf-parse", - "indexmap", - "log", - "num-traits", - "rustc-hash", - "spirv", - "termcolor", - "thiserror", - "unicode-xid", -] - -[[package]] -name = "naga" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e536ae46fcab0876853bd4a632ede5df4b1c2527a58f6c5a4150fe86be858231" +checksum = "3d5941e45a15b53aad4375eedf02033adb7a28931eedc31117faffa52e6a857e" dependencies = [ "arrayvec", - "bit-set", + "bit-set 0.8.0", "bitflags 2.6.0", + "cfg_aliases 0.1.1", "codespan-reporting", "hexf-parse", "indexmap", "log", - "num-traits", "pp-rs", "rustc-hash", "spirv", "termcolor", - "thiserror", + "thiserror 1.0.69", "unicode-xid", ] [[package]] name = "naga_oil" -version = "0.14.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "275d9720a7338eedac966141089232514c84d76a246a58ef501af88c5edf402f" +checksum = "31ea1f080bb359927cd5404d0af1e5e6758f4f2d82ecfbebb0a0c434764e40f1" dependencies = [ - "bit-set", + "bit-set 0.5.3", "codespan-reporting", "data-encoding", "indexmap", - "naga 0.20.0", + "naga", "once_cell", "regex", "regex-syntax 0.8.4", "rustc-hash", - "thiserror", + "thiserror 1.0.69", "tracing", "unicode-ident", ] @@ -3063,7 +3302,7 @@ dependencies = [ "log", "ndk-sys 0.5.0+25.2.9519653", "num_enum", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -3078,7 +3317,7 @@ dependencies = [ "ndk-sys 0.6.0+11769913", "num_enum", "raw-window-handle", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -3166,7 +3405,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn", ] [[package]] @@ -3176,6 +3415,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", + "libm", ] [[package]] @@ -3196,7 +3436,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.77", + "syn", ] [[package]] @@ -3206,7 +3446,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" dependencies = [ "malloc_buf", - "objc_exception", ] [[package]] @@ -3412,15 +3651,6 @@ dependencies = [ "objc2-foundation", ] -[[package]] -name = "objc_exception" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" -dependencies = [ - "cc", -] - [[package]] name = "object" version = "0.36.4" @@ -3453,6 +3683,16 @@ dependencies = [ "cc", ] +[[package]] +name = "offset-allocator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e234d535da3521eb95106f40f0b73483d80bfb3aacf27c40d7e2b72f1a3e00a2" +dependencies = [ + "log", + "nonmax", +] + [[package]] name = "ogg" version = "0.8.0" @@ -3464,9 +3704,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "openssl" @@ -3491,7 +3731,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn", ] [[package]] @@ -3514,21 +3754,21 @@ dependencies = [ [[package]] name = "openxr" -version = "0.18.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a03958eb34719625119448d483ebd2fe008a2128b6286f2a7138b7e48072053" +checksum = "2a2d6934d2508f94fd4cbda6c2a326f111f60ce59fd9136df6d478564397dd40" dependencies = [ "libc", - "libloading 0.8.5", + "libloading", "ndk-context", "openxr-sys", ] [[package]] name = "openxr-sys" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1534b2c14b56564e58b91f5015817e1d87bd43ca12a188eda6a9ea3859b0ec25" +checksum = "f10e7e38c47f2175fc39363713b656db899fa0b4a14341029702cbdfa6f44d05" dependencies = [ "cmake", "libc", @@ -3550,15 +3790,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" -[[package]] -name = "owned_ttf_parser" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "490d3a563d3122bf7c911a59b0add9389e5ec0f5f0c3ac6b91ff235a0e6a7f90" -dependencies = [ - "ttf-parser", -] - [[package]] name = "parking" version = "2.2.0" @@ -3639,7 +3870,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn", ] [[package]] @@ -3729,6 +3960,16 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" +[[package]] +name = "prettyplease" +version = "0.2.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" +dependencies = [ + "proc-macro2", + "syn", +] + [[package]] name = "proc-macro-crate" version = "3.2.0" @@ -3798,18 +4039,64 @@ dependencies = [ "getrandom", ] +[[package]] +name = "rand_distr" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" +dependencies = [ + "num-traits", + "rand", +] + [[package]] name = "range-alloc" version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8a99fddc9f0ba0a85884b8d14e3592853e787d581ca1816c91349b10e4eeab" +[[package]] +name = "rangemap" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f60fcc7d6849342eff22c4350c8b9a989ee8ceabc4b481253e8946b9fe83d684" + [[package]] name = "raw-window-handle" version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "read-fonts" +version = "0.22.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a04b892cb6f91951f144c33321843790c8574c825aafdb16d815fd7183b5229" +dependencies = [ + "bytemuck", + "font-types", +] + [[package]] name = "rectangle-pack" version = "0.4.2" @@ -3945,13 +4232,13 @@ dependencies = [ [[package]] name = "rodio" -version = "0.18.1" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1fceb9d127d515af1586d8d0cc601e1245bdb0af38e75c865a156290184f5b3" +checksum = "6006a627c1a38d37f3d3a85c6575418cfe34a5392d60a686d0071e1c8d427acb" dependencies = [ "cpal", "lewton", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -3966,6 +4253,12 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "roxmltree" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" + [[package]] name = "rustc-demangle" version = "0.1.24" @@ -4031,6 +4324,23 @@ dependencies = [ "untrusted", ] +[[package]] +name = "rustybuzz" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfb9cf8877777222e4a3bc7eb247e398b56baba500c38c1c46842431adc8b55c" +dependencies = [ + "bitflags 2.6.0", + "bytemuck", + "libm", + "smallvec", + "ttf-parser 0.21.1", + "unicode-bidi-mirroring", + "unicode-ccc", + "unicode-properties", + "unicode-script", +] + [[package]] name = "ruzstd" version = "0.7.1" @@ -4078,7 +4388,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ "bitflags 2.6.0", - "core-foundation", + "core-foundation 0.9.4", "core-foundation-sys", "libc", "security-framework-sys", @@ -4094,6 +4404,12 @@ dependencies = [ "libc", ] +[[package]] +name = "self_cell" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d369a96f978623eb3dc28807c4852d6cc617fed53da5d3c400feff1ef34a714a" + [[package]] name = "send_wrapper" version = "0.6.0" @@ -4117,7 +4433,7 @@ checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn", ] [[package]] @@ -4176,6 +4492,16 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" +[[package]] +name = "skrifa" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1c44ad1f6c5bdd4eefed8326711b7dbda9ea45dfd36068c427d332aa382cbe" +dependencies = [ + "bytemuck", + "read-fonts", +] + [[package]] name = "slab" version = "0.4.9" @@ -4200,6 +4526,19 @@ version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +[[package]] +name = "smol-hyper" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7428a49d323867702cd12b97b08a6b0104f39ec13b49117911f101271321bc1a" +dependencies = [ + "async-executor", + "async-io", + "futures-io", + "hyper", + "pin-project-lite", +] + [[package]] name = "smol_str" version = "0.2.2" @@ -4234,6 +4573,12 @@ dependencies = [ "bitflags 2.6.0", ] +[[package]] +name = "stackfuture" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eae92052b72ef70dafa16eddbabffc77e5ca3574be2f7bc1127b36f0a7ad7f2" + [[package]] name = "static_assertions" version = "1.1.0" @@ -4253,21 +4598,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20e16a0f46cf5fd675563ef54f26e83e20f2366bcf027bcb3cc3ed2b98aaf2ca" [[package]] -name = "syn" -version = "1.0.109" +name = "swash" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +checksum = "cbd59f3f359ddd2c95af4758c18270eddd9c730dde98598023cdabff472c2ca2" dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", + "skrifa", + "yazi", + "zeno", ] [[package]] name = "syn" -version = "2.0.77" +version = "2.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" +checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" dependencies = [ "proc-macro2", "quote", @@ -4284,17 +4629,25 @@ dependencies = [ ] [[package]] -name = "sysinfo" -version = "0.30.13" +name = "sys-locale" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a5b4ddaee55fb2bea2bf0e5000747e5f5c0de765e5a5ff87f4cd106439f4bb3" +checksum = "8eab9a99a024a169fe8a903cf9d4a3b3601109bcc13bd9e3c6fff259138626c4" +dependencies = [ + "libc", +] + +[[package]] +name = "sysinfo" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3b5ae3f4f7d64646c46c4cae4e3f01d1c5d255c7406fdd7c7f999a94e488791" dependencies = [ - "cfg-if", "core-foundation-sys", "libc", + "memchr", "ntapi", - "once_cell", - "windows 0.52.0", + "windows 0.54.0", ] [[package]] @@ -4304,7 +4657,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ "bitflags 2.6.0", - "core-foundation", + "core-foundation 0.9.4", "system-configuration-sys", ] @@ -4355,22 +4708,42 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.63" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c006c85c7651b3cf2ada4584faa36773bd07bac24acfb39f3c431b36d7e667aa" +dependencies = [ + "thiserror-impl 2.0.3", ] [[package]] name = "thiserror-impl" -version = "1.0.63" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f077553d607adc1caf65430528a576c757a71ed73944b66ebb58ef2bbd243568" +dependencies = [ + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -4402,6 +4775,15 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + [[package]] name = "tinyvec" version = "1.8.0" @@ -4529,7 +4911,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn", ] [[package]] @@ -4553,6 +4935,21 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-oslog" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "528bdd1f0e27b5dd9a4ededf154e824b0532731e4af73bb531de46276e0aab1e" +dependencies = [ + "bindgen 0.70.1", + "cc", + "cfg-if", + "once_cell", + "parking_lot", + "tracing-core", + "tracing-subscriber", +] + [[package]] name = "tracing-subscriber" version = "0.3.18" @@ -4590,9 +4987,15 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "ttf-parser" -version = "0.24.1" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be21190ff5d38e8b4a2d3b6a3ae57f612cc39c96e83cedeaf7abc338a8bac4a" +checksum = "17f77d76d837a7830fe1d4f12b7b4ba4192c1888001c7164257e4bc6d21d96b4" + +[[package]] +name = "ttf-parser" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c591d83f69777866b9126b24c6dd9a18351f177e49d625920d19f989fd31cf8" [[package]] name = "twox-hash" @@ -4622,12 +5025,30 @@ version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" +[[package]] +name = "unicode-bidi-mirroring" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23cb788ffebc92c5948d0e997106233eeb1d8b9512f93f41651f52b6c5f5af86" + +[[package]] +name = "unicode-ccc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df77b101bcc4ea3d78dafc5ad7e4f58ceffe0b2b16bf446aeb50b6cb4157656" + [[package]] name = "unicode-ident" version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +[[package]] +name = "unicode-linebreak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" + [[package]] name = "unicode-normalization" version = "0.1.23" @@ -4637,6 +5058,18 @@ dependencies = [ "tinyvec", ] +[[package]] +name = "unicode-properties" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" + +[[package]] +name = "unicode-script" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb421b350c9aff471779e262955939f565ec18b86c15364e6bdf0d662ca7c1f" + [[package]] name = "unicode-segmentation" version = "1.11.0" @@ -4651,9 +5084,9 @@ checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" [[package]] name = "unicode-xid" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229730647fbc343e3a80e463c1db7f78f3855d3f3739bee0dda773c9a037c90a" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "untrusted" @@ -4733,9 +5166,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" +checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" dependencies = [ "cfg-if", "once_cell", @@ -4744,24 +5177,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" +checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.77", + "syn", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.43" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" +checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" dependencies = [ "cfg-if", "js-sys", @@ -4771,9 +5204,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" +checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4781,28 +5214,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" +checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.93" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" +checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" [[package]] name = "web-sys" -version = "0.3.70" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" +checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" dependencies = [ "js-sys", "wasm-bindgen", @@ -4820,16 +5253,16 @@ dependencies = [ [[package]] name = "wgpu" -version = "0.19.4" +version = "23.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbd7311dbd2abcfebaabf1841a2824ed7c8be443a0f29166e5d3c6a53a762c01" +checksum = "76ab52f2d3d18b70d5ab8dd270a1cff3ebe6dbe4a7d13c1cc2557138a9777fdc" dependencies = [ "arrayvec", - "cfg-if", "cfg_aliases 0.1.1", + "document-features", "js-sys", "log", - "naga 0.19.2", + "naga", "parking_lot", "profiling", "raw-window-handle", @@ -4838,118 +5271,63 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "wgpu-core 0.19.4", - "wgpu-hal 0.19.5", - "wgpu-types 0.19.2", -] - -[[package]] -name = "wgpu" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90e37c7b9921b75dfd26dd973fdcbce36f13dfa6e2dc82aece584e0ed48c355c" -dependencies = [ - "arrayvec", - "cfg-if", - "cfg_aliases 0.1.1", - "document-features", - "js-sys", - "log", - "naga 0.20.0", - "parking_lot", - "profiling", - "raw-window-handle", - "smallvec", - "static_assertions", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "wgpu-core 0.21.1", - "wgpu-hal 0.21.1", - "wgpu-types 0.20.0", + "wgpu-core", + "wgpu-hal", + "wgpu-types", ] [[package]] name = "wgpu-core" -version = "0.19.4" +version = "23.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28b94525fc99ba9e5c9a9e24764f2bc29bad0911a7446c12f446a8277369bf3a" +checksum = "0e0c68e7b6322a03ee5b83fcd92caeac5c2a932f6457818179f4652ad2a9c065" dependencies = [ "arrayvec", - "bit-vec", + "bit-vec 0.8.0", "bitflags 2.6.0", "cfg_aliases 0.1.1", - "codespan-reporting", + "document-features", "indexmap", "log", - "naga 0.19.2", + "naga", "once_cell", "parking_lot", "profiling", "raw-window-handle", "rustc-hash", "smallvec", - "thiserror", - "web-sys", - "wgpu-hal 0.19.5", - "wgpu-types 0.19.2", -] - -[[package]] -name = "wgpu-core" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d50819ab545b867d8a454d1d756b90cd5f15da1f2943334ca314af10583c9d39" -dependencies = [ - "arrayvec", - "bit-vec", - "bitflags 2.6.0", - "cfg_aliases 0.1.1", - "codespan-reporting", - "document-features", - "indexmap", - "log", - "naga 0.20.0", - "once_cell", - "parking_lot", - "profiling", - "raw-window-handle", - "rustc-hash", - "smallvec", - "thiserror", - "web-sys", - "wgpu-hal 0.21.1", - "wgpu-types 0.20.0", + "thiserror 1.0.69", + "wgpu-hal", + "wgpu-types", ] [[package]] name = "wgpu-hal" -version = "0.19.5" +version = "23.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfabcfc55fd86611a855816326b2d54c3b2fd7972c27ce414291562650552703" +checksum = "de6e7266b869de56c7e3ed72a954899f71d14fec6cc81c102b7530b92947601b" dependencies = [ "android_system_properties", "arrayvec", "ash", - "bit-set", + "bit-set 0.8.0", "bitflags 2.6.0", "block", + "bytemuck", "cfg_aliases 0.1.1", "core-graphics-types", - "d3d12 0.19.0", "glow", "glutin_wgl_sys", "gpu-alloc", "gpu-allocator", - "gpu-descriptor 0.2.4", - "hassle-rs", + "gpu-descriptor", "js-sys", "khronos-egl", "libc", - "libloading 0.8.5", + "libloading", "log", - "metal 0.27.0", - "naga 0.19.2", + "metal", + "naga", "ndk-sys 0.5.0+25.2.9519653", "objc", "once_cell", @@ -4960,86 +5338,25 @@ dependencies = [ "renderdoc-sys", "rustc-hash", "smallvec", - "thiserror", + "thiserror 1.0.69", "wasm-bindgen", "web-sys", - "wgpu-types 0.19.2", - "winapi", -] - -[[package]] -name = "wgpu-hal" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "172e490a87295564f3fcc0f165798d87386f6231b04d4548bca458cbbfd63222" -dependencies = [ - "android_system_properties", - "arrayvec", - "ash", - "bit-set", - "bitflags 2.6.0", - "block", - "cfg_aliases 0.1.1", - "core-graphics-types", - "d3d12 0.20.0", - "glow", - "glutin_wgl_sys", - "gpu-alloc", - "gpu-allocator", - "gpu-descriptor 0.3.0", - "hassle-rs", - "js-sys", - "khronos-egl", - "libc", - "libloading 0.8.5", - "log", - "metal 0.28.0", - "naga 0.20.0", - "ndk-sys 0.5.0+25.2.9519653", - "objc", - "once_cell", - "parking_lot", - "profiling", - "range-alloc", - "raw-window-handle", - "renderdoc-sys", - "rustc-hash", - "smallvec", - "thiserror", - "wasm-bindgen", - "web-sys", - "wgpu-types 0.20.0", - "winapi", + "wgpu-types", + "windows 0.58.0", + "windows-core 0.58.0", ] [[package]] name = "wgpu-types" -version = "0.19.2" +version = "23.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b671ff9fb03f78b46ff176494ee1ebe7d603393f42664be55b64dc8d53969805" +checksum = "610f6ff27778148c31093f3b03abc4840f9636d58d597ca2f5977433acfe0068" dependencies = [ "bitflags 2.6.0", "js-sys", "web-sys", ] -[[package]] -name = "wgpu-types" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1353d9a46bff7f955a680577f34c69122628cc2076e1d6f3a9be6ef00ae793ef" -dependencies = [ - "bitflags 2.6.0", - "js-sys", - "web-sys", -] - -[[package]] -name = "widestring" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" - [[package]] name = "winapi" version = "0.3.9" @@ -5071,16 +5388,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "windows" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" -dependencies = [ - "windows-core 0.52.0", - "windows-targets 0.52.6", -] - [[package]] name = "windows" version = "0.54.0" @@ -5088,8 +5395,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9252e5725dbed82865af151df558e754e4a3c2c30818359eb17465f1346a1b49" dependencies = [ "windows-core 0.54.0", - "windows-implement 0.53.0", - "windows-interface 0.53.0", "windows-targets 0.52.6", ] @@ -5103,15 +5408,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "windows-core" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" -dependencies = [ - "windows-targets 0.52.6", -] - [[package]] name = "windows-core" version = "0.54.0" @@ -5128,24 +5424,13 @@ version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" dependencies = [ - "windows-implement 0.58.0", - "windows-interface 0.58.0", + "windows-implement", + "windows-interface", "windows-result 0.2.0", "windows-strings", "windows-targets 0.52.6", ] -[[package]] -name = "windows-implement" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "942ac266be9249c84ca862f0a164a39533dc2f6f33dc98ec89c8da99b82ea0bd" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", -] - [[package]] name = "windows-implement" version = "0.58.0" @@ -5154,18 +5439,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", -] - -[[package]] -name = "windows-interface" -version = "0.53.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da33557140a288fae4e1d5f8873aaf9eb6613a9cf82c3e070223ff177f598b60" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", + "syn", ] [[package]] @@ -5176,7 +5450,7 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn", ] [[package]] @@ -5437,7 +5711,7 @@ dependencies = [ "calloop", "cfg_aliases 0.2.1", "concurrent-queue", - "core-foundation", + "core-foundation 0.9.4", "core-graphics", "cursor-icon", "dpi", @@ -5496,7 +5770,7 @@ dependencies = [ "as-raw-xcb-connection", "gethostname", "libc", - "libloading 0.8.5", + "libloading", "once_cell", "rustix", "x11rb-protocol", @@ -5508,12 +5782,6 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d" -[[package]] -name = "xi-unicode" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a67300977d3dc3f8034dae89778f502b6ba20b269527b3223ba59c0cf393bb8a" - [[package]] name = "xkbcommon-dl" version = "0.4.2" @@ -5539,6 +5807,18 @@ version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "539a77ee7c0de333dcc6da69b177380a0b81e0dacfa4f7344c465a36871ee601" +[[package]] +name = "yazi" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c94451ac9513335b5e23d7a8a2b61a7102398b8cca5160829d313e84c9d98be1" + +[[package]] +name = "zeno" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd15f8e0dbb966fd9245e7498c7e9e5055d9e5c8b676b95bd67091cd11a1e697" + [[package]] name = "zerocopy" version = "0.7.35" @@ -5557,7 +5837,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn", ] [[package]] @@ -5577,7 +5857,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn", ] [[package]] @@ -5602,7 +5882,7 @@ dependencies = [ "pbkdf2", "rand", "sha1", - "thiserror", + "thiserror 1.0.69", "time", "zeroize", "zopfli", diff --git a/Cargo.toml b/Cargo.toml index 6f11ce4..aa68360 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,10 +10,17 @@ resolver = "2" members = ["crates/*", "crates/bevy_openxr/examples/android"] [workspace.dependencies] -bevy = { version = "0.14.0", default-features = false, features = [ +bevy = { version = "0.15.0-rc.3", default-features = false, features = [ "bevy_render", "bevy_core_pipeline", "bevy_winit", "bevy_pbr", "x11", ] } +bevy_mod_xr.path = "crates/bevy_xr" +bevy_mod_openxr.path = "crates/bevy_openxr" +bevy_xr_utils.path = "crates/bevy_xr_utils" +openxr = "0.19.0" +thiserror = "2.0.3" +wgpu = "23" +wgpu-hal = "23" diff --git a/crates/bevy_openxr/Cargo.toml b/crates/bevy_openxr/Cargo.toml index 514ee8d..8e93909 100644 --- a/crates/bevy_openxr/Cargo.toml +++ b/crates/bevy_openxr/Cargo.toml @@ -10,11 +10,11 @@ keywords = ["gamedev", "bevy", "Xr", "Vr", "OpenXR"] [features] default = ["vulkan", "d3d12", "passthrough"] vulkan = ["dep:ash"] -d3d12 = ["wgpu/dx12", "wgpu-hal/dx12", "dep:winapi", "dep:d3d12"] +d3d12 = ["wgpu/dx12", "wgpu-hal/dx12", "dep:winapi"] passthrough = [] [dev-dependencies] -bevy_xr_utils.path = "../bevy_xr_utils" +bevy_xr_utils.workspace = true bevy = { workspace = true, default-features = true } [target.'cfg(target_os = "android")'.dependencies] @@ -27,22 +27,20 @@ bevy.workspace = true # all other dependencies are placed under this since on wasm, this crate is completely empty [target.'cfg(not(target_family = "wasm"))'.dependencies] -openxr = "0.18.0" -thiserror = "1.0.57" -wgpu = "0.20" -wgpu-hal = "0.21" -bevy_mod_xr = { path = "../bevy_xr", version = "0.1.0-rc1" } - -ash = { version = "0.37.3", optional = true } +bevy_mod_xr.workspace = true +openxr.workspace = true +thiserror.workspace = true +wgpu.workspace = true +wgpu-hal.workspace = true +ash = { version = "0.38", optional = true } [target.'cfg(target_family = "unix")'.dependencies] -openxr = { version = "0.18.0", features = ["mint"] } -wgpu = { version = "0.20", features = ["vulkan-portability"] } +openxr = { workspace = true, features = ["mint"] } +wgpu = { workspace = true, features = ["vulkan-portability"] } [target.'cfg(target_family = "windows")'.dependencies] -openxr = { version = "0.18.0", features = ["mint", "static"] } +openxr = { workspace=true, features = ["mint", "static"] } winapi = { version = "0.3.9", optional = true } -d3d12 = { version = "0.20", features = ["libloading"], optional = true } [lints.clippy] too_many_arguments = "allow" diff --git a/crates/bevy_openxr/examples/3d_scene.rs b/crates/bevy_openxr/examples/3d_scene.rs index 9eefd92..ee6c2ad 100644 --- a/crates/bevy_openxr/examples/3d_scene.rs +++ b/crates/bevy_openxr/examples/3d_scene.rs @@ -1,13 +1,25 @@ //! A simple 3D scene with light shining over a cube sitting on a plane. -use bevy::prelude::*; -use bevy_mod_openxr::add_xr_plugins; +use bevy::{prelude::*, render::pipelined_rendering::PipelinedRenderingPlugin}; +use bevy_mod_openxr::{add_xr_plugins, init::OxrInitPlugin}; +use openxr::EnvironmentBlendMode; fn main() { App::new() - .add_plugins(add_xr_plugins(DefaultPlugins)) + .add_plugins( + add_xr_plugins(DefaultPlugins.build().disable::()).set( + OxrInitPlugin { + blend_modes: Some(vec![ + EnvironmentBlendMode::ALPHA_BLEND, + EnvironmentBlendMode::ADDITIVE, + ]), + ..Default::default() + }, + ), + ) .add_plugins(bevy_xr_utils::hand_gizmos::HandGizmosPlugin) .add_systems(Startup, setup) + .insert_resource(ClearColor(Color::NONE)) .run(); } @@ -18,30 +30,27 @@ fn setup( mut materials: ResMut>, ) { // circular base - commands.spawn(PbrBundle { - mesh: meshes.add(Circle::new(4.0)), - material: materials.add(Color::WHITE), - transform: Transform::from_rotation(Quat::from_rotation_x(-std::f32::consts::FRAC_PI_2)), - ..default() - }); + commands.spawn(( + Mesh3d(meshes.add(Circle::new(4.0))), + MeshMaterial3d(materials.add(Color::WHITE)), + Transform::from_rotation(Quat::from_rotation_x(-std::f32::consts::FRAC_PI_2)), + )); // cube - commands.spawn(PbrBundle { - mesh: meshes.add(Cuboid::new(1.0, 1.0, 1.0)), - material: materials.add(Color::srgb_u8(124, 144, 255)), - transform: Transform::from_xyz(0.0, 0.5, 0.0), - ..default() - }); + commands.spawn(( + Mesh3d(meshes.add(Cuboid::new(1.0, 1.0, 1.0))), + MeshMaterial3d(materials.add(Color::srgb_u8(124, 144, 255))), + Transform::from_xyz(0.0, 0.5, 0.0), + )); // light - commands.spawn(PointLightBundle { - point_light: PointLight { + commands.spawn(( + PointLight { shadows_enabled: true, ..default() }, - transform: Transform::from_xyz(4.0, 8.0, 4.0), - ..default() - }); - commands.spawn(Camera3dBundle { - transform: Transform::from_xyz(-2.5, 4.5, 9.0).looking_at(Vec3::ZERO, Vec3::Y), - ..default() - }); + Transform::from_xyz(4.0, 8.0, 4.0), + )); + commands.spawn(( + Camera3d::default(), + Transform::from_xyz(-2.5, 4.5, 9.0).looking_at(Vec3::ZERO, Vec3::Y), + )); } diff --git a/crates/bevy_openxr/examples/actions.rs b/crates/bevy_openxr/examples/actions.rs index ad328ee..eb7c6d9 100644 --- a/crates/bevy_openxr/examples/actions.rs +++ b/crates/bevy_openxr/examples/actions.rs @@ -34,24 +34,22 @@ fn setup_scene( mut materials: ResMut>, ) { // circular base - commands.spawn(PbrBundle { - mesh: meshes.add(Circle::new(4.0)), - material: materials.add(Color::WHITE), - transform: Transform::from_rotation(Quat::from_rotation_x(-std::f32::consts::FRAC_PI_2)), - ..default() - }); + commands.spawn(( + Mesh3d(meshes.add(Circle::new(4.0))), + MeshMaterial3d(materials.add(Color::WHITE)), + Transform::from_rotation(Quat::from_rotation_x(-std::f32::consts::FRAC_PI_2)), + )); // cube - commands.spawn(PbrBundle { - mesh: meshes.add(Cuboid::new(1.0, 1.0, 1.0)), - material: materials.add(Color::srgb_u8(124, 144, 255)), - transform: Transform::from_xyz(0.0, 0.5, 0.0), - ..default() - }); + commands.spawn(( + Mesh3d(meshes.add(Cuboid::new(1.0, 1.0, 1.0))), + MeshMaterial3d(materials.add(Color::srgb_u8(124, 144, 255))), + Transform::from_xyz(0.0, 0.5, 0.0), + )); - commands.spawn(Camera3dBundle { - transform: Transform::from_xyz(-2.5, 4.5, 9.0).looking_at(Vec3::ZERO, Vec3::Y), - ..default() - }); + commands.spawn(( + Camera3d::default(), + Transform::from_xyz(-2.5, 4.5, 9.0).looking_at(Vec3::ZERO, Vec3::Y), + )); } #[derive(Component)] @@ -145,7 +143,7 @@ fn handle_flight_input( let locomotion_vector = reference_quat.mul_vec3(input_vector); root_position.translation += - locomotion_vector * speed * time.delta_seconds(); + locomotion_vector * speed * time.delta_secs(); } None => return, } diff --git a/crates/bevy_openxr/examples/android/Cargo.toml b/crates/bevy_openxr/examples/android/Cargo.toml index e1838cb..cc00df3 100644 --- a/crates/bevy_openxr/examples/android/Cargo.toml +++ b/crates/bevy_openxr/examples/android/Cargo.toml @@ -7,9 +7,9 @@ publish = false # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -bevy_mod_openxr.path = "../.." +bevy_mod_openxr.workspace = true bevy = { workspace = true, default-features = true } -bevy_xr_utils.path = "../../../bevy_xr_utils" +bevy_xr_utils.workspace = true [build-dependencies] reqwest = { version = "0.12", features = ["blocking"] } diff --git a/crates/bevy_openxr/examples/android/src/lib.rs b/crates/bevy_openxr/examples/android/src/lib.rs index d29979d..68a656f 100644 --- a/crates/bevy_openxr/examples/android/src/lib.rs +++ b/crates/bevy_openxr/examples/android/src/lib.rs @@ -21,8 +21,8 @@ fn main() { synchronous_pipeline_compilation: default(), })) .add_plugins(bevy_xr_utils::hand_gizmos::HandGizmosPlugin) - .insert_resource(Msaa::Off) .add_systems(Startup, setup) + .add_systems(Update, modify_msaa) .insert_resource(AmbientLight { color: Default::default(), brightness: 500.0, @@ -31,6 +31,15 @@ fn main() { .run(); } +#[derive(Component)] +struct MsaaModified; + +fn modify_msaa(cams: Query, Without)>, mut commands: Commands) { + for cam in &cams { + commands.entity(cam).insert(Msaa::Off).insert(MsaaModified); + } +} + /// set up a simple 3D scene fn setup( mut commands: Commands, @@ -40,19 +49,17 @@ fn setup( let mut white: StandardMaterial = Color::WHITE.into(); white.unlit = true; // circular base - commands.spawn(PbrBundle { - mesh: meshes.add(Circle::new(4.0)), - material: materials.add(white), - transform: Transform::from_rotation(Quat::from_rotation_x(-std::f32::consts::FRAC_PI_2)), - ..default() - }); + commands.spawn(( + Mesh3d(meshes.add(Circle::new(4.0))), + MeshMaterial3d(materials.add(white)), + Transform::from_rotation(Quat::from_rotation_x(-std::f32::consts::FRAC_PI_2)), + )); let mut cube_mat: StandardMaterial = Color::srgb_u8(124, 144, 255).into(); cube_mat.unlit = true; // cube - commands.spawn(PbrBundle { - mesh: meshes.add(Cuboid::new(1.0, 1.0, 1.0)), - material: materials.add(cube_mat), - transform: Transform::from_xyz(0.0, 0.5, 0.0), - ..default() - }); + commands.spawn(( + Mesh3d(meshes.add(Cuboid::new(1.0, 1.0, 1.0))), + MeshMaterial3d(materials.add(cube_mat)), + Transform::from_xyz(0.0, 0.5, 0.0), + )); } diff --git a/crates/bevy_openxr/examples/overlay.rs b/crates/bevy_openxr/examples/overlay.rs index 7372c71..d19b235 100644 --- a/crates/bevy_openxr/examples/overlay.rs +++ b/crates/bevy_openxr/examples/overlay.rs @@ -79,30 +79,27 @@ fn setup( mut materials: ResMut>, ) { // circular base - // commands.spawn(PbrBundle { - // mesh: meshes.add(Circle::new(4.0)), - // material: materials.add(Color::WHITE), - // transform: Transform::from_rotation(Quat::from_rotation_x(-std::f32::consts::FRAC_PI_2)), - // ..default() - // }); + // commands.spawn(( + // Mesh3d(meshes.add(Circle::new(4.0))), + // MeshMaterial3d(materials.add(Color::WHITE)), + // Transform::from_rotation(Quat::from_rotation_x(-std::f32::consts::FRAC_PI_2)), + // )); // cube - commands.spawn(PbrBundle { - mesh: meshes.add(Cuboid::new(1.0, 1.0, 1.0)), - material: materials.add(Color::srgb_u8(124, 144, 255)), - transform: Transform::from_xyz(0.0, 2.5, 0.0), - ..default() - }); + commands.spawn(( + Mesh3d(meshes.add(Cuboid::new(1.0, 1.0, 1.0))), + MeshMaterial3d(materials.add(Color::srgb_u8(124, 144, 255))), + Transform::from_xyz(0.0, 2.5, 0.0), + )); // light - commands.spawn(PointLightBundle { - point_light: PointLight { + commands.spawn(( + PointLight { shadows_enabled: true, ..default() }, - transform: Transform::from_xyz(4.0, 8.0, 4.0), - ..default() - }); - commands.spawn(Camera3dBundle { - transform: Transform::from_xyz(-2.5, 4.5, 9.0).looking_at(Vec3::ZERO, Vec3::Y), - ..default() - }); + Transform::from_xyz(4.0, 8.0, 4.0), + )); + commands.spawn(( + Camera3d::default(), + Transform::from_xyz(-2.5, 4.5, 9.0).looking_at(Vec3::ZERO, Vec3::Y), + )); } diff --git a/crates/bevy_openxr/examples/raw_actions.rs b/crates/bevy_openxr/examples/raw_actions.rs index 2cb9888..c706a0e 100644 --- a/crates/bevy_openxr/examples/raw_actions.rs +++ b/crates/bevy_openxr/examples/raw_actions.rs @@ -13,7 +13,6 @@ use bevy_mod_openxr::{ use bevy_mod_xr::{ session::{session_available, session_running, XrSessionCreated, XrTrackingRoot}, spaces::XrSpace, - types::XrPose, }; use openxr::Posef; @@ -55,32 +54,29 @@ fn setup( mut materials: ResMut>, ) { // circular base - commands.spawn(PbrBundle { - mesh: meshes.add(Circle::new(4.0)), - material: materials.add(Color::WHITE), - transform: Transform::from_rotation(Quat::from_rotation_x(-std::f32::consts::FRAC_PI_2)), - ..default() - }); + commands.spawn(( + Mesh3d(meshes.add(Circle::new(4.0))), + MeshMaterial3d(materials.add(Color::WHITE)), + Transform::from_rotation(Quat::from_rotation_x(-std::f32::consts::FRAC_PI_2)), + )); // cube - commands.spawn(PbrBundle { - mesh: meshes.add(Cuboid::new(1.0, 1.0, 1.0)), - material: materials.add(Color::srgb_u8(124, 144, 255)), - transform: Transform::from_xyz(0.0, 0.5, 0.0), - ..default() - }); + commands.spawn(( + Mesh3d(meshes.add(Cuboid::new(1.0, 1.0, 1.0))), + MeshMaterial3d(materials.add(Color::srgb_u8(124, 144, 255))), + Transform::from_xyz(0.0, 0.5, 0.0), + )); // light - commands.spawn(PointLightBundle { - point_light: PointLight { + commands.spawn(( + PointLight { shadows_enabled: true, ..default() }, - transform: Transform::from_xyz(4.0, 8.0, 4.0), - ..default() - }); - commands.spawn(Camera3dBundle { - transform: Transform::from_xyz(-2.5, 4.5, 9.0).looking_at(Vec3::ZERO, Vec3::Y), - ..default() - }); + Transform::from_xyz(4.0, 8.0, 4.0), + )); + commands.spawn(( + Camera3d::default(), + Transform::from_xyz(-2.5, 4.5, 9.0).looking_at(Vec3::ZERO, Vec3::Y), + )); } fn suggest_action_bindings( actions: Res, @@ -130,34 +126,28 @@ fn spawn_hands( .unwrap(), ); let right_space = session - .create_action_space(&actions.right, openxr::Path::NULL, XrPose::IDENTITY) + .create_action_space(&actions.right, openxr::Path::NULL, Isometry3d::IDENTITY) .unwrap(); let left = cmds .spawn(( - PbrBundle { - mesh: meshes.add(Cuboid::new(0.1, 0.1, 0.05)), - material: materials.add(Color::srgb_u8(124, 144, 255)), - transform: Transform::from_xyz(0.0, 0.5, 0.0), - ..default() - }, + Mesh3d(meshes.add(Cuboid::new(0.1, 0.1, 0.05))), + MeshMaterial3d(materials.add(Color::srgb_u8(124, 144, 255))), + Transform::from_xyz(0.0, 0.5, 0.0), left_space, Controller, )) .id(); let right = cmds .spawn(( - PbrBundle { - mesh: meshes.add(Cuboid::new(0.1, 0.1, 0.05)), - material: materials.add(Color::srgb_u8(124, 144, 255)), - transform: Transform::from_xyz(0.0, 0.5, 0.0), - ..default() - }, + Mesh3d(meshes.add(Cuboid::new(0.1, 0.1, 0.05))), + MeshMaterial3d(materials.add(Color::srgb_u8(124, 144, 255))), + Transform::from_xyz(0.0, 0.5, 0.0), right_space, Controller, )) .id(); - cmds.entity(root.single()).push_children(&[left, right]); + cmds.entity(root.single()).add_children(&[left, right]); } #[derive(Component)] diff --git a/crates/bevy_openxr/examples/sessions.rs b/crates/bevy_openxr/examples/sessions.rs index 3861930..27e718c 100644 --- a/crates/bevy_openxr/examples/sessions.rs +++ b/crates/bevy_openxr/examples/sessions.rs @@ -55,21 +55,19 @@ fn setup( mut materials: ResMut>, ) { // circular base - commands.spawn(PbrBundle { - mesh: meshes.add(Circle::new(4.0)), - material: materials.add(Color::WHITE), - transform: Transform::from_rotation(Quat::from_rotation_x(-std::f32::consts::FRAC_PI_2)), - ..default() - }); + commands.spawn(( + Mesh3d(meshes.add(Circle::new(4.0))), + MeshMaterial3d(materials.add(Color::WHITE)), + Transform::from_rotation(Quat::from_rotation_x(-std::f32::consts::FRAC_PI_2)), + )); // cube - commands.spawn(PbrBundle { - mesh: meshes.add(Cuboid::new(1.0, 1.0, 1.0)), - material: materials.add(Color::srgb_u8(124, 144, 255)), - transform: Transform::from_xyz(0.0, 0.5, 0.0), - ..default() - }); - commands.spawn(Camera3dBundle { - transform: Transform::from_xyz(-2.5, 4.5, 9.0).looking_at(Vec3::ZERO, Vec3::Y), - ..default() - }); + commands.spawn(( + Mesh3d(meshes.add(Cuboid::new(1.0, 1.0, 1.0))), + MeshMaterial3d(materials.add(Color::srgb_u8(124, 144, 255))), + Transform::from_xyz(0.0, 0.5, 0.0), + )); + commands.spawn(( + Camera3d::default(), + Transform::from_xyz(-2.5, 4.5, 9.0).looking_at(Vec3::ZERO, Vec3::Y), + )); } diff --git a/crates/bevy_openxr/examples/tracking_utils.rs b/crates/bevy_openxr/examples/tracking_utils.rs index 7f79a54..7e9cf82 100644 --- a/crates/bevy_openxr/examples/tracking_utils.rs +++ b/crates/bevy_openxr/examples/tracking_utils.rs @@ -2,7 +2,7 @@ use bevy::prelude::*; use bevy_mod_openxr::add_xr_plugins; -use bevy_mod_xr::session::{XrSessionCreated, XrTrackingRoot}; +use bevy_mod_xr::session::XrSessionCreated; use bevy_xr_utils::tracking_utils::{ TrackingUtilitiesPlugin, XrTrackedLeftGrip, XrTrackedLocalFloor, XrTrackedRightGrip, XrTrackedStage, XrTrackedView, @@ -29,25 +29,23 @@ fn setup( mut materials: ResMut>, ) { // circular base - commands.spawn(PbrBundle { - mesh: meshes.add(Circle::new(4.0)), - material: materials.add(Color::WHITE), - transform: Transform::from_rotation(Quat::from_rotation_x(-std::f32::consts::FRAC_PI_2)), - ..default() - }); + commands.spawn(( + Mesh3d(meshes.add(Circle::new(4.0))), + MeshMaterial3d(materials.add(Color::WHITE)), + Transform::from_rotation(Quat::from_rotation_x(-std::f32::consts::FRAC_PI_2)), + )); // light - commands.spawn(PointLightBundle { - point_light: PointLight { + commands.spawn(( + PointLight { shadows_enabled: true, ..default() }, - transform: Transform::from_xyz(4.0, 8.0, 4.0), - ..default() - }); - commands.spawn(Camera3dBundle { - transform: Transform::from_xyz(-2.5, 4.5, 9.0).looking_at(Vec3::ZERO, Vec3::Y), - ..default() - }); + Transform::from_xyz(4.0, 8.0, 4.0), + )); + commands.spawn(( + Camera3d::default(), + Transform::from_xyz(-2.5, 4.5, 9.0).looking_at(Vec3::ZERO, Vec3::Y), + )); } fn spawn_hands( @@ -57,22 +55,16 @@ fn spawn_hands( ) { let left = cmds .spawn(( - PbrBundle { - mesh: meshes.add(Cuboid::new(0.1, 0.1, 0.05)), - material: materials.add(Color::srgb_u8(124, 144, 255)), - transform: Transform::from_xyz(0.0, 0.5, 0.0), - ..default() - }, + Mesh3d(meshes.add(Cuboid::new(0.1, 0.1, 0.05))), + MeshMaterial3d(materials.add(Color::srgb_u8(124, 144, 255))), + Transform::from_xyz(0.0, 0.5, 0.0), XrTrackedLeftGrip, )) .id(); let bundle = ( - PbrBundle { - mesh: meshes.add(Cuboid::new(0.1, 0.1, 0.05)), - material: materials.add(Color::srgb_u8(124, 144, 255)), - transform: Transform::from_xyz(0.0, 0.5, 0.0), - ..default() - }, + Mesh3d(meshes.add(Cuboid::new(0.1, 0.1, 0.05))), + MeshMaterial3d(materials.add(Color::srgb_u8(124, 144, 255))), + Transform::from_xyz(0.0, 0.5, 0.0), XrTrackedRightGrip, ); let right = cmds.spawn(bundle).id(); @@ -80,40 +72,31 @@ fn spawn_hands( let head = cmds .spawn(( - PbrBundle { - mesh: meshes.add(Cuboid::new(0.2, 0.2, 0.2)), - material: materials.add(Color::srgb_u8(255, 144, 144)), - transform: Transform::from_xyz(0.0, 0.0, 0.0), - ..default() - }, + Mesh3d(meshes.add(Cuboid::new(0.2, 0.2, 0.2))), + MeshMaterial3d(materials.add(Color::srgb_u8(255, 144, 144))), + Transform::from_xyz(0.0, 0.0, 0.0), XrTrackedView, )) .id(); //local_floor emulated let local_floor = cmds .spawn(( - PbrBundle { - mesh: meshes.add(Cuboid::new(0.5, 0.1, 0.5)), - material: materials.add(Color::srgb_u8(144, 255, 144)), - transform: Transform::from_xyz(0.0, 0.0, 0.0), - ..default() - }, + Mesh3d(meshes.add(Cuboid::new(0.5, 0.1, 0.5))), + MeshMaterial3d(materials.add(Color::srgb_u8(144, 255, 144))), + Transform::from_xyz(0.0, 0.0, 0.0), XrTrackedLocalFloor, )) .id(); let stage = cmds .spawn(( - PbrBundle { - mesh: meshes.add(Cuboid::new(0.5, 0.1, 0.5)), - material: materials.add(Color::srgb_u8(144, 255, 255)), - transform: Transform::from_xyz(0.0, 0.0, 0.0), - ..default() - }, + Mesh3d(meshes.add(Cuboid::new(0.5, 0.1, 0.5))), + MeshMaterial3d(materials.add(Color::srgb_u8(144, 255, 255))), + Transform::from_xyz(0.0, 0.0, 0.0), XrTrackedStage, )) .id(); cmds.entity(stage) - .push_children(&[left, right, head, local_floor]); + .add_children(&[left, right, head, local_floor]); } diff --git a/crates/bevy_openxr/examples/transform_utils.rs b/crates/bevy_openxr/examples/transform_utils.rs index b578062..08b6161 100644 --- a/crates/bevy_openxr/examples/transform_utils.rs +++ b/crates/bevy_openxr/examples/transform_utils.rs @@ -41,52 +41,46 @@ fn setup( mut materials: ResMut>, ) { // circular base - commands.spawn(PbrBundle { - mesh: meshes.add(Circle::new(4.0)), - material: materials.add(Color::WHITE), - transform: Transform::from_rotation(Quat::from_rotation_x(-std::f32::consts::FRAC_PI_2)), - ..default() - }); + commands.spawn(( + Mesh3d(meshes.add(Circle::new(4.0))), + MeshMaterial3d(materials.add(Color::WHITE)), + Transform::from_rotation(Quat::from_rotation_x(-std::f32::consts::FRAC_PI_2)), + )); // red cube - commands.spawn(PbrBundle { - mesh: meshes.add(Cuboid::new(1.0, 1.0, 1.0)), - material: materials.add(Color::srgb_u8(252, 44, 3)), - transform: Transform::from_xyz(4.0, 0.5, 0.0).with_scale(Vec3::splat(0.5)), - ..default() - }); + commands.spawn(( + Mesh3d(meshes.add(Cuboid::new(1.0, 1.0, 1.0))), + MeshMaterial3d(materials.add(Color::srgb_u8(252, 44, 3))), + Transform::from_xyz(4.0, 0.5, 0.0).with_scale(Vec3::splat(0.5)), + )); // blue cube - commands.spawn(PbrBundle { - mesh: meshes.add(Cuboid::new(1.0, 1.0, 1.0)), - material: materials.add(Color::srgb_u8(3, 28, 252)), - transform: Transform::from_xyz(-4.0, 0.5, 0.0).with_scale(Vec3::splat(0.5)), - ..default() - }); + commands.spawn(( + Mesh3d(meshes.add(Cuboid::new(1.0, 1.0, 1.0))), + MeshMaterial3d(materials.add(Color::srgb_u8(3, 28, 252))), + Transform::from_xyz(-4.0, 0.5, 0.0).with_scale(Vec3::splat(0.5)), + )); // green cube - commands.spawn(PbrBundle { - mesh: meshes.add(Cuboid::new(1.0, 1.0, 1.0)), - material: materials.add(Color::srgb_u8(3, 252, 32)), - transform: Transform::from_xyz(0.0, 0.5, 4.0).with_scale(Vec3::splat(0.5)), - ..default() - }); + commands.spawn(( + Mesh3d(meshes.add(Cuboid::new(1.0, 1.0, 1.0))), + MeshMaterial3d(materials.add(Color::srgb_u8(3, 252, 32))), + Transform::from_xyz(0.0, 0.5, 4.0).with_scale(Vec3::splat(0.5)), + )); // white cube - commands.spawn(PbrBundle { - mesh: meshes.add(Cuboid::new(1.0, 1.0, 1.0)), - material: materials.add(Color::srgb_u8(250, 250, 250)), - transform: Transform::from_xyz(0.0, 0.5, -4.0).with_scale(Vec3::splat(0.5)), - ..default() - }); + commands.spawn(( + Mesh3d(meshes.add(Cuboid::new(1.0, 1.0, 1.0))), + MeshMaterial3d(materials.add(Color::srgb_u8(250, 250, 250))), + Transform::from_xyz(0.0, 0.5, -4.0).with_scale(Vec3::splat(0.5)), + )); // black cube - commands.spawn(PbrBundle { - mesh: meshes.add(Cuboid::new(1.0, 1.0, 1.0)), - material: materials.add(Color::srgb_u8(0, 0, 0)), - transform: Transform::from_xyz(0.0, 0.1, 0.0).with_scale(Vec3::splat(0.2)), - ..default() - }); + commands.spawn(( + Mesh3d(meshes.add(Cuboid::new(1.0, 1.0, 1.0))), + MeshMaterial3d(materials.add(Color::srgb_u8(0, 0, 0))), + Transform::from_xyz(0.0, 0.1, 0.0).with_scale(Vec3::splat(0.2)), + )); - commands.spawn(Camera3dBundle { - transform: Transform::from_xyz(-2.5, 4.5, 9.0).looking_at(Vec3::ZERO, Vec3::Y), - ..default() - }); + commands.spawn(( + Camera3d::default(), + Transform::from_xyz(-2.5, 4.5, 9.0).looking_at(Vec3::ZERO, Vec3::Y), + )); } #[derive(Component)] diff --git a/crates/bevy_openxr/src/openxr/action_binding.rs b/crates/bevy_openxr/src/openxr/action_binding.rs index fb53eee..b571d9d 100644 --- a/crates/bevy_openxr/src/openxr/action_binding.rs +++ b/crates/bevy_openxr/src/openxr/action_binding.rs @@ -16,7 +16,7 @@ impl Plugin for OxrActionBindingPlugin { app.add_event::(); app.add_systems( Update, - run_action_binding_sugestion.run_if(on_event::()), + run_action_binding_sugestion.run_if(on_event::), ); } } @@ -25,7 +25,7 @@ impl Plugin for OxrActionBindingPlugin { // Event to allow requesting binding suggestion for new actions pub(crate) fn run_action_binding_sugestion(world: &mut World) { world.run_schedule(OxrSendActionBindings); - world.run_system_once(bind_actions); + _ = world.run_system_once(bind_actions); } fn bind_actions(instance: Res, mut actions: EventReader) { diff --git a/crates/bevy_openxr/src/openxr/action_set_attaching.rs b/crates/bevy_openxr/src/openxr/action_set_attaching.rs index f8c1618..2072ba5 100644 --- a/crates/bevy_openxr/src/openxr/action_set_attaching.rs +++ b/crates/bevy_openxr/src/openxr/action_set_attaching.rs @@ -8,7 +8,7 @@ impl Plugin for OxrActionAttachingPlugin { app.add_systems( PostUpdate, attach_sets - .run_if(on_event::()) + .run_if(on_event::) .after(run_action_binding_sugestion), ); } diff --git a/crates/bevy_openxr/src/openxr/features/handtracking.rs b/crates/bevy_openxr/src/openxr/features/handtracking.rs index 6c0cff6..702ed19 100644 --- a/crates/bevy_openxr/src/openxr/features/handtracking.rs +++ b/crates/bevy_openxr/src/openxr/features/handtracking.rs @@ -90,14 +90,14 @@ fn spawn_default_hands(mut cmds: Commands, root: Query Result<(WgpuGraphics, Self::SessionCreateInfo)>; - unsafe fn create_session( + unsafe fn create_session( instance: &openxr::Instance, system_id: openxr::SystemId, info: &Self::SessionCreateInfo, @@ -74,8 +77,8 @@ impl GraphicsBackend { const ALL: &'static [Self] = &[ #[cfg(feature = "vulkan")] Self::Vulkan(()), - #[cfg(all(feature = "d3d12", windows))] - Self::D3D12(()), + // #[cfg(all(feature = "d3d12", windows))] + // Self::D3D12(()), ]; pub fn available_backends(exts: &OxrExtensions) -> Vec { @@ -103,8 +106,8 @@ impl GraphicsBackend { pub enum GraphicsWrap { #[cfg(feature = "vulkan")] Vulkan(T::Inner), - #[cfg(all(feature = "d3d12", windows))] - D3D12(T::Inner), + // #[cfg(all(feature = "d3d12", windows))] + // D3D12(T::Inner), } impl GraphicsWrap { @@ -173,12 +176,12 @@ macro_rules! graphics_match { type Api = openxr::Vulkan; graphics_match!(@arm_impl Vulkan; $expr $(=> $($return)*)?) }, - #[cfg(all(feature = "d3d12", windows))] - $crate::graphics::GraphicsWrap::D3D12($var) => { - #[allow(unused)] - type Api = openxr::D3D12; - graphics_match!(@arm_impl D3D12; $expr $(=> $($return)*)?) - }, + // #[cfg(all(feature = "d3d12", windows))] + // $crate::graphics::GraphicsWrap::D3D12($var) => { + // #[allow(unused)] + // type Api = openxr::D3D12; + // graphics_match!(@arm_impl D3D12; $expr $(=> $($return)*)?) + // }, } }; diff --git a/crates/bevy_openxr/src/openxr/graphics/vulkan.rs b/crates/bevy_openxr/src/openxr/graphics/vulkan.rs index da1d733..7214220 100644 --- a/crates/bevy_openxr/src/openxr/graphics/vulkan.rs +++ b/crates/bevy_openxr/src/openxr/graphics/vulkan.rs @@ -21,7 +21,7 @@ const VK_TARGET_VERSION_ASH: u32 = ash::vk::make_api_version( 0, VK_TARGET_VERSION.major() as u32, VK_TARGET_VERSION.minor() as u32, - VK_TARGET_VERSION.patch() as u32, + VK_TARGET_VERSION.patch(), ); unsafe impl GraphicsExt for openxr::Vulkan { @@ -63,7 +63,7 @@ unsafe impl GraphicsExt for openxr::Vulkan { mip_level_count: 1, sample_count: 1, dimension: wgpu::TextureDimension::D2, - format: format, + format, usage: wgpu_hal::TextureUses::COLOR_TARGET | wgpu_hal::TextureUses::COPY_DST, memory_flags: wgpu_hal::MemoryFlags::empty(), view_formats: vec![], @@ -84,7 +84,7 @@ unsafe impl GraphicsExt for openxr::Vulkan { mip_level_count: 1, sample_count: 1, dimension: wgpu::TextureDimension::D2, - format: format, + format, usage: wgpu::TextureUsages::RENDER_ATTACHMENT | wgpu::TextureUsages::COPY_DST, view_formats: &[], }, @@ -113,20 +113,20 @@ unsafe impl GraphicsExt for openxr::Vulkan { let flags = wgpu::InstanceFlags::empty(); let extensions = ::Instance::desired_extensions(&vk_entry, VK_TARGET_VERSION_ASH, flags)?; - let device_extensions = vec![ - ash::extensions::khr::Swapchain::name(), - ash::extensions::khr::DrawIndirectCount::name(), - #[cfg(target_os = "android")] - ash::extensions::khr::TimelineSemaphore::name(), - ash::vk::KhrImagelessFramebufferFn::name(), - ash::vk::KhrImageFormatListFn::name(), + let device_extensions = [ + ash::khr::swapchain::NAME, + ash::khr::draw_indirect_count::NAME, + // #[cfg(target_os = "android")] + ash::khr::timeline_semaphore::NAME, + ash::khr::imageless_framebuffer::NAME, + ash::khr::image_format_list::NAME, ]; let vk_instance = unsafe { let extensions_cchar: Vec<_> = extensions.iter().map(|s| s.as_ptr()).collect(); let app_name = CString::new(app_info.name.clone().into_owned())?; - let vk_app_info = ash::vk::ApplicationInfo::builder() + let vk_app_info = ash::vk::ApplicationInfo::default() .application_name(&app_name) .application_version(1) .engine_name(&app_name) @@ -136,8 +136,9 @@ unsafe impl GraphicsExt for openxr::Vulkan { let vk_instance = instance .create_vulkan_instance( system_id, + #[allow(clippy::missing_transmute_annotations)] std::mem::transmute(vk_entry.static_fn().get_instance_proc_addr), - &ash::vk::InstanceCreateInfo::builder() + &ash::vk::InstanceCreateInfo::default() .application_info(&vk_app_info) .enabled_extension_names(&extensions_cchar) as *const _ as *const _, @@ -181,7 +182,7 @@ unsafe impl GraphicsExt for openxr::Vulkan { extensions, flags, false, - Some(Box::new(())), + None, )? }; @@ -205,26 +206,26 @@ unsafe impl GraphicsExt for openxr::Vulkan { .adapter .physical_device_features(&enabled_extensions, wgpu_features); let family_index = 0; - let family_info = ash::vk::DeviceQueueCreateInfo::builder() + let family_info = ash::vk::DeviceQueueCreateInfo::default() .queue_family_index(family_index) - .queue_priorities(&[1.0]) - .build(); + .queue_priorities(&[1.0]); let family_infos = [family_info]; + let mut physical_device_multiview_features = ash::vk::PhysicalDeviceMultiviewFeatures { + multiview: ash::vk::TRUE, + ..Default::default() + }; let info = enabled_phd_features - .add_to_device_create_builder( - ash::vk::DeviceCreateInfo::builder() + .add_to_device_create( + ash::vk::DeviceCreateInfo::default() .queue_create_infos(&family_infos) - .push_next(&mut ash::vk::PhysicalDeviceMultiviewFeatures { - multiview: ash::vk::TRUE, - ..Default::default() - }), + .push_next(&mut physical_device_multiview_features), ) - .enabled_extension_names(&extensions_cchar) - .build(); + .enabled_extension_names(&extensions_cchar); let vk_device = unsafe { let vk_device = instance .create_vulkan_device( system_id, + #[allow(clippy::missing_transmute_annotations)] std::mem::transmute(vk_entry.static_fn().get_instance_proc_addr), vk_physical_device.as_raw() as _, &info as *const _ as *const _, @@ -241,9 +242,10 @@ unsafe impl GraphicsExt for openxr::Vulkan { let wgpu_open_device = unsafe { wgpu_exposed_adapter.adapter.device_from_raw( vk_device, - true, + None, &enabled_extensions, wgpu_features, + &wgpu::MemoryHints::Performance, family_info.queue_family_index, 0, ) @@ -273,6 +275,7 @@ unsafe impl GraphicsExt for openxr::Vulkan { max_push_constant_size: 4, ..Default::default() }, + memory_hints: wgpu::MemoryHints::Performance, }, None, ) @@ -320,7 +323,7 @@ unsafe impl GraphicsExt for openxr::Vulkan { ty: sys::SessionCreateInfo::TYPE, next: &binding as *const _ as *const _, create_flags: Default::default(), - system_id: system_id, + system_id, }; let mut out = sys::Session::NULL; cvt((instance.fp().create_session)( @@ -379,7 +382,7 @@ fn vulkan_to_wgpu(format: ash::vk::Format) -> Option { F::R8G8B8A8_SINT => Tf::Rgba8Sint, F::A2B10G10R10_UINT_PACK32 => Tf::Rgb10a2Uint, F::A2B10G10R10_UNORM_PACK32 => Tf::Rgb10a2Unorm, - F::B10G11R11_UFLOAT_PACK32 => Tf::Rg11b10Float, + F::B10G11R11_UFLOAT_PACK32 => Tf::Rg11b10Ufloat, F::R32G32_UINT => Tf::Rg32Uint, F::R32G32_SINT => Tf::Rg32Sint, F::R32G32_SFLOAT => Tf::Rg32Float, @@ -630,7 +633,7 @@ fn wgpu_to_vulkan(format: wgpu::TextureFormat) -> Option { Tf::Rgba8Sint => F::R8G8B8A8_SINT, Tf::Rgb10a2Uint => F::A2B10G10R10_UINT_PACK32, Tf::Rgb10a2Unorm => F::A2B10G10R10_UNORM_PACK32, - Tf::Rg11b10Float => F::B10G11R11_UFLOAT_PACK32, + Tf::Rg11b10Ufloat => F::B10G11R11_UFLOAT_PACK32, Tf::Rg32Uint => F::R32G32_UINT, Tf::Rg32Sint => F::R32G32_SINT, Tf::Rg32Float => F::R32G32_SFLOAT, @@ -724,4 +727,3 @@ fn wgpu_to_vulkan(format: wgpu::TextureFormat) -> Option { }, }) } - diff --git a/crates/bevy_openxr/src/openxr/helper_traits.rs b/crates/bevy_openxr/src/openxr/helper_traits.rs index 996f5a4..01ef1c6 100644 --- a/crates/bevy_openxr/src/openxr/helper_traits.rs +++ b/crates/bevy_openxr/src/openxr/helper_traits.rs @@ -1,5 +1,4 @@ -use bevy::prelude::*; -use bevy_mod_xr::types::XrPose; +use bevy::{math::Vec3A, prelude::*}; pub trait ToPosef { fn to_posef(&self) -> openxr::Posef; @@ -7,8 +6,8 @@ pub trait ToPosef { pub trait ToTransform { fn to_transform(&self) -> Transform; } -pub trait ToXrPose { - fn to_xr_pose(&self) -> XrPose; +pub trait ToIsometry3d { + fn to_xr_pose(&self) -> Isometry3d; } pub trait ToQuaternionf { fn to_quaternionf(&self) -> openxr::Quaternionf; @@ -42,15 +41,15 @@ impl ToTransform for openxr::Posef { .with_rotation(self.orientation.to_quat()) } } -impl ToXrPose for openxr::Posef { - fn to_xr_pose(&self) -> XrPose { - XrPose { - translation: self.position.to_vec3(), +impl ToIsometry3d for openxr::Posef { + fn to_xr_pose(&self) -> Isometry3d { + Isometry3d { + translation: self.position.to_vec3().into(), rotation: self.orientation.to_quat(), } } } -impl ToPosef for XrPose { +impl ToPosef for Isometry3d { fn to_posef(&self) -> openxr::Posef { openxr::Posef { orientation: self.rotation.to_quaternionf(), @@ -90,6 +89,15 @@ impl ToVector3f for Vec3 { } } } +impl ToVector3f for Vec3A { + fn to_vector3f(&self) -> openxr::Vector3f { + openxr::Vector3f { + x: self.x, + y: self.y, + z: self.z, + } + } +} impl ToVec3 for openxr::Vector3f { fn to_vec3(&self) -> Vec3 { Vec3 { diff --git a/crates/bevy_openxr/src/openxr/init.rs b/crates/bevy_openxr/src/openxr/init.rs index 5567746..8840c7b 100644 --- a/crates/bevy_openxr/src/openxr/init.rs +++ b/crates/bevy_openxr/src/openxr/init.rs @@ -113,7 +113,7 @@ impl Plugin for OxrInitPlugin { ( create_xr_session .run_if(state_equals(XrState::Available)) - .run_if(on_event::()), + .run_if(on_event::), ( destroy_xr_session, (|v: Res| { @@ -122,16 +122,16 @@ impl Plugin for OxrInitPlugin { }), ) .run_if(state_matches!(XrState::Exiting { .. })) - .run_if(on_event::()), + .run_if(on_event::), begin_xr_session .run_if(state_equals(XrState::Ready)) - .run_if(on_event::()), + .run_if(on_event::), end_xr_session .run_if(state_equals(XrState::Stopping)) - .run_if(on_event::()), + .run_if(on_event::), request_exit_xr_session .run_if(session_created) - .run_if(on_event::()), + .run_if(on_event::), ) .in_set(XrHandleEvents::SessionStateUpdateEvents), ) @@ -146,9 +146,6 @@ impl Plugin for OxrInitPlugin { .insert_non_send_resource(session_create_info) .init_non_send_resource::(); - app.world_mut() - .spawn((SpatialBundle::default(), XrTrackingRoot)); - app.world_mut() .resource_mut::>() .send(XrStateChanged(XrState::Available)); @@ -178,7 +175,7 @@ impl Plugin for OxrInitPlugin { }) .run_if( resource_exists:: - .and_then(|v: Res| v.0.load(Ordering::Relaxed)), + .and(|v: Res| v.0.load(Ordering::Relaxed)), ) .chain(), ); @@ -467,7 +464,7 @@ pub fn create_xr_session(world: &mut World) { let system_id = world.resource::(); match init_xr_session( device.wgpu_device(), - &instance, + instance, **system_id, &mut chain, create_info.clone(), @@ -475,8 +472,8 @@ pub fn create_xr_session(world: &mut World) { Ok((session, frame_waiter, frame_stream, swapchain, images, graphics_info)) => { world.insert_resource(session.clone()); world.insert_resource(frame_waiter); - world.insert_resource(images.clone()); - world.insert_resource(graphics_info.clone()); + world.insert_resource(images); + world.insert_resource(graphics_info); world.insert_resource(OxrRenderResources { session, frame_stream, diff --git a/crates/bevy_openxr/src/openxr/layer_builder.rs b/crates/bevy_openxr/src/openxr/layer_builder.rs index 7bab5d4..acb9edb 100644 --- a/crates/bevy_openxr/src/openxr/layer_builder.rs +++ b/crates/bevy_openxr/src/openxr/layer_builder.rs @@ -37,14 +37,14 @@ impl LayerProvider for ProjectionLayer { Some(Box::new( CompositionLayerProjection::new() .layer_flags(CompositionLayerFlags::BLEND_TEXTURE_SOURCE_ALPHA) - .space(&stage) + .space(stage) .views(&[ CompositionLayerProjectionView::new() .pose(openxr_views.0[0].pose) .fov(openxr_views.0[0].fov) .sub_image( SwapchainSubImage::new() - .swapchain(&swapchain) + .swapchain(swapchain) .image_array_index(0) .image_rect(rect), ), @@ -53,7 +53,7 @@ impl LayerProvider for ProjectionLayer { .fov(openxr_views.0[1].fov) .sub_image( SwapchainSubImage::new() - .swapchain(&swapchain) + .swapchain(swapchain) .image_array_index(1) .image_rect(rect), ), @@ -235,9 +235,15 @@ impl<'a> Default for CompositionLayerProjection<'a> { pub struct CompositionLayerPassthrough { inner: sys::CompositionLayerPassthroughFB, } +impl Default for CompositionLayerPassthrough { + fn default() -> Self { + Self::new() + } +} + impl CompositionLayerPassthrough { #[inline] - pub fn new() -> Self { + pub const fn new() -> Self { Self { inner: openxr::sys::CompositionLayerPassthroughFB { ty: openxr::sys::CompositionLayerPassthroughFB::TYPE, diff --git a/crates/bevy_openxr/src/openxr/mod.rs b/crates/bevy_openxr/src/openxr/mod.rs index 85c5c81..6e4cb7d 100644 --- a/crates/bevy_openxr/src/openxr/mod.rs +++ b/crates/bevy_openxr/src/openxr/mod.rs @@ -60,8 +60,8 @@ pub fn add_xr_plugins(plugins: G) -> PluginGroupBuilder { .build() .disable::() // .disable::() - .add_before::(XrSessionPlugin { auto_handle: true }) - .add_before::(OxrInitPlugin::default()) + .add_before::(XrSessionPlugin { auto_handle: true }) + .add_before::(OxrInitPlugin::default()) .add(OxrEventsPlugin) .add(OxrReferenceSpacePlugin::default()) .add(OxrRenderPlugin) diff --git a/crates/bevy_openxr/src/openxr/render.rs b/crates/bevy_openxr/src/openxr/render.rs index 3bc154b..0d5441d 100644 --- a/crates/bevy_openxr/src/openxr/render.rs +++ b/crates/bevy_openxr/src/openxr/render.rs @@ -150,16 +150,18 @@ pub fn init_views( info!("{}", graphics_info.resolution); let view_handle = add_texture_view(&mut manual_texture_views, temp_tex, &graphics_info, index); - let cam = commands - .spawn((XrCameraBundle { - camera: Camera { - target: RenderTarget::TextureView(view_handle), + .spawn( + (XrCameraBundle { + camera: Camera { + target: RenderTarget::TextureView(view_handle), + ..Default::default() + }, + view: XrCamera(index), ..Default::default() - }, - view: XrCamera(index), - ..Default::default() - },)) + }), + ) + .remove::() .id(); match root.get_single() { Ok(root) => { diff --git a/crates/bevy_openxr/src/openxr/resources.rs b/crates/bevy_openxr/src/openxr/resources.rs index 7681f5c..c41528c 100644 --- a/crates/bevy_openxr/src/openxr/resources.rs +++ b/crates/bevy_openxr/src/openxr/resources.rs @@ -43,6 +43,7 @@ impl OxrEntry { application_version: app_info.version.to_u32(), engine_name: "Bevy", engine_version: Version::BEVY.to_u32(), + api_version: openxr::Version::new(1, 1, 36), }, &required_exts.into(), layers, @@ -108,7 +109,7 @@ impl OxrInstance { graphics_match!( self.1; _ => { - let (graphics, session_info) = Api::init_graphics(&self.2, &self, system_id)?; + let (graphics, session_info) = Api::init_graphics(&self.2, self, system_id)?; Ok((graphics, SessionCreateInfo(Api::wrap(session_info)))) } @@ -185,7 +186,7 @@ impl OxrFrameStream { stream => { let mut new_layers = vec![]; - for (i, layer) in layers.into_iter().enumerate() { + for (i, layer) in layers.iter().enumerate() { if let Some(swapchain) = layer.swapchain() { if !swapchain.0.using_graphics::() { error!( @@ -196,7 +197,10 @@ impl OxrFrameStream { continue; } } - new_layers.push(unsafe { std::mem::transmute(layer.header()) }); + new_layers.push(unsafe { + #[allow(clippy::missing_transmute_annotations)] + std::mem::transmute(layer.header()) + }); } Ok(stream.end(display_time, environment_blend_mode, new_layers.as_slice())?) diff --git a/crates/bevy_openxr/src/openxr/spaces.rs b/crates/bevy_openxr/src/openxr/spaces.rs index 91c74a2..cf0d2f4 100644 --- a/crates/bevy_openxr/src/openxr/spaces.rs +++ b/crates/bevy_openxr/src/openxr/spaces.rs @@ -7,7 +7,6 @@ use bevy_mod_xr::{ XrDestroySpace, XrPrimaryReferenceSpace, XrReferenceSpace, XrSpace, XrSpaceLocationFlags, XrSpaceVelocityFlags, XrVelocity, }, - types::XrPose, }; use openxr::{ sys, HandJointLocation, HandJointLocations, HandJointVelocities, HandJointVelocity, @@ -51,28 +50,11 @@ impl Plugin for OxrSpatialPlugin { .in_set(OxrSpaceSyncSet) .run_if(openxr_session_running), ) - .observe(add_location_flags) - .observe(add_velocity_flags); + .register_required_components::() + .register_required_components::(); } } -fn add_velocity_flags(event: Trigger, mut cmds: Commands) { - if event.entity() == Entity::PLACEHOLDER { - error!("called add_location_flags observer without entity"); - return; - } - cmds.entity(event.entity()) - .insert(OxrSpaceLocationFlags(openxr::SpaceLocationFlags::default())); -} -fn add_location_flags(event: Trigger, mut cmds: Commands) { - if event.entity() == Entity::PLACEHOLDER { - error!("called add_location_flags observer without entity"); - return; - } - cmds.entity(event.entity()) - .insert(OxrSpaceLocationFlags(openxr::SpaceLocationFlags::default())); -} - fn destroy_space_event(instance: Res, mut events: EventReader) { for space in events.read() { match instance.destroy_space(space.0) { @@ -119,7 +101,7 @@ unsafe extern "system" fn patched_destroy_space(space: openxr::sys::Space) -> op } } -#[derive(Clone, Copy, Component)] +#[derive(Clone, Copy, Component, Default)] pub struct OxrSpaceLocationFlags(pub openxr::SpaceLocationFlags); impl OxrSpaceLocationFlags { pub fn pos_valid(&self) -> bool { @@ -135,7 +117,7 @@ impl OxrSpaceLocationFlags { self.0.contains(SpaceLocationFlags::ORIENTATION_TRACKED) } } -#[derive(Clone, Copy, Component)] +#[derive(Clone, Copy, Component, Default)] pub struct OxrSpaceVelocityFlags(pub openxr::SpaceVelocityFlags); impl OxrSpaceVelocityFlags { pub fn linear_valid(&self) -> bool { @@ -231,7 +213,7 @@ impl OxrSession { &self, action: &openxr::Action, subaction_path: openxr::Path, - pose_in_space: XrPose, + pose_in_space: Isometry3d, ) -> openxr::Result { let info = sys::ActionSpaceCreateInfo { ty: sys::ActionSpaceCreateInfo::TYPE, diff --git a/crates/bevy_openxr/src/openxr/types.rs b/crates/bevy_openxr/src/openxr/types.rs index 32aaab6..b70e4bd 100644 --- a/crates/bevy_openxr/src/openxr/types.rs +++ b/crates/bevy_openxr/src/openxr/types.rs @@ -24,7 +24,7 @@ pub struct Version(pub u8, pub u8, pub u16); impl Version { /// Bevy's version number - pub const BEVY: Self = Self(0, 13, 0); + pub const BEVY: Self = Self(0, 15, 0); pub const fn to_u32(self) -> u32 { let major = (self.0 as u32) << 24; diff --git a/crates/bevy_webxr/Cargo.toml b/crates/bevy_webxr/Cargo.toml index 7e47cca..621a673 100644 --- a/crates/bevy_webxr/Cargo.toml +++ b/crates/bevy_webxr/Cargo.toml @@ -12,11 +12,11 @@ bevy.workspace = true # all dependencies are placed under this since on anything but wasm, this crate is completely empty [target.'cfg(target_family = "wasm")'.dependencies] -thiserror = "1.0.57" -wgpu = "0.19.3" -wgpu-hal = "0.19.3" +thiserror.workspace = true +wgpu.workspace = true +wgpu-hal.workspace = true -bevy_mod_xr = { path = "../bevy_xr", version = "0.1.0-rc1" } +bevy_mod_xr.workspace = true [lints.clippy] too_many_arguments = "allow" diff --git a/crates/bevy_xr/src/actions.rs b/crates/bevy_xr/src/actions.rs index 4c25eb2..6bbc3e4 100644 --- a/crates/bevy_xr/src/actions.rs +++ b/crates/bevy_xr/src/actions.rs @@ -94,11 +94,11 @@ impl> ActionState { } pub fn just_pressed(&self) -> bool { - self.previous_state == false && self.current_state == true + !self.previous_state && self.current_state } pub fn just_released(&self) -> bool { - self.previous_state == true && self.current_state == false + self.previous_state && !self.current_state } pub fn press(&mut self) { diff --git a/crates/bevy_xr/src/camera.rs b/crates/bevy_xr/src/camera.rs index 5f64fc1..f616634 100644 --- a/crates/bevy_xr/src/camera.rs +++ b/crates/bevy_xr/src/camera.rs @@ -1,3 +1,5 @@ +use core::panic; + use bevy::app::{App, Plugin, PostUpdate}; use bevy::core_pipeline::core_3d::graph::Core3d; use bevy::core_pipeline::core_3d::Camera3d; @@ -7,7 +9,9 @@ use bevy::ecs::component::Component; use bevy::ecs::reflect::ReflectComponent; use bevy::ecs::schedule::IntoSystemConfigs; use bevy::math::{Mat4, Vec3A}; -use bevy::pbr::{build_directional_light_cascades, clear_directional_light_cascades, SimulationLightSystems}; +use bevy::pbr::{ + build_directional_light_cascades, clear_directional_light_cascades, SimulationLightSystems, +}; use bevy::reflect::std_traits::ReflectDefault; use bevy::reflect::Reflect; use bevy::render::camera::{ @@ -68,10 +72,8 @@ impl CameraProjection for XrProjection { fn update(&mut self, _width: f32, _height: f32) {} fn far(&self) -> f32 { - let far = self.projection_matrix.to_cols_array()[14] - / (self.projection_matrix.to_cols_array()[10] + 1.0); - - far + self.projection_matrix.to_cols_array()[14] + / (self.projection_matrix.to_cols_array()[10] + 1.0) } // TODO calculate this properly @@ -99,6 +101,10 @@ impl CameraProjection for XrProjection { fn get_clip_from_view(&self) -> Mat4 { self.projection_matrix } + + fn get_clip_from_view_for_sub(&self, _sub_view: &bevy::render::camera::SubCameraView) -> Mat4 { + panic!("sub view not supported for xr camera"); + } } #[derive(Bundle)] diff --git a/crates/bevy_xr/src/hands.rs b/crates/bevy_xr/src/hands.rs index 7f222ab..d5e9a68 100644 --- a/crates/bevy_xr/src/hands.rs +++ b/crates/bevy_xr/src/hands.rs @@ -1,15 +1,11 @@ use bevy::{ ecs::{component::Component, entity::Entity, world::Command}, - hierarchy::BuildWorldChildren, log::{error, warn}, math::bool, - prelude::{Bundle, Commands, Deref, DerefMut, Resource, SpatialBundle, With, World}, + prelude::{BuildChildren, Bundle, Commands, Deref, DerefMut, Resource, Transform, Visibility, With, World}, }; -use crate::{ - session:: XrTrackingRoot, - spaces::XrSpaceLocationFlags, -}; +use crate::{session::XrTrackingRoot, spaces::XrSpaceLocationFlags}; pub const HAND_JOINT_COUNT: usize = 26; pub fn spawn_hand_bones( @@ -20,7 +16,8 @@ pub fn spawn_hand_bones( for bone in HandBone::get_all_bones().into_iter() { bones[bone as usize] = cmds .spawn(( - SpatialBundle::default(), + Transform::default(), + Visibility::default(), bone, HandBoneRadius(0.0), XrSpaceLocationFlags::default(), @@ -205,9 +202,9 @@ impl Command for SpawnHandTracker { HandSide::Right => tracker.insert(LeftHand), }; let tracker = tracker.id(); - world.entity_mut(root).push_children(&[tracker]); + world.entity_mut(root).add_children(&[tracker]); executor.0(world, tracker, self.side); - if let Some(mut tracker) = world.get_entity_mut(tracker) { + if let Ok(mut tracker) = world.get_entity_mut(tracker) { tracker.insert(self.side); tracker.insert(self.tracker_bundle); } diff --git a/crates/bevy_xr/src/session.rs b/crates/bevy_xr/src/session.rs index 4b9df83..64d1aad 100644 --- a/crates/bevy_xr/src/session.rs +++ b/crates/bevy_xr/src/session.rs @@ -121,7 +121,7 @@ impl Plugin for XrSessionPlugin { .add_systems( XrFirst, exits_session_on_app_exit - .run_if(on_event::()) + .run_if(on_event::) .run_if(session_created) .in_set(XrHandleEvents::ExitEvents), ); @@ -129,6 +129,8 @@ impl Plugin for XrSessionPlugin { .resource_mut::() .labels .insert(0, XrFirst.intern()); + app.world_mut() + .spawn((Transform::default(), Visibility::default(), XrTrackingRoot)); if self.auto_handle { app.add_systems(PreUpdate, auto_handle_session); @@ -153,7 +155,7 @@ impl Plugin for XrSessionPlugin { XrFirst, exits_session_on_app_exit .before(XrHandleEvents::ExitEvents) - .run_if(on_event::().and_then(session_running)), + .run_if(on_event::.and(session_running)), ); let render_app = app.sub_app_mut(RenderApp); diff --git a/crates/bevy_xr/src/types.rs b/crates/bevy_xr/src/types.rs index 822f486..2ca073b 100644 --- a/crates/bevy_xr/src/types.rs +++ b/crates/bevy_xr/src/types.rs @@ -1,26 +1,4 @@ -use bevy::{ - math::{Quat, Vec3}, - reflect::Reflect, - transform::components::Transform, -}; +use bevy::math::Isometry3d; -#[derive(Clone, Copy, PartialEq, Reflect, Debug)] -pub struct XrPose { - pub translation: Vec3, - pub rotation: Quat, -} - -impl Default for XrPose { - fn default() -> Self { - Self::IDENTITY - } -} -impl XrPose { - pub const IDENTITY: XrPose = XrPose { - translation: Vec3::ZERO, - rotation: Quat::IDENTITY, - }; - pub const fn to_transform(self) -> Transform { - Transform::from_translation(self.translation).with_rotation(self.rotation) - } -} +#[deprecated = "Use Isometry3d instead"] +pub type XrPose = Isometry3d; diff --git a/crates/bevy_xr_utils/Cargo.toml b/crates/bevy_xr_utils/Cargo.toml index ff299fa..00d6107 100644 --- a/crates/bevy_xr_utils/Cargo.toml +++ b/crates/bevy_xr_utils/Cargo.toml @@ -10,11 +10,11 @@ description = "utils for bevy_mod_xr and bevy_mod_openxr" [dependencies] bevy = { workspace = true, features = ["bevy_gizmos"] } -bevy_mod_xr = { path = "../bevy_xr", version = "0.1.0-rc1" } -bevy_mod_openxr = { path = "../bevy_openxr", version = "0.1.0-rc1" } +bevy_mod_xr.workspace = true +bevy_mod_openxr.workspace = true [target.'cfg(not(target_family = "wasm"))'.dependencies] -openxr = "0.18.0" +openxr.workspace = true [lints.clippy] too_many_arguments = "allow" diff --git a/crates/bevy_xr_utils/src/hand_gizmos.rs b/crates/bevy_xr_utils/src/hand_gizmos.rs index e159af9..c84aa6b 100644 --- a/crates/bevy_xr_utils/src/hand_gizmos.rs +++ b/crates/bevy_xr_utils/src/hand_gizmos.rs @@ -16,7 +16,11 @@ fn draw_hand_gizmos( ) { for (transform, bone, radius) in &query { let pose = transform.compute_transform(); - gizmos.sphere(pose.translation, pose.rotation, **radius, gizmo_color(bone)); + let pose = Isometry3d { + translation: pose.translation.into(), + rotation: pose.rotation, + }; + gizmos.sphere(pose, **radius, gizmo_color(bone)); } } diff --git a/crates/bevy_xr_utils/src/tracking_utils.rs b/crates/bevy_xr_utils/src/tracking_utils.rs index e5a77ed..ad808bc 100644 --- a/crates/bevy_xr_utils/src/tracking_utils.rs +++ b/crates/bevy_xr_utils/src/tracking_utils.rs @@ -1,11 +1,17 @@ use bevy::prelude::*; use bevy_mod_openxr::{ - action_binding::{OxrSendActionBindings, OxrSuggestActionBinding}, action_set_attaching::OxrAttachActionSet, action_set_syncing::{OxrActionSetSyncSet, OxrSyncActionSet}, helper_traits::{ToQuat, ToVec3}, openxr_session_available, openxr_session_running, resources::{OxrFrameState, OxrInstance, Pipelined}, session::OxrSession, spaces::{OxrSpaceLocationFlags, OxrSpaceSyncSet} + action_binding::{OxrSendActionBindings, OxrSuggestActionBinding}, + action_set_attaching::OxrAttachActionSet, + action_set_syncing::{OxrActionSetSyncSet, OxrSyncActionSet}, + helper_traits::{ToQuat, ToVec3}, + openxr_session_available, openxr_session_running, + resources::{OxrFrameState, OxrInstance, Pipelined}, + session::OxrSession, + spaces::{OxrSpaceLocationFlags, OxrSpaceSyncSet}, }; use bevy_mod_xr::{ - session::{session_available, session_running, XrSessionCreated, XrTrackingRoot}, + session::{XrSessionCreated, XrTrackingRoot}, spaces::{XrPrimaryReferenceSpace, XrReferenceSpace}, - types::XrPose, }; use openxr::Posef; @@ -78,13 +84,10 @@ fn update_stage( mut stage_query: Query<&mut Transform, (With, Without)>, ) { let tracking_root_transform = root_query.get_single_mut(); - match tracking_root_transform { - Ok(root) => { - for (mut transform) in &mut stage_query { - *transform = root.clone(); - } + if let Ok(root) = tracking_root_transform { + for mut transform in &mut stage_query { + *transform = *root; } - Err(_) => (), } } @@ -128,13 +131,10 @@ fn update_view( mut view_query: Query<&mut Transform, (With, Without)>, ) { let head_transform = head_query.get_single_mut(); - match head_transform { - Ok(root) => { - for (mut transform) in &mut view_query { - *transform = root.clone(); - } + if let Ok(root) = head_transform { + for mut transform in &mut view_query { + *transform = *root; } - Err(_) => (), } } @@ -144,19 +144,16 @@ fn update_local_floor_transforms( mut local_floor: Query<&mut Transform, (With, Without)>, ) { let head_transform = head_space.get_single_mut(); - match head_transform { - Ok(head) => { - let mut calc_floor = head.clone(); - calc_floor.translation.y = 0.0; - //TODO: use yaw - let (y, x, z) = calc_floor.rotation.to_euler(EulerRot::YXZ); - let new_rot = Quat::from_rotation_y(y); - calc_floor.rotation = new_rot; - for (mut transform) in &mut local_floor { - *transform = calc_floor; - } + if let Ok(head) = head_transform { + let mut calc_floor = *head; + calc_floor.translation.y = 0.0; + //TODO: use yaw + let (y, x, z) = calc_floor.rotation.to_euler(EulerRot::YXZ); + let new_rot = Quat::from_rotation_y(y); + calc_floor.rotation = new_rot; + for (mut transform) in &mut local_floor { + *transform = calc_floor; } - Err(_) => (), } } @@ -222,20 +219,30 @@ fn spawn_tracking_rig( // let local_floor = cmds.spawn((SpatialBundle::default(), LocalFloor)).id(); let left_space = session - .create_action_space(&actions.left, openxr::Path::NULL, XrPose::IDENTITY) + .create_action_space(&actions.left, openxr::Path::NULL, Isometry3d::IDENTITY) .unwrap(); let right_space = session - .create_action_space(&actions.right, openxr::Path::NULL, XrPose::IDENTITY) + .create_action_space(&actions.right, openxr::Path::NULL, Isometry3d::IDENTITY) .unwrap(); let left = cmds - .spawn((SpatialBundle::default(), left_space, LeftGrip)) + .spawn(( + Transform::default(), + Visibility::default(), + left_space, + LeftGrip, + )) .id(); let right = cmds - .spawn((SpatialBundle::default(), right_space, RightGrip)) + .spawn(( + Transform::default(), + Visibility::default(), + right_space, + RightGrip, + )) .id(); cmds.entity(root.single()) - .push_children(&[head, left, right]); + .add_children(&[head, left, right]); } //bindings From 4c415d066a6951d04cd0203501ca1b76d6d08cdb Mon Sep 17 00:00:00 2001 From: Schmarni Date: Wed, 20 Nov 2024 10:29:01 +0100 Subject: [PATCH 03/13] remove XrCameraBundle, use required components and component hooks instead Signed-off-by: Schmarni --- crates/bevy_openxr/src/openxr/render.rs | 19 +++----- crates/bevy_xr/src/camera.rs | 65 ++++++------------------- 2 files changed, 23 insertions(+), 61 deletions(-) diff --git a/crates/bevy_openxr/src/openxr/render.rs b/crates/bevy_openxr/src/openxr/render.rs index 0d5441d..b226724 100644 --- a/crates/bevy_openxr/src/openxr/render.rs +++ b/crates/bevy_openxr/src/openxr/render.rs @@ -11,7 +11,7 @@ use bevy::{ transform::TransformSystem, }; use bevy_mod_xr::{ - camera::{XrCamera, XrCameraBundle, XrProjection}, + camera::{XrCamera, XrProjection}, session::{ XrFirst, XrHandleEvents, XrPreDestroySession, XrRenderSet, XrRootTransform, XrTrackingRoot, }, @@ -147,20 +147,17 @@ pub fn init_views( let temp_tex = swapchain_images.first().unwrap(); // this for loop is to easily add support for quad or mono views in the future. for index in 0..2 { - info!("{}", graphics_info.resolution); + info!("XrCamera resolution: {}", graphics_info.resolution); let view_handle = add_texture_view(&mut manual_texture_views, temp_tex, &graphics_info, index); let cam = commands - .spawn( - (XrCameraBundle { - camera: Camera { - target: RenderTarget::TextureView(view_handle), - ..Default::default() - }, - view: XrCamera(index), + .spawn(( + Camera { + target: RenderTarget::TextureView(view_handle), ..Default::default() - }), - ) + }, + XrCamera(index), + )) .remove::() .id(); match root.get_single() { diff --git a/crates/bevy_xr/src/camera.rs b/crates/bevy_xr/src/camera.rs index f616634..562faf0 100644 --- a/crates/bevy_xr/src/camera.rs +++ b/crates/bevy_xr/src/camera.rs @@ -3,25 +3,19 @@ use core::panic; use bevy::app::{App, Plugin, PostUpdate}; use bevy::core_pipeline::core_3d::graph::Core3d; use bevy::core_pipeline::core_3d::Camera3d; -use bevy::core_pipeline::tonemapping::{DebandDither, Tonemapping}; -use bevy::ecs::bundle::Bundle; -use bevy::ecs::component::Component; +use bevy::ecs::component::{Component, StorageType}; use bevy::ecs::reflect::ReflectComponent; use bevy::ecs::schedule::IntoSystemConfigs; use bevy::math::{Mat4, Vec3A}; use bevy::pbr::{ build_directional_light_cascades, clear_directional_light_cascades, SimulationLightSystems, }; +use bevy::prelude::Projection; use bevy::reflect::std_traits::ReflectDefault; use bevy::reflect::Reflect; -use bevy::render::camera::{ - Camera, CameraMainTextureUsages, CameraProjection, CameraProjectionPlugin, CameraRenderGraph, - Exposure, -}; +use bevy::render::camera::{CameraProjection, CameraProjectionPlugin}; use bevy::render::extract_component::{ExtractComponent, ExtractComponentPlugin}; -use bevy::render::primitives::Frustum; -use bevy::render::view::{update_frusta, ColorGrading, VisibilitySystems, VisibleEntities}; -use bevy::transform::components::{GlobalTransform, Transform}; +use bevy::render::view::{update_frusta, VisibilitySystems}; use bevy::transform::TransformSystem; pub struct XrCameraPlugin; @@ -48,12 +42,21 @@ impl Plugin for XrCameraPlugin { } } -#[derive(Debug, Clone, Component, Reflect, ExtractComponent)] +#[derive(Debug, Clone, Reflect, ExtractComponent)] #[reflect(Component, Default)] pub struct XrProjection { pub projection_matrix: Mat4, pub near: f32, } +impl Component for XrProjection { + const STORAGE_TYPE: StorageType = StorageType::Table; + + fn register_component_hooks(hooks: &mut bevy::ecs::component::ComponentHooks) { + hooks.on_add(|mut world, entity, _| { + world.commands().entity(entity).remove::(); + }); + } +} impl Default for XrProjection { fn default() -> Self { @@ -66,6 +69,7 @@ impl Default for XrProjection { /// Marker component for an XR view. It is the backends responsibility to update this. #[derive(Clone, Copy, Component, ExtractComponent, Debug, Default)] +#[require(Camera3d, XrProjection)] pub struct XrCamera(pub u32); impl CameraProjection for XrProjection { @@ -106,42 +110,3 @@ impl CameraProjection for XrProjection { panic!("sub view not supported for xr camera"); } } - -#[derive(Bundle)] -pub struct XrCameraBundle { - pub camera: Camera, - pub camera_render_graph: CameraRenderGraph, - pub projection: XrProjection, - pub visible_entities: VisibleEntities, - pub frustum: Frustum, - pub transform: Transform, - pub global_transform: GlobalTransform, - pub camera_3d: Camera3d, - pub tonemapping: Tonemapping, - pub dither: DebandDither, - pub color_grading: ColorGrading, - pub exposure: Exposure, - pub main_texture_usages: CameraMainTextureUsages, - pub view: XrCamera, -} - -impl Default for XrCameraBundle { - fn default() -> Self { - Self { - camera_render_graph: CameraRenderGraph::new(Core3d), - camera: Default::default(), - projection: Default::default(), - visible_entities: Default::default(), - frustum: Default::default(), - transform: Default::default(), - global_transform: Default::default(), - camera_3d: Default::default(), - tonemapping: Default::default(), - color_grading: Default::default(), - exposure: Default::default(), - main_texture_usages: Default::default(), - dither: DebandDither::Enabled, - view: XrCamera(0), - } - } -} From d1cc160cac4c67f1be1d9632d2c9ae622e126f34 Mon Sep 17 00:00:00 2001 From: Schmarni Date: Wed, 20 Nov 2024 10:33:59 +0100 Subject: [PATCH 04/13] only render hand gizmos if they are actively tracked Signed-off-by: Schmarni --- crates/bevy_xr_utils/src/hand_gizmos.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/crates/bevy_xr_utils/src/hand_gizmos.rs b/crates/bevy_xr_utils/src/hand_gizmos.rs index c84aa6b..6809c0b 100644 --- a/crates/bevy_xr_utils/src/hand_gizmos.rs +++ b/crates/bevy_xr_utils/src/hand_gizmos.rs @@ -1,6 +1,7 @@ use bevy::color::palettes::css; use bevy::{prelude::*, transform::TransformSystem}; use bevy_mod_xr::hands::{HandBone, HandBoneRadius}; +use bevy_mod_xr::spaces::XrSpaceLocationFlags; pub struct HandGizmosPlugin; impl Plugin for HandGizmosPlugin { fn build(&self, app: &mut App) { @@ -12,9 +13,17 @@ impl Plugin for HandGizmosPlugin { } fn draw_hand_gizmos( mut gizmos: Gizmos, - query: Query<(&GlobalTransform, &HandBone, &HandBoneRadius)>, + query: Query<( + &GlobalTransform, + &HandBone, + &HandBoneRadius, + &XrSpaceLocationFlags, + )>, ) { - for (transform, bone, radius) in &query { + for (transform, bone, radius, flags) in &query { + if (!flags.position_tracked) || (!flags.rotation_tracked) { + continue; + } let pose = transform.compute_transform(); let pose = Isometry3d { translation: pose.translation.into(), From a04ebb84266c817ba9be175eae516fd2c337c506 Mon Sep 17 00:00:00 2001 From: Schmarni Date: Wed, 20 Nov 2024 11:46:24 +0100 Subject: [PATCH 05/13] add XrTracker component that auto parents the entity to the XrTrackingRoot, XrSpace requires XrTracker Signed-off-by: Schmarni --- crates/bevy_openxr/examples/raw_actions.rs | 35 ++++----- crates/bevy_openxr/examples/tracking_utils.rs | 72 +++++++++---------- .../src/openxr/features/handtracking.rs | 16 ++--- crates/bevy_openxr/src/openxr/render.rs | 38 +++------- crates/bevy_xr/src/camera.rs | 5 +- crates/bevy_xr/src/hands.rs | 40 ++++------- crates/bevy_xr/src/session.rs | 27 ++++++- crates/bevy_xr/src/spaces.rs | 34 ++------- crates/bevy_xr_utils/src/hand_gizmos.rs | 4 +- crates/bevy_xr_utils/src/tracking_utils.rs | 60 +++++----------- 10 files changed, 128 insertions(+), 203 deletions(-) diff --git a/crates/bevy_openxr/examples/raw_actions.rs b/crates/bevy_openxr/examples/raw_actions.rs index c706a0e..6673771 100644 --- a/crates/bevy_openxr/examples/raw_actions.rs +++ b/crates/bevy_openxr/examples/raw_actions.rs @@ -11,7 +11,7 @@ use bevy_mod_openxr::{ spaces::OxrSpaceExt, }; use bevy_mod_xr::{ - session::{session_available, session_running, XrSessionCreated, XrTrackingRoot}, + session::{session_available, session_running, XrSessionCreated}, spaces::XrSpace, }; use openxr::Posef; @@ -108,7 +108,6 @@ fn create_actions(instance: Res, mut cmds: Commands) { fn spawn_hands( actions: Res, mut cmds: Commands, - root: Query>, session: Res, mut meshes: ResMut>, mut materials: ResMut>, @@ -128,26 +127,18 @@ fn spawn_hands( let right_space = session .create_action_space(&actions.right, openxr::Path::NULL, Isometry3d::IDENTITY) .unwrap(); - let left = cmds - .spawn(( - Mesh3d(meshes.add(Cuboid::new(0.1, 0.1, 0.05))), - MeshMaterial3d(materials.add(Color::srgb_u8(124, 144, 255))), - Transform::from_xyz(0.0, 0.5, 0.0), - left_space, - Controller, - )) - .id(); - let right = cmds - .spawn(( - Mesh3d(meshes.add(Cuboid::new(0.1, 0.1, 0.05))), - MeshMaterial3d(materials.add(Color::srgb_u8(124, 144, 255))), - Transform::from_xyz(0.0, 0.5, 0.0), - right_space, - Controller, - )) - .id(); - - cmds.entity(root.single()).add_children(&[left, right]); + cmds.spawn(( + Mesh3d(meshes.add(Cuboid::new(0.1, 0.1, 0.05))), + MeshMaterial3d(materials.add(Color::srgb_u8(124, 144, 255))), + left_space, + Controller, + )); + cmds.spawn(( + Mesh3d(meshes.add(Cuboid::new(0.1, 0.1, 0.05))), + MeshMaterial3d(materials.add(Color::srgb_u8(124, 144, 255))), + right_space, + Controller, + )); } #[derive(Component)] diff --git a/crates/bevy_openxr/examples/tracking_utils.rs b/crates/bevy_openxr/examples/tracking_utils.rs index 7e9cf82..41be029 100644 --- a/crates/bevy_openxr/examples/tracking_utils.rs +++ b/crates/bevy_openxr/examples/tracking_utils.rs @@ -2,7 +2,7 @@ use bevy::prelude::*; use bevy_mod_openxr::add_xr_plugins; -use bevy_mod_xr::session::XrSessionCreated; +use bevy_mod_xr::session::{XrSessionCreated, XrTracker}; use bevy_xr_utils::tracking_utils::{ TrackingUtilitiesPlugin, XrTrackedLeftGrip, XrTrackedLocalFloor, XrTrackedRightGrip, XrTrackedStage, XrTrackedView, @@ -53,50 +53,42 @@ fn spawn_hands( mut meshes: ResMut>, mut materials: ResMut>, ) { - let left = cmds - .spawn(( - Mesh3d(meshes.add(Cuboid::new(0.1, 0.1, 0.05))), - MeshMaterial3d(materials.add(Color::srgb_u8(124, 144, 255))), - Transform::from_xyz(0.0, 0.5, 0.0), - XrTrackedLeftGrip, - )) - .id(); - let bundle = ( + cmds.spawn(( + Mesh3d(meshes.add(Cuboid::new(0.1, 0.1, 0.05))), + MeshMaterial3d(materials.add(Color::srgb_u8(124, 144, 255))), + Transform::from_xyz(0.0, 0.5, 0.0), + XrTrackedLeftGrip, + XrTracker, + )); + cmds.spawn(( Mesh3d(meshes.add(Cuboid::new(0.1, 0.1, 0.05))), MeshMaterial3d(materials.add(Color::srgb_u8(124, 144, 255))), Transform::from_xyz(0.0, 0.5, 0.0), XrTrackedRightGrip, - ); - let right = cmds.spawn(bundle).id(); + XrTracker, + )); //head - - let head = cmds - .spawn(( - Mesh3d(meshes.add(Cuboid::new(0.2, 0.2, 0.2))), - MeshMaterial3d(materials.add(Color::srgb_u8(255, 144, 144))), - Transform::from_xyz(0.0, 0.0, 0.0), - XrTrackedView, - )) - .id(); + cmds.spawn(( + Mesh3d(meshes.add(Cuboid::new(0.2, 0.2, 0.2))), + MeshMaterial3d(materials.add(Color::srgb_u8(255, 144, 144))), + Transform::from_xyz(0.0, 0.0, 0.0), + XrTrackedView, + XrTracker, + )); //local_floor emulated - let local_floor = cmds - .spawn(( - Mesh3d(meshes.add(Cuboid::new(0.5, 0.1, 0.5))), - MeshMaterial3d(materials.add(Color::srgb_u8(144, 255, 144))), - Transform::from_xyz(0.0, 0.0, 0.0), - XrTrackedLocalFloor, - )) - .id(); + cmds.spawn(( + Mesh3d(meshes.add(Cuboid::new(0.5, 0.1, 0.5))), + MeshMaterial3d(materials.add(Color::srgb_u8(144, 255, 144))), + Transform::from_xyz(0.0, 0.0, 0.0), + XrTrackedLocalFloor, + XrTracker, + )); - let stage = cmds - .spawn(( - Mesh3d(meshes.add(Cuboid::new(0.5, 0.1, 0.5))), - MeshMaterial3d(materials.add(Color::srgb_u8(144, 255, 255))), - Transform::from_xyz(0.0, 0.0, 0.0), - XrTrackedStage, - )) - .id(); - - cmds.entity(stage) - .add_children(&[left, right, head, local_floor]); + cmds.spawn(( + Mesh3d(meshes.add(Cuboid::new(0.5, 0.1, 0.5))), + MeshMaterial3d(materials.add(Color::srgb_u8(144, 255, 255))), + Transform::from_xyz(0.0, 0.0, 0.0), + XrTrackedStage, + XrTracker, + )); } diff --git a/crates/bevy_openxr/src/openxr/features/handtracking.rs b/crates/bevy_openxr/src/openxr/features/handtracking.rs index 702ed19..65a57b6 100644 --- a/crates/bevy_openxr/src/openxr/features/handtracking.rs +++ b/crates/bevy_openxr/src/openxr/features/handtracking.rs @@ -1,10 +1,10 @@ use bevy::prelude::*; use bevy_mod_xr::hands::{ - spawn_hand_bones, HandBone, HandBoneRadius, HandSide, SpawnHandTracker, - SpawnHandTrackerCommandExecutor, + spawn_hand_bones, HandBone, HandSide, SpawnHandTracker, SpawnHandTrackerCommandExecutor, + XrHandBoneRadius, }; use bevy_mod_xr::hands::{LeftHand, RightHand, XrHandBoneEntities}; -use bevy_mod_xr::session::{XrPreDestroySession, XrSessionCreated, XrTrackingRoot}; +use bevy_mod_xr::session::{XrPreDestroySession, XrSessionCreated}; use bevy_mod_xr::spaces::{ XrPrimaryReferenceSpace, XrReferenceSpace, XrSpaceLocationFlags, XrSpaceVelocityFlags, XrVelocity, @@ -70,11 +70,7 @@ fn handle_tracker_spawn(world: &mut World, tracker: Entity, side: HandSide) { .insert(OxrHandTracker(oxr_tracker)); } -fn spawn_default_hands(mut cmds: Commands, root: Query>) { - let Ok(root) = root.get_single() else { - error!("unable to get tracking root, skipping handtracker creation"); - return; - }; +fn spawn_default_hands(mut cmds: Commands) { debug!("spawning default hands"); let left_bones = spawn_hand_bones(&mut cmds, |_| { ( @@ -90,8 +86,6 @@ fn spawn_default_hands(mut cmds: Commands, root: Query, mut bone_query: Query<( &HandBone, - &mut HandBoneRadius, + &mut XrHandBoneRadius, &mut Transform, Option<&mut XrVelocity>, &mut OxrSpaceLocationFlags, diff --git a/crates/bevy_openxr/src/openxr/render.rs b/crates/bevy_openxr/src/openxr/render.rs index b226724..0fb0269 100644 --- a/crates/bevy_openxr/src/openxr/render.rs +++ b/crates/bevy_openxr/src/openxr/render.rs @@ -1,5 +1,4 @@ use bevy::{ - ecs::query::QuerySingleError, prelude::*, render::{ camera::{ManualTextureView, ManualTextureViewHandle, ManualTextureViews, RenderTarget}, @@ -12,9 +11,7 @@ use bevy::{ }; use bevy_mod_xr::{ camera::{XrCamera, XrProjection}, - session::{ - XrFirst, XrHandleEvents, XrPreDestroySession, XrRenderSet, XrRootTransform, XrTrackingRoot, - }, + session::{XrFirst, XrHandleEvents, XrPreDestroySession, XrRenderSet, XrRootTransform}, spaces::XrPrimaryReferenceSpace, }; use openxr::ViewStateFlags; @@ -34,10 +31,6 @@ impl Plugin for OxrRenderPlugin { fn build(&self, app: &mut App) { if app.is_plugin_added::() { app.init_resource::(); - - // if let Some(sub_app) = app.remove_sub_app(RenderExtractApp) { - // app.insert_sub_app(RenderExtractApp, SubApp::new(sub_app.app, update_rendering)); - // } } app.add_plugins(( @@ -140,7 +133,6 @@ pub fn init_views( graphics_info: Res, mut manual_texture_views: ResMut, swapchain_images: Res, - root: Query>, mut commands: Commands, ) { let _span = info_span!("xr_init_views"); @@ -150,27 +142,13 @@ pub fn init_views( info!("XrCamera resolution: {}", graphics_info.resolution); let view_handle = add_texture_view(&mut manual_texture_views, temp_tex, &graphics_info, index); - let cam = commands - .spawn(( - Camera { - target: RenderTarget::TextureView(view_handle), - ..Default::default() - }, - XrCamera(index), - )) - .remove::() - .id(); - match root.get_single() { - Ok(root) => { - commands.entity(root).add_child(cam); - } - Err(QuerySingleError::NoEntities(_)) => { - warn!("No XrTrackingRoot!"); - } - Err(QuerySingleError::MultipleEntities(_)) => { - warn!("Multiple XrTrackingRoots! this is not allowed"); - } - } + commands.spawn(( + Camera { + target: RenderTarget::TextureView(view_handle), + ..Default::default() + }, + XrCamera(index), + )); } } diff --git a/crates/bevy_xr/src/camera.rs b/crates/bevy_xr/src/camera.rs index 562faf0..b779f51 100644 --- a/crates/bevy_xr/src/camera.rs +++ b/crates/bevy_xr/src/camera.rs @@ -1,7 +1,6 @@ use core::panic; use bevy::app::{App, Plugin, PostUpdate}; -use bevy::core_pipeline::core_3d::graph::Core3d; use bevy::core_pipeline::core_3d::Camera3d; use bevy::ecs::component::{Component, StorageType}; use bevy::ecs::reflect::ReflectComponent; @@ -18,6 +17,8 @@ use bevy::render::extract_component::{ExtractComponent, ExtractComponentPlugin}; use bevy::render::view::{update_frusta, VisibilitySystems}; use bevy::transform::TransformSystem; +use crate::session::XrTracker; + pub struct XrCameraPlugin; impl Plugin for XrCameraPlugin { @@ -69,7 +70,7 @@ impl Default for XrProjection { /// Marker component for an XR view. It is the backends responsibility to update this. #[derive(Clone, Copy, Component, ExtractComponent, Debug, Default)] -#[require(Camera3d, XrProjection)] +#[require(Camera3d, XrProjection, XrTracker)] pub struct XrCamera(pub u32); impl CameraProjection for XrProjection { diff --git a/crates/bevy_xr/src/hands.rs b/crates/bevy_xr/src/hands.rs index d5e9a68..0bcc497 100644 --- a/crates/bevy_xr/src/hands.rs +++ b/crates/bevy_xr/src/hands.rs @@ -1,11 +1,11 @@ use bevy::{ ecs::{component::Component, entity::Entity, world::Command}, - log::{error, warn}, + log::warn, math::bool, - prelude::{BuildChildren, Bundle, Commands, Deref, DerefMut, Resource, Transform, Visibility, With, World}, + prelude::{Bundle, Commands, Deref, DerefMut, Resource, Transform, Visibility, World}, }; -use crate::{session::XrTrackingRoot, spaces::XrSpaceLocationFlags}; +use crate::{session::XrTracker, spaces::XrSpaceLocationFlags}; pub const HAND_JOINT_COUNT: usize = 26; pub fn spawn_hand_bones( @@ -14,16 +14,7 @@ pub fn spawn_hand_bones( ) -> [Entity; HAND_JOINT_COUNT] { let mut bones: [Entity; HAND_JOINT_COUNT] = [Entity::PLACEHOLDER; HAND_JOINT_COUNT]; for bone in HandBone::get_all_bones().into_iter() { - bones[bone as usize] = cmds - .spawn(( - Transform::default(), - Visibility::default(), - bone, - HandBoneRadius(0.0), - XrSpaceLocationFlags::default(), - )) - .insert((get_bundle)(bone)) - .id(); + bones[bone as usize] = cmds.spawn((bone, (get_bundle)(bone))).id(); } bones } @@ -45,11 +36,18 @@ pub struct RightHand; pub struct XrHandBoneEntities(pub [Entity; HAND_JOINT_COUNT]); #[repr(transparent)] -#[derive(Clone, Copy, Component, Debug, DerefMut, Deref)] -pub struct HandBoneRadius(pub f32); +#[derive(Clone, Copy, Component, Debug, DerefMut, Deref, Default)] +pub struct XrHandBoneRadius(pub f32); #[repr(u8)] #[derive(Clone, Copy, Component, Debug)] +#[require( + XrSpaceLocationFlags, + XrHandBoneRadius, + Transform, + Visibility, + XrTracker +)] pub enum HandBone { Palm = 0, Wrist = 1, @@ -189,20 +187,12 @@ impl Command for SpawnHandTracker { warn!("no SpawnHandTracker executor defined, skipping handtracker creation"); return; }; - let Ok(root) = world - .query_filtered::>() - .get_single(world) - else { - error!("unable to get tracking root, skipping handtracker creation"); - return; - }; let mut tracker = world.spawn(self.joints); match &self.side { - HandSide::Left => tracker.insert(LeftHand), - HandSide::Right => tracker.insert(LeftHand), + HandSide::Left => tracker.insert((XrTracker, LeftHand)), + HandSide::Right => tracker.insert((XrTracker, RightHand)), }; let tracker = tracker.id(); - world.entity_mut(root).add_children(&[tracker]); executor.0(world, tracker, self.side); if let Ok(mut tracker) = world.get_entity_mut(tracker) { tracker.insert(self.side); diff --git a/crates/bevy_xr/src/session.rs b/crates/bevy_xr/src/session.rs index 64d1aad..ba0ced6 100644 --- a/crates/bevy_xr/src/session.rs +++ b/crates/bevy_xr/src/session.rs @@ -2,6 +2,7 @@ use std::sync::atomic::AtomicBool; use std::sync::Arc; use bevy::app::{AppExit, MainScheduleOrder}; +use bevy::ecs::component::StorageType; use bevy::ecs::schedule::ScheduleLabel; use bevy::prelude::*; use bevy::render::extract_resource::{ExtractResource, ExtractResourcePlugin}; @@ -84,7 +85,29 @@ pub struct XrRootTransform(pub GlobalTransform); /// Component used to specify the entity we should use as the tracking root. #[derive(Component)] +#[require(Transform, Visibility)] pub struct XrTrackingRoot; +#[derive(Resource)] +struct TrackingRootRes(Entity); + +/// Makes the entity a child of the XrTrackingRoot if the entity has no parent +#[derive(Clone, Copy, Hash, PartialEq, Eq, Reflect, Debug, Default)] +pub struct XrTracker; +impl Component for XrTracker { + const STORAGE_TYPE: StorageType = StorageType::SparseSet; + + fn register_component_hooks(hooks: &mut bevy::ecs::component::ComponentHooks) { + hooks.on_add(|mut world, entity, _| { + if world.entity(entity).components::>() { + return; + } + let Some(root) = world.get_resource::().map(|r| r.0) else { + return; + }; + world.commands().entity(root).add_child(entity); + }); + } +} pub struct XrSessionPlugin { pub auto_handle: bool, @@ -125,12 +148,12 @@ impl Plugin for XrSessionPlugin { .run_if(session_created) .in_set(XrHandleEvents::ExitEvents), ); + let root = app.world_mut().spawn(XrTrackingRoot).id(); + app.world_mut().insert_resource(TrackingRootRes(root)); app.world_mut() .resource_mut::() .labels .insert(0, XrFirst.intern()); - app.world_mut() - .spawn((Transform::default(), Visibility::default(), XrTrackingRoot)); if self.auto_handle { app.add_systems(PreUpdate, auto_handle_session); diff --git a/crates/bevy_xr/src/spaces.rs b/crates/bevy_xr/src/spaces.rs index 4f6a295..5e1e4f0 100644 --- a/crates/bevy_xr/src/spaces.rs +++ b/crates/bevy_xr/src/spaces.rs @@ -1,15 +1,18 @@ use bevy::{ - ecs::component::StorageType, prelude::*, render::{extract_component::ExtractComponent, extract_resource::ExtractResource}, }; +use crate::session::XrTracker; + /// Any Spaces will be invalid after the owning session exits #[repr(transparent)] -#[derive(Clone, Copy, Hash, PartialEq, Eq, Reflect, Debug, ExtractComponent)] +#[derive(Component, Clone, Copy, Hash, PartialEq, Eq, Reflect, Debug, ExtractComponent)] +#[require(XrSpaceLocationFlags, Transform, Visibility, XrTracker)] pub struct XrSpace(u64); -#[derive(Clone, Copy, Reflect, Debug, ExtractComponent, Default)] +#[derive(Component, Clone, Copy, Reflect, Debug, ExtractComponent, Default)] +#[require(XrSpaceVelocityFlags)] pub struct XrVelocity { /// Velocity of a space relative to it's reference space pub linear: Vec3, @@ -69,28 +72,3 @@ impl XrSpace { self.0 } } - -impl Component for XrSpace { - const STORAGE_TYPE: StorageType = StorageType::Table; - - fn register_component_hooks(hooks: &mut bevy::ecs::component::ComponentHooks) { - hooks.on_add(|mut world, entity, _| { - world - .commands() - .entity(entity) - .insert(XrSpaceLocationFlags::default()); - }); - } -} -impl Component for XrVelocity { - const STORAGE_TYPE: StorageType = StorageType::Table; - - fn register_component_hooks(hooks: &mut bevy::ecs::component::ComponentHooks) { - hooks.on_add(|mut world, entity, _| { - world - .commands() - .entity(entity) - .insert(XrSpaceVelocityFlags::default()); - }); - } -} diff --git a/crates/bevy_xr_utils/src/hand_gizmos.rs b/crates/bevy_xr_utils/src/hand_gizmos.rs index 6809c0b..1c270b6 100644 --- a/crates/bevy_xr_utils/src/hand_gizmos.rs +++ b/crates/bevy_xr_utils/src/hand_gizmos.rs @@ -1,6 +1,6 @@ use bevy::color::palettes::css; use bevy::{prelude::*, transform::TransformSystem}; -use bevy_mod_xr::hands::{HandBone, HandBoneRadius}; +use bevy_mod_xr::hands::{HandBone, XrHandBoneRadius}; use bevy_mod_xr::spaces::XrSpaceLocationFlags; pub struct HandGizmosPlugin; impl Plugin for HandGizmosPlugin { @@ -16,7 +16,7 @@ fn draw_hand_gizmos( query: Query<( &GlobalTransform, &HandBone, - &HandBoneRadius, + &XrHandBoneRadius, &XrSpaceLocationFlags, )>, ) { diff --git a/crates/bevy_xr_utils/src/tracking_utils.rs b/crates/bevy_xr_utils/src/tracking_utils.rs index ad808bc..3e8b1ce 100644 --- a/crates/bevy_xr_utils/src/tracking_utils.rs +++ b/crates/bevy_xr_utils/src/tracking_utils.rs @@ -10,7 +10,7 @@ use bevy_mod_openxr::{ spaces::{OxrSpaceLocationFlags, OxrSpaceSyncSet}, }; use bevy_mod_xr::{ - session::{XrSessionCreated, XrTrackingRoot}, + session::{XrSessionCreated, XrTracker, XrTrackingRoot}, spaces::{XrPrimaryReferenceSpace, XrReferenceSpace}, }; use openxr::Posef; @@ -80,11 +80,10 @@ impl Plugin for TrackingUtilitiesPlugin { //stage fn update_stage( - mut root_query: Query<&mut Transform, (With, Without)>, + root_query: Query<&Transform, (With, Without)>, mut stage_query: Query<&mut Transform, (With, Without)>, ) { - let tracking_root_transform = root_query.get_single_mut(); - if let Ok(root) = tracking_root_transform { + if let Ok(root) = root_query.get_single() { for mut transform in &mut stage_query { *transform = *root; } @@ -148,10 +147,10 @@ fn update_local_floor_transforms( let mut calc_floor = *head; calc_floor.translation.y = 0.0; //TODO: use yaw - let (y, x, z) = calc_floor.rotation.to_euler(EulerRot::YXZ); + let (y, _, _) = calc_floor.rotation.to_euler(EulerRot::YXZ); let new_rot = Quat::from_rotation_y(y); calc_floor.rotation = new_rot; - for (mut transform) in &mut local_floor { + for mut transform in &mut local_floor { *transform = calc_floor; } } @@ -166,13 +165,10 @@ fn update_left_grip( mut tracked_left_grip: Query<&mut Transform, (With, Without)>, ) { let head_transform = left_grip.get_single_mut(); - match head_transform { - Ok(head) => { - for (mut transform) in &mut tracked_left_grip { - *transform = head.clone(); - } + if let Ok(head) = head_transform { + for mut transform in &mut tracked_left_grip { + *transform = *head; } - Err(_) => (), } } @@ -185,13 +181,10 @@ fn update_right_grip( mut tracked_right_grip: Query<&mut Transform, (With, Without)>, ) { let head_transform = right_grip.get_single_mut(); - match head_transform { - Ok(head) => { - for (mut transform) in &mut tracked_right_grip { - *transform = head.clone(); - } + if let Ok(head) = head_transform { + for mut transform in &mut tracked_right_grip { + *transform = *head; } - Err(_) => (), } } @@ -206,16 +199,18 @@ struct ControllerActions { fn spawn_tracking_rig( actions: Res, mut cmds: Commands, - root: Query>, session: Res, ) { //head let head_space = session .create_reference_space(openxr::ReferenceSpaceType::VIEW, Transform::IDENTITY) .unwrap(); - let head = cmds - .spawn((SpatialBundle::default(), HeadXRSpace(head_space))) - .id(); + cmds.spawn(( + Transform::default(), + Visibility::default(), + XrTracker, + HeadXRSpace(head_space), + )); // let local_floor = cmds.spawn((SpatialBundle::default(), LocalFloor)).id(); let left_space = session @@ -224,25 +219,8 @@ fn spawn_tracking_rig( let right_space = session .create_action_space(&actions.right, openxr::Path::NULL, Isometry3d::IDENTITY) .unwrap(); - let left = cmds - .spawn(( - Transform::default(), - Visibility::default(), - left_space, - LeftGrip, - )) - .id(); - let right = cmds - .spawn(( - Transform::default(), - Visibility::default(), - right_space, - RightGrip, - )) - .id(); - - cmds.entity(root.single()) - .add_children(&[head, left, right]); + cmds.spawn((left_space, LeftGrip)); + cmds.spawn((right_space, RightGrip)); } //bindings From 307bba3323bd702ddf860f5710cec92646cdb216 Mon Sep 17 00:00:00 2001 From: Schmarni Date: Tue, 26 Nov 2024 23:03:57 +0100 Subject: [PATCH 06/13] more required components and other stuff Signed-off-by: Schmarni --- crates/bevy_openxr/examples/raw_actions.rs | 16 +++++++--------- crates/bevy_openxr/examples/sessions.rs | 11 +++++++++-- .../bevy_openxr/src/openxr/action_set_syncing.rs | 1 - crates/bevy_openxr/src/openxr/exts.rs | 4 ++++ 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/crates/bevy_openxr/examples/raw_actions.rs b/crates/bevy_openxr/examples/raw_actions.rs index 6673771..72e7d76 100644 --- a/crates/bevy_openxr/examples/raw_actions.rs +++ b/crates/bevy_openxr/examples/raw_actions.rs @@ -2,17 +2,11 @@ use std::ops::Deref; use bevy::prelude::*; use bevy_mod_openxr::{ - action_binding::{OxrSendActionBindings, OxrSuggestActionBinding}, - action_set_attaching::OxrAttachActionSet, - action_set_syncing::{OxrActionSetSyncSet, OxrSyncActionSet}, - add_xr_plugins, - resources::OxrInstance, - session::OxrSession, - spaces::OxrSpaceExt, + action_binding::{OxrSendActionBindings, OxrSuggestActionBinding}, action_set_attaching::OxrAttachActionSet, action_set_syncing::{OxrActionSetSyncSet, OxrSyncActionSet}, add_xr_plugins, openxr_session_running, resources::OxrInstance, session::OxrSession, spaces::OxrSpaceExt }; use bevy_mod_xr::{ session::{session_available, session_running, XrSessionCreated}, - spaces::XrSpace, + spaces::{XrSpace, XrSpaceLocationFlags}, }; use openxr::Posef; @@ -25,7 +19,7 @@ fn main() { PreUpdate, sync_actions .before(OxrActionSetSyncSet) - .run_if(session_running), + .run_if(openxr_session_running), ); app.add_systems(OxrSendActionBindings, suggest_action_bindings); app.add_systems(Startup, create_actions.run_if(session_available)); @@ -131,12 +125,16 @@ fn spawn_hands( Mesh3d(meshes.add(Cuboid::new(0.1, 0.1, 0.05))), MeshMaterial3d(materials.add(Color::srgb_u8(124, 144, 255))), left_space, + // runtime required components are not inserted for non runrime required components, should + // be fixed in the final bevy 0.15 release + XrSpaceLocationFlags::default(), Controller, )); cmds.spawn(( Mesh3d(meshes.add(Cuboid::new(0.1, 0.1, 0.05))), MeshMaterial3d(materials.add(Color::srgb_u8(124, 144, 255))), right_space, + XrSpaceLocationFlags::default(), Controller, )); } diff --git a/crates/bevy_openxr/examples/sessions.rs b/crates/bevy_openxr/examples/sessions.rs index 27e718c..20d7b3b 100644 --- a/crates/bevy_openxr/examples/sessions.rs +++ b/crates/bevy_openxr/examples/sessions.rs @@ -1,12 +1,19 @@ //! A simple 3D scene with light shining over a cube sitting on a plane. use bevy::prelude::*; -use bevy_mod_openxr::add_xr_plugins; +use bevy_mod_openxr::{add_xr_plugins, init::OxrInitPlugin}; use bevy_mod_xr::session::{XrSessionPlugin, XrState}; fn main() { App::new() - .add_plugins(add_xr_plugins(DefaultPlugins).set(XrSessionPlugin { auto_handle: true })) + .add_plugins( + add_xr_plugins(DefaultPlugins) + .set(XrSessionPlugin { auto_handle: true }) + .set(OxrInitPlugin { + blend_modes: Some(vec![openxr::EnvironmentBlendMode::OPAQUE]), + ..Default::default() + }), + ) .add_plugins(bevy_xr_utils::hand_gizmos::HandGizmosPlugin) .add_systems(Startup, setup) .add_systems(Update, handle_input) diff --git a/crates/bevy_openxr/src/openxr/action_set_syncing.rs b/crates/bevy_openxr/src/openxr/action_set_syncing.rs index 05f6093..36d3346 100644 --- a/crates/bevy_openxr/src/openxr/action_set_syncing.rs +++ b/crates/bevy_openxr/src/openxr/action_set_syncing.rs @@ -22,7 +22,6 @@ fn sync_sets(session: Res, mut events: EventReader .map(|v| &v.0) .map(openxr::ActiveActionSet::new) .collect::>(); - if sets.is_empty() { return; } diff --git a/crates/bevy_openxr/src/openxr/exts.rs b/crates/bevy_openxr/src/openxr/exts.rs index 26e87ec..dc96399 100644 --- a/crates/bevy_openxr/src/openxr/exts.rs +++ b/crates/bevy_openxr/src/openxr/exts.rs @@ -29,6 +29,10 @@ impl OxrExtensions { self.0.ext_hand_tracking = false; self } + pub fn enable_extx_overlay(&mut self) -> &mut Self { + self.0.extx_overlay = true; + self + } /// returns true if all of the extensions enabled are also available in `available_exts` pub fn is_available(&self, available_exts: &OxrExtensions) -> bool { self.clone() & available_exts.clone() == *self From 8e4d5d8dd0b9d3b5a21929903ac58ff4d9a540d1 Mon Sep 17 00:00:00 2001 From: Schmarni Date: Sat, 30 Nov 2024 00:19:50 +0100 Subject: [PATCH 07/13] update to bevy release, fix event support and update extension list Signed-off-by: Schmarni --- Cargo.lock | 346 ++++++++---------- Cargo.toml | 2 +- crates/bevy_openxr/examples/overlay.rs | 53 ++- crates/bevy_openxr/src/openxr/exts.rs | 23 +- .../src/openxr/features/overlay.rs | 2 +- crates/bevy_openxr/src/openxr/poll_events.rs | 11 +- 6 files changed, 196 insertions(+), 241 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 34fb32f..e38e99b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,42 +4,44 @@ version = 3 [[package]] name = "accesskit" -version = "0.16.3" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99b76d84ee70e30a4a7e39ab9018e2b17a6a09e31084176cc7c0b2dec036ba45" +checksum = "d3d3b8f9bae46a948369bc4a03e815d4ed6d616bd00de4051133a5019dc31c5a" [[package]] name = "accesskit_consumer" -version = "0.24.3" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a12dc159d52233c43d9fe5415969433cbdd52c3d6e0df51bda7d447427b9986" +checksum = "f47983a1084940ba9a39c077a8c63e55c619388be5476ac04c804cfbd1e63459" dependencies = [ "accesskit", + "hashbrown 0.15.2", "immutable-chunkmap", ] [[package]] name = "accesskit_macos" -version = "0.17.4" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfc6c1ecd82053d127961ad80a8beaa6004fb851a3a5b96506d7a6bd462403f6" +checksum = "7329821f3bd1101e03a7d2e03bd339e3ac0dc64c70b4c9f9ae1949e3ba8dece1" dependencies = [ "accesskit", "accesskit_consumer", + "hashbrown 0.15.2", "objc2", "objc2-app-kit", "objc2-foundation", - "once_cell", ] [[package]] name = "accesskit_windows" -version = "0.23.2" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "974e96c347384d9133427167fb8a58c340cb0496988dacceebdc1ed27071023b" +checksum = "24fcd5d23d70670992b823e735e859374d694a3d12bfd8dd32bd3bd8bedb5d81" dependencies = [ "accesskit", "accesskit_consumer", + "hashbrown 0.15.2", "paste", "static_assertions", "windows 0.58.0", @@ -48,9 +50,9 @@ dependencies = [ [[package]] name = "accesskit_winit" -version = "0.22.4" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aea3522719f1c44564d03e9469a8e2f3a98b3a8a880bd66d0789c6b9c4a669dd" +checksum = "6a6a48dad5530b6deb9fc7a52cc6c3bf72cdd9eb8157ac9d32d69f2427a5e879" dependencies = [ "accesskit", "accesskit_macos", @@ -184,12 +186,6 @@ dependencies = [ "libc", ] -[[package]] -name = "anyhow" -version = "1.0.93" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" - [[package]] name = "approx" version = "0.5.1" @@ -292,25 +288,6 @@ dependencies = [ "futures-lite", ] -[[package]] -name = "async-io" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" -dependencies = [ - "async-lock", - "cfg-if", - "concurrent-queue", - "futures-io", - "futures-lite", - "parking", - "polling", - "rustix", - "slab", - "tracing", - "windows-sys 0.59.0", -] - [[package]] name = "async-lock" version = "3.4.0" @@ -375,18 +352,18 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "bevy" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac8e850ce5420a008f058bc0edffad2c10480220708678d91df013854ba48624" +checksum = "b6a01cd51a5cd310e4e7aa6e1560b1aabf29efc6a095a01e6daa8bf0a19f1fea" dependencies = [ "bevy_internal", ] [[package]] name = "bevy_a11y" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443a6ed74462023305a0dd799a88c5581df05f230ed9c6dc7debd92231aae7c" +checksum = "82c66b5bc82a2660a5663d85b3354ddb72c8ab2c443989333cbea146f39a4e9a" dependencies = [ "accesskit", "bevy_app", @@ -397,11 +374,10 @@ dependencies = [ [[package]] name = "bevy_animation" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e02b9d777a4d1f71e480dcdc932c89b945a8945b2894397e52c30b543828a94" +checksum = "ee48f3fc65f583e5e320e38874053e20e7a71205a62aaace5d607446781bd742" dependencies = [ - "bevy_animation_derive", "bevy_app", "bevy_asset", "bevy_color", @@ -418,6 +394,7 @@ dependencies = [ "bevy_utils", "blake3", "derive_more", + "downcast-rs", "either", "petgraph", "ron", @@ -427,23 +404,11 @@ dependencies = [ "uuid", ] -[[package]] -name = "bevy_animation_derive" -version = "0.15.0-rc.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d1dbda00d5c940a96993ca366cb489b00a3432d387b885442d391f7c420838b" -dependencies = [ - "bevy_macro_utils", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "bevy_app" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f037ca5cd5fd455ec110cb17d096e842cad7230c3d489f2434c3022beff5583d" +checksum = "652574e4c10efcfa70f98036709dd5b67e5cb8d46c58087ef48c2ac6b62df9da" dependencies = [ "bevy_derive", "bevy_ecs", @@ -460,9 +425,9 @@ dependencies = [ [[package]] name = "bevy_asset" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdf65a1e047fb303c72bc3dc524ad0fc6d50858759934e1c34ba77452375e8f4" +checksum = "4d7d501eda01be6d500d843a06d9b9800c3f0fffaae3c29d17d9e4e172c28d37" dependencies = [ "async-broadcast", "async-fs", @@ -497,9 +462,9 @@ dependencies = [ [[package]] name = "bevy_asset_macros" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "850737671990e7d73d0cff461e246347d8207ea7fc8468e4fa0d388c30c96ac3" +checksum = "7474b77fc27db11ec03d49ca04f1a7471f369dc373fd5e091a12ad7ab533d8c8" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -509,9 +474,9 @@ dependencies = [ [[package]] name = "bevy_audio" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78b0af3841b62e88c3b965e3b38412b5a28476249bf05ef2d0edab1b81b5e498" +checksum = "20e378c4005d9c47b7ebaf637a6a197e3953463615516ab709ba8b0c3c215c2e" dependencies = [ "bevy_app", "bevy_asset", @@ -528,9 +493,9 @@ dependencies = [ [[package]] name = "bevy_color" -version = "0.15.0-rc.3" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d916eabd2b5ed453e739b075b5cc9a07ff04d69b231974e6b2a050a38cc7db5" +checksum = "87bccacba27db37375eb97ffc86e91a7d95db3f5faa6a834fa7306db02cde327" dependencies = [ "bevy_math", "bevy_reflect", @@ -543,9 +508,9 @@ dependencies = [ [[package]] name = "bevy_core" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01967cdcbabb12beadc9fdebfb94edd629390b5e4ad0ad36602434363da9a24b" +checksum = "ecccf7be33330f58d4c7033b212a25c414d388e3a8d55b61331346da5dbabf22" dependencies = [ "bevy_app", "bevy_ecs", @@ -557,9 +522,9 @@ dependencies = [ [[package]] name = "bevy_core_pipeline" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "906e078fae9c6b3af37737ed5ba97f16a1f7cbc44b34144c701fcb43fe15439d" +checksum = "8a3fb9f84fa60c2006d4a15e039c3d08d4d10599441b9175907341a77a69d627" dependencies = [ "bevy_app", "bevy_asset", @@ -584,9 +549,9 @@ dependencies = [ [[package]] name = "bevy_derive" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "705ccd9cc85510faa67d0261e57b6fe196465f372ec9b6e9fe88642737fe652d" +checksum = "e141b7eda52a23bb88740b37a291e26394524cb9ee3b034c7014669671fc2bb5" dependencies = [ "bevy_macro_utils", "quote", @@ -595,9 +560,9 @@ dependencies = [ [[package]] name = "bevy_diagnostic" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "570e296eee8be3230059c8dc396f7be1bcba7cc01fb0a96d530389d14514a5fb" +checksum = "fa97748337405089edfb2857f7608f21bcc648a7ad272c9209808aad252ed542" dependencies = [ "bevy_app", "bevy_core", @@ -611,9 +576,9 @@ dependencies = [ [[package]] name = "bevy_ecs" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061d0e0972c55694ec8eb58a7a7345588a5f8cc77002cd39b0a1bed01d6bdefc" +checksum = "cb4c4b60d2a712c6d5cbe610bac7ecf0838fc56a095fd5b15f30230873e84f15" dependencies = [ "arrayvec", "bevy_ecs_macros", @@ -634,9 +599,9 @@ dependencies = [ [[package]] name = "bevy_ecs_macros" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd7c1e5d04c7e51105d262775cab02518ea20e2d44e037af892e33fe2e7346a3" +checksum = "cb4296b3254b8bd29769f6a4512731b2e6c4b163343ca18b72316927315b6096" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -646,9 +611,9 @@ dependencies = [ [[package]] name = "bevy_encase_derive" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59449eb107c9354d2ba227f04889a2578b9f6f9d8eb26d81e3346b45137b86f2" +checksum = "bfe562b883fb652acde84cb6bb01cbc9f23c377e411f1484467ecfdd3a3d234e" dependencies = [ "bevy_macro_utils", "encase_derive_impl", @@ -656,9 +621,9 @@ dependencies = [ [[package]] name = "bevy_gilrs" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fbc844d475260de2b2a7a4d25258e45a004b3130f5a59ca154de1a219f402e8" +checksum = "adc3a5f9e872133d7f5c2fab82e17781c19ed0b98f371362a23ed972bb538d20" dependencies = [ "bevy_app", "bevy_ecs", @@ -671,9 +636,9 @@ dependencies = [ [[package]] name = "bevy_gizmos" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d5fd067b32e6b6aefdfb5b239d547b0921c8c5f8c2fa4a7762349b151f919f9" +checksum = "e1c82341f6a3517efeeeef2fe68135ac3a91b11b6e369fc1a07f6e9a4b462b57" dependencies = [ "bevy_app", "bevy_asset", @@ -681,6 +646,7 @@ dependencies = [ "bevy_core_pipeline", "bevy_ecs", "bevy_gizmos_macros", + "bevy_image", "bevy_math", "bevy_pbr", "bevy_reflect", @@ -694,9 +660,9 @@ dependencies = [ [[package]] name = "bevy_gizmos_macros" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f70a1bcd58c4ca067738d66837a18b4a57c6b25c1cf2f0bd66cca98dfe87e5b" +checksum = "9454ac9f0a2141900ef9f3482af9333e490d5546bbea3cab63a777447d35beed" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -706,9 +672,9 @@ dependencies = [ [[package]] name = "bevy_gltf" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8efaa3887d9b1f7635fcc95109d1738573412b666065b86ae42cc21251c2399f" +checksum = "b21ed694796a001a5cf63de9ddc62fc017302b0e2998a361ef1126880ec93555" dependencies = [ "base64 0.22.1", "bevy_animation", @@ -738,9 +704,9 @@ dependencies = [ [[package]] name = "bevy_hierarchy" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53dec1d455b8be41eb918e7bf081972d6e02ba5660502e11ed107ed25f7982b8" +checksum = "6fe0b538beea7edbf30a6062242b99e67ff3bfa716566aacf91d5b5e027f02a2" dependencies = [ "bevy_app", "bevy_core", @@ -753,9 +719,9 @@ dependencies = [ [[package]] name = "bevy_image" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ef230cdd23c883c0fc269093358d4dac0a0d339d493edc87b952f86149d0e60" +checksum = "db46fa6a2f9e20435f3231710abbb136d2cc0a376f3f8e6ecfe071e286f5a246" dependencies = [ "bevy_asset", "bevy_color", @@ -775,9 +741,9 @@ dependencies = [ [[package]] name = "bevy_input" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dc505f1c055b711c08b80d37f10d98151aafca9fcb6b153ee00c7a4dcae3f75" +checksum = "46b4ea60095d1a1851e40cb12481ad3d5d234e14376d6b73142a85586c266b74" dependencies = [ "bevy_app", "bevy_core", @@ -791,9 +757,9 @@ dependencies = [ [[package]] name = "bevy_internal" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6ad66535730bc578a82aa7c006107c9027108ff76903acfd55c69c3ff365298" +checksum = "d4237e6e9b03902321032f00f931f18a4a211093bd9a7cf81276a0228a2a4417" dependencies = [ "bevy_a11y", "bevy_animation", @@ -818,7 +784,6 @@ dependencies = [ "bevy_picking", "bevy_ptr", "bevy_reflect", - "bevy_remote", "bevy_render", "bevy_scene", "bevy_sprite", @@ -835,9 +800,9 @@ dependencies = [ [[package]] name = "bevy_log" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2d8a9f9f6875598e986ac8de8d17873871eb6e816d7842f32da204cd074b9f1" +checksum = "1a0bdb42b00ac3752f0d6f531fbda8abf313603157a7b3163da8529412119a0a" dependencies = [ "android_log-sys", "bevy_app", @@ -851,9 +816,9 @@ dependencies = [ [[package]] name = "bevy_macro_utils" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c5594703cac7b78469f2691652c562f190b24a4f3cb78f862d9c98e98bfb804" +checksum = "3954dbb56a66a6c09c783e767f6ceca0dc0492c22e536e2aeaefb5545eac33c6" dependencies = [ "proc-macro2", "quote", @@ -863,9 +828,9 @@ dependencies = [ [[package]] name = "bevy_math" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5a696cc7629ca5ce5ffb416ae5c868ae8e3cfcb0a51739296c91a776a355297" +checksum = "9ae26f952598e293acac783d947b21af1809673cbeba25d76b969a56f287160b" dependencies = [ "bevy_reflect", "derive_more", @@ -879,9 +844,9 @@ dependencies = [ [[package]] name = "bevy_mesh" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e798db51029ff3f7f41eef55f77265ce4a77868acce1ef8c4d6fb8030410726d" +checksum = "9c324d45ca0043a4696d7324b569de65be17066ed3a97dd42205bc28693d20b5" dependencies = [ "bevy_asset", "bevy_derive", @@ -902,9 +867,9 @@ dependencies = [ [[package]] name = "bevy_mikktspace" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fa55db38ee370b8a01675e61ac7112d59ee2f31305cc7c7f0cfb3acab0d0354" +checksum = "da5ea3ad25d74ea36ea45418ad799f135d046db35c322b9704c4a8934eb65ce9" dependencies = [ "glam", ] @@ -957,9 +922,9 @@ dependencies = [ [[package]] name = "bevy_pbr" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efbddf2fdeee2ed28a764210162ecac00e635a67f1b1d3235ba588699a4e53ca" +checksum = "01b3bd8e646ddd3f27743b712957d2990d7361eb21044accc47c4f66711bf2cb" dependencies = [ "bevy_app", "bevy_asset", @@ -967,6 +932,7 @@ dependencies = [ "bevy_core_pipeline", "bevy_derive", "bevy_ecs", + "bevy_image", "bevy_math", "bevy_reflect", "bevy_render", @@ -985,9 +951,9 @@ dependencies = [ [[package]] name = "bevy_picking" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71585d3e9cf557cf2b32190aa92b001d100144e1bed60e185c09790169f80bcb" +checksum = "97a137ed706574dc4a01cac527eb2c44a0b0e477d5bce3afc892a9ee95ee0078" dependencies = [ "bevy_app", "bevy_asset", @@ -1009,15 +975,15 @@ dependencies = [ [[package]] name = "bevy_ptr" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bba1b455f5a688bf70fd712c4e40068014287964b865a31080c6a8e6db5eecb" +checksum = "2af9e30b40fb3f0a80a658419f670f2de1e743efcaca1952c43cdcc923287944" [[package]] name = "bevy_reflect" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a24644d96fcff7f1c141e87f08586c97dada3f7142552cb1d615631cf7f9d52" +checksum = "52a37e2ae5ed62df4a0e3f958076effe280b39bc81fe878587350897a89332a2" dependencies = [ "assert_type_match", "bevy_ptr", @@ -1037,9 +1003,9 @@ dependencies = [ [[package]] name = "bevy_reflect_derive" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e282d0186ac099a2cb91d9320dadd9fcdf52a8c3e565b9b6d86e7dc22fa11996" +checksum = "94c683fc68c75fc26f90bb1e529590095380d7cec66f6610dbe6b93d9fd26f94" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -1048,34 +1014,11 @@ dependencies = [ "uuid", ] -[[package]] -name = "bevy_remote" -version = "0.15.0-rc.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8557de19918af71897cef3dbe33d6cc6f400e818af4b8d9198e0b6bc555f3510" -dependencies = [ - "anyhow", - "async-channel", - "async-io", - "bevy_app", - "bevy_derive", - "bevy_ecs", - "bevy_hierarchy", - "bevy_reflect", - "bevy_tasks", - "bevy_utils", - "http-body-util", - "hyper", - "serde", - "serde_json", - "smol-hyper", -] - [[package]] name = "bevy_render" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6d74663d2c95823d7b354fc01b9ce5eecd197c9191ff8f665c08c78f9d69942" +checksum = "d188f392edf4edcae53dfda07f3ec618a7a704183ec3f2e8504657a9fb940c8a" dependencies = [ "async-channel", "bevy_app", @@ -1120,9 +1063,9 @@ dependencies = [ [[package]] name = "bevy_render_macros" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a66e09c0ea65f28b0b790690a588b74adbf89899f37531c7062a55805a1214a" +checksum = "4ab37ee2945f93e9ba8daf91cd968b4cba9c677ac51d349dd8512a107a9a5d92" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -1132,9 +1075,9 @@ dependencies = [ [[package]] name = "bevy_scene" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0521c672d32480a789d8b00c950f4690336b38babc630a25fbd016c0e32c6d3" +checksum = "0e883fd3c6d6e7761f1fe662e79bc7bdc7e917e73e7bfc434b1d16d2a5852119" dependencies = [ "bevy_app", "bevy_asset", @@ -1152,9 +1095,9 @@ dependencies = [ [[package]] name = "bevy_sprite" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ec69e32c0bae51346de8a91ca0d7bb572967c2da0f924af14a174ebce1fd60d" +checksum = "e975abc3f3f3432d6ad86ae32de804e96d7faf59d27f32b065b5ddc1e73ed7e1" dependencies = [ "bevy_app", "bevy_asset", @@ -1162,6 +1105,7 @@ dependencies = [ "bevy_core_pipeline", "bevy_derive", "bevy_ecs", + "bevy_image", "bevy_math", "bevy_picking", "bevy_reflect", @@ -1181,9 +1125,9 @@ dependencies = [ [[package]] name = "bevy_state" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e127e147f4336bf12eeaade1dabc18f3473a9dd77c154f7a0478887384633ae" +checksum = "036ec832197eae51b8a842220d2df03591dff75b4566dcf0f81153bbcb2b593b" dependencies = [ "bevy_app", "bevy_ecs", @@ -1195,9 +1139,9 @@ dependencies = [ [[package]] name = "bevy_state_macros" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20eba83d61d49d86904fa828bfbab2b37dd126f58c8a5f2e928d913484f9d18a" +checksum = "2828eb6762af9eccfebb5e4a0e56dbc4bd07bf3192083fa3e8525cfdb3e95add" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -1207,9 +1151,9 @@ dependencies = [ [[package]] name = "bevy_tasks" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35a350a7ffdd7150bd16f903780464b313b136ae6c17437e2f2b4c7c2bb9890e" +checksum = "5171c605b462b4e3249e01986505e62e3933aa27642a9f793c841814fcbbfb4f" dependencies = [ "async-channel", "async-executor", @@ -1222,9 +1166,9 @@ dependencies = [ [[package]] name = "bevy_text" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c13f2e64593cb976b357d8134c2d17b1a25cad6b2a7f920d2ba6b6fc183a3f1d" +checksum = "4fb000b2abad9f82f7a137fac7e0e3d2c6488cbf8dd9ddbb68f9a6b7e7af8d84" dependencies = [ "bevy_app", "bevy_asset", @@ -1232,6 +1176,7 @@ dependencies = [ "bevy_derive", "bevy_ecs", "bevy_hierarchy", + "bevy_image", "bevy_math", "bevy_reflect", "bevy_render", @@ -1249,9 +1194,9 @@ dependencies = [ [[package]] name = "bevy_time" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812a471a73b4b25a8630f67b891f714f2fc8998e00a9987caad8916eba3e7294" +checksum = "291b6993b899c04554fc034ebb9e0d7fde9cb9b2fb58dcd912bfa6247abdedbb" dependencies = [ "bevy_app", "bevy_ecs", @@ -1262,9 +1207,9 @@ dependencies = [ [[package]] name = "bevy_transform" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eef74f21fd938b63c8dcb4d582bb4fd96af9630d289f71624e72e426fe37db2" +checksum = "dc35665624d0c728107ab0920d5ad2d352362b906a8c376eaf375ec9c751faf4" dependencies = [ "bevy_app", "bevy_ecs", @@ -1276,12 +1221,12 @@ dependencies = [ [[package]] name = "bevy_ui" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7206ca33419b9745b6a9588a69cbb34cee6f6fe01a4df9dbe68860879449a0e0" +checksum = "43da3326aa592d6f6326e31893901bf17cd6957ded4e0ea02bc54652e5624b7f" dependencies = [ + "accesskit", "bevy_a11y", - "bevy_animation", "bevy_app", "bevy_asset", "bevy_color", @@ -1289,6 +1234,7 @@ dependencies = [ "bevy_derive", "bevy_ecs", "bevy_hierarchy", + "bevy_image", "bevy_input", "bevy_math", "bevy_picking", @@ -1308,14 +1254,14 @@ dependencies = [ [[package]] name = "bevy_utils" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e73bb014ee7754c8e6de9a89206139482a0aac29db0fa416f8fbcb640985314" +checksum = "a0a48bad33c385a7818b7683a16c8b5c6930eded05cd3f176264fc1f5acea473" dependencies = [ "ahash", "bevy_utils_proc_macros", "getrandom", - "hashbrown", + "hashbrown 0.14.5", "thread_local", "tracing", "web-time", @@ -1323,9 +1269,9 @@ dependencies = [ [[package]] name = "bevy_utils_proc_macros" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20ae93d5e25b072af3637f3e1c83865c59d8a8e77a5ab87465e4a00dd4766d0d" +checksum = "3dfd8d4a525b8f04f85863e45ccad3e922d4c11ed4a8d54f7f62a40bf83fb90f" dependencies = [ "proc-macro2", "quote", @@ -1334,9 +1280,9 @@ dependencies = [ [[package]] name = "bevy_window" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc64e1a8acd775c78db7a1c6afb8f4ec31ffce7e61bd39bbc19a3177ac4276cc" +checksum = "05f3520279aae65935d6a84443202c154ead3abebf8dae906d095665162de358" dependencies = [ "android-activity", "bevy_a11y", @@ -1352,10 +1298,11 @@ dependencies = [ [[package]] name = "bevy_winit" -version = "0.15.0-rc.3" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e05f94f7b207237b9f5903946e5969ea01b70e8b557aa2126f7903ce14780db" +checksum = "581bb2249a82285707e0977a9a1c79a2248ede587fcb289708faa03a82ebfa7f" dependencies = [ + "accesskit", "accesskit_winit", "approx", "bevy_a11y", @@ -1421,7 +1368,7 @@ dependencies = [ "bitflags 2.6.0", "cexpr", "clang-sys", - "itertools 0.12.1", + "itertools 0.13.0", "log", "prettyplease", "proc-macro2", @@ -2262,6 +2209,12 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2" + [[package]] name = "font-types" version = "0.7.3" @@ -2605,7 +2558,7 @@ checksum = "9c08c1f623a8d0b722b8b99f821eb0ba672a1618f0d3b16ddbee1cedd2dd8557" dependencies = [ "bitflags 2.6.0", "gpu-descriptor-types", - "hashbrown", + "hashbrown 0.14.5", ] [[package]] @@ -2663,6 +2616,15 @@ dependencies = [ "serde", ] +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +dependencies = [ + "foldhash", +] + [[package]] name = "hermit-abi" version = "0.3.9" @@ -2740,12 +2702,6 @@ version = "1.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - [[package]] name = "hyper" version = "1.4.1" @@ -2759,7 +2715,6 @@ dependencies = [ "http", "http-body", "httparse", - "httpdate", "itoa", "pin-project-lite", "smallvec", @@ -2844,9 +2799,9 @@ dependencies = [ [[package]] name = "immutable-chunkmap" -version = "2.0.5" +version = "2.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4419f022e55cc63d5bbd6b44b71e1d226b9c9480a47824c706e9d54e5c40c5eb" +checksum = "12f97096f508d54f8f8ab8957862eee2ccd628847b6217af1a335e1c44dee578" dependencies = [ "arrayvec", ] @@ -2858,7 +2813,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.14.5", ] [[package]] @@ -4526,19 +4481,6 @@ version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" -[[package]] -name = "smol-hyper" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7428a49d323867702cd12b97b08a6b0104f39ec13b49117911f101271321bc1a" -dependencies = [ - "async-executor", - "async-io", - "futures-io", - "hyper", - "pin-project-lite", -] - [[package]] name = "smol_str" version = "0.2.2" @@ -5253,9 +5195,9 @@ dependencies = [ [[package]] name = "wgpu" -version = "23.0.0" +version = "23.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76ab52f2d3d18b70d5ab8dd270a1cff3ebe6dbe4a7d13c1cc2557138a9777fdc" +checksum = "80f70000db37c469ea9d67defdc13024ddf9a5f1b89cb2941b812ad7cde1735a" dependencies = [ "arrayvec", "cfg_aliases 0.1.1", @@ -5278,9 +5220,9 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "23.0.0" +version = "23.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e0c68e7b6322a03ee5b83fcd92caeac5c2a932f6457818179f4652ad2a9c065" +checksum = "d63c3c478de8e7e01786479919c8769f62a22eec16788d8c2ac77ce2c132778a" dependencies = [ "arrayvec", "bit-vec 0.8.0", @@ -5303,9 +5245,9 @@ dependencies = [ [[package]] name = "wgpu-hal" -version = "23.0.0" +version = "23.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de6e7266b869de56c7e3ed72a954899f71d14fec6cc81c102b7530b92947601b" +checksum = "89364b8a0b211adc7b16aeaf1bd5ad4a919c1154b44c9ce27838213ba05fd821" dependencies = [ "android_system_properties", "arrayvec", diff --git a/Cargo.toml b/Cargo.toml index aa68360..4c7e32c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,7 +10,7 @@ resolver = "2" members = ["crates/*", "crates/bevy_openxr/examples/android"] [workspace.dependencies] -bevy = { version = "0.15.0-rc.3", default-features = false, features = [ +bevy = { version = "0.15", default-features = false, features = [ "bevy_render", "bevy_core_pipeline", "bevy_winit", diff --git a/crates/bevy_openxr/examples/overlay.rs b/crates/bevy_openxr/examples/overlay.rs index d19b235..800a7b6 100644 --- a/crates/bevy_openxr/examples/overlay.rs +++ b/crates/bevy_openxr/examples/overlay.rs @@ -1,10 +1,11 @@ //! A simple 3D scene with light shining over a cube sitting on a plane. use bevy::prelude::*; -use bevy_mod_openxr::{add_xr_plugins, init::OxrInitPlugin, types::OxrExtensions}; -use bevy_mod_xr::session::XrState; -// use openxr::EnvironmentBlendMode; -// use wgpu::TextureFormat; +use bevy_mod_openxr::{ + add_xr_plugins, features::overlay::OxrOverlaySessionEvent, init::OxrInitPlugin, + types::OxrExtensions, +}; +use openxr::EnvironmentBlendMode; fn main() { App::new() @@ -12,32 +13,32 @@ fn main() { exts: { let mut exts = OxrExtensions::default(); exts.enable_hand_tracking(); - exts.other.push("XR_EXTX_overlay\0".into()); + exts.extx_overlay = true; exts }, - // blend_modes: Some({ - // let mut v = Vec::new(); - // v.push(EnvironmentBlendMode::ALPHA_BLEND); - // v.push(EnvironmentBlendMode::ADDITIVE); - // v.push(EnvironmentBlendMode::OPAQUE); - // v - // }), - // formats: Some({ - // let mut v = Vec::new(); - // // v.push(TextureFormat::Rgba8Uint); - // v.push(TextureFormat::Rgba8Unorm); - // v.push(TextureFormat::Rgba8UnormSrgb); - // v - // }), + blend_modes: Some({ + vec![ + EnvironmentBlendMode::ALPHA_BLEND, + EnvironmentBlendMode::OPAQUE, + ] + }), ..OxrInitPlugin::default() })) .insert_resource(ClearColor(Color::NONE)) .add_plugins(bevy_xr_utils::hand_gizmos::HandGizmosPlugin) .add_systems(Startup, setup) .add_systems(Update, handle_input) + .add_systems(Update, print_main_session_changes) .run(); } +fn print_main_session_changes(mut events: EventReader) { + for event in events.read() { + let OxrOverlaySessionEvent::MainSessionVisibilityChanged { visible, flags: _ } = event; + info!("main session visible: {visible}"); + } +} + fn handle_input( keys: Res>, mut end: EventWriter, @@ -45,7 +46,6 @@ fn handle_input( mut begin: EventWriter, mut create: EventWriter, mut request_exit: EventWriter, - state: Res, ) { if keys.just_pressed(KeyCode::KeyE) { info!("sending end"); @@ -67,9 +67,6 @@ fn handle_input( info!("sending request exit"); request_exit.send_default(); } - if keys.just_pressed(KeyCode::KeyI) { - info!("current state: {:?}", *state); - } } /// set up a simple 3D scene @@ -78,12 +75,6 @@ fn setup( mut meshes: ResMut>, mut materials: ResMut>, ) { - // circular base - // commands.spawn(( - // Mesh3d(meshes.add(Circle::new(4.0))), - // MeshMaterial3d(materials.add(Color::WHITE)), - // Transform::from_rotation(Quat::from_rotation_x(-std::f32::consts::FRAC_PI_2)), - // )); // cube commands.spawn(( Mesh3d(meshes.add(Cuboid::new(1.0, 1.0, 1.0))), @@ -92,11 +83,11 @@ fn setup( )); // light commands.spawn(( - PointLight { + PointLight { shadows_enabled: true, ..default() }, - Transform::from_xyz(4.0, 8.0, 4.0), + Transform::from_xyz(4.0, 8.0, 4.0), )); commands.spawn(( Camera3d::default(), diff --git a/crates/bevy_openxr/src/openxr/exts.rs b/crates/bevy_openxr/src/openxr/exts.rs index dc96399..886df53 100644 --- a/crates/bevy_openxr/src/openxr/exts.rs +++ b/crates/bevy_openxr/src/openxr/exts.rs @@ -1,4 +1,7 @@ -use bevy::{ecs::system::Resource, prelude::{Deref, DerefMut}}; +use bevy::{ + ecs::system::Resource, + prelude::{Deref, DerefMut}, +}; use openxr::ExtensionSet; #[derive(Clone, Debug, Eq, PartialEq, Deref, DerefMut, Resource)] @@ -196,6 +199,8 @@ macro_rules! impl_ext { ext_local_floor, ext_hand_tracking_data_source, ext_plane_detection, + ext_future, + ext_user_presence, fb_composition_layer_image_layout, fb_composition_layer_alpha_blend, #[cfg(target_os = "android")] @@ -238,6 +243,7 @@ macro_rules! impl_ext { fb_composition_layer_depth_test, fb_spatial_entity_storage_batch, fb_spatial_entity_user, + fb_face_tracking2, htc_vive_cosmos_controller_interaction, htc_facial_tracking, htc_vive_focus3_controller_interaction, @@ -245,6 +251,7 @@ macro_rules! impl_ext { htc_vive_wrist_tracker_interaction, htc_passthrough, htc_foveation, + htc_anchor, huawei_controller_interaction, #[cfg(target_os = "android")] khr_android_thread_settings, @@ -276,6 +283,8 @@ macro_rules! impl_ext { khr_composition_layer_equirect2, khr_binding_modification, khr_swapchain_usage_input_attachment_bit, + khr_locate_spaces, + khr_maintenance1, meta_foveation_eye_tracked, meta_local_dimming, meta_passthrough_preferences, @@ -283,11 +292,18 @@ macro_rules! impl_ext { meta_vulkan_swapchain_create_info, meta_performance_metrics, meta_headset_id, + meta_recommended_layer_resolution, meta_passthrough_color_lut, + meta_spatial_entity_mesh, + meta_automatic_layer_filter, + meta_touch_controller_plus, + meta_environment_depth, ml_ml2_controller_interaction, ml_frame_end_info, ml_global_dimmer, ml_compat, + ml_marker_understanding, + ml_localization_map, ml_user_calibration, mnd_headless, mnd_swapchain_usage_input_attachment_bit, @@ -319,7 +335,12 @@ macro_rules! impl_ext { varjo_environment_depth_estimation, varjo_marker_tracking, varjo_view_offset, + varjo_xr4_controller_interaction, yvr_controller_interaction, + extx_overlay, + mndx_egl_enable, + mndx_force_feedback_curl, + htcx_vive_tracker_interaction, } )* diff --git a/crates/bevy_openxr/src/openxr/features/overlay.rs b/crates/bevy_openxr/src/openxr/features/overlay.rs index dfca5d3..e6072e7 100644 --- a/crates/bevy_openxr/src/openxr/features/overlay.rs +++ b/crates/bevy_openxr/src/openxr/features/overlay.rs @@ -55,7 +55,7 @@ fn add_overlay_info_to_chain( exts: Res, settings: Res, ) { - if exts.other.contains(&"XR_EXTX_overlay\0".to_string()) { + if exts.extx_overlay { chain.push(OxrSessionCreateInfoOverlay::new( settings.flags, settings.session_layer_placement, diff --git a/crates/bevy_openxr/src/openxr/poll_events.rs b/crates/bevy_openxr/src/openxr/poll_events.rs index 4b4d696..c2eac26 100644 --- a/crates/bevy_openxr/src/openxr/poll_events.rs +++ b/crates/bevy_openxr/src/openxr/poll_events.rs @@ -45,15 +45,16 @@ use super::{openxr_session_available, resources::OxrInstance}; pub struct OxrEventHandlers { pub handlers: Vec, } -pub type OxrEventHandler = SystemId; +pub type OxrEventHandler = SystemId, ()>; pub struct OxrEvent { event: Rc>>>, } impl OxrEvent { - pub(crate) fn new<'a>(event: Rc>>>) -> Self { + pub(crate) fn new(event: Rc>>>) -> Self { Self { + #[allow(clippy::missing_transmute_annotations)] event: unsafe { mem::transmute(event) }, } } @@ -63,19 +64,19 @@ impl OxrEvent { /// don't Store the [Event] anywhere!! #[allow(clippy::needless_lifetimes)] pub unsafe fn get<'a>(&'a self) -> Option> { - self.event.borrow().clone() + *self.event.borrow() } } pub trait OxrEventHandlerExt { fn add_oxr_event_handler( &mut self, - system: impl IntoSystem + 'static, + system: impl IntoSystem, (), M> + 'static, ) -> &mut Self; } impl OxrEventHandlerExt for App { fn add_oxr_event_handler( &mut self, - system: impl IntoSystem + 'static, + system: impl IntoSystem, (), M> + 'static, ) -> &mut Self { self.init_resource::(); let id = self.register_system(system); From 2c75a298a33d1394758e3bf5789bf0ade1fda17a Mon Sep 17 00:00:00 2001 From: Schmarni Date: Sat, 30 Nov 2024 00:22:29 +0100 Subject: [PATCH 08/13] remove bevy rc workaround Signed-off-by: Schmarni --- crates/bevy_openxr/examples/raw_actions.rs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/crates/bevy_openxr/examples/raw_actions.rs b/crates/bevy_openxr/examples/raw_actions.rs index 72e7d76..9d3a032 100644 --- a/crates/bevy_openxr/examples/raw_actions.rs +++ b/crates/bevy_openxr/examples/raw_actions.rs @@ -2,11 +2,17 @@ use std::ops::Deref; use bevy::prelude::*; use bevy_mod_openxr::{ - action_binding::{OxrSendActionBindings, OxrSuggestActionBinding}, action_set_attaching::OxrAttachActionSet, action_set_syncing::{OxrActionSetSyncSet, OxrSyncActionSet}, add_xr_plugins, openxr_session_running, resources::OxrInstance, session::OxrSession, spaces::OxrSpaceExt + action_binding::{OxrSendActionBindings, OxrSuggestActionBinding}, + action_set_attaching::OxrAttachActionSet, + action_set_syncing::{OxrActionSetSyncSet, OxrSyncActionSet}, + add_xr_plugins, openxr_session_running, + resources::OxrInstance, + session::OxrSession, + spaces::OxrSpaceExt, }; use bevy_mod_xr::{ - session::{session_available, session_running, XrSessionCreated}, - spaces::{XrSpace, XrSpaceLocationFlags}, + session::{session_available, XrSessionCreated}, + spaces::XrSpace, }; use openxr::Posef; @@ -125,16 +131,12 @@ fn spawn_hands( Mesh3d(meshes.add(Cuboid::new(0.1, 0.1, 0.05))), MeshMaterial3d(materials.add(Color::srgb_u8(124, 144, 255))), left_space, - // runtime required components are not inserted for non runrime required components, should - // be fixed in the final bevy 0.15 release - XrSpaceLocationFlags::default(), Controller, )); cmds.spawn(( Mesh3d(meshes.add(Cuboid::new(0.1, 0.1, 0.05))), MeshMaterial3d(materials.add(Color::srgb_u8(124, 144, 255))), right_space, - XrSpaceLocationFlags::default(), Controller, )); } From 869fd98d7f0de2d82309f6112210b06e34beede5 Mon Sep 17 00:00:00 2001 From: Schmarni Date: Fri, 20 Dec 2024 03:54:28 +0100 Subject: [PATCH 09/13] update hand gizmos to include the local axes Signed-off-by: Schmarni --- crates/bevy_xr_utils/src/hand_gizmos.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/bevy_xr_utils/src/hand_gizmos.rs b/crates/bevy_xr_utils/src/hand_gizmos.rs index 1c270b6..29c3cfe 100644 --- a/crates/bevy_xr_utils/src/hand_gizmos.rs +++ b/crates/bevy_xr_utils/src/hand_gizmos.rs @@ -30,6 +30,7 @@ fn draw_hand_gizmos( rotation: pose.rotation, }; gizmos.sphere(pose, **radius, gizmo_color(bone)); + gizmos.axes(pose, **radius); } } From 177da5c10d42cea4ccbd16c2529dab8de4af630b Mon Sep 17 00:00:00 2001 From: Schmarni Date: Sat, 21 Dec 2024 02:32:04 +0100 Subject: [PATCH 10/13] fix tracking_utils example Signed-off-by: Schmarni --- crates/bevy_openxr/examples/tracking_utils.rs | 2 +- crates/bevy_xr_utils/src/tracking_utils.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/bevy_openxr/examples/tracking_utils.rs b/crates/bevy_openxr/examples/tracking_utils.rs index f6d9756..cab0f0c 100644 --- a/crates/bevy_openxr/examples/tracking_utils.rs +++ b/crates/bevy_openxr/examples/tracking_utils.rs @@ -1,7 +1,7 @@ //! A simple 3D scene with light shining over a cube sitting on a plane. use bevy::prelude::*; -use bevy_mod_openxr::add_xr_plugins; +use bevy_mod_openxr::{action_binding::OxrSendActionBindings, add_xr_plugins}; use bevy_mod_xr::session::{XrSessionCreated, XrTracker}; use bevy_xr_utils::tracking_utils::{ suggest_action_bindings, TrackingUtilitiesPlugin, XrTrackedLeftGrip, XrTrackedLocalFloor, XrTrackedRightGrip, XrTrackedStage, XrTrackedView diff --git a/crates/bevy_xr_utils/src/tracking_utils.rs b/crates/bevy_xr_utils/src/tracking_utils.rs index fdc8dc4..80a993c 100644 --- a/crates/bevy_xr_utils/src/tracking_utils.rs +++ b/crates/bevy_xr_utils/src/tracking_utils.rs @@ -1,6 +1,6 @@ use bevy::prelude::*; use bevy_mod_openxr::{ - action_binding::{OxrSendActionBindings, OxrSuggestActionBinding}, + action_binding::OxrSuggestActionBinding, action_set_attaching::OxrAttachActionSet, action_set_syncing::{OxrActionSetSyncSet, OxrSyncActionSet}, helper_traits::{ToQuat, ToVec3}, From 8042fbdc6afe02cd867c5ca1677d86040c3c90dd Mon Sep 17 00:00:00 2001 From: Schmarni Date: Sun, 29 Dec 2024 23:26:06 +0100 Subject: [PATCH 11/13] prevent crash that i can't explain when not using default plugins Signed-off-by: Schmarni --- crates/bevy_xr/src/session.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/crates/bevy_xr/src/session.rs b/crates/bevy_xr/src/session.rs index ba0ced6..56de566 100644 --- a/crates/bevy_xr/src/session.rs +++ b/crates/bevy_xr/src/session.rs @@ -1,3 +1,4 @@ +use std::convert::identity; use std::sync::atomic::AtomicBool; use std::sync::Arc; @@ -98,7 +99,11 @@ impl Component for XrTracker { fn register_component_hooks(hooks: &mut bevy::ecs::component::ComponentHooks) { hooks.on_add(|mut world, entity, _| { - if world.entity(entity).components::>() { + if world + .entity(entity) + .get_components::>() + .is_some_and(identity) + { return; } let Some(root) = world.get_resource::().map(|r| r.0) else { From 7c57e8facd137655bcd25be85d7134a24fab535b Mon Sep 17 00:00:00 2001 From: Schmarni Date: Wed, 1 Jan 2025 03:36:56 +0100 Subject: [PATCH 12/13] actually use the spans we create Signed-off-by: Schmarni --- crates/bevy_openxr/src/openxr/init.rs | 4 ++-- crates/bevy_openxr/src/openxr/poll_events.rs | 2 +- crates/bevy_openxr/src/openxr/render.rs | 12 ++++++------ 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/crates/bevy_openxr/src/openxr/init.rs b/crates/bevy_openxr/src/openxr/init.rs index 8840c7b..059ddbf 100644 --- a/crates/bevy_openxr/src/openxr/init.rs +++ b/crates/bevy_openxr/src/openxr/init.rs @@ -508,7 +508,7 @@ pub fn begin_xr_session( world: &mut World, // session: Res, mut session_started: ResMut ) { - let _span = info_span!("xr_begin_session"); + let _span = info_span!("xr_begin_session").entered(); world .get_resource::() .unwrap() @@ -524,7 +524,7 @@ pub fn end_xr_session( ) { // Maybe this could be an event? world.run_schedule(XrPreSessionEnd); - let _span = info_span!("xr_end_session"); + let _span = info_span!("xr_end_session").entered(); world .get_resource::() .unwrap() diff --git a/crates/bevy_openxr/src/openxr/poll_events.rs b/crates/bevy_openxr/src/openxr/poll_events.rs index c2eac26..2daf8aa 100644 --- a/crates/bevy_openxr/src/openxr/poll_events.rs +++ b/crates/bevy_openxr/src/openxr/poll_events.rs @@ -19,7 +19,7 @@ impl Plugin for OxrEventsPlugin { } /// Polls any OpenXR events and handles them accordingly pub fn poll_events(world: &mut World) { - let _span = info_span!("xr_poll_events"); + let _span = info_span!("xr_poll_events").entered(); let instance = world.resource::().clone(); let handlers = world.remove_resource::().unwrap(); let mut buffer = EventDataBuffer::default(); diff --git a/crates/bevy_openxr/src/openxr/render.rs b/crates/bevy_openxr/src/openxr/render.rs index 0fb0269..a3586f8 100644 --- a/crates/bevy_openxr/src/openxr/render.rs +++ b/crates/bevy_openxr/src/openxr/render.rs @@ -135,10 +135,10 @@ pub fn init_views( swapchain_images: Res, mut commands: Commands, ) { - let _span = info_span!("xr_init_views"); let temp_tex = swapchain_images.first().unwrap(); // this for loop is to easily add support for quad or mono views in the future. for index in 0..2 { + let _span = debug_span!("xr_init_view").entered(); info!("XrCamera resolution: {}", graphics_info.resolution); let view_handle = add_texture_view(&mut manual_texture_views, temp_tex, &graphics_info, index); @@ -153,7 +153,6 @@ pub fn init_views( } pub fn wait_frame(mut frame_waiter: ResMut, mut commands: Commands) { - let _span = info_span!("xr_wait_frame"); let state = frame_waiter.wait().expect("Failed to wait frame"); commands.insert_resource(OxrFrameState(state)); } @@ -362,11 +361,11 @@ pub fn insert_texture_views( mut manual_texture_views: ResMut, graphics_info: Res, ) { - let _span = info_span!("xr_insert_texture_views"); let index = swapchain.acquire_image().expect("Failed to acquire image"); let image = &swapchain_images[index as usize]; for i in 0..2 { + let _span = debug_span!("xr_insert_texture_view").entered(); add_texture_view(&mut manual_texture_views, image, &graphics_info, i); } } @@ -400,23 +399,21 @@ pub fn add_texture_view( } pub fn begin_frame(mut frame_stream: ResMut) { - let _span = info_span!("xr_begin_frame"); frame_stream.begin().expect("Failed to begin frame"); } pub fn release_image(mut swapchain: ResMut) { - let _span = info_span!("xr_release_image"); #[cfg(target_os = "android")] { let ctx = ndk_context::android_context(); let vm = unsafe { jni::JavaVM::from_raw(ctx.vm().cast()) }.unwrap(); let env = vm.attach_current_thread_as_daemon(); } + let _span = debug_span!("xr_release_image").entered(); swapchain.release_image().unwrap(); } pub fn end_frame(world: &mut World) { - let _span = info_span!("xr_end_frame"); #[cfg(target_os = "android")] { let ctx = ndk_context::android_context(); @@ -426,6 +423,7 @@ pub fn end_frame(world: &mut World) { world.resource_scope::(|world, mut frame_stream| { let mut layers = vec![]; let frame_state = world.resource::(); + let _span = debug_span!("get layers").entered(); if frame_state.should_render { for layer in world.resource::().iter() { if let Some(layer) = layer.get(world) { @@ -433,7 +431,9 @@ pub fn end_frame(world: &mut World) { } } } + drop(_span); let layers: Vec<_> = layers.iter().map(Box::as_ref).collect(); + let _span = debug_span!("xr_end_frame").entered(); if let Err(e) = frame_stream.end( frame_state.predicted_display_time, world.resource::().blend_mode, From 336c40d5557b5293c333a2246a30d8532bd67bf6 Mon Sep 17 00:00:00 2001 From: Schmarni Date: Wed, 1 Jan 2025 03:38:46 +0100 Subject: [PATCH 13/13] switch all spans to debug_spans Signed-off-by: Schmarni --- crates/bevy_openxr/src/openxr/init.rs | 5 +++-- crates/bevy_openxr/src/openxr/poll_events.rs | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/crates/bevy_openxr/src/openxr/init.rs b/crates/bevy_openxr/src/openxr/init.rs index 059ddbf..b07af03 100644 --- a/crates/bevy_openxr/src/openxr/init.rs +++ b/crates/bevy_openxr/src/openxr/init.rs @@ -508,12 +508,13 @@ pub fn begin_xr_session( world: &mut World, // session: Res, mut session_started: ResMut ) { - let _span = info_span!("xr_begin_session").entered(); + let _span = debug_span!("xr_begin_session").entered(); world .get_resource::() .unwrap() .begin(openxr::ViewConfigurationType::PRIMARY_STEREO) .expect("Failed to begin session"); + drop(_span); world.get_resource_mut::().unwrap().0 = true; world.run_schedule(XrPostSessionBegin); } @@ -524,7 +525,7 @@ pub fn end_xr_session( ) { // Maybe this could be an event? world.run_schedule(XrPreSessionEnd); - let _span = info_span!("xr_end_session").entered(); + let _span = debug_span!("xr_end_session").entered(); world .get_resource::() .unwrap() diff --git a/crates/bevy_openxr/src/openxr/poll_events.rs b/crates/bevy_openxr/src/openxr/poll_events.rs index 2daf8aa..8bdc775 100644 --- a/crates/bevy_openxr/src/openxr/poll_events.rs +++ b/crates/bevy_openxr/src/openxr/poll_events.rs @@ -19,7 +19,7 @@ impl Plugin for OxrEventsPlugin { } /// Polls any OpenXR events and handles them accordingly pub fn poll_events(world: &mut World) { - let _span = info_span!("xr_poll_events").entered(); + let _span = debug_span!("xr_poll_events").entered(); let instance = world.resource::().clone(); let handlers = world.remove_resource::().unwrap(); let mut buffer = EventDataBuffer::default(); @@ -54,7 +54,7 @@ pub struct OxrEvent { impl OxrEvent { pub(crate) fn new(event: Rc>>>) -> Self { Self { - #[allow(clippy::missing_transmute_annotations)] + #[allow(clippy::missing_transmute_annotations)] event: unsafe { mem::transmute(event) }, } }