├── .gitignore ├── .github ├── workflows │ └── rust.yml └── dependabot.yml ├── examples ├── shutdown_after_sleep.rs ├── custom_schedule_label.rs ├── async_fn.rs ├── change_clear_color.rs └── current_thread_runtime.rs ├── Cargo.toml ├── README.md ├── LICENSE ├── src └── lib.rs └── Cargo.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | .idea -------------------------------------------------------------------------------- /.github/workflows/rust.yml: -------------------------------------------------------------------------------- 1 | name: Rust 2 | 3 | on: 4 | push: 5 | branches: [ "master" ] 6 | pull_request: 7 | branches: [ "master" ] 8 | 9 | env: 10 | CARGO_TERM_COLOR: always 11 | 12 | jobs: 13 | build: 14 | 15 | runs-on: ubuntu-latest 16 | 17 | steps: 18 | - uses: actions/checkout@v3 19 | - name: Build 20 | run: cargo build --verbose 21 | - name: Run tests 22 | run: cargo test --verbose 23 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: "cargo" 9 | directory: "/" 10 | schedule: 11 | interval: "daily" 12 | -------------------------------------------------------------------------------- /examples/shutdown_after_sleep.rs: -------------------------------------------------------------------------------- 1 | use bevy::app::AppExit; 2 | use bevy::prelude::{App, DefaultPlugins, ResMut}; 3 | use bevy_app::Startup; 4 | 5 | use bevy_tokio_tasks::{TokioTasksPlugin, TokioTasksRuntime}; 6 | 7 | fn main() { 8 | App::new() 9 | .add_plugins(DefaultPlugins) 10 | .add_plugins(TokioTasksPlugin::default()) 11 | .add_systems(Startup, demo) 12 | .run(); 13 | } 14 | 15 | fn demo(runtime: ResMut) { 16 | runtime.spawn_background_task(|mut ctx| async move { 17 | println!("Task spawned on tick {}", ctx.current_tick()); 18 | ctx.sleep_updates(120).await; 19 | println!("Task finished initial wait on tick {}", ctx.current_tick()); 20 | ctx.run_on_main_thread(move |ctx| { 21 | println!( 22 | "Task going to request app exit on tick {}", 23 | ctx.current_tick 24 | ); 25 | ctx.world.write_message(AppExit::Success); 26 | }) 27 | .await; 28 | }); 29 | } 30 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "bevy-tokio-tasks" 3 | # Major and minor version here should match bevy's. Patch version can vary. 4 | version = "0.17.0" 5 | edition = "2021" 6 | license = "CC0-1.0" 7 | description = "Simple integration of a Tokio runtime into a Bevy app for background processing." 8 | homepage = "https://crates.io/crates/bevy-tokio-tasks" 9 | repository = "https://github.com/EkardNT/bevy-tokio-tasks" 10 | keywords = ["gamedev", "bevy", "tokio", "async", "plugin"] 11 | categories = ["game-development", "asynchronous"] 12 | 13 | [dependencies] 14 | bevy_app = "0.17.2" 15 | bevy_ecs = "0.17.2" 16 | tokio = { version = "1", features = ["rt", "sync"] } 17 | 18 | [target.'cfg(not(target_arch = "wasm32"))'.dependencies] 19 | tokio = { version = "1", features = ["rt-multi-thread"] } 20 | 21 | [dev-dependencies] 22 | bevy = { version = "0.17.2", default-features = false, features = ["bevy_core_pipeline", "bevy_asset", "bevy_render", "bevy_winit", "bevy_window", "x11", "std"] } 23 | tokio = { version = "1", features = ["time"] } 24 | -------------------------------------------------------------------------------- /examples/custom_schedule_label.rs: -------------------------------------------------------------------------------- 1 | use bevy::app::AppExit; 2 | use bevy::ecs::schedule::ScheduleLabel; 3 | use bevy::prelude::{App, DefaultPlugins, ResMut}; 4 | use bevy_app::{FixedUpdate, Startup}; 5 | 6 | use bevy_tokio_tasks::{TokioTasksPlugin, TokioTasksRuntime}; 7 | 8 | fn main() { 9 | App::new() 10 | .add_plugins(DefaultPlugins) 11 | .add_plugins(TokioTasksPlugin { 12 | schedule_label: FixedUpdate.intern(), 13 | ..TokioTasksPlugin::default() 14 | }) 15 | .add_systems(Startup, demo) 16 | .run(); 17 | } 18 | 19 | fn demo(runtime: ResMut) { 20 | runtime.spawn_background_task(|mut ctx| async move { 21 | println!("Task spawned on tick {}", ctx.current_tick()); 22 | ctx.sleep_updates(120).await; 23 | println!("Task finished initial wait on tick {}", ctx.current_tick()); 24 | ctx.run_on_main_thread(move |ctx| { 25 | println!( 26 | "Task going to request app exit on tick {} in FixedUpdate", 27 | ctx.current_tick 28 | ); 29 | ctx.world.write_message(AppExit::Success); 30 | }) 31 | .await; 32 | }); 33 | } 34 | -------------------------------------------------------------------------------- /examples/async_fn.rs: -------------------------------------------------------------------------------- 1 | use std::time::Duration; 2 | 3 | use bevy::color::Srgba; 4 | use bevy::prelude::{App, Camera2d, ClearColor, Commands, DefaultPlugins, ResMut}; 5 | use bevy_app::Startup; 6 | 7 | use bevy_tokio_tasks::{TaskContext, TokioTasksPlugin, TokioTasksRuntime}; 8 | 9 | static COLORS: [Srgba; 5] = [ 10 | bevy::color::palettes::css::RED, 11 | bevy::color::palettes::css::GREEN, 12 | bevy::color::palettes::css::BLUE, 13 | bevy::color::palettes::css::WHITE, 14 | bevy::color::palettes::css::BLACK, 15 | ]; 16 | 17 | fn main() { 18 | App::new() 19 | .add_plugins(DefaultPlugins) 20 | .add_plugins(TokioTasksPlugin::default()) 21 | .add_systems(Startup, demo) 22 | .run(); 23 | } 24 | 25 | fn demo(runtime: ResMut, mut commands: Commands) { 26 | commands.spawn(Camera2d); 27 | runtime.spawn_background_task(update_colors); 28 | } 29 | 30 | async fn update_colors(mut ctx: TaskContext) { 31 | let mut color_index = 0; 32 | loop { 33 | ctx.run_on_main_thread(move |ctx| { 34 | if let Some(mut clear_color) = ctx.world.get_resource_mut::() { 35 | clear_color.0 = bevy::prelude::Color::Srgba(COLORS[color_index]); 36 | println!("Changed clear color to {:?}", clear_color.0); 37 | } 38 | }) 39 | .await; 40 | color_index = (color_index + 1) % COLORS.len(); 41 | tokio::time::sleep(Duration::from_secs(1)).await; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /examples/change_clear_color.rs: -------------------------------------------------------------------------------- 1 | use std::time::Duration; 2 | 3 | use bevy::color::Srgba; 4 | use bevy::prelude::{App, Camera2d, ClearColor, Commands, DefaultPlugins, ResMut}; 5 | use bevy_app::Startup; 6 | 7 | use bevy_tokio_tasks::{TokioTasksPlugin, TokioTasksRuntime}; 8 | 9 | static COLORS: [Srgba; 5] = [ 10 | bevy::color::palettes::css::RED, 11 | bevy::color::palettes::css::GREEN, 12 | bevy::color::palettes::css::BLUE, 13 | bevy::color::palettes::css::WHITE, 14 | bevy::color::palettes::css::BLACK, 15 | ]; 16 | 17 | fn main() { 18 | App::new() 19 | .add_plugins(DefaultPlugins) 20 | .add_plugins(TokioTasksPlugin::default()) 21 | .add_systems(Startup, demo) 22 | .run(); 23 | } 24 | 25 | fn demo(runtime: ResMut, mut commands: Commands) { 26 | commands.spawn(Camera2d); 27 | runtime.spawn_background_task(|mut ctx| async move { 28 | let mut color_index = 0; 29 | loop { 30 | ctx.run_on_main_thread(move |ctx| { 31 | if let Some(mut clear_color) = ctx.world.get_resource_mut::() { 32 | clear_color.0 = bevy::prelude::Color::Srgba(COLORS[color_index]); 33 | println!("Changed clear color to {:?}", clear_color.0); 34 | } 35 | }) 36 | .await; 37 | color_index = (color_index + 1) % COLORS.len(); 38 | tokio::time::sleep(Duration::from_secs(1)).await; 39 | } 40 | }); 41 | } 42 | -------------------------------------------------------------------------------- /examples/current_thread_runtime.rs: -------------------------------------------------------------------------------- 1 | use std::time::Duration; 2 | 3 | use bevy::color::Srgba; 4 | use bevy::prelude::{App, Camera2d, ClearColor, Commands, DefaultPlugins, ResMut}; 5 | use bevy_app::Startup; 6 | 7 | use bevy_tokio_tasks::TokioTasksRuntime; 8 | 9 | static COLORS: [Srgba; 5] = [ 10 | bevy::color::palettes::css::RED, 11 | bevy::color::palettes::css::GREEN, 12 | bevy::color::palettes::css::BLUE, 13 | bevy::color::palettes::css::WHITE, 14 | bevy::color::palettes::css::BLACK, 15 | ]; 16 | 17 | fn main() { 18 | App::new() 19 | .add_plugins(DefaultPlugins) 20 | .add_plugins(bevy_tokio_tasks::TokioTasksPlugin { 21 | make_runtime: Box::new(|| { 22 | let mut runtime = tokio::runtime::Builder::new_current_thread(); 23 | runtime.enable_all(); 24 | runtime.build().unwrap() 25 | }), 26 | ..bevy_tokio_tasks::TokioTasksPlugin::default() 27 | }) 28 | .add_systems(Startup, demo) 29 | .run(); 30 | } 31 | 32 | fn demo(runtime: ResMut, mut commands: Commands) { 33 | commands.spawn(Camera2d); 34 | runtime.spawn_background_task(|mut ctx| async move { 35 | let mut color_index = 0; 36 | loop { 37 | println!("Loop start"); 38 | ctx.run_on_main_thread(move |ctx| { 39 | if let Some(mut clear_color) = ctx.world.get_resource_mut::() { 40 | clear_color.0 = bevy::prelude::Color::Srgba(COLORS[color_index]); 41 | println!("Changed clear color to {:?}", clear_color.0); 42 | } 43 | }) 44 | .await; 45 | color_index = (color_index + 1) % COLORS.len(); 46 | tokio::time::sleep(Duration::from_secs(1)).await; 47 | } 48 | }); 49 | } 50 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # bevy-tokio-tasks 2 | 3 | A simple Bevy plugin which integrates a Tokio runtime into a Bevy app. 4 | 5 | [![crates.io](https://img.shields.io/crates/v/bevy-tokio-tasks)](https://crates.io/crates/bevy-tokio-tasks) [![docs.rs](https://img.shields.io/docsrs/bevy-tokio-tasks)](https://docs.rs/bevy-tokio-tasks/latest/bevy_tokio_tasks/) 6 | 7 | ## How To 8 | 9 | ### How to initialize this plugin 10 | 11 | To initialize the plugin, simply install the `TokioTasksPlugin` when initializing your Bevy app. The simplest 12 | way to do this is to use the `TokioTasksPlugin::default()` method, which sets up a Tokio `Runtime` with default 13 | settings (the plugin calls `Runtime::enable_all` to enable Tokio's IO and timing functionality). 14 | 15 | ```rust 16 | fn main() { 17 | bevy::App::new() 18 | .add_plugins(bevy_tokio_tasks::TokioTasksPlugin::default()) 19 | } 20 | ``` 21 | 22 | If you want to customize the Tokio `Runtime` setup, you may do so by specifying a `make_runtime` callback on 23 | the `TokioTasksPlugin`. 24 | 25 | ```rust 26 | fn main() { 27 | bevy::App::new() 28 | .add_plugins(bevy_tokio_tasks::TokioTasksPlugin { 29 | make_runtime: Box::new(|| { 30 | let mut runtime = tokio::runtime::Builder::new_multi_thread(); 31 | runtime.enable_all(); 32 | runtime.build().unwrap() 33 | }), 34 | ..bevy_tokio_tasks::TokioTasksPlugin::default() 35 | }) 36 | } 37 | ``` 38 | 39 | ### How to spawn a background task 40 | 41 | To spawn a background task from a Bevy system function, add a `TokioTasksRuntime` as a resource parameter and call 42 | the `spawn_background_task` function. 43 | 44 | ```rust 45 | fn example_system(runtime: ResMut) { 46 | runtime.spawn_background_task(|_ctx| async move { 47 | println!("This task is running on a background thread"); 48 | }); 49 | } 50 | ``` 51 | 52 | ### How to synchronize with the main thread 53 | 54 | Often times, background tasks will need to synchronize with the main Bevy app at certain points. You may do this 55 | by calling the `run_on_main_thread` function on the `TaskContext` that is passed to each background task. 56 | 57 | ```rust 58 | fn example_system(runtime: ResMut) { 59 | runtime.spawn_background_task(|mut ctx| async move { 60 | println!("This print executes from a background Tokio runtime thread"); 61 | ctx.run_on_main_thread(move |ctx| { 62 | // The inner context gives access to a mutable Bevy World reference. 63 | let _world: &mut World = ctx.world; 64 | }).await; 65 | }); 66 | } 67 | ``` 68 | 69 | ## Examples 70 | 71 | - [change_clear_color](examples/change_clear_color.rs) - This example spawns a background task which 72 | runs forever. Every second, the background task updates the app's background clear color. This demonstrates 73 | how background tasks can synchronize with the main thread to update game state. 74 | - [current_thread_runtime](examples/current_thread_runtime.rs) - This 75 | example demonstrates how you can customize the Tokio Runtime. It configures a 76 | current_thread Runtime instead of a multi-threading Runtime. 77 | - [async_fn](examples/async_fn.rs) - Does the same thing as the change_clear_color example, 78 | except that it shows how you can pass an `async fn` to `spawn_background_task`. 79 | - [shutdown_after_sleep](examples/shutdown_after_sleep.rs) - This example spawns a background task which 80 | sleeps for 120 Bevy game updates, then shuts down the Bevy app. 81 | 82 | ## Version Compatibility 83 | 84 | This crate's major and minor version numbers will match Bevy's. To allow this crate to publish updates 85 | between Bevy updates, the patch version is allowed to increment independent of Bevy's release cycle. 86 | 87 | | bevy-tokio-tasks version | bevy version | tokio version | 88 | |--------------------------|--------------|---------------| 89 | | 0.17.0 | 0.17.2 | 1 | 90 | | 0.16.0 | 0.16.0 | 1 | 91 | | 0.15.0 | 0.15.0 | 1 | 92 | | 0.14.0 | 0.14.0 | 1 | 93 | | (not published) | 0.13.0 | 1 | 94 | | (not published) | 0.12.0 | 1 | 95 | | 0.11.0 | 0.11.0 | 1 | 96 | | 0.10.2 | 0.10.1 | 1 | 97 | | 0.10.1 | 0.10.0 | 1 | 98 | | 0.10.0 | 0.10.0 | 1 | 99 | | 0.9.5 | 0.9.1 | 1 | 100 | | 0.9.4 | 0.9.1 | 1 | 101 | | 0.9.3 | 0.9.1 | 1 | 102 | | 0.9.2 | 0.9.1 | 1 | 103 | | 0.9.1 | 0.9.1 | 1 | 104 | | 0.9.0 | 0.9.1 | 1 | 105 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Creative Commons Legal Code 2 | 3 | CC0 1.0 Universal 4 | 5 | CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE 6 | LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN 7 | ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS 8 | INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES 9 | REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS 10 | PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM 11 | THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED 12 | HEREUNDER. 13 | 14 | Statement of Purpose 15 | 16 | The laws of most jurisdictions throughout the world automatically confer 17 | exclusive Copyright and Related Rights (defined below) upon the creator 18 | and subsequent owner(s) (each and all, an "owner") of an original work of 19 | authorship and/or a database (each, a "Work"). 20 | 21 | Certain owners wish to permanently relinquish those rights to a Work for 22 | the purpose of contributing to a commons of creative, cultural and 23 | scientific works ("Commons") that the public can reliably and without fear 24 | of later claims of infringement build upon, modify, incorporate in other 25 | works, reuse and redistribute as freely as possible in any form whatsoever 26 | and for any purposes, including without limitation commercial purposes. 27 | These owners may contribute to the Commons to promote the ideal of a free 28 | culture and the further production of creative, cultural and scientific 29 | works, or to gain reputation or greater distribution for their Work in 30 | part through the use and efforts of others. 31 | 32 | For these and/or other purposes and motivations, and without any 33 | expectation of additional consideration or compensation, the person 34 | associating CC0 with a Work (the "Affirmer"), to the extent that he or she 35 | is an owner of Copyright and Related Rights in the Work, voluntarily 36 | elects to apply CC0 to the Work and publicly distribute the Work under its 37 | terms, with knowledge of his or her Copyright and Related Rights in the 38 | Work and the meaning and intended legal effect of CC0 on those rights. 39 | 40 | 1. Copyright and Related Rights. A Work made available under CC0 may be 41 | protected by copyright and related or neighboring rights ("Copyright and 42 | Related Rights"). Copyright and Related Rights include, but are not 43 | limited to, the following: 44 | 45 | i. the right to reproduce, adapt, distribute, perform, display, 46 | communicate, and translate a Work; 47 | ii. moral rights retained by the original author(s) and/or performer(s); 48 | iii. publicity and privacy rights pertaining to a person's image or 49 | likeness depicted in a Work; 50 | iv. rights protecting against unfair competition in regards to a Work, 51 | subject to the limitations in paragraph 4(a), below; 52 | v. rights protecting the extraction, dissemination, use and reuse of data 53 | in a Work; 54 | vi. database rights (such as those arising under Directive 96/9/EC of the 55 | European Parliament and of the Council of 11 March 1996 on the legal 56 | protection of databases, and under any national implementation 57 | thereof, including any amended or successor version of such 58 | directive); and 59 | vii. other similar, equivalent or corresponding rights throughout the 60 | world based on applicable law or treaty, and any national 61 | implementations thereof. 62 | 63 | 2. Waiver. To the greatest extent permitted by, but not in contravention 64 | of, applicable law, Affirmer hereby overtly, fully, permanently, 65 | irrevocably and unconditionally waives, abandons, and surrenders all of 66 | Affirmer's Copyright and Related Rights and associated claims and causes 67 | of action, whether now known or unknown (including existing as well as 68 | future claims and causes of action), in the Work (i) in all territories 69 | worldwide, (ii) for the maximum duration provided by applicable law or 70 | treaty (including future time extensions), (iii) in any current or future 71 | medium and for any number of copies, and (iv) for any purpose whatsoever, 72 | including without limitation commercial, advertising or promotional 73 | purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each 74 | member of the public at large and to the detriment of Affirmer's heirs and 75 | successors, fully intending that such Waiver shall not be subject to 76 | revocation, rescission, cancellation, termination, or any other legal or 77 | equitable action to disrupt the quiet enjoyment of the Work by the public 78 | as contemplated by Affirmer's express Statement of Purpose. 79 | 80 | 3. Public License Fallback. Should any part of the Waiver for any reason 81 | be judged legally invalid or ineffective under applicable law, then the 82 | Waiver shall be preserved to the maximum extent permitted taking into 83 | account Affirmer's express Statement of Purpose. In addition, to the 84 | extent the Waiver is so judged Affirmer hereby grants to each affected 85 | person a royalty-free, non transferable, non sublicensable, non exclusive, 86 | irrevocable and unconditional license to exercise Affirmer's Copyright and 87 | Related Rights in the Work (i) in all territories worldwide, (ii) for the 88 | maximum duration provided by applicable law or treaty (including future 89 | time extensions), (iii) in any current or future medium and for any number 90 | of copies, and (iv) for any purpose whatsoever, including without 91 | limitation commercial, advertising or promotional purposes (the 92 | "License"). The License shall be deemed effective as of the date CC0 was 93 | applied by Affirmer to the Work. Should any part of the License for any 94 | reason be judged legally invalid or ineffective under applicable law, such 95 | partial invalidity or ineffectiveness shall not invalidate the remainder 96 | of the License, and in such case Affirmer hereby affirms that he or she 97 | will not (i) exercise any of his or her remaining Copyright and Related 98 | Rights in the Work or (ii) assert any associated claims and causes of 99 | action with respect to the Work, in either case contrary to Affirmer's 100 | express Statement of Purpose. 101 | 102 | 4. Limitations and Disclaimers. 103 | 104 | a. No trademark or patent rights held by Affirmer are waived, abandoned, 105 | surrendered, licensed or otherwise affected by this document. 106 | b. Affirmer offers the Work as-is and makes no representations or 107 | warranties of any kind concerning the Work, express, implied, 108 | statutory or otherwise, including without limitation warranties of 109 | title, merchantability, fitness for a particular purpose, non 110 | infringement, or the absence of latent or other defects, accuracy, or 111 | the present or absence of errors, whether or not discoverable, all to 112 | the greatest extent permissible under applicable law. 113 | c. Affirmer disclaims responsibility for clearing rights of other persons 114 | that may apply to the Work or any use thereof, including without 115 | limitation any person's Copyright and Related Rights in the Work. 116 | Further, Affirmer disclaims responsibility for obtaining any necessary 117 | consents, permissions or other rights required for any use of the 118 | Work. 119 | d. Affirmer understands and acknowledges that Creative Commons is not a 120 | party to this document and has no duty or obligation with respect to 121 | this CC0 or use of the Work. 122 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | use std::future::Future; 2 | use std::sync::atomic::{AtomicUsize, Ordering}; 3 | use std::sync::Arc; 4 | 5 | use bevy_app::{App, Plugin, Update}; 6 | use bevy_ecs::schedule::{InternedScheduleLabel, ScheduleLabel}; 7 | use bevy_ecs::{prelude::World, resource::Resource}; 8 | 9 | use tokio::{runtime::Runtime, task::JoinHandle}; 10 | 11 | /// A re-export of the tokio version used by this crate. 12 | pub use tokio; 13 | 14 | /// An internal struct keeping track of how many ticks have elapsed since the start of the program. 15 | #[derive(Resource)] 16 | struct UpdateTicks { 17 | ticks: Arc, 18 | update_watch_tx: tokio::sync::watch::Sender<()>, 19 | } 20 | 21 | impl UpdateTicks { 22 | fn increment_ticks(&self) -> usize { 23 | let new_ticks = self.ticks.fetch_add(1, Ordering::SeqCst).wrapping_add(1); 24 | self.update_watch_tx 25 | .send(()) 26 | .expect("Failed to send update_watch channel message"); 27 | new_ticks 28 | } 29 | } 30 | 31 | /// The Bevy [`Plugin`] which sets up the [`TokioTasksRuntime`] Bevy resource and registers 32 | /// the [`tick_runtime_update`] exclusive system. 33 | pub struct TokioTasksPlugin { 34 | /// Callback which is used to create a Tokio runtime when the plugin is installed. The 35 | /// default value for this field configures a multi-threaded [`Runtime`] with IO and timer 36 | /// functionality enabled if building for non-wasm32 architectures. On wasm32 the current-thread 37 | /// scheduler is used instead. 38 | pub make_runtime: Box Runtime + Send + Sync + 'static>, 39 | /// The [`ScheduleLabel`] during which the [`tick_runtime_update`] function will be executed. 40 | /// The default value for this field is [`Update`]. 41 | pub schedule_label: InternedScheduleLabel, 42 | } 43 | 44 | impl Default for TokioTasksPlugin { 45 | /// Configures the plugin to build a new Tokio [`Runtime`] with both IO and timer functionality 46 | /// enabled. On the wasm32 architecture, the [`Runtime`] will be the current-thread runtime, on all other 47 | /// architectures the [`Runtime`] will be the multi-thread runtime. 48 | /// 49 | /// The default schedule label is [`Update`]. 50 | fn default() -> Self { 51 | Self { 52 | make_runtime: Box::new(|| { 53 | #[cfg(not(target_arch = "wasm32"))] 54 | let mut runtime = tokio::runtime::Builder::new_multi_thread(); 55 | #[cfg(target_arch = "wasm32")] 56 | let mut runtime = tokio::runtime::Builder::new_current_thread(); 57 | runtime.enable_all(); 58 | runtime 59 | .build() 60 | .expect("Failed to create Tokio runtime for background tasks") 61 | }), 62 | schedule_label: Update.intern() 63 | } 64 | } 65 | } 66 | 67 | impl Plugin for TokioTasksPlugin { 68 | fn build(&self, app: &mut App) { 69 | let ticks = Arc::new(AtomicUsize::new(0)); 70 | let (update_watch_tx, update_watch_rx) = tokio::sync::watch::channel(()); 71 | let runtime = (self.make_runtime)(); 72 | app.insert_resource(UpdateTicks { 73 | ticks: ticks.clone(), 74 | update_watch_tx, 75 | }); 76 | app.insert_resource(TokioTasksRuntime::new(ticks, runtime, update_watch_rx)); 77 | app.add_systems(self.schedule_label, tick_runtime_update); 78 | } 79 | } 80 | 81 | /// The Bevy exclusive system which executes the main thread callbacks that background 82 | /// tasks requested using [`run_on_main_thread`](TaskContext::run_on_main_thread). You 83 | /// can control which Bevy schedule stage this system executes in by specifying a custom 84 | /// [`schedule_label`](TokioTasksPlugin::schedule_label) value. 85 | pub fn tick_runtime_update(world: &mut World) { 86 | let current_tick = { 87 | let tick_counter = match world.get_resource::() { 88 | Some(counter) => counter, 89 | None => return, 90 | }; 91 | 92 | // Increment update ticks and notify watchers of update tick. 93 | tick_counter.increment_ticks() 94 | }; 95 | 96 | if let Some(mut runtime) = world.remove_resource::() { 97 | runtime.execute_main_thread_work(world, current_tick); 98 | world.insert_resource(runtime); 99 | } 100 | } 101 | 102 | type MainThreadCallback = Box; 103 | 104 | /// The Bevy [`Resource`] which stores the Tokio [`Runtime`] and allows for spawning new 105 | /// background tasks. 106 | #[derive(Resource)] 107 | pub struct TokioTasksRuntime(Box); 108 | 109 | /// The inner fields are boxed to reduce the cost of the every-frame move out of and back into 110 | /// the world in [`tick_runtime_update`]. 111 | struct TokioTasksRuntimeInner { 112 | runtime: Runtime, 113 | ticks: Arc, 114 | update_watch_rx: tokio::sync::watch::Receiver<()>, 115 | update_run_tx: tokio::sync::mpsc::UnboundedSender, 116 | update_run_rx: tokio::sync::mpsc::UnboundedReceiver, 117 | } 118 | 119 | impl TokioTasksRuntime { 120 | fn new( 121 | ticks: Arc, 122 | runtime: Runtime, 123 | update_watch_rx: tokio::sync::watch::Receiver<()>, 124 | ) -> Self { 125 | let (update_run_tx, update_run_rx) = tokio::sync::mpsc::unbounded_channel(); 126 | 127 | Self(Box::new(TokioTasksRuntimeInner { 128 | runtime, 129 | ticks, 130 | update_watch_rx, 131 | update_run_tx, 132 | update_run_rx, 133 | })) 134 | } 135 | 136 | /// Returns the Tokio [`Runtime`] on which background tasks are executed. You can specify 137 | /// how this is created by providing a custom [`make_runtime`](TokioTasksPlugin::make_runtime). 138 | pub fn runtime(&self) -> &Runtime { 139 | &self.0.runtime 140 | } 141 | 142 | /// Spawn a task which will run on the background Tokio [`Runtime`] managed by this [`TokioTasksRuntime`]. The 143 | /// background task is provided a [`TaskContext`] which allows it to do things like 144 | /// [sleep for a given number of main thread updates](TaskContext::sleep_updates) or 145 | /// [invoke callbacks on the main Bevy thread](TaskContext::run_on_main_thread). 146 | pub fn spawn_background_task( 147 | &self, 148 | spawnable_task: Spawnable, 149 | ) -> JoinHandle 150 | where 151 | Task: Future + Send + 'static, 152 | Output: Send + 'static, 153 | Spawnable: FnOnce(TaskContext) -> Task + Send + 'static, 154 | { 155 | let inner = &self.0; 156 | let context = TaskContext { 157 | update_watch_rx: inner.update_watch_rx.clone(), 158 | ticks: inner.ticks.clone(), 159 | update_run_tx: inner.update_run_tx.clone(), 160 | }; 161 | let future = spawnable_task(context); 162 | inner.runtime.spawn(future) 163 | } 164 | 165 | /// Execute all of the requested runnables on the main thread. 166 | pub(crate) fn execute_main_thread_work(&mut self, world: &mut World, current_tick: usize) { 167 | // Running this single future which yields once allows the runtime to process tasks 168 | // if the runtime is a current_thread runtime. If its a multi-thread runtime then 169 | // this isn't necessary but is harmless. 170 | self.0.runtime.block_on(async { 171 | tokio::task::yield_now().await; 172 | }); 173 | while let Ok(runnable) = self.0.update_run_rx.try_recv() { 174 | let context = MainThreadContext { 175 | world, 176 | current_tick, 177 | }; 178 | runnable(context); 179 | } 180 | } 181 | } 182 | 183 | /// The context arguments which are available to main thread callbacks requested using 184 | /// [`run_on_main_thread`](TaskContext::run_on_main_thread). 185 | pub struct MainThreadContext<'a> { 186 | /// A mutable reference to the main Bevy [World]. 187 | pub world: &'a mut World, 188 | /// The current update tick in which the current main thread callback is executing. 189 | pub current_tick: usize, 190 | } 191 | 192 | /// The context arguments which are available to background tasks spawned onto the 193 | /// [`TokioTasksRuntime`]. 194 | #[derive(Clone)] 195 | pub struct TaskContext { 196 | update_watch_rx: tokio::sync::watch::Receiver<()>, 197 | update_run_tx: tokio::sync::mpsc::UnboundedSender, 198 | ticks: Arc, 199 | } 200 | 201 | impl TaskContext { 202 | /// Returns the current value of the ticket count from the main thread - how many updates 203 | /// have occurred since the start of the program. Because the tick count is updated from the 204 | /// main thread, the tick count may change any time after this function call returns. 205 | pub fn current_tick(&self) -> usize { 206 | self.ticks.load(Ordering::SeqCst) 207 | } 208 | 209 | /// Sleeps the background task until a given number of main thread updates have occurred. If 210 | /// you instead want to sleep for a given length of wall-clock time, call the normal Tokio sleep 211 | /// function. 212 | pub async fn sleep_updates(&mut self, updates_to_sleep: usize) { 213 | let target_tick = self 214 | .ticks 215 | .load(Ordering::SeqCst) 216 | .wrapping_add(updates_to_sleep); 217 | while self.ticks.load(Ordering::SeqCst) < target_tick { 218 | if self.update_watch_rx.changed().await.is_err() { 219 | return; 220 | } 221 | } 222 | } 223 | 224 | /// Invokes a synchronous callback on the main Bevy thread. The callback will have mutable access to the 225 | /// main Bevy [`World`], allowing it to update any resources or entities that it wants. The callback can 226 | /// report results back to the background thread by returning an output value, which will then be returned from 227 | /// this async function once the callback runs. 228 | pub async fn run_on_main_thread(&mut self, runnable: Runnable) -> Output 229 | where 230 | Runnable: FnOnce(MainThreadContext) -> Output + Send + 'static, 231 | Output: Send + 'static, 232 | { 233 | let (output_tx, output_rx) = tokio::sync::oneshot::channel(); 234 | if self.update_run_tx.send(Box::new(move |ctx| { 235 | if output_tx.send(runnable(ctx)).is_err() { 236 | panic!("Failed to sent output from operation run on main thread back to waiting task"); 237 | } 238 | })).is_err() { 239 | panic!("Failed to send operation to be run on main thread"); 240 | } 241 | output_rx 242 | .await 243 | .expect("Failed to receive output from operation on main thread") 244 | } 245 | } 246 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 4 4 | 5 | [[package]] 6 | name = "accesskit" 7 | version = "0.21.1" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "cf203f9d3bd8f29f98833d1fbef628df18f759248a547e7e01cfbf63cda36a99" 10 | 11 | [[package]] 12 | name = "accesskit_consumer" 13 | version = "0.31.0" 14 | source = "registry+https://github.com/rust-lang/crates.io-index" 15 | checksum = "db81010a6895d8707f9072e6ce98070579b43b717193d2614014abd5cb17dd43" 16 | dependencies = [ 17 | "accesskit", 18 | "hashbrown 0.15.5", 19 | ] 20 | 21 | [[package]] 22 | name = "accesskit_macos" 23 | version = "0.22.2" 24 | source = "registry+https://github.com/rust-lang/crates.io-index" 25 | checksum = "a0089e5c0ac0ca281e13ea374773898d9354cc28d15af9f0f7394d44a495b575" 26 | dependencies = [ 27 | "accesskit", 28 | "accesskit_consumer", 29 | "hashbrown 0.15.5", 30 | "objc2", 31 | "objc2-app-kit", 32 | "objc2-foundation", 33 | ] 34 | 35 | [[package]] 36 | name = "accesskit_windows" 37 | version = "0.29.2" 38 | source = "registry+https://github.com/rust-lang/crates.io-index" 39 | checksum = "d2d63dd5041e49c363d83f5419a896ecb074d309c414036f616dc0b04faca971" 40 | dependencies = [ 41 | "accesskit", 42 | "accesskit_consumer", 43 | "hashbrown 0.15.5", 44 | "static_assertions", 45 | "windows 0.61.3", 46 | "windows-core 0.61.2", 47 | ] 48 | 49 | [[package]] 50 | name = "accesskit_winit" 51 | version = "0.29.2" 52 | source = "registry+https://github.com/rust-lang/crates.io-index" 53 | checksum = "c8cfabe59d0eaca7412bfb1f70198dd31e3b0496fee7e15b066f9c36a1a140a0" 54 | dependencies = [ 55 | "accesskit", 56 | "accesskit_macos", 57 | "accesskit_windows", 58 | "raw-window-handle", 59 | "winit", 60 | ] 61 | 62 | [[package]] 63 | name = "aho-corasick" 64 | version = "1.1.3" 65 | source = "registry+https://github.com/rust-lang/crates.io-index" 66 | checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 67 | dependencies = [ 68 | "memchr", 69 | ] 70 | 71 | [[package]] 72 | name = "android-activity" 73 | version = "0.6.0" 74 | source = "registry+https://github.com/rust-lang/crates.io-index" 75 | checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046" 76 | dependencies = [ 77 | "android-properties", 78 | "bitflags 2.10.0", 79 | "cc", 80 | "cesu8", 81 | "jni", 82 | "jni-sys", 83 | "libc", 84 | "log", 85 | "ndk", 86 | "ndk-context", 87 | "ndk-sys", 88 | "num_enum", 89 | "thiserror 1.0.69", 90 | ] 91 | 92 | [[package]] 93 | name = "android-properties" 94 | version = "0.2.2" 95 | source = "registry+https://github.com/rust-lang/crates.io-index" 96 | checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" 97 | 98 | [[package]] 99 | name = "android_log-sys" 100 | version = "0.3.2" 101 | source = "registry+https://github.com/rust-lang/crates.io-index" 102 | checksum = "84521a3cf562bc62942e294181d9eef17eb38ceb8c68677bc49f144e4c3d4f8d" 103 | 104 | [[package]] 105 | name = "android_system_properties" 106 | version = "0.1.5" 107 | source = "registry+https://github.com/rust-lang/crates.io-index" 108 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 109 | dependencies = [ 110 | "libc", 111 | ] 112 | 113 | [[package]] 114 | name = "approx" 115 | version = "0.5.1" 116 | source = "registry+https://github.com/rust-lang/crates.io-index" 117 | checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" 118 | dependencies = [ 119 | "num-traits", 120 | ] 121 | 122 | [[package]] 123 | name = "arrayref" 124 | version = "0.3.9" 125 | source = "registry+https://github.com/rust-lang/crates.io-index" 126 | checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" 127 | 128 | [[package]] 129 | name = "arrayvec" 130 | version = "0.7.6" 131 | source = "registry+https://github.com/rust-lang/crates.io-index" 132 | checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" 133 | 134 | [[package]] 135 | name = "as-raw-xcb-connection" 136 | version = "1.0.1" 137 | source = "registry+https://github.com/rust-lang/crates.io-index" 138 | checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" 139 | 140 | [[package]] 141 | name = "ash" 142 | version = "0.38.0+1.3.281" 143 | source = "registry+https://github.com/rust-lang/crates.io-index" 144 | checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" 145 | dependencies = [ 146 | "libloading", 147 | ] 148 | 149 | [[package]] 150 | name = "assert_type_match" 151 | version = "0.1.1" 152 | source = "registry+https://github.com/rust-lang/crates.io-index" 153 | checksum = "f548ad2c4031f2902e3edc1f29c29e835829437de49562d8eb5dc5584d3a1043" 154 | dependencies = [ 155 | "proc-macro2", 156 | "quote", 157 | "syn", 158 | ] 159 | 160 | [[package]] 161 | name = "async-broadcast" 162 | version = "0.7.2" 163 | source = "registry+https://github.com/rust-lang/crates.io-index" 164 | checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" 165 | dependencies = [ 166 | "event-listener", 167 | "event-listener-strategy", 168 | "futures-core", 169 | "pin-project-lite", 170 | ] 171 | 172 | [[package]] 173 | name = "async-channel" 174 | version = "2.5.0" 175 | source = "registry+https://github.com/rust-lang/crates.io-index" 176 | checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" 177 | dependencies = [ 178 | "concurrent-queue", 179 | "event-listener-strategy", 180 | "futures-core", 181 | "pin-project-lite", 182 | ] 183 | 184 | [[package]] 185 | name = "async-executor" 186 | version = "1.13.3" 187 | source = "registry+https://github.com/rust-lang/crates.io-index" 188 | checksum = "497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8" 189 | dependencies = [ 190 | "async-task", 191 | "concurrent-queue", 192 | "fastrand", 193 | "futures-lite", 194 | "pin-project-lite", 195 | "slab", 196 | ] 197 | 198 | [[package]] 199 | name = "async-fs" 200 | version = "2.2.0" 201 | source = "registry+https://github.com/rust-lang/crates.io-index" 202 | checksum = "8034a681df4aed8b8edbd7fbe472401ecf009251c8b40556b304567052e294c5" 203 | dependencies = [ 204 | "async-lock", 205 | "blocking", 206 | "futures-lite", 207 | ] 208 | 209 | [[package]] 210 | name = "async-lock" 211 | version = "3.4.1" 212 | source = "registry+https://github.com/rust-lang/crates.io-index" 213 | checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc" 214 | dependencies = [ 215 | "event-listener", 216 | "event-listener-strategy", 217 | "pin-project-lite", 218 | ] 219 | 220 | [[package]] 221 | name = "async-task" 222 | version = "4.7.1" 223 | source = "registry+https://github.com/rust-lang/crates.io-index" 224 | checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" 225 | dependencies = [ 226 | "portable-atomic", 227 | ] 228 | 229 | [[package]] 230 | name = "atomic-waker" 231 | version = "1.1.2" 232 | source = "registry+https://github.com/rust-lang/crates.io-index" 233 | checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" 234 | dependencies = [ 235 | "portable-atomic", 236 | ] 237 | 238 | [[package]] 239 | name = "atomicow" 240 | version = "1.1.0" 241 | source = "registry+https://github.com/rust-lang/crates.io-index" 242 | checksum = "f52e8890bb9844440d0c412fa74b67fd2f14e85248b6e00708059b6da9e5f8bf" 243 | dependencies = [ 244 | "portable-atomic", 245 | "portable-atomic-util", 246 | ] 247 | 248 | [[package]] 249 | name = "autocfg" 250 | version = "1.5.0" 251 | source = "registry+https://github.com/rust-lang/crates.io-index" 252 | checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" 253 | 254 | [[package]] 255 | name = "base64" 256 | version = "0.22.1" 257 | source = "registry+https://github.com/rust-lang/crates.io-index" 258 | checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 259 | 260 | [[package]] 261 | name = "bevy" 262 | version = "0.17.2" 263 | source = "registry+https://github.com/rust-lang/crates.io-index" 264 | checksum = "342f7e9335416dc98642d5747c4ed8a6ad9f7244a36d5b2b7a1b7910e4d8f524" 265 | dependencies = [ 266 | "bevy_internal", 267 | ] 268 | 269 | [[package]] 270 | name = "bevy-tokio-tasks" 271 | version = "0.17.0" 272 | dependencies = [ 273 | "bevy", 274 | "bevy_app", 275 | "bevy_ecs", 276 | "tokio", 277 | ] 278 | 279 | [[package]] 280 | name = "bevy_a11y" 281 | version = "0.17.2" 282 | source = "registry+https://github.com/rust-lang/crates.io-index" 283 | checksum = "3917cd35096fb2fe176632740b68a4b53cb61006cfff13d66ef47ee2c2478d53" 284 | dependencies = [ 285 | "accesskit", 286 | "bevy_app", 287 | "bevy_derive", 288 | "bevy_ecs", 289 | "bevy_reflect", 290 | ] 291 | 292 | [[package]] 293 | name = "bevy_android" 294 | version = "0.17.2" 295 | source = "registry+https://github.com/rust-lang/crates.io-index" 296 | checksum = "c2a9dd9488c77fa2ea31b5da2f978aab7f1cc82e6d2c3be0adf637d9fd7cb6c8" 297 | dependencies = [ 298 | "android-activity", 299 | ] 300 | 301 | [[package]] 302 | name = "bevy_app" 303 | version = "0.17.2" 304 | source = "registry+https://github.com/rust-lang/crates.io-index" 305 | checksum = "9f582409b4ed3850d9b66ee94e71a0e2c20e7068121d372530060c4dfcba66fa" 306 | dependencies = [ 307 | "bevy_derive", 308 | "bevy_ecs", 309 | "bevy_platform", 310 | "bevy_reflect", 311 | "bevy_tasks", 312 | "bevy_utils", 313 | "cfg-if", 314 | "console_error_panic_hook", 315 | "ctrlc", 316 | "downcast-rs", 317 | "log", 318 | "thiserror 2.0.17", 319 | "variadics_please", 320 | "wasm-bindgen", 321 | "web-sys", 322 | ] 323 | 324 | [[package]] 325 | name = "bevy_asset" 326 | version = "0.17.2" 327 | source = "registry+https://github.com/rust-lang/crates.io-index" 328 | checksum = "9e6ee42e74a64a46ab91bd1c0155f8abe5b732bdb948a9b26e541456cc7940e5" 329 | dependencies = [ 330 | "async-broadcast", 331 | "async-fs", 332 | "async-lock", 333 | "atomicow", 334 | "bevy_android", 335 | "bevy_app", 336 | "bevy_asset_macros", 337 | "bevy_ecs", 338 | "bevy_platform", 339 | "bevy_reflect", 340 | "bevy_tasks", 341 | "bevy_utils", 342 | "bitflags 2.10.0", 343 | "blake3", 344 | "crossbeam-channel", 345 | "derive_more", 346 | "disqualified", 347 | "downcast-rs", 348 | "either", 349 | "futures-io", 350 | "futures-lite", 351 | "js-sys", 352 | "parking_lot", 353 | "ron", 354 | "serde", 355 | "stackfuture", 356 | "thiserror 2.0.17", 357 | "tracing", 358 | "uuid", 359 | "wasm-bindgen", 360 | "wasm-bindgen-futures", 361 | "web-sys", 362 | ] 363 | 364 | [[package]] 365 | name = "bevy_asset_macros" 366 | version = "0.17.2" 367 | source = "registry+https://github.com/rust-lang/crates.io-index" 368 | checksum = "d03711d2c087227f64ba85dd38a99d4d6893f80d2475c2e77fb90a883760a055" 369 | dependencies = [ 370 | "bevy_macro_utils", 371 | "proc-macro2", 372 | "quote", 373 | "syn", 374 | ] 375 | 376 | [[package]] 377 | name = "bevy_camera" 378 | version = "0.17.2" 379 | source = "registry+https://github.com/rust-lang/crates.io-index" 380 | checksum = "b70d79ccbd8bfefc79f33a104dfd82ae2f5276ce04d6df75787bfa3edc4c4c1a" 381 | dependencies = [ 382 | "bevy_app", 383 | "bevy_asset", 384 | "bevy_color", 385 | "bevy_derive", 386 | "bevy_ecs", 387 | "bevy_image", 388 | "bevy_math", 389 | "bevy_mesh", 390 | "bevy_reflect", 391 | "bevy_transform", 392 | "bevy_utils", 393 | "bevy_window", 394 | "derive_more", 395 | "downcast-rs", 396 | "serde", 397 | "smallvec", 398 | "thiserror 2.0.17", 399 | "wgpu-types", 400 | ] 401 | 402 | [[package]] 403 | name = "bevy_color" 404 | version = "0.17.2" 405 | source = "registry+https://github.com/rust-lang/crates.io-index" 406 | checksum = "94dc78477c1c208c0cd221c64e907aba8ba165f39bebb72adc6180e1a13e8938" 407 | dependencies = [ 408 | "bevy_math", 409 | "bevy_reflect", 410 | "bytemuck", 411 | "derive_more", 412 | "encase", 413 | "serde", 414 | "thiserror 2.0.17", 415 | "wgpu-types", 416 | ] 417 | 418 | [[package]] 419 | name = "bevy_core_pipeline" 420 | version = "0.17.2" 421 | source = "registry+https://github.com/rust-lang/crates.io-index" 422 | checksum = "0c866a2fe33ec27a612d883223d30f1857aa852766b21a9603628735dace632f" 423 | dependencies = [ 424 | "bevy_app", 425 | "bevy_asset", 426 | "bevy_camera", 427 | "bevy_color", 428 | "bevy_derive", 429 | "bevy_ecs", 430 | "bevy_image", 431 | "bevy_math", 432 | "bevy_platform", 433 | "bevy_reflect", 434 | "bevy_render", 435 | "bevy_shader", 436 | "bevy_transform", 437 | "bevy_utils", 438 | "bevy_window", 439 | "bitflags 2.10.0", 440 | "nonmax", 441 | "radsort", 442 | "smallvec", 443 | "thiserror 2.0.17", 444 | "tracing", 445 | ] 446 | 447 | [[package]] 448 | name = "bevy_derive" 449 | version = "0.17.2" 450 | source = "registry+https://github.com/rust-lang/crates.io-index" 451 | checksum = "b8c733807158f8fcac68e23222e69ed91a6492ae9410fc2c145b9bb182cfd63e" 452 | dependencies = [ 453 | "bevy_macro_utils", 454 | "quote", 455 | "syn", 456 | ] 457 | 458 | [[package]] 459 | name = "bevy_diagnostic" 460 | version = "0.17.2" 461 | source = "registry+https://github.com/rust-lang/crates.io-index" 462 | checksum = "f12fa32312818c08aa4035bebe9fb3f62aaf7efae33688e718dd6ee6c0147493" 463 | dependencies = [ 464 | "atomic-waker", 465 | "bevy_app", 466 | "bevy_ecs", 467 | "bevy_platform", 468 | "bevy_tasks", 469 | "bevy_time", 470 | "const-fnv1a-hash", 471 | "log", 472 | "serde", 473 | ] 474 | 475 | [[package]] 476 | name = "bevy_ecs" 477 | version = "0.17.2" 478 | source = "registry+https://github.com/rust-lang/crates.io-index" 479 | checksum = "69d929d32190cfcde6efd2df493601c4dbc18a691fd9775a544c951c3c112e1a" 480 | dependencies = [ 481 | "arrayvec", 482 | "bevy_ecs_macros", 483 | "bevy_platform", 484 | "bevy_ptr", 485 | "bevy_reflect", 486 | "bevy_tasks", 487 | "bevy_utils", 488 | "bitflags 2.10.0", 489 | "bumpalo", 490 | "concurrent-queue", 491 | "derive_more", 492 | "fixedbitset", 493 | "indexmap", 494 | "log", 495 | "nonmax", 496 | "serde", 497 | "slotmap", 498 | "smallvec", 499 | "thiserror 2.0.17", 500 | "variadics_please", 501 | ] 502 | 503 | [[package]] 504 | name = "bevy_ecs_macros" 505 | version = "0.17.2" 506 | source = "registry+https://github.com/rust-lang/crates.io-index" 507 | checksum = "6eeddfb80a2e000663e87be9229c26b4da92bddbc06c8776bc0d1f4a7f679079" 508 | dependencies = [ 509 | "bevy_macro_utils", 510 | "proc-macro2", 511 | "quote", 512 | "syn", 513 | ] 514 | 515 | [[package]] 516 | name = "bevy_encase_derive" 517 | version = "0.17.2" 518 | source = "registry+https://github.com/rust-lang/crates.io-index" 519 | checksum = "7449e5903594a00f007732ba232af0c527ad4e6e3d29bc3e195ec78dbd20c8b2" 520 | dependencies = [ 521 | "bevy_macro_utils", 522 | "encase_derive_impl", 523 | ] 524 | 525 | [[package]] 526 | name = "bevy_gizmos" 527 | version = "0.17.2" 528 | source = "registry+https://github.com/rust-lang/crates.io-index" 529 | checksum = "0d3f174faa13041634060dd99f6f59c29997fd62f40252f0466c2ebea8603d4d" 530 | dependencies = [ 531 | "bevy_app", 532 | "bevy_asset", 533 | "bevy_camera", 534 | "bevy_color", 535 | "bevy_core_pipeline", 536 | "bevy_ecs", 537 | "bevy_gizmos_macros", 538 | "bevy_image", 539 | "bevy_light", 540 | "bevy_math", 541 | "bevy_mesh", 542 | "bevy_reflect", 543 | "bevy_render", 544 | "bevy_shader", 545 | "bevy_time", 546 | "bevy_transform", 547 | "bevy_utils", 548 | "bytemuck", 549 | "tracing", 550 | ] 551 | 552 | [[package]] 553 | name = "bevy_gizmos_macros" 554 | version = "0.17.2" 555 | source = "registry+https://github.com/rust-lang/crates.io-index" 556 | checksum = "714273aa7f285c0aaa874b7fbe37fe4e6e45355e3e6f3321aefa1b78cda259e0" 557 | dependencies = [ 558 | "bevy_macro_utils", 559 | "quote", 560 | "syn", 561 | ] 562 | 563 | [[package]] 564 | name = "bevy_image" 565 | version = "0.17.2" 566 | source = "registry+https://github.com/rust-lang/crates.io-index" 567 | checksum = "168de8239b2aedd2eeef9f76ae1909b2fdf859b11dcdb4d4d01b93f5f2c771be" 568 | dependencies = [ 569 | "bevy_app", 570 | "bevy_asset", 571 | "bevy_color", 572 | "bevy_ecs", 573 | "bevy_math", 574 | "bevy_platform", 575 | "bevy_reflect", 576 | "bevy_utils", 577 | "bitflags 2.10.0", 578 | "bytemuck", 579 | "futures-lite", 580 | "guillotiere", 581 | "half", 582 | "image", 583 | "rectangle-pack", 584 | "serde", 585 | "thiserror 2.0.17", 586 | "tracing", 587 | "wgpu-types", 588 | ] 589 | 590 | [[package]] 591 | name = "bevy_input" 592 | version = "0.17.2" 593 | source = "registry+https://github.com/rust-lang/crates.io-index" 594 | checksum = "3cf4074b2d0d6680b4deb308ded7b4e8b1b99181c0502e2632e78af815b26f01" 595 | dependencies = [ 596 | "bevy_app", 597 | "bevy_ecs", 598 | "bevy_math", 599 | "bevy_platform", 600 | "bevy_reflect", 601 | "derive_more", 602 | "log", 603 | "smol_str", 604 | "thiserror 2.0.17", 605 | ] 606 | 607 | [[package]] 608 | name = "bevy_input_focus" 609 | version = "0.17.2" 610 | source = "registry+https://github.com/rust-lang/crates.io-index" 611 | checksum = "70761eba0f616a1caa761457bff2b8ae80c9916f39d167fab8c2d5c98d2b8951" 612 | dependencies = [ 613 | "bevy_app", 614 | "bevy_ecs", 615 | "bevy_input", 616 | "bevy_math", 617 | "bevy_picking", 618 | "bevy_reflect", 619 | "bevy_window", 620 | "log", 621 | "thiserror 2.0.17", 622 | ] 623 | 624 | [[package]] 625 | name = "bevy_internal" 626 | version = "0.17.2" 627 | source = "registry+https://github.com/rust-lang/crates.io-index" 628 | checksum = "f43985739584f3a5d43026aa1edd772f064830be46c497518f05f7dfbc886bba" 629 | dependencies = [ 630 | "bevy_a11y", 631 | "bevy_android", 632 | "bevy_app", 633 | "bevy_asset", 634 | "bevy_camera", 635 | "bevy_color", 636 | "bevy_core_pipeline", 637 | "bevy_derive", 638 | "bevy_diagnostic", 639 | "bevy_ecs", 640 | "bevy_gizmos", 641 | "bevy_image", 642 | "bevy_input", 643 | "bevy_input_focus", 644 | "bevy_math", 645 | "bevy_mesh", 646 | "bevy_platform", 647 | "bevy_ptr", 648 | "bevy_reflect", 649 | "bevy_render", 650 | "bevy_shader", 651 | "bevy_state", 652 | "bevy_tasks", 653 | "bevy_time", 654 | "bevy_transform", 655 | "bevy_utils", 656 | "bevy_window", 657 | "bevy_winit", 658 | ] 659 | 660 | [[package]] 661 | name = "bevy_light" 662 | version = "0.17.2" 663 | source = "registry+https://github.com/rust-lang/crates.io-index" 664 | checksum = "cad00ab66d1e93edb928be66606a71066f3b1cbc9f414720e290ef5361eb6237" 665 | dependencies = [ 666 | "bevy_app", 667 | "bevy_asset", 668 | "bevy_camera", 669 | "bevy_color", 670 | "bevy_ecs", 671 | "bevy_image", 672 | "bevy_math", 673 | "bevy_mesh", 674 | "bevy_platform", 675 | "bevy_reflect", 676 | "bevy_transform", 677 | "bevy_utils", 678 | "tracing", 679 | ] 680 | 681 | [[package]] 682 | name = "bevy_log" 683 | version = "0.17.2" 684 | source = "registry+https://github.com/rust-lang/crates.io-index" 685 | checksum = "4ae217a035714a37b779487f82edc4c7c1223f7088d7ad94054f29f524d61c51" 686 | dependencies = [ 687 | "android_log-sys", 688 | "bevy_app", 689 | "bevy_ecs", 690 | "bevy_platform", 691 | "bevy_utils", 692 | "tracing", 693 | "tracing-log", 694 | "tracing-oslog", 695 | "tracing-subscriber", 696 | "tracing-wasm", 697 | ] 698 | 699 | [[package]] 700 | name = "bevy_macro_utils" 701 | version = "0.17.2" 702 | source = "registry+https://github.com/rust-lang/crates.io-index" 703 | checksum = "17dbc3f8948da58b3c17767d20fd3cd35fe4721ed19a9a3204a6f1d6c9951bdd" 704 | dependencies = [ 705 | "parking_lot", 706 | "proc-macro2", 707 | "quote", 708 | "syn", 709 | "toml_edit", 710 | ] 711 | 712 | [[package]] 713 | name = "bevy_math" 714 | version = "0.17.2" 715 | source = "registry+https://github.com/rust-lang/crates.io-index" 716 | checksum = "f7a41e368ffa95ae2a353197d1ae3993f4d3d471444d80b65c932db667ea7b9e" 717 | dependencies = [ 718 | "approx", 719 | "bevy_reflect", 720 | "derive_more", 721 | "glam", 722 | "itertools", 723 | "libm", 724 | "rand", 725 | "rand_distr", 726 | "serde", 727 | "smallvec", 728 | "thiserror 2.0.17", 729 | "variadics_please", 730 | ] 731 | 732 | [[package]] 733 | name = "bevy_mesh" 734 | version = "0.17.2" 735 | source = "registry+https://github.com/rust-lang/crates.io-index" 736 | checksum = "b6255244b71153b305fddb4e6f827cb97ed51f276b6e632f5fc46538647948f6" 737 | dependencies = [ 738 | "bevy_app", 739 | "bevy_asset", 740 | "bevy_derive", 741 | "bevy_ecs", 742 | "bevy_image", 743 | "bevy_math", 744 | "bevy_mikktspace", 745 | "bevy_platform", 746 | "bevy_reflect", 747 | "bevy_transform", 748 | "bitflags 2.10.0", 749 | "bytemuck", 750 | "derive_more", 751 | "hexasphere", 752 | "thiserror 2.0.17", 753 | "tracing", 754 | "wgpu-types", 755 | ] 756 | 757 | [[package]] 758 | name = "bevy_mikktspace" 759 | version = "0.17.0-dev" 760 | source = "registry+https://github.com/rust-lang/crates.io-index" 761 | checksum = "7ef8e4b7e61dfe7719bb03c884dc270cd46a82efb40f93e9933b990c5c190c59" 762 | 763 | [[package]] 764 | name = "bevy_picking" 765 | version = "0.17.2" 766 | source = "registry+https://github.com/rust-lang/crates.io-index" 767 | checksum = "3a232a8ea4dc9b83c08226f56b868acb1ead06946a95d8b9c8cbbcc860cd8090" 768 | dependencies = [ 769 | "bevy_app", 770 | "bevy_asset", 771 | "bevy_camera", 772 | "bevy_derive", 773 | "bevy_ecs", 774 | "bevy_input", 775 | "bevy_math", 776 | "bevy_platform", 777 | "bevy_reflect", 778 | "bevy_time", 779 | "bevy_transform", 780 | "bevy_window", 781 | "tracing", 782 | "uuid", 783 | ] 784 | 785 | [[package]] 786 | name = "bevy_platform" 787 | version = "0.17.2" 788 | source = "registry+https://github.com/rust-lang/crates.io-index" 789 | checksum = "10cf8cda162688c95250e74cffaa1c3a04597f105d4ca35554106f107308ea57" 790 | dependencies = [ 791 | "critical-section", 792 | "foldhash 0.2.0", 793 | "futures-channel", 794 | "getrandom", 795 | "hashbrown 0.16.0", 796 | "js-sys", 797 | "portable-atomic", 798 | "portable-atomic-util", 799 | "serde", 800 | "spin", 801 | "wasm-bindgen", 802 | "wasm-bindgen-futures", 803 | "web-time", 804 | ] 805 | 806 | [[package]] 807 | name = "bevy_ptr" 808 | version = "0.17.2" 809 | source = "registry+https://github.com/rust-lang/crates.io-index" 810 | checksum = "28ab4074e7b781bab84e9b0a41ede245d673d1f75646ce0db27643aedcfb3a85" 811 | 812 | [[package]] 813 | name = "bevy_reflect" 814 | version = "0.17.2" 815 | source = "registry+https://github.com/rust-lang/crates.io-index" 816 | checksum = "333df3f5947b7e62728eb5c0b51d679716b16c7c5283118fed4563f13230954e" 817 | dependencies = [ 818 | "assert_type_match", 819 | "bevy_platform", 820 | "bevy_ptr", 821 | "bevy_reflect_derive", 822 | "bevy_utils", 823 | "derive_more", 824 | "disqualified", 825 | "downcast-rs", 826 | "erased-serde", 827 | "foldhash 0.2.0", 828 | "glam", 829 | "inventory", 830 | "serde", 831 | "smallvec", 832 | "smol_str", 833 | "thiserror 2.0.17", 834 | "uuid", 835 | "variadics_please", 836 | "wgpu-types", 837 | ] 838 | 839 | [[package]] 840 | name = "bevy_reflect_derive" 841 | version = "0.17.2" 842 | source = "registry+https://github.com/rust-lang/crates.io-index" 843 | checksum = "0205dce9c5a4d8d041b263bcfd96e9d9d6f3d49416e12db347ab5778b3071fe1" 844 | dependencies = [ 845 | "bevy_macro_utils", 846 | "indexmap", 847 | "proc-macro2", 848 | "quote", 849 | "syn", 850 | "uuid", 851 | ] 852 | 853 | [[package]] 854 | name = "bevy_render" 855 | version = "0.17.2" 856 | source = "registry+https://github.com/rust-lang/crates.io-index" 857 | checksum = "70d6a5d47ebb247e4ecaaf4a3b0310b7c518728ff2362c69f4220d0d3228e17d" 858 | dependencies = [ 859 | "async-channel", 860 | "bevy_app", 861 | "bevy_asset", 862 | "bevy_camera", 863 | "bevy_color", 864 | "bevy_derive", 865 | "bevy_diagnostic", 866 | "bevy_ecs", 867 | "bevy_encase_derive", 868 | "bevy_image", 869 | "bevy_math", 870 | "bevy_mesh", 871 | "bevy_platform", 872 | "bevy_reflect", 873 | "bevy_render_macros", 874 | "bevy_shader", 875 | "bevy_tasks", 876 | "bevy_time", 877 | "bevy_transform", 878 | "bevy_utils", 879 | "bevy_window", 880 | "bitflags 2.10.0", 881 | "bytemuck", 882 | "derive_more", 883 | "downcast-rs", 884 | "encase", 885 | "fixedbitset", 886 | "image", 887 | "indexmap", 888 | "js-sys", 889 | "naga", 890 | "nonmax", 891 | "offset-allocator", 892 | "send_wrapper", 893 | "smallvec", 894 | "thiserror 2.0.17", 895 | "tracing", 896 | "variadics_please", 897 | "wasm-bindgen", 898 | "web-sys", 899 | "wgpu", 900 | ] 901 | 902 | [[package]] 903 | name = "bevy_render_macros" 904 | version = "0.17.2" 905 | source = "registry+https://github.com/rust-lang/crates.io-index" 906 | checksum = "a7e8b553adf0a4f9f059c5c2dcb52d9ac09abede1c322a92b43b9f4bb11c3843" 907 | dependencies = [ 908 | "bevy_macro_utils", 909 | "proc-macro2", 910 | "quote", 911 | "syn", 912 | ] 913 | 914 | [[package]] 915 | name = "bevy_shader" 916 | version = "0.17.2" 917 | source = "registry+https://github.com/rust-lang/crates.io-index" 918 | checksum = "3cef8f8e53776d286eb62bb60164f30671f07005ff407e94ec1176e9426d1477" 919 | dependencies = [ 920 | "bevy_asset", 921 | "bevy_platform", 922 | "bevy_reflect", 923 | "naga", 924 | "naga_oil", 925 | "serde", 926 | "thiserror 2.0.17", 927 | "tracing", 928 | "wgpu-types", 929 | ] 930 | 931 | [[package]] 932 | name = "bevy_state" 933 | version = "0.17.2" 934 | source = "registry+https://github.com/rust-lang/crates.io-index" 935 | checksum = "fe4e955f36cdc7b31556e4619a653dcf65d46967d90d36fb788f746c8e89257e" 936 | dependencies = [ 937 | "bevy_app", 938 | "bevy_ecs", 939 | "bevy_platform", 940 | "bevy_reflect", 941 | "bevy_state_macros", 942 | "bevy_utils", 943 | "log", 944 | "variadics_please", 945 | ] 946 | 947 | [[package]] 948 | name = "bevy_state_macros" 949 | version = "0.17.2" 950 | source = "registry+https://github.com/rust-lang/crates.io-index" 951 | checksum = "5c3e4e32b1b96585740a2b447661af7db1b9d688db5e4d96da50461cd8f5ce63" 952 | dependencies = [ 953 | "bevy_macro_utils", 954 | "quote", 955 | "syn", 956 | ] 957 | 958 | [[package]] 959 | name = "bevy_tasks" 960 | version = "0.17.2" 961 | source = "registry+https://github.com/rust-lang/crates.io-index" 962 | checksum = "18839182775f30d26f0f84d9de85d25361bb593c99517a80b64ede6cbaf41adc" 963 | dependencies = [ 964 | "async-channel", 965 | "async-executor", 966 | "async-task", 967 | "atomic-waker", 968 | "bevy_platform", 969 | "crossbeam-queue", 970 | "derive_more", 971 | "futures-lite", 972 | "heapless", 973 | "pin-project", 974 | ] 975 | 976 | [[package]] 977 | name = "bevy_time" 978 | version = "0.17.2" 979 | source = "registry+https://github.com/rust-lang/crates.io-index" 980 | checksum = "1a52edd3d30ed94074f646ba1c9914e407af9abe5b6fb7a4322c855341a536cc" 981 | dependencies = [ 982 | "bevy_app", 983 | "bevy_ecs", 984 | "bevy_platform", 985 | "bevy_reflect", 986 | "crossbeam-channel", 987 | "log", 988 | "serde", 989 | ] 990 | 991 | [[package]] 992 | name = "bevy_transform" 993 | version = "0.17.2" 994 | source = "registry+https://github.com/rust-lang/crates.io-index" 995 | checksum = "7995ae14430b1a268d1e4f098ab770e8af880d2df5e4e37161b47d8d9e9625bd" 996 | dependencies = [ 997 | "bevy_app", 998 | "bevy_ecs", 999 | "bevy_log", 1000 | "bevy_math", 1001 | "bevy_reflect", 1002 | "bevy_tasks", 1003 | "bevy_utils", 1004 | "derive_more", 1005 | "serde", 1006 | "thiserror 2.0.17", 1007 | ] 1008 | 1009 | [[package]] 1010 | name = "bevy_utils" 1011 | version = "0.17.2" 1012 | source = "registry+https://github.com/rust-lang/crates.io-index" 1013 | checksum = "080254083c74d5f6eb0649d7cd6181bda277e8fe3c509ec68990a5d56ec23f24" 1014 | dependencies = [ 1015 | "bevy_platform", 1016 | "disqualified", 1017 | "thread_local", 1018 | ] 1019 | 1020 | [[package]] 1021 | name = "bevy_window" 1022 | version = "0.17.2" 1023 | source = "registry+https://github.com/rust-lang/crates.io-index" 1024 | checksum = "f582478606d6b6e5c53befbe7612f038fdfb73f8a27f7aae644406637347acd4" 1025 | dependencies = [ 1026 | "bevy_app", 1027 | "bevy_ecs", 1028 | "bevy_input", 1029 | "bevy_math", 1030 | "bevy_platform", 1031 | "bevy_reflect", 1032 | "log", 1033 | "raw-window-handle", 1034 | "serde", 1035 | ] 1036 | 1037 | [[package]] 1038 | name = "bevy_winit" 1039 | version = "0.17.2" 1040 | source = "registry+https://github.com/rust-lang/crates.io-index" 1041 | checksum = "eb0ccf2faca4b4c156a26284d1bbf90a8cac8568a273adcd6c1a270c1342f3df" 1042 | dependencies = [ 1043 | "accesskit", 1044 | "accesskit_winit", 1045 | "approx", 1046 | "bevy_a11y", 1047 | "bevy_android", 1048 | "bevy_app", 1049 | "bevy_derive", 1050 | "bevy_ecs", 1051 | "bevy_input", 1052 | "bevy_input_focus", 1053 | "bevy_log", 1054 | "bevy_math", 1055 | "bevy_platform", 1056 | "bevy_reflect", 1057 | "bevy_tasks", 1058 | "bevy_window", 1059 | "cfg-if", 1060 | "tracing", 1061 | "wasm-bindgen", 1062 | "web-sys", 1063 | "winit", 1064 | ] 1065 | 1066 | [[package]] 1067 | name = "bit-set" 1068 | version = "0.8.0" 1069 | source = "registry+https://github.com/rust-lang/crates.io-index" 1070 | checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" 1071 | dependencies = [ 1072 | "bit-vec", 1073 | ] 1074 | 1075 | [[package]] 1076 | name = "bit-vec" 1077 | version = "0.8.0" 1078 | source = "registry+https://github.com/rust-lang/crates.io-index" 1079 | checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" 1080 | 1081 | [[package]] 1082 | name = "bitflags" 1083 | version = "1.3.2" 1084 | source = "registry+https://github.com/rust-lang/crates.io-index" 1085 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 1086 | 1087 | [[package]] 1088 | name = "bitflags" 1089 | version = "2.10.0" 1090 | source = "registry+https://github.com/rust-lang/crates.io-index" 1091 | checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" 1092 | dependencies = [ 1093 | "serde_core", 1094 | ] 1095 | 1096 | [[package]] 1097 | name = "blake3" 1098 | version = "1.8.2" 1099 | source = "registry+https://github.com/rust-lang/crates.io-index" 1100 | checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0" 1101 | dependencies = [ 1102 | "arrayref", 1103 | "arrayvec", 1104 | "cc", 1105 | "cfg-if", 1106 | "constant_time_eq", 1107 | ] 1108 | 1109 | [[package]] 1110 | name = "block" 1111 | version = "0.1.6" 1112 | source = "registry+https://github.com/rust-lang/crates.io-index" 1113 | checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" 1114 | 1115 | [[package]] 1116 | name = "block2" 1117 | version = "0.5.1" 1118 | source = "registry+https://github.com/rust-lang/crates.io-index" 1119 | checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" 1120 | dependencies = [ 1121 | "objc2", 1122 | ] 1123 | 1124 | [[package]] 1125 | name = "blocking" 1126 | version = "1.6.2" 1127 | source = "registry+https://github.com/rust-lang/crates.io-index" 1128 | checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21" 1129 | dependencies = [ 1130 | "async-channel", 1131 | "async-task", 1132 | "futures-io", 1133 | "futures-lite", 1134 | "piper", 1135 | ] 1136 | 1137 | [[package]] 1138 | name = "bumpalo" 1139 | version = "3.19.0" 1140 | source = "registry+https://github.com/rust-lang/crates.io-index" 1141 | checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" 1142 | 1143 | [[package]] 1144 | name = "bytemuck" 1145 | version = "1.24.0" 1146 | source = "registry+https://github.com/rust-lang/crates.io-index" 1147 | checksum = "1fbdf580320f38b612e485521afda1ee26d10cc9884efaaa750d383e13e3c5f4" 1148 | dependencies = [ 1149 | "bytemuck_derive", 1150 | ] 1151 | 1152 | [[package]] 1153 | name = "bytemuck_derive" 1154 | version = "1.10.2" 1155 | source = "registry+https://github.com/rust-lang/crates.io-index" 1156 | checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" 1157 | dependencies = [ 1158 | "proc-macro2", 1159 | "quote", 1160 | "syn", 1161 | ] 1162 | 1163 | [[package]] 1164 | name = "byteorder" 1165 | version = "1.5.0" 1166 | source = "registry+https://github.com/rust-lang/crates.io-index" 1167 | checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 1168 | 1169 | [[package]] 1170 | name = "byteorder-lite" 1171 | version = "0.1.0" 1172 | source = "registry+https://github.com/rust-lang/crates.io-index" 1173 | checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" 1174 | 1175 | [[package]] 1176 | name = "bytes" 1177 | version = "1.10.1" 1178 | source = "registry+https://github.com/rust-lang/crates.io-index" 1179 | checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" 1180 | 1181 | [[package]] 1182 | name = "calloop" 1183 | version = "0.13.0" 1184 | source = "registry+https://github.com/rust-lang/crates.io-index" 1185 | checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" 1186 | dependencies = [ 1187 | "bitflags 2.10.0", 1188 | "log", 1189 | "polling", 1190 | "rustix 0.38.44", 1191 | "slab", 1192 | "thiserror 1.0.69", 1193 | ] 1194 | 1195 | [[package]] 1196 | name = "cc" 1197 | version = "1.2.43" 1198 | source = "registry+https://github.com/rust-lang/crates.io-index" 1199 | checksum = "739eb0f94557554b3ca9a86d2d37bebd49c5e6d0c1d2bda35ba5bdac830befc2" 1200 | dependencies = [ 1201 | "find-msvc-tools", 1202 | "jobserver", 1203 | "libc", 1204 | "shlex", 1205 | ] 1206 | 1207 | [[package]] 1208 | name = "cesu8" 1209 | version = "1.1.0" 1210 | source = "registry+https://github.com/rust-lang/crates.io-index" 1211 | checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" 1212 | 1213 | [[package]] 1214 | name = "cfg-if" 1215 | version = "1.0.4" 1216 | source = "registry+https://github.com/rust-lang/crates.io-index" 1217 | checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" 1218 | 1219 | [[package]] 1220 | name = "cfg_aliases" 1221 | version = "0.2.1" 1222 | source = "registry+https://github.com/rust-lang/crates.io-index" 1223 | checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" 1224 | 1225 | [[package]] 1226 | name = "codespan-reporting" 1227 | version = "0.12.0" 1228 | source = "registry+https://github.com/rust-lang/crates.io-index" 1229 | checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" 1230 | dependencies = [ 1231 | "serde", 1232 | "termcolor", 1233 | "unicode-width", 1234 | ] 1235 | 1236 | [[package]] 1237 | name = "combine" 1238 | version = "4.6.7" 1239 | source = "registry+https://github.com/rust-lang/crates.io-index" 1240 | checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" 1241 | dependencies = [ 1242 | "bytes", 1243 | "memchr", 1244 | ] 1245 | 1246 | [[package]] 1247 | name = "concurrent-queue" 1248 | version = "2.5.0" 1249 | source = "registry+https://github.com/rust-lang/crates.io-index" 1250 | checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" 1251 | dependencies = [ 1252 | "crossbeam-utils", 1253 | "portable-atomic", 1254 | ] 1255 | 1256 | [[package]] 1257 | name = "console_error_panic_hook" 1258 | version = "0.1.7" 1259 | source = "registry+https://github.com/rust-lang/crates.io-index" 1260 | checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" 1261 | dependencies = [ 1262 | "cfg-if", 1263 | "wasm-bindgen", 1264 | ] 1265 | 1266 | [[package]] 1267 | name = "const-fnv1a-hash" 1268 | version = "1.1.0" 1269 | source = "registry+https://github.com/rust-lang/crates.io-index" 1270 | checksum = "32b13ea120a812beba79e34316b3942a857c86ec1593cb34f27bb28272ce2cca" 1271 | 1272 | [[package]] 1273 | name = "const_panic" 1274 | version = "0.2.15" 1275 | source = "registry+https://github.com/rust-lang/crates.io-index" 1276 | checksum = "e262cdaac42494e3ae34c43969f9cdeb7da178bdb4b66fa6a1ea2edb4c8ae652" 1277 | dependencies = [ 1278 | "typewit", 1279 | ] 1280 | 1281 | [[package]] 1282 | name = "const_soft_float" 1283 | version = "0.1.4" 1284 | source = "registry+https://github.com/rust-lang/crates.io-index" 1285 | checksum = "87ca1caa64ef4ed453e68bb3db612e51cf1b2f5b871337f0fcab1c8f87cc3dff" 1286 | 1287 | [[package]] 1288 | name = "constant_time_eq" 1289 | version = "0.3.1" 1290 | source = "registry+https://github.com/rust-lang/crates.io-index" 1291 | checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" 1292 | 1293 | [[package]] 1294 | name = "constgebra" 1295 | version = "0.1.4" 1296 | source = "registry+https://github.com/rust-lang/crates.io-index" 1297 | checksum = "e1aaf9b65849a68662ac6c0810c8893a765c960b907dd7cfab9c4a50bf764fbc" 1298 | dependencies = [ 1299 | "const_soft_float", 1300 | ] 1301 | 1302 | [[package]] 1303 | name = "core-foundation" 1304 | version = "0.9.4" 1305 | source = "registry+https://github.com/rust-lang/crates.io-index" 1306 | checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 1307 | dependencies = [ 1308 | "core-foundation-sys", 1309 | "libc", 1310 | ] 1311 | 1312 | [[package]] 1313 | name = "core-foundation" 1314 | version = "0.10.1" 1315 | source = "registry+https://github.com/rust-lang/crates.io-index" 1316 | checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" 1317 | dependencies = [ 1318 | "core-foundation-sys", 1319 | "libc", 1320 | ] 1321 | 1322 | [[package]] 1323 | name = "core-foundation-sys" 1324 | version = "0.8.7" 1325 | source = "registry+https://github.com/rust-lang/crates.io-index" 1326 | checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 1327 | 1328 | [[package]] 1329 | name = "core-graphics" 1330 | version = "0.23.2" 1331 | source = "registry+https://github.com/rust-lang/crates.io-index" 1332 | checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" 1333 | dependencies = [ 1334 | "bitflags 1.3.2", 1335 | "core-foundation 0.9.4", 1336 | "core-graphics-types 0.1.3", 1337 | "foreign-types", 1338 | "libc", 1339 | ] 1340 | 1341 | [[package]] 1342 | name = "core-graphics-types" 1343 | version = "0.1.3" 1344 | source = "registry+https://github.com/rust-lang/crates.io-index" 1345 | checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" 1346 | dependencies = [ 1347 | "bitflags 1.3.2", 1348 | "core-foundation 0.9.4", 1349 | "libc", 1350 | ] 1351 | 1352 | [[package]] 1353 | name = "core-graphics-types" 1354 | version = "0.2.0" 1355 | source = "registry+https://github.com/rust-lang/crates.io-index" 1356 | checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" 1357 | dependencies = [ 1358 | "bitflags 2.10.0", 1359 | "core-foundation 0.10.1", 1360 | "libc", 1361 | ] 1362 | 1363 | [[package]] 1364 | name = "critical-section" 1365 | version = "1.2.0" 1366 | source = "registry+https://github.com/rust-lang/crates.io-index" 1367 | checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" 1368 | 1369 | [[package]] 1370 | name = "crossbeam-channel" 1371 | version = "0.5.15" 1372 | source = "registry+https://github.com/rust-lang/crates.io-index" 1373 | checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" 1374 | dependencies = [ 1375 | "crossbeam-utils", 1376 | ] 1377 | 1378 | [[package]] 1379 | name = "crossbeam-queue" 1380 | version = "0.3.12" 1381 | source = "registry+https://github.com/rust-lang/crates.io-index" 1382 | checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" 1383 | dependencies = [ 1384 | "crossbeam-utils", 1385 | ] 1386 | 1387 | [[package]] 1388 | name = "crossbeam-utils" 1389 | version = "0.8.21" 1390 | source = "registry+https://github.com/rust-lang/crates.io-index" 1391 | checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 1392 | 1393 | [[package]] 1394 | name = "crunchy" 1395 | version = "0.2.4" 1396 | source = "registry+https://github.com/rust-lang/crates.io-index" 1397 | checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" 1398 | 1399 | [[package]] 1400 | name = "ctrlc" 1401 | version = "3.5.0" 1402 | source = "registry+https://github.com/rust-lang/crates.io-index" 1403 | checksum = "881c5d0a13b2f1498e2306e82cbada78390e152d4b1378fb28a84f4dcd0dc4f3" 1404 | dependencies = [ 1405 | "dispatch", 1406 | "nix", 1407 | "windows-sys 0.61.2", 1408 | ] 1409 | 1410 | [[package]] 1411 | name = "cursor-icon" 1412 | version = "1.2.0" 1413 | source = "registry+https://github.com/rust-lang/crates.io-index" 1414 | checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f" 1415 | 1416 | [[package]] 1417 | name = "data-encoding" 1418 | version = "2.9.0" 1419 | source = "registry+https://github.com/rust-lang/crates.io-index" 1420 | checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" 1421 | 1422 | [[package]] 1423 | name = "derive_more" 1424 | version = "2.0.1" 1425 | source = "registry+https://github.com/rust-lang/crates.io-index" 1426 | checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" 1427 | dependencies = [ 1428 | "derive_more-impl", 1429 | ] 1430 | 1431 | [[package]] 1432 | name = "derive_more-impl" 1433 | version = "2.0.1" 1434 | source = "registry+https://github.com/rust-lang/crates.io-index" 1435 | checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" 1436 | dependencies = [ 1437 | "proc-macro2", 1438 | "quote", 1439 | "syn", 1440 | "unicode-xid", 1441 | ] 1442 | 1443 | [[package]] 1444 | name = "dispatch" 1445 | version = "0.2.0" 1446 | source = "registry+https://github.com/rust-lang/crates.io-index" 1447 | checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" 1448 | 1449 | [[package]] 1450 | name = "disqualified" 1451 | version = "1.0.0" 1452 | source = "registry+https://github.com/rust-lang/crates.io-index" 1453 | checksum = "c9c272297e804878a2a4b707cfcfc6d2328b5bb936944613b4fdf2b9269afdfd" 1454 | 1455 | [[package]] 1456 | name = "dlib" 1457 | version = "0.5.2" 1458 | source = "registry+https://github.com/rust-lang/crates.io-index" 1459 | checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" 1460 | dependencies = [ 1461 | "libloading", 1462 | ] 1463 | 1464 | [[package]] 1465 | name = "document-features" 1466 | version = "0.2.12" 1467 | source = "registry+https://github.com/rust-lang/crates.io-index" 1468 | checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" 1469 | dependencies = [ 1470 | "litrs", 1471 | ] 1472 | 1473 | [[package]] 1474 | name = "downcast-rs" 1475 | version = "2.0.2" 1476 | source = "registry+https://github.com/rust-lang/crates.io-index" 1477 | checksum = "117240f60069e65410b3ae1bb213295bd828f707b5bec6596a1afc8793ce0cbc" 1478 | 1479 | [[package]] 1480 | name = "dpi" 1481 | version = "0.1.2" 1482 | source = "registry+https://github.com/rust-lang/crates.io-index" 1483 | checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" 1484 | 1485 | [[package]] 1486 | name = "either" 1487 | version = "1.15.0" 1488 | source = "registry+https://github.com/rust-lang/crates.io-index" 1489 | checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" 1490 | 1491 | [[package]] 1492 | name = "encase" 1493 | version = "0.11.2" 1494 | source = "registry+https://github.com/rust-lang/crates.io-index" 1495 | checksum = "02ba239319a4f60905966390f5e52799d868103a533bb7e27822792332504ddd" 1496 | dependencies = [ 1497 | "const_panic", 1498 | "encase_derive", 1499 | "glam", 1500 | "thiserror 2.0.17", 1501 | ] 1502 | 1503 | [[package]] 1504 | name = "encase_derive" 1505 | version = "0.11.2" 1506 | source = "registry+https://github.com/rust-lang/crates.io-index" 1507 | checksum = "5223d6c647f09870553224f6e37261fe5567bc5a4f4cf13ed337476e79990f2f" 1508 | dependencies = [ 1509 | "encase_derive_impl", 1510 | ] 1511 | 1512 | [[package]] 1513 | name = "encase_derive_impl" 1514 | version = "0.11.2" 1515 | source = "registry+https://github.com/rust-lang/crates.io-index" 1516 | checksum = "1796db3d892515842ca2dfb11124c4bb4a9e58d9f2c5c1072e5bca1b2334507b" 1517 | dependencies = [ 1518 | "proc-macro2", 1519 | "quote", 1520 | "syn", 1521 | ] 1522 | 1523 | [[package]] 1524 | name = "equivalent" 1525 | version = "1.0.2" 1526 | source = "registry+https://github.com/rust-lang/crates.io-index" 1527 | checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 1528 | 1529 | [[package]] 1530 | name = "erased-serde" 1531 | version = "0.4.8" 1532 | source = "registry+https://github.com/rust-lang/crates.io-index" 1533 | checksum = "259d404d09818dec19332e31d94558aeb442fea04c817006456c24b5460bbd4b" 1534 | dependencies = [ 1535 | "serde", 1536 | "serde_core", 1537 | "typeid", 1538 | ] 1539 | 1540 | [[package]] 1541 | name = "errno" 1542 | version = "0.3.14" 1543 | source = "registry+https://github.com/rust-lang/crates.io-index" 1544 | checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" 1545 | dependencies = [ 1546 | "libc", 1547 | "windows-sys 0.61.2", 1548 | ] 1549 | 1550 | [[package]] 1551 | name = "euclid" 1552 | version = "0.22.11" 1553 | source = "registry+https://github.com/rust-lang/crates.io-index" 1554 | checksum = "ad9cdb4b747e485a12abb0e6566612956c7a1bafa3bdb8d682c5b6d403589e48" 1555 | dependencies = [ 1556 | "num-traits", 1557 | ] 1558 | 1559 | [[package]] 1560 | name = "event-listener" 1561 | version = "5.4.1" 1562 | source = "registry+https://github.com/rust-lang/crates.io-index" 1563 | checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" 1564 | dependencies = [ 1565 | "concurrent-queue", 1566 | "parking", 1567 | "pin-project-lite", 1568 | ] 1569 | 1570 | [[package]] 1571 | name = "event-listener-strategy" 1572 | version = "0.5.4" 1573 | source = "registry+https://github.com/rust-lang/crates.io-index" 1574 | checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" 1575 | dependencies = [ 1576 | "event-listener", 1577 | "pin-project-lite", 1578 | ] 1579 | 1580 | [[package]] 1581 | name = "fastrand" 1582 | version = "2.3.0" 1583 | source = "registry+https://github.com/rust-lang/crates.io-index" 1584 | checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 1585 | 1586 | [[package]] 1587 | name = "find-msvc-tools" 1588 | version = "0.1.4" 1589 | source = "registry+https://github.com/rust-lang/crates.io-index" 1590 | checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" 1591 | 1592 | [[package]] 1593 | name = "fixedbitset" 1594 | version = "0.5.7" 1595 | source = "registry+https://github.com/rust-lang/crates.io-index" 1596 | checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" 1597 | 1598 | [[package]] 1599 | name = "foldhash" 1600 | version = "0.1.5" 1601 | source = "registry+https://github.com/rust-lang/crates.io-index" 1602 | checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" 1603 | 1604 | [[package]] 1605 | name = "foldhash" 1606 | version = "0.2.0" 1607 | source = "registry+https://github.com/rust-lang/crates.io-index" 1608 | checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" 1609 | 1610 | [[package]] 1611 | name = "foreign-types" 1612 | version = "0.5.0" 1613 | source = "registry+https://github.com/rust-lang/crates.io-index" 1614 | checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" 1615 | dependencies = [ 1616 | "foreign-types-macros", 1617 | "foreign-types-shared", 1618 | ] 1619 | 1620 | [[package]] 1621 | name = "foreign-types-macros" 1622 | version = "0.2.3" 1623 | source = "registry+https://github.com/rust-lang/crates.io-index" 1624 | checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" 1625 | dependencies = [ 1626 | "proc-macro2", 1627 | "quote", 1628 | "syn", 1629 | ] 1630 | 1631 | [[package]] 1632 | name = "foreign-types-shared" 1633 | version = "0.3.1" 1634 | source = "registry+https://github.com/rust-lang/crates.io-index" 1635 | checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" 1636 | 1637 | [[package]] 1638 | name = "futures-channel" 1639 | version = "0.3.31" 1640 | source = "registry+https://github.com/rust-lang/crates.io-index" 1641 | checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" 1642 | dependencies = [ 1643 | "futures-core", 1644 | ] 1645 | 1646 | [[package]] 1647 | name = "futures-core" 1648 | version = "0.3.31" 1649 | source = "registry+https://github.com/rust-lang/crates.io-index" 1650 | checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 1651 | 1652 | [[package]] 1653 | name = "futures-io" 1654 | version = "0.3.31" 1655 | source = "registry+https://github.com/rust-lang/crates.io-index" 1656 | checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" 1657 | 1658 | [[package]] 1659 | name = "futures-lite" 1660 | version = "2.6.1" 1661 | source = "registry+https://github.com/rust-lang/crates.io-index" 1662 | checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" 1663 | dependencies = [ 1664 | "fastrand", 1665 | "futures-core", 1666 | "futures-io", 1667 | "parking", 1668 | "pin-project-lite", 1669 | ] 1670 | 1671 | [[package]] 1672 | name = "gethostname" 1673 | version = "1.1.0" 1674 | source = "registry+https://github.com/rust-lang/crates.io-index" 1675 | checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" 1676 | dependencies = [ 1677 | "rustix 1.1.2", 1678 | "windows-link 0.2.1", 1679 | ] 1680 | 1681 | [[package]] 1682 | name = "getrandom" 1683 | version = "0.3.4" 1684 | source = "registry+https://github.com/rust-lang/crates.io-index" 1685 | checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" 1686 | dependencies = [ 1687 | "cfg-if", 1688 | "js-sys", 1689 | "libc", 1690 | "r-efi", 1691 | "wasip2", 1692 | "wasm-bindgen", 1693 | ] 1694 | 1695 | [[package]] 1696 | name = "glam" 1697 | version = "0.30.8" 1698 | source = "registry+https://github.com/rust-lang/crates.io-index" 1699 | checksum = "e12d847aeb25f41be4c0ec9587d624e9cd631bc007a8fd7ce3f5851e064c6460" 1700 | dependencies = [ 1701 | "bytemuck", 1702 | "libm", 1703 | "rand", 1704 | "serde_core", 1705 | ] 1706 | 1707 | [[package]] 1708 | name = "gpu-alloc" 1709 | version = "0.6.0" 1710 | source = "registry+https://github.com/rust-lang/crates.io-index" 1711 | checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" 1712 | dependencies = [ 1713 | "bitflags 2.10.0", 1714 | "gpu-alloc-types", 1715 | ] 1716 | 1717 | [[package]] 1718 | name = "gpu-alloc-types" 1719 | version = "0.3.0" 1720 | source = "registry+https://github.com/rust-lang/crates.io-index" 1721 | checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" 1722 | dependencies = [ 1723 | "bitflags 2.10.0", 1724 | ] 1725 | 1726 | [[package]] 1727 | name = "gpu-allocator" 1728 | version = "0.27.0" 1729 | source = "registry+https://github.com/rust-lang/crates.io-index" 1730 | checksum = "c151a2a5ef800297b4e79efa4f4bec035c5f51d5ae587287c9b952bdf734cacd" 1731 | dependencies = [ 1732 | "log", 1733 | "presser", 1734 | "thiserror 1.0.69", 1735 | "windows 0.58.0", 1736 | ] 1737 | 1738 | [[package]] 1739 | name = "gpu-descriptor" 1740 | version = "0.3.2" 1741 | source = "registry+https://github.com/rust-lang/crates.io-index" 1742 | checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" 1743 | dependencies = [ 1744 | "bitflags 2.10.0", 1745 | "gpu-descriptor-types", 1746 | "hashbrown 0.15.5", 1747 | ] 1748 | 1749 | [[package]] 1750 | name = "gpu-descriptor-types" 1751 | version = "0.2.0" 1752 | source = "registry+https://github.com/rust-lang/crates.io-index" 1753 | checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" 1754 | dependencies = [ 1755 | "bitflags 2.10.0", 1756 | ] 1757 | 1758 | [[package]] 1759 | name = "guillotiere" 1760 | version = "0.6.2" 1761 | source = "registry+https://github.com/rust-lang/crates.io-index" 1762 | checksum = "b62d5865c036cb1393e23c50693df631d3f5d7bcca4c04fe4cc0fd592e74a782" 1763 | dependencies = [ 1764 | "euclid", 1765 | "svg_fmt", 1766 | ] 1767 | 1768 | [[package]] 1769 | name = "half" 1770 | version = "2.7.1" 1771 | source = "registry+https://github.com/rust-lang/crates.io-index" 1772 | checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" 1773 | dependencies = [ 1774 | "cfg-if", 1775 | "crunchy", 1776 | "num-traits", 1777 | "zerocopy", 1778 | ] 1779 | 1780 | [[package]] 1781 | name = "hash32" 1782 | version = "0.3.1" 1783 | source = "registry+https://github.com/rust-lang/crates.io-index" 1784 | checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" 1785 | dependencies = [ 1786 | "byteorder", 1787 | ] 1788 | 1789 | [[package]] 1790 | name = "hashbrown" 1791 | version = "0.15.5" 1792 | source = "registry+https://github.com/rust-lang/crates.io-index" 1793 | checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" 1794 | dependencies = [ 1795 | "foldhash 0.1.5", 1796 | ] 1797 | 1798 | [[package]] 1799 | name = "hashbrown" 1800 | version = "0.16.0" 1801 | source = "registry+https://github.com/rust-lang/crates.io-index" 1802 | checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" 1803 | dependencies = [ 1804 | "equivalent", 1805 | "serde", 1806 | ] 1807 | 1808 | [[package]] 1809 | name = "heapless" 1810 | version = "0.8.0" 1811 | source = "registry+https://github.com/rust-lang/crates.io-index" 1812 | checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" 1813 | dependencies = [ 1814 | "hash32", 1815 | "portable-atomic", 1816 | "stable_deref_trait", 1817 | ] 1818 | 1819 | [[package]] 1820 | name = "hermit-abi" 1821 | version = "0.5.2" 1822 | source = "registry+https://github.com/rust-lang/crates.io-index" 1823 | checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" 1824 | 1825 | [[package]] 1826 | name = "hexasphere" 1827 | version = "16.0.0" 1828 | source = "registry+https://github.com/rust-lang/crates.io-index" 1829 | checksum = "29a164ceff4500f2a72b1d21beaa8aa8ad83aec2b641844c659b190cb3ea2e0b" 1830 | dependencies = [ 1831 | "constgebra", 1832 | "glam", 1833 | "tinyvec", 1834 | ] 1835 | 1836 | [[package]] 1837 | name = "hexf-parse" 1838 | version = "0.2.1" 1839 | source = "registry+https://github.com/rust-lang/crates.io-index" 1840 | checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" 1841 | 1842 | [[package]] 1843 | name = "image" 1844 | version = "0.25.8" 1845 | source = "registry+https://github.com/rust-lang/crates.io-index" 1846 | checksum = "529feb3e6769d234375c4cf1ee2ce713682b8e76538cb13f9fc23e1400a591e7" 1847 | dependencies = [ 1848 | "bytemuck", 1849 | "byteorder-lite", 1850 | "moxcms", 1851 | "num-traits", 1852 | ] 1853 | 1854 | [[package]] 1855 | name = "indexmap" 1856 | version = "2.12.0" 1857 | source = "registry+https://github.com/rust-lang/crates.io-index" 1858 | checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" 1859 | dependencies = [ 1860 | "equivalent", 1861 | "hashbrown 0.16.0", 1862 | ] 1863 | 1864 | [[package]] 1865 | name = "inventory" 1866 | version = "0.3.21" 1867 | source = "registry+https://github.com/rust-lang/crates.io-index" 1868 | checksum = "bc61209c082fbeb19919bee74b176221b27223e27b65d781eb91af24eb1fb46e" 1869 | dependencies = [ 1870 | "rustversion", 1871 | ] 1872 | 1873 | [[package]] 1874 | name = "itertools" 1875 | version = "0.14.0" 1876 | source = "registry+https://github.com/rust-lang/crates.io-index" 1877 | checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" 1878 | dependencies = [ 1879 | "either", 1880 | ] 1881 | 1882 | [[package]] 1883 | name = "jni" 1884 | version = "0.21.1" 1885 | source = "registry+https://github.com/rust-lang/crates.io-index" 1886 | checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" 1887 | dependencies = [ 1888 | "cesu8", 1889 | "cfg-if", 1890 | "combine", 1891 | "jni-sys", 1892 | "log", 1893 | "thiserror 1.0.69", 1894 | "walkdir", 1895 | "windows-sys 0.45.0", 1896 | ] 1897 | 1898 | [[package]] 1899 | name = "jni-sys" 1900 | version = "0.3.0" 1901 | source = "registry+https://github.com/rust-lang/crates.io-index" 1902 | checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" 1903 | 1904 | [[package]] 1905 | name = "jobserver" 1906 | version = "0.1.34" 1907 | source = "registry+https://github.com/rust-lang/crates.io-index" 1908 | checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" 1909 | dependencies = [ 1910 | "getrandom", 1911 | "libc", 1912 | ] 1913 | 1914 | [[package]] 1915 | name = "js-sys" 1916 | version = "0.3.81" 1917 | source = "registry+https://github.com/rust-lang/crates.io-index" 1918 | checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" 1919 | dependencies = [ 1920 | "once_cell", 1921 | "wasm-bindgen", 1922 | ] 1923 | 1924 | [[package]] 1925 | name = "lazy_static" 1926 | version = "1.5.0" 1927 | source = "registry+https://github.com/rust-lang/crates.io-index" 1928 | checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 1929 | 1930 | [[package]] 1931 | name = "libc" 1932 | version = "0.2.177" 1933 | source = "registry+https://github.com/rust-lang/crates.io-index" 1934 | checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" 1935 | 1936 | [[package]] 1937 | name = "libloading" 1938 | version = "0.8.9" 1939 | source = "registry+https://github.com/rust-lang/crates.io-index" 1940 | checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" 1941 | dependencies = [ 1942 | "cfg-if", 1943 | "windows-link 0.2.1", 1944 | ] 1945 | 1946 | [[package]] 1947 | name = "libm" 1948 | version = "0.2.15" 1949 | source = "registry+https://github.com/rust-lang/crates.io-index" 1950 | checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" 1951 | 1952 | [[package]] 1953 | name = "libredox" 1954 | version = "0.1.10" 1955 | source = "registry+https://github.com/rust-lang/crates.io-index" 1956 | checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" 1957 | dependencies = [ 1958 | "bitflags 2.10.0", 1959 | "libc", 1960 | "redox_syscall 0.5.18", 1961 | ] 1962 | 1963 | [[package]] 1964 | name = "linux-raw-sys" 1965 | version = "0.4.15" 1966 | source = "registry+https://github.com/rust-lang/crates.io-index" 1967 | checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" 1968 | 1969 | [[package]] 1970 | name = "linux-raw-sys" 1971 | version = "0.11.0" 1972 | source = "registry+https://github.com/rust-lang/crates.io-index" 1973 | checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" 1974 | 1975 | [[package]] 1976 | name = "litrs" 1977 | version = "1.0.0" 1978 | source = "registry+https://github.com/rust-lang/crates.io-index" 1979 | checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" 1980 | 1981 | [[package]] 1982 | name = "lock_api" 1983 | version = "0.4.14" 1984 | source = "registry+https://github.com/rust-lang/crates.io-index" 1985 | checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" 1986 | dependencies = [ 1987 | "scopeguard", 1988 | ] 1989 | 1990 | [[package]] 1991 | name = "log" 1992 | version = "0.4.28" 1993 | source = "registry+https://github.com/rust-lang/crates.io-index" 1994 | checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" 1995 | 1996 | [[package]] 1997 | name = "malloc_buf" 1998 | version = "0.0.6" 1999 | source = "registry+https://github.com/rust-lang/crates.io-index" 2000 | checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" 2001 | dependencies = [ 2002 | "libc", 2003 | ] 2004 | 2005 | [[package]] 2006 | name = "matchers" 2007 | version = "0.2.0" 2008 | source = "registry+https://github.com/rust-lang/crates.io-index" 2009 | checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" 2010 | dependencies = [ 2011 | "regex-automata", 2012 | ] 2013 | 2014 | [[package]] 2015 | name = "memchr" 2016 | version = "2.7.6" 2017 | source = "registry+https://github.com/rust-lang/crates.io-index" 2018 | checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" 2019 | 2020 | [[package]] 2021 | name = "metal" 2022 | version = "0.32.0" 2023 | source = "registry+https://github.com/rust-lang/crates.io-index" 2024 | checksum = "00c15a6f673ff72ddcc22394663290f870fb224c1bfce55734a75c414150e605" 2025 | dependencies = [ 2026 | "bitflags 2.10.0", 2027 | "block", 2028 | "core-graphics-types 0.2.0", 2029 | "foreign-types", 2030 | "log", 2031 | "objc", 2032 | "paste", 2033 | ] 2034 | 2035 | [[package]] 2036 | name = "moxcms" 2037 | version = "0.7.7" 2038 | source = "registry+https://github.com/rust-lang/crates.io-index" 2039 | checksum = "c588e11a3082784af229e23e8e4ecf5bcc6fbe4f69101e0421ce8d79da7f0b40" 2040 | dependencies = [ 2041 | "num-traits", 2042 | "pxfm", 2043 | ] 2044 | 2045 | [[package]] 2046 | name = "naga" 2047 | version = "26.0.0" 2048 | source = "registry+https://github.com/rust-lang/crates.io-index" 2049 | checksum = "916cbc7cb27db60be930a4e2da243cf4bc39569195f22fd8ee419cd31d5b662c" 2050 | dependencies = [ 2051 | "arrayvec", 2052 | "bit-set", 2053 | "bitflags 2.10.0", 2054 | "cfg-if", 2055 | "cfg_aliases", 2056 | "codespan-reporting", 2057 | "half", 2058 | "hashbrown 0.15.5", 2059 | "hexf-parse", 2060 | "indexmap", 2061 | "libm", 2062 | "log", 2063 | "num-traits", 2064 | "once_cell", 2065 | "pp-rs", 2066 | "rustc-hash", 2067 | "spirv", 2068 | "thiserror 2.0.17", 2069 | "unicode-ident", 2070 | ] 2071 | 2072 | [[package]] 2073 | name = "naga_oil" 2074 | version = "0.19.1" 2075 | source = "registry+https://github.com/rust-lang/crates.io-index" 2076 | checksum = "1b586d3cf5c9b7e13fe2af6e114406ff70773fd80881960378933b63e76f37dd" 2077 | dependencies = [ 2078 | "codespan-reporting", 2079 | "data-encoding", 2080 | "indexmap", 2081 | "naga", 2082 | "regex", 2083 | "rustc-hash", 2084 | "thiserror 2.0.17", 2085 | "tracing", 2086 | "unicode-ident", 2087 | ] 2088 | 2089 | [[package]] 2090 | name = "ndk" 2091 | version = "0.9.0" 2092 | source = "registry+https://github.com/rust-lang/crates.io-index" 2093 | checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" 2094 | dependencies = [ 2095 | "bitflags 2.10.0", 2096 | "jni-sys", 2097 | "log", 2098 | "ndk-sys", 2099 | "num_enum", 2100 | "raw-window-handle", 2101 | "thiserror 1.0.69", 2102 | ] 2103 | 2104 | [[package]] 2105 | name = "ndk-context" 2106 | version = "0.1.1" 2107 | source = "registry+https://github.com/rust-lang/crates.io-index" 2108 | checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" 2109 | 2110 | [[package]] 2111 | name = "ndk-sys" 2112 | version = "0.6.0+11769913" 2113 | source = "registry+https://github.com/rust-lang/crates.io-index" 2114 | checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" 2115 | dependencies = [ 2116 | "jni-sys", 2117 | ] 2118 | 2119 | [[package]] 2120 | name = "nix" 2121 | version = "0.30.1" 2122 | source = "registry+https://github.com/rust-lang/crates.io-index" 2123 | checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" 2124 | dependencies = [ 2125 | "bitflags 2.10.0", 2126 | "cfg-if", 2127 | "cfg_aliases", 2128 | "libc", 2129 | ] 2130 | 2131 | [[package]] 2132 | name = "nonmax" 2133 | version = "0.5.5" 2134 | source = "registry+https://github.com/rust-lang/crates.io-index" 2135 | checksum = "610a5acd306ec67f907abe5567859a3c693fb9886eb1f012ab8f2a47bef3db51" 2136 | 2137 | [[package]] 2138 | name = "nu-ansi-term" 2139 | version = "0.50.3" 2140 | source = "registry+https://github.com/rust-lang/crates.io-index" 2141 | checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" 2142 | dependencies = [ 2143 | "windows-sys 0.61.2", 2144 | ] 2145 | 2146 | [[package]] 2147 | name = "num-traits" 2148 | version = "0.2.19" 2149 | source = "registry+https://github.com/rust-lang/crates.io-index" 2150 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 2151 | dependencies = [ 2152 | "autocfg", 2153 | "libm", 2154 | ] 2155 | 2156 | [[package]] 2157 | name = "num_enum" 2158 | version = "0.7.5" 2159 | source = "registry+https://github.com/rust-lang/crates.io-index" 2160 | checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" 2161 | dependencies = [ 2162 | "num_enum_derive", 2163 | "rustversion", 2164 | ] 2165 | 2166 | [[package]] 2167 | name = "num_enum_derive" 2168 | version = "0.7.5" 2169 | source = "registry+https://github.com/rust-lang/crates.io-index" 2170 | checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" 2171 | dependencies = [ 2172 | "proc-macro-crate", 2173 | "proc-macro2", 2174 | "quote", 2175 | "syn", 2176 | ] 2177 | 2178 | [[package]] 2179 | name = "objc" 2180 | version = "0.2.7" 2181 | source = "registry+https://github.com/rust-lang/crates.io-index" 2182 | checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" 2183 | dependencies = [ 2184 | "malloc_buf", 2185 | ] 2186 | 2187 | [[package]] 2188 | name = "objc-sys" 2189 | version = "0.3.5" 2190 | source = "registry+https://github.com/rust-lang/crates.io-index" 2191 | checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" 2192 | 2193 | [[package]] 2194 | name = "objc2" 2195 | version = "0.5.2" 2196 | source = "registry+https://github.com/rust-lang/crates.io-index" 2197 | checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" 2198 | dependencies = [ 2199 | "objc-sys", 2200 | "objc2-encode", 2201 | ] 2202 | 2203 | [[package]] 2204 | name = "objc2-app-kit" 2205 | version = "0.2.2" 2206 | source = "registry+https://github.com/rust-lang/crates.io-index" 2207 | checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" 2208 | dependencies = [ 2209 | "bitflags 2.10.0", 2210 | "block2", 2211 | "libc", 2212 | "objc2", 2213 | "objc2-core-data", 2214 | "objc2-core-image", 2215 | "objc2-foundation", 2216 | "objc2-quartz-core", 2217 | ] 2218 | 2219 | [[package]] 2220 | name = "objc2-cloud-kit" 2221 | version = "0.2.2" 2222 | source = "registry+https://github.com/rust-lang/crates.io-index" 2223 | checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" 2224 | dependencies = [ 2225 | "bitflags 2.10.0", 2226 | "block2", 2227 | "objc2", 2228 | "objc2-core-location", 2229 | "objc2-foundation", 2230 | ] 2231 | 2232 | [[package]] 2233 | name = "objc2-contacts" 2234 | version = "0.2.2" 2235 | source = "registry+https://github.com/rust-lang/crates.io-index" 2236 | checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" 2237 | dependencies = [ 2238 | "block2", 2239 | "objc2", 2240 | "objc2-foundation", 2241 | ] 2242 | 2243 | [[package]] 2244 | name = "objc2-core-data" 2245 | version = "0.2.2" 2246 | source = "registry+https://github.com/rust-lang/crates.io-index" 2247 | checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" 2248 | dependencies = [ 2249 | "bitflags 2.10.0", 2250 | "block2", 2251 | "objc2", 2252 | "objc2-foundation", 2253 | ] 2254 | 2255 | [[package]] 2256 | name = "objc2-core-image" 2257 | version = "0.2.2" 2258 | source = "registry+https://github.com/rust-lang/crates.io-index" 2259 | checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" 2260 | dependencies = [ 2261 | "block2", 2262 | "objc2", 2263 | "objc2-foundation", 2264 | "objc2-metal", 2265 | ] 2266 | 2267 | [[package]] 2268 | name = "objc2-core-location" 2269 | version = "0.2.2" 2270 | source = "registry+https://github.com/rust-lang/crates.io-index" 2271 | checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" 2272 | dependencies = [ 2273 | "block2", 2274 | "objc2", 2275 | "objc2-contacts", 2276 | "objc2-foundation", 2277 | ] 2278 | 2279 | [[package]] 2280 | name = "objc2-encode" 2281 | version = "4.1.0" 2282 | source = "registry+https://github.com/rust-lang/crates.io-index" 2283 | checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" 2284 | 2285 | [[package]] 2286 | name = "objc2-foundation" 2287 | version = "0.2.2" 2288 | source = "registry+https://github.com/rust-lang/crates.io-index" 2289 | checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" 2290 | dependencies = [ 2291 | "bitflags 2.10.0", 2292 | "block2", 2293 | "dispatch", 2294 | "libc", 2295 | "objc2", 2296 | ] 2297 | 2298 | [[package]] 2299 | name = "objc2-link-presentation" 2300 | version = "0.2.2" 2301 | source = "registry+https://github.com/rust-lang/crates.io-index" 2302 | checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" 2303 | dependencies = [ 2304 | "block2", 2305 | "objc2", 2306 | "objc2-app-kit", 2307 | "objc2-foundation", 2308 | ] 2309 | 2310 | [[package]] 2311 | name = "objc2-metal" 2312 | version = "0.2.2" 2313 | source = "registry+https://github.com/rust-lang/crates.io-index" 2314 | checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" 2315 | dependencies = [ 2316 | "bitflags 2.10.0", 2317 | "block2", 2318 | "objc2", 2319 | "objc2-foundation", 2320 | ] 2321 | 2322 | [[package]] 2323 | name = "objc2-quartz-core" 2324 | version = "0.2.2" 2325 | source = "registry+https://github.com/rust-lang/crates.io-index" 2326 | checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" 2327 | dependencies = [ 2328 | "bitflags 2.10.0", 2329 | "block2", 2330 | "objc2", 2331 | "objc2-foundation", 2332 | "objc2-metal", 2333 | ] 2334 | 2335 | [[package]] 2336 | name = "objc2-symbols" 2337 | version = "0.2.2" 2338 | source = "registry+https://github.com/rust-lang/crates.io-index" 2339 | checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" 2340 | dependencies = [ 2341 | "objc2", 2342 | "objc2-foundation", 2343 | ] 2344 | 2345 | [[package]] 2346 | name = "objc2-ui-kit" 2347 | version = "0.2.2" 2348 | source = "registry+https://github.com/rust-lang/crates.io-index" 2349 | checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" 2350 | dependencies = [ 2351 | "bitflags 2.10.0", 2352 | "block2", 2353 | "objc2", 2354 | "objc2-cloud-kit", 2355 | "objc2-core-data", 2356 | "objc2-core-image", 2357 | "objc2-core-location", 2358 | "objc2-foundation", 2359 | "objc2-link-presentation", 2360 | "objc2-quartz-core", 2361 | "objc2-symbols", 2362 | "objc2-uniform-type-identifiers", 2363 | "objc2-user-notifications", 2364 | ] 2365 | 2366 | [[package]] 2367 | name = "objc2-uniform-type-identifiers" 2368 | version = "0.2.2" 2369 | source = "registry+https://github.com/rust-lang/crates.io-index" 2370 | checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" 2371 | dependencies = [ 2372 | "block2", 2373 | "objc2", 2374 | "objc2-foundation", 2375 | ] 2376 | 2377 | [[package]] 2378 | name = "objc2-user-notifications" 2379 | version = "0.2.2" 2380 | source = "registry+https://github.com/rust-lang/crates.io-index" 2381 | checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" 2382 | dependencies = [ 2383 | "bitflags 2.10.0", 2384 | "block2", 2385 | "objc2", 2386 | "objc2-core-location", 2387 | "objc2-foundation", 2388 | ] 2389 | 2390 | [[package]] 2391 | name = "offset-allocator" 2392 | version = "0.2.0" 2393 | source = "registry+https://github.com/rust-lang/crates.io-index" 2394 | checksum = "e234d535da3521eb95106f40f0b73483d80bfb3aacf27c40d7e2b72f1a3e00a2" 2395 | dependencies = [ 2396 | "log", 2397 | "nonmax", 2398 | ] 2399 | 2400 | [[package]] 2401 | name = "once_cell" 2402 | version = "1.21.3" 2403 | source = "registry+https://github.com/rust-lang/crates.io-index" 2404 | checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 2405 | 2406 | [[package]] 2407 | name = "orbclient" 2408 | version = "0.3.48" 2409 | source = "registry+https://github.com/rust-lang/crates.io-index" 2410 | checksum = "ba0b26cec2e24f08ed8bb31519a9333140a6599b867dac464bb150bdb796fd43" 2411 | dependencies = [ 2412 | "libredox", 2413 | ] 2414 | 2415 | [[package]] 2416 | name = "ordered-float" 2417 | version = "5.0.0" 2418 | source = "registry+https://github.com/rust-lang/crates.io-index" 2419 | checksum = "e2c1f9f56e534ac6a9b8a4600bdf0f530fb393b5f393e7b4d03489c3cf0c3f01" 2420 | dependencies = [ 2421 | "num-traits", 2422 | ] 2423 | 2424 | [[package]] 2425 | name = "parking" 2426 | version = "2.2.1" 2427 | source = "registry+https://github.com/rust-lang/crates.io-index" 2428 | checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" 2429 | 2430 | [[package]] 2431 | name = "parking_lot" 2432 | version = "0.12.5" 2433 | source = "registry+https://github.com/rust-lang/crates.io-index" 2434 | checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" 2435 | dependencies = [ 2436 | "lock_api", 2437 | "parking_lot_core", 2438 | ] 2439 | 2440 | [[package]] 2441 | name = "parking_lot_core" 2442 | version = "0.9.12" 2443 | source = "registry+https://github.com/rust-lang/crates.io-index" 2444 | checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" 2445 | dependencies = [ 2446 | "cfg-if", 2447 | "libc", 2448 | "redox_syscall 0.5.18", 2449 | "smallvec", 2450 | "windows-link 0.2.1", 2451 | ] 2452 | 2453 | [[package]] 2454 | name = "paste" 2455 | version = "1.0.15" 2456 | source = "registry+https://github.com/rust-lang/crates.io-index" 2457 | checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" 2458 | 2459 | [[package]] 2460 | name = "percent-encoding" 2461 | version = "2.3.2" 2462 | source = "registry+https://github.com/rust-lang/crates.io-index" 2463 | checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" 2464 | 2465 | [[package]] 2466 | name = "pin-project" 2467 | version = "1.1.10" 2468 | source = "registry+https://github.com/rust-lang/crates.io-index" 2469 | checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" 2470 | dependencies = [ 2471 | "pin-project-internal", 2472 | ] 2473 | 2474 | [[package]] 2475 | name = "pin-project-internal" 2476 | version = "1.1.10" 2477 | source = "registry+https://github.com/rust-lang/crates.io-index" 2478 | checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" 2479 | dependencies = [ 2480 | "proc-macro2", 2481 | "quote", 2482 | "syn", 2483 | ] 2484 | 2485 | [[package]] 2486 | name = "pin-project-lite" 2487 | version = "0.2.16" 2488 | source = "registry+https://github.com/rust-lang/crates.io-index" 2489 | checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" 2490 | 2491 | [[package]] 2492 | name = "piper" 2493 | version = "0.2.4" 2494 | source = "registry+https://github.com/rust-lang/crates.io-index" 2495 | checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" 2496 | dependencies = [ 2497 | "atomic-waker", 2498 | "fastrand", 2499 | "futures-io", 2500 | ] 2501 | 2502 | [[package]] 2503 | name = "pkg-config" 2504 | version = "0.3.32" 2505 | source = "registry+https://github.com/rust-lang/crates.io-index" 2506 | checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" 2507 | 2508 | [[package]] 2509 | name = "polling" 2510 | version = "3.11.0" 2511 | source = "registry+https://github.com/rust-lang/crates.io-index" 2512 | checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" 2513 | dependencies = [ 2514 | "cfg-if", 2515 | "concurrent-queue", 2516 | "hermit-abi", 2517 | "pin-project-lite", 2518 | "rustix 1.1.2", 2519 | "windows-sys 0.61.2", 2520 | ] 2521 | 2522 | [[package]] 2523 | name = "portable-atomic" 2524 | version = "1.11.1" 2525 | source = "registry+https://github.com/rust-lang/crates.io-index" 2526 | checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" 2527 | 2528 | [[package]] 2529 | name = "portable-atomic-util" 2530 | version = "0.2.4" 2531 | source = "registry+https://github.com/rust-lang/crates.io-index" 2532 | checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" 2533 | dependencies = [ 2534 | "portable-atomic", 2535 | ] 2536 | 2537 | [[package]] 2538 | name = "pp-rs" 2539 | version = "0.2.1" 2540 | source = "registry+https://github.com/rust-lang/crates.io-index" 2541 | checksum = "bb458bb7f6e250e6eb79d5026badc10a3ebb8f9a15d1fff0f13d17c71f4d6dee" 2542 | dependencies = [ 2543 | "unicode-xid", 2544 | ] 2545 | 2546 | [[package]] 2547 | name = "ppv-lite86" 2548 | version = "0.2.21" 2549 | source = "registry+https://github.com/rust-lang/crates.io-index" 2550 | checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" 2551 | dependencies = [ 2552 | "zerocopy", 2553 | ] 2554 | 2555 | [[package]] 2556 | name = "presser" 2557 | version = "0.3.1" 2558 | source = "registry+https://github.com/rust-lang/crates.io-index" 2559 | checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" 2560 | 2561 | [[package]] 2562 | name = "proc-macro-crate" 2563 | version = "3.4.0" 2564 | source = "registry+https://github.com/rust-lang/crates.io-index" 2565 | checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" 2566 | dependencies = [ 2567 | "toml_edit", 2568 | ] 2569 | 2570 | [[package]] 2571 | name = "proc-macro2" 2572 | version = "1.0.103" 2573 | source = "registry+https://github.com/rust-lang/crates.io-index" 2574 | checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" 2575 | dependencies = [ 2576 | "unicode-ident", 2577 | ] 2578 | 2579 | [[package]] 2580 | name = "profiling" 2581 | version = "1.0.17" 2582 | source = "registry+https://github.com/rust-lang/crates.io-index" 2583 | checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773" 2584 | 2585 | [[package]] 2586 | name = "pxfm" 2587 | version = "0.1.25" 2588 | source = "registry+https://github.com/rust-lang/crates.io-index" 2589 | checksum = "a3cbdf373972bf78df4d3b518d07003938e2c7d1fb5891e55f9cb6df57009d84" 2590 | dependencies = [ 2591 | "num-traits", 2592 | ] 2593 | 2594 | [[package]] 2595 | name = "quote" 2596 | version = "1.0.41" 2597 | source = "registry+https://github.com/rust-lang/crates.io-index" 2598 | checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" 2599 | dependencies = [ 2600 | "proc-macro2", 2601 | ] 2602 | 2603 | [[package]] 2604 | name = "r-efi" 2605 | version = "5.3.0" 2606 | source = "registry+https://github.com/rust-lang/crates.io-index" 2607 | checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" 2608 | 2609 | [[package]] 2610 | name = "radsort" 2611 | version = "0.1.1" 2612 | source = "registry+https://github.com/rust-lang/crates.io-index" 2613 | checksum = "019b4b213425016d7d84a153c4c73afb0946fbb4840e4eece7ba8848b9d6da22" 2614 | 2615 | [[package]] 2616 | name = "rand" 2617 | version = "0.9.2" 2618 | source = "registry+https://github.com/rust-lang/crates.io-index" 2619 | checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" 2620 | dependencies = [ 2621 | "rand_chacha", 2622 | "rand_core", 2623 | ] 2624 | 2625 | [[package]] 2626 | name = "rand_chacha" 2627 | version = "0.9.0" 2628 | source = "registry+https://github.com/rust-lang/crates.io-index" 2629 | checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" 2630 | dependencies = [ 2631 | "ppv-lite86", 2632 | "rand_core", 2633 | ] 2634 | 2635 | [[package]] 2636 | name = "rand_core" 2637 | version = "0.9.3" 2638 | source = "registry+https://github.com/rust-lang/crates.io-index" 2639 | checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" 2640 | dependencies = [ 2641 | "getrandom", 2642 | ] 2643 | 2644 | [[package]] 2645 | name = "rand_distr" 2646 | version = "0.5.1" 2647 | source = "registry+https://github.com/rust-lang/crates.io-index" 2648 | checksum = "6a8615d50dcf34fa31f7ab52692afec947c4dd0ab803cc87cb3b0b4570ff7463" 2649 | dependencies = [ 2650 | "num-traits", 2651 | "rand", 2652 | ] 2653 | 2654 | [[package]] 2655 | name = "range-alloc" 2656 | version = "0.1.4" 2657 | source = "registry+https://github.com/rust-lang/crates.io-index" 2658 | checksum = "c3d6831663a5098ea164f89cff59c6284e95f4e3c76ce9848d4529f5ccca9bde" 2659 | 2660 | [[package]] 2661 | name = "raw-window-handle" 2662 | version = "0.6.2" 2663 | source = "registry+https://github.com/rust-lang/crates.io-index" 2664 | checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" 2665 | 2666 | [[package]] 2667 | name = "rectangle-pack" 2668 | version = "0.4.2" 2669 | source = "registry+https://github.com/rust-lang/crates.io-index" 2670 | checksum = "a0d463f2884048e7153449a55166f91028d5b0ea53c79377099ce4e8cf0cf9bb" 2671 | 2672 | [[package]] 2673 | name = "redox_syscall" 2674 | version = "0.4.1" 2675 | source = "registry+https://github.com/rust-lang/crates.io-index" 2676 | checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" 2677 | dependencies = [ 2678 | "bitflags 1.3.2", 2679 | ] 2680 | 2681 | [[package]] 2682 | name = "redox_syscall" 2683 | version = "0.5.18" 2684 | source = "registry+https://github.com/rust-lang/crates.io-index" 2685 | checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" 2686 | dependencies = [ 2687 | "bitflags 2.10.0", 2688 | ] 2689 | 2690 | [[package]] 2691 | name = "regex" 2692 | version = "1.12.2" 2693 | source = "registry+https://github.com/rust-lang/crates.io-index" 2694 | checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" 2695 | dependencies = [ 2696 | "aho-corasick", 2697 | "memchr", 2698 | "regex-automata", 2699 | "regex-syntax", 2700 | ] 2701 | 2702 | [[package]] 2703 | name = "regex-automata" 2704 | version = "0.4.13" 2705 | source = "registry+https://github.com/rust-lang/crates.io-index" 2706 | checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" 2707 | dependencies = [ 2708 | "aho-corasick", 2709 | "memchr", 2710 | "regex-syntax", 2711 | ] 2712 | 2713 | [[package]] 2714 | name = "regex-syntax" 2715 | version = "0.8.8" 2716 | source = "registry+https://github.com/rust-lang/crates.io-index" 2717 | checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" 2718 | 2719 | [[package]] 2720 | name = "renderdoc-sys" 2721 | version = "1.1.0" 2722 | source = "registry+https://github.com/rust-lang/crates.io-index" 2723 | checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" 2724 | 2725 | [[package]] 2726 | name = "ron" 2727 | version = "0.10.1" 2728 | source = "registry+https://github.com/rust-lang/crates.io-index" 2729 | checksum = "beceb6f7bf81c73e73aeef6dd1356d9a1b2b4909e1f0fc3e59b034f9572d7b7f" 2730 | dependencies = [ 2731 | "base64", 2732 | "bitflags 2.10.0", 2733 | "serde", 2734 | "serde_derive", 2735 | "unicode-ident", 2736 | ] 2737 | 2738 | [[package]] 2739 | name = "rustc-hash" 2740 | version = "1.1.0" 2741 | source = "registry+https://github.com/rust-lang/crates.io-index" 2742 | checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" 2743 | 2744 | [[package]] 2745 | name = "rustix" 2746 | version = "0.38.44" 2747 | source = "registry+https://github.com/rust-lang/crates.io-index" 2748 | checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" 2749 | dependencies = [ 2750 | "bitflags 2.10.0", 2751 | "errno", 2752 | "libc", 2753 | "linux-raw-sys 0.4.15", 2754 | "windows-sys 0.59.0", 2755 | ] 2756 | 2757 | [[package]] 2758 | name = "rustix" 2759 | version = "1.1.2" 2760 | source = "registry+https://github.com/rust-lang/crates.io-index" 2761 | checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" 2762 | dependencies = [ 2763 | "bitflags 2.10.0", 2764 | "errno", 2765 | "libc", 2766 | "linux-raw-sys 0.11.0", 2767 | "windows-sys 0.61.2", 2768 | ] 2769 | 2770 | [[package]] 2771 | name = "rustversion" 2772 | version = "1.0.22" 2773 | source = "registry+https://github.com/rust-lang/crates.io-index" 2774 | checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" 2775 | 2776 | [[package]] 2777 | name = "same-file" 2778 | version = "1.0.6" 2779 | source = "registry+https://github.com/rust-lang/crates.io-index" 2780 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 2781 | dependencies = [ 2782 | "winapi-util", 2783 | ] 2784 | 2785 | [[package]] 2786 | name = "scopeguard" 2787 | version = "1.2.0" 2788 | source = "registry+https://github.com/rust-lang/crates.io-index" 2789 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 2790 | 2791 | [[package]] 2792 | name = "send_wrapper" 2793 | version = "0.6.0" 2794 | source = "registry+https://github.com/rust-lang/crates.io-index" 2795 | checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" 2796 | 2797 | [[package]] 2798 | name = "serde" 2799 | version = "1.0.228" 2800 | source = "registry+https://github.com/rust-lang/crates.io-index" 2801 | checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" 2802 | dependencies = [ 2803 | "serde_core", 2804 | "serde_derive", 2805 | ] 2806 | 2807 | [[package]] 2808 | name = "serde_core" 2809 | version = "1.0.228" 2810 | source = "registry+https://github.com/rust-lang/crates.io-index" 2811 | checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" 2812 | dependencies = [ 2813 | "serde_derive", 2814 | ] 2815 | 2816 | [[package]] 2817 | name = "serde_derive" 2818 | version = "1.0.228" 2819 | source = "registry+https://github.com/rust-lang/crates.io-index" 2820 | checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" 2821 | dependencies = [ 2822 | "proc-macro2", 2823 | "quote", 2824 | "syn", 2825 | ] 2826 | 2827 | [[package]] 2828 | name = "sharded-slab" 2829 | version = "0.1.7" 2830 | source = "registry+https://github.com/rust-lang/crates.io-index" 2831 | checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" 2832 | dependencies = [ 2833 | "lazy_static", 2834 | ] 2835 | 2836 | [[package]] 2837 | name = "shlex" 2838 | version = "1.3.0" 2839 | source = "registry+https://github.com/rust-lang/crates.io-index" 2840 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 2841 | 2842 | [[package]] 2843 | name = "slab" 2844 | version = "0.4.11" 2845 | source = "registry+https://github.com/rust-lang/crates.io-index" 2846 | checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" 2847 | 2848 | [[package]] 2849 | name = "slotmap" 2850 | version = "1.0.7" 2851 | source = "registry+https://github.com/rust-lang/crates.io-index" 2852 | checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" 2853 | dependencies = [ 2854 | "version_check", 2855 | ] 2856 | 2857 | [[package]] 2858 | name = "smallvec" 2859 | version = "1.15.1" 2860 | source = "registry+https://github.com/rust-lang/crates.io-index" 2861 | checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" 2862 | 2863 | [[package]] 2864 | name = "smol_str" 2865 | version = "0.2.2" 2866 | source = "registry+https://github.com/rust-lang/crates.io-index" 2867 | checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" 2868 | dependencies = [ 2869 | "serde", 2870 | ] 2871 | 2872 | [[package]] 2873 | name = "spin" 2874 | version = "0.10.0" 2875 | source = "registry+https://github.com/rust-lang/crates.io-index" 2876 | checksum = "d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591" 2877 | dependencies = [ 2878 | "portable-atomic", 2879 | ] 2880 | 2881 | [[package]] 2882 | name = "spirv" 2883 | version = "0.3.0+sdk-1.3.268.0" 2884 | source = "registry+https://github.com/rust-lang/crates.io-index" 2885 | checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844" 2886 | dependencies = [ 2887 | "bitflags 2.10.0", 2888 | ] 2889 | 2890 | [[package]] 2891 | name = "stable_deref_trait" 2892 | version = "1.2.1" 2893 | source = "registry+https://github.com/rust-lang/crates.io-index" 2894 | checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" 2895 | 2896 | [[package]] 2897 | name = "stackfuture" 2898 | version = "0.3.0" 2899 | source = "registry+https://github.com/rust-lang/crates.io-index" 2900 | checksum = "6eae92052b72ef70dafa16eddbabffc77e5ca3574be2f7bc1127b36f0a7ad7f2" 2901 | 2902 | [[package]] 2903 | name = "static_assertions" 2904 | version = "1.1.0" 2905 | source = "registry+https://github.com/rust-lang/crates.io-index" 2906 | checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 2907 | 2908 | [[package]] 2909 | name = "svg_fmt" 2910 | version = "0.4.5" 2911 | source = "registry+https://github.com/rust-lang/crates.io-index" 2912 | checksum = "0193cc4331cfd2f3d2011ef287590868599a2f33c3e69bc22c1a3d3acf9e02fb" 2913 | 2914 | [[package]] 2915 | name = "syn" 2916 | version = "2.0.108" 2917 | source = "registry+https://github.com/rust-lang/crates.io-index" 2918 | checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917" 2919 | dependencies = [ 2920 | "proc-macro2", 2921 | "quote", 2922 | "unicode-ident", 2923 | ] 2924 | 2925 | [[package]] 2926 | name = "termcolor" 2927 | version = "1.4.1" 2928 | source = "registry+https://github.com/rust-lang/crates.io-index" 2929 | checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" 2930 | dependencies = [ 2931 | "winapi-util", 2932 | ] 2933 | 2934 | [[package]] 2935 | name = "thiserror" 2936 | version = "1.0.69" 2937 | source = "registry+https://github.com/rust-lang/crates.io-index" 2938 | checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 2939 | dependencies = [ 2940 | "thiserror-impl 1.0.69", 2941 | ] 2942 | 2943 | [[package]] 2944 | name = "thiserror" 2945 | version = "2.0.17" 2946 | source = "registry+https://github.com/rust-lang/crates.io-index" 2947 | checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" 2948 | dependencies = [ 2949 | "thiserror-impl 2.0.17", 2950 | ] 2951 | 2952 | [[package]] 2953 | name = "thiserror-impl" 2954 | version = "1.0.69" 2955 | source = "registry+https://github.com/rust-lang/crates.io-index" 2956 | checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 2957 | dependencies = [ 2958 | "proc-macro2", 2959 | "quote", 2960 | "syn", 2961 | ] 2962 | 2963 | [[package]] 2964 | name = "thiserror-impl" 2965 | version = "2.0.17" 2966 | source = "registry+https://github.com/rust-lang/crates.io-index" 2967 | checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" 2968 | dependencies = [ 2969 | "proc-macro2", 2970 | "quote", 2971 | "syn", 2972 | ] 2973 | 2974 | [[package]] 2975 | name = "thread_local" 2976 | version = "1.1.9" 2977 | source = "registry+https://github.com/rust-lang/crates.io-index" 2978 | checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" 2979 | dependencies = [ 2980 | "cfg-if", 2981 | ] 2982 | 2983 | [[package]] 2984 | name = "tinyvec" 2985 | version = "1.10.0" 2986 | source = "registry+https://github.com/rust-lang/crates.io-index" 2987 | checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" 2988 | dependencies = [ 2989 | "tinyvec_macros", 2990 | ] 2991 | 2992 | [[package]] 2993 | name = "tinyvec_macros" 2994 | version = "0.1.1" 2995 | source = "registry+https://github.com/rust-lang/crates.io-index" 2996 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 2997 | 2998 | [[package]] 2999 | name = "tokio" 3000 | version = "1.48.0" 3001 | source = "registry+https://github.com/rust-lang/crates.io-index" 3002 | checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" 3003 | dependencies = [ 3004 | "pin-project-lite", 3005 | ] 3006 | 3007 | [[package]] 3008 | name = "toml_datetime" 3009 | version = "0.7.3" 3010 | source = "registry+https://github.com/rust-lang/crates.io-index" 3011 | checksum = "f2cdb639ebbc97961c51720f858597f7f24c4fc295327923af55b74c3c724533" 3012 | dependencies = [ 3013 | "serde_core", 3014 | ] 3015 | 3016 | [[package]] 3017 | name = "toml_edit" 3018 | version = "0.23.7" 3019 | source = "registry+https://github.com/rust-lang/crates.io-index" 3020 | checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" 3021 | dependencies = [ 3022 | "indexmap", 3023 | "toml_datetime", 3024 | "toml_parser", 3025 | "winnow", 3026 | ] 3027 | 3028 | [[package]] 3029 | name = "toml_parser" 3030 | version = "1.0.4" 3031 | source = "registry+https://github.com/rust-lang/crates.io-index" 3032 | checksum = "c0cbe268d35bdb4bb5a56a2de88d0ad0eb70af5384a99d648cd4b3d04039800e" 3033 | dependencies = [ 3034 | "winnow", 3035 | ] 3036 | 3037 | [[package]] 3038 | name = "tracing" 3039 | version = "0.1.41" 3040 | source = "registry+https://github.com/rust-lang/crates.io-index" 3041 | checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" 3042 | dependencies = [ 3043 | "pin-project-lite", 3044 | "tracing-attributes", 3045 | "tracing-core", 3046 | ] 3047 | 3048 | [[package]] 3049 | name = "tracing-attributes" 3050 | version = "0.1.30" 3051 | source = "registry+https://github.com/rust-lang/crates.io-index" 3052 | checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" 3053 | dependencies = [ 3054 | "proc-macro2", 3055 | "quote", 3056 | "syn", 3057 | ] 3058 | 3059 | [[package]] 3060 | name = "tracing-core" 3061 | version = "0.1.34" 3062 | source = "registry+https://github.com/rust-lang/crates.io-index" 3063 | checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" 3064 | dependencies = [ 3065 | "once_cell", 3066 | "valuable", 3067 | ] 3068 | 3069 | [[package]] 3070 | name = "tracing-log" 3071 | version = "0.2.0" 3072 | source = "registry+https://github.com/rust-lang/crates.io-index" 3073 | checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" 3074 | dependencies = [ 3075 | "log", 3076 | "once_cell", 3077 | "tracing-core", 3078 | ] 3079 | 3080 | [[package]] 3081 | name = "tracing-oslog" 3082 | version = "0.3.0" 3083 | source = "registry+https://github.com/rust-lang/crates.io-index" 3084 | checksum = "d76902d2a8d5f9f55a81155c08971734071968c90f2d9bfe645fe700579b2950" 3085 | dependencies = [ 3086 | "cc", 3087 | "cfg-if", 3088 | "tracing-core", 3089 | "tracing-subscriber", 3090 | ] 3091 | 3092 | [[package]] 3093 | name = "tracing-subscriber" 3094 | version = "0.3.20" 3095 | source = "registry+https://github.com/rust-lang/crates.io-index" 3096 | checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" 3097 | dependencies = [ 3098 | "matchers", 3099 | "nu-ansi-term", 3100 | "once_cell", 3101 | "regex-automata", 3102 | "sharded-slab", 3103 | "smallvec", 3104 | "thread_local", 3105 | "tracing", 3106 | "tracing-core", 3107 | "tracing-log", 3108 | ] 3109 | 3110 | [[package]] 3111 | name = "tracing-wasm" 3112 | version = "0.2.1" 3113 | source = "registry+https://github.com/rust-lang/crates.io-index" 3114 | checksum = "4575c663a174420fa2d78f4108ff68f65bf2fbb7dd89f33749b6e826b3626e07" 3115 | dependencies = [ 3116 | "tracing", 3117 | "tracing-subscriber", 3118 | "wasm-bindgen", 3119 | ] 3120 | 3121 | [[package]] 3122 | name = "typeid" 3123 | version = "1.0.3" 3124 | source = "registry+https://github.com/rust-lang/crates.io-index" 3125 | checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" 3126 | 3127 | [[package]] 3128 | name = "typewit" 3129 | version = "1.14.2" 3130 | source = "registry+https://github.com/rust-lang/crates.io-index" 3131 | checksum = "f8c1ae7cc0fdb8b842d65d127cb981574b0d2b249b74d1c7a2986863dc134f71" 3132 | 3133 | [[package]] 3134 | name = "unicode-ident" 3135 | version = "1.0.20" 3136 | source = "registry+https://github.com/rust-lang/crates.io-index" 3137 | checksum = "462eeb75aeb73aea900253ce739c8e18a67423fadf006037cd3ff27e82748a06" 3138 | 3139 | [[package]] 3140 | name = "unicode-segmentation" 3141 | version = "1.12.0" 3142 | source = "registry+https://github.com/rust-lang/crates.io-index" 3143 | checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" 3144 | 3145 | [[package]] 3146 | name = "unicode-width" 3147 | version = "0.2.2" 3148 | source = "registry+https://github.com/rust-lang/crates.io-index" 3149 | checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" 3150 | 3151 | [[package]] 3152 | name = "unicode-xid" 3153 | version = "0.2.6" 3154 | source = "registry+https://github.com/rust-lang/crates.io-index" 3155 | checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" 3156 | 3157 | [[package]] 3158 | name = "uuid" 3159 | version = "1.18.1" 3160 | source = "registry+https://github.com/rust-lang/crates.io-index" 3161 | checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" 3162 | dependencies = [ 3163 | "getrandom", 3164 | "js-sys", 3165 | "serde", 3166 | "wasm-bindgen", 3167 | ] 3168 | 3169 | [[package]] 3170 | name = "valuable" 3171 | version = "0.1.1" 3172 | source = "registry+https://github.com/rust-lang/crates.io-index" 3173 | checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" 3174 | 3175 | [[package]] 3176 | name = "variadics_please" 3177 | version = "1.1.0" 3178 | source = "registry+https://github.com/rust-lang/crates.io-index" 3179 | checksum = "41b6d82be61465f97d42bd1d15bf20f3b0a3a0905018f38f9d6f6962055b0b5c" 3180 | dependencies = [ 3181 | "proc-macro2", 3182 | "quote", 3183 | "syn", 3184 | ] 3185 | 3186 | [[package]] 3187 | name = "version_check" 3188 | version = "0.9.5" 3189 | source = "registry+https://github.com/rust-lang/crates.io-index" 3190 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 3191 | 3192 | [[package]] 3193 | name = "walkdir" 3194 | version = "2.5.0" 3195 | source = "registry+https://github.com/rust-lang/crates.io-index" 3196 | checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" 3197 | dependencies = [ 3198 | "same-file", 3199 | "winapi-util", 3200 | ] 3201 | 3202 | [[package]] 3203 | name = "wasip2" 3204 | version = "1.0.1+wasi-0.2.4" 3205 | source = "registry+https://github.com/rust-lang/crates.io-index" 3206 | checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" 3207 | dependencies = [ 3208 | "wit-bindgen", 3209 | ] 3210 | 3211 | [[package]] 3212 | name = "wasm-bindgen" 3213 | version = "0.2.104" 3214 | source = "registry+https://github.com/rust-lang/crates.io-index" 3215 | checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" 3216 | dependencies = [ 3217 | "cfg-if", 3218 | "once_cell", 3219 | "rustversion", 3220 | "wasm-bindgen-macro", 3221 | "wasm-bindgen-shared", 3222 | ] 3223 | 3224 | [[package]] 3225 | name = "wasm-bindgen-backend" 3226 | version = "0.2.104" 3227 | source = "registry+https://github.com/rust-lang/crates.io-index" 3228 | checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" 3229 | dependencies = [ 3230 | "bumpalo", 3231 | "log", 3232 | "proc-macro2", 3233 | "quote", 3234 | "syn", 3235 | "wasm-bindgen-shared", 3236 | ] 3237 | 3238 | [[package]] 3239 | name = "wasm-bindgen-futures" 3240 | version = "0.4.54" 3241 | source = "registry+https://github.com/rust-lang/crates.io-index" 3242 | checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" 3243 | dependencies = [ 3244 | "cfg-if", 3245 | "js-sys", 3246 | "once_cell", 3247 | "wasm-bindgen", 3248 | "web-sys", 3249 | ] 3250 | 3251 | [[package]] 3252 | name = "wasm-bindgen-macro" 3253 | version = "0.2.104" 3254 | source = "registry+https://github.com/rust-lang/crates.io-index" 3255 | checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" 3256 | dependencies = [ 3257 | "quote", 3258 | "wasm-bindgen-macro-support", 3259 | ] 3260 | 3261 | [[package]] 3262 | name = "wasm-bindgen-macro-support" 3263 | version = "0.2.104" 3264 | source = "registry+https://github.com/rust-lang/crates.io-index" 3265 | checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" 3266 | dependencies = [ 3267 | "proc-macro2", 3268 | "quote", 3269 | "syn", 3270 | "wasm-bindgen-backend", 3271 | "wasm-bindgen-shared", 3272 | ] 3273 | 3274 | [[package]] 3275 | name = "wasm-bindgen-shared" 3276 | version = "0.2.104" 3277 | source = "registry+https://github.com/rust-lang/crates.io-index" 3278 | checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" 3279 | dependencies = [ 3280 | "unicode-ident", 3281 | ] 3282 | 3283 | [[package]] 3284 | name = "web-sys" 3285 | version = "0.3.81" 3286 | source = "registry+https://github.com/rust-lang/crates.io-index" 3287 | checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" 3288 | dependencies = [ 3289 | "js-sys", 3290 | "wasm-bindgen", 3291 | ] 3292 | 3293 | [[package]] 3294 | name = "web-time" 3295 | version = "1.1.0" 3296 | source = "registry+https://github.com/rust-lang/crates.io-index" 3297 | checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" 3298 | dependencies = [ 3299 | "js-sys", 3300 | "wasm-bindgen", 3301 | ] 3302 | 3303 | [[package]] 3304 | name = "wgpu" 3305 | version = "26.0.1" 3306 | source = "registry+https://github.com/rust-lang/crates.io-index" 3307 | checksum = "70b6ff82bbf6e9206828e1a3178e851f8c20f1c9028e74dd3a8090741ccd5798" 3308 | dependencies = [ 3309 | "arrayvec", 3310 | "bitflags 2.10.0", 3311 | "cfg-if", 3312 | "cfg_aliases", 3313 | "document-features", 3314 | "hashbrown 0.15.5", 3315 | "log", 3316 | "naga", 3317 | "portable-atomic", 3318 | "profiling", 3319 | "raw-window-handle", 3320 | "smallvec", 3321 | "static_assertions", 3322 | "wgpu-core", 3323 | "wgpu-hal", 3324 | "wgpu-types", 3325 | ] 3326 | 3327 | [[package]] 3328 | name = "wgpu-core" 3329 | version = "26.0.1" 3330 | source = "registry+https://github.com/rust-lang/crates.io-index" 3331 | checksum = "d5f62f1053bd28c2268f42916f31588f81f64796e2ff91b81293515017ca8bd9" 3332 | dependencies = [ 3333 | "arrayvec", 3334 | "bit-set", 3335 | "bit-vec", 3336 | "bitflags 2.10.0", 3337 | "cfg_aliases", 3338 | "document-features", 3339 | "hashbrown 0.15.5", 3340 | "indexmap", 3341 | "log", 3342 | "naga", 3343 | "once_cell", 3344 | "parking_lot", 3345 | "portable-atomic", 3346 | "profiling", 3347 | "raw-window-handle", 3348 | "rustc-hash", 3349 | "smallvec", 3350 | "thiserror 2.0.17", 3351 | "wgpu-core-deps-apple", 3352 | "wgpu-core-deps-windows-linux-android", 3353 | "wgpu-hal", 3354 | "wgpu-types", 3355 | ] 3356 | 3357 | [[package]] 3358 | name = "wgpu-core-deps-apple" 3359 | version = "26.0.0" 3360 | source = "registry+https://github.com/rust-lang/crates.io-index" 3361 | checksum = "18ae5fbde6a4cbebae38358aa73fcd6e0f15c6144b67ef5dc91ded0db125dbdf" 3362 | dependencies = [ 3363 | "wgpu-hal", 3364 | ] 3365 | 3366 | [[package]] 3367 | name = "wgpu-core-deps-windows-linux-android" 3368 | version = "26.0.0" 3369 | source = "registry+https://github.com/rust-lang/crates.io-index" 3370 | checksum = "720a5cb9d12b3d337c15ff0e24d3e97ed11490ff3f7506e7f3d98c68fa5d6f14" 3371 | dependencies = [ 3372 | "wgpu-hal", 3373 | ] 3374 | 3375 | [[package]] 3376 | name = "wgpu-hal" 3377 | version = "26.0.6" 3378 | source = "registry+https://github.com/rust-lang/crates.io-index" 3379 | checksum = "a8d0e67224cc7305b3b4eb2cc57ca4c4c3afc665c1d1bee162ea806e19c47bdd" 3380 | dependencies = [ 3381 | "android_system_properties", 3382 | "arrayvec", 3383 | "ash", 3384 | "bit-set", 3385 | "bitflags 2.10.0", 3386 | "block", 3387 | "bytemuck", 3388 | "cfg-if", 3389 | "cfg_aliases", 3390 | "core-graphics-types 0.2.0", 3391 | "gpu-alloc", 3392 | "gpu-allocator", 3393 | "gpu-descriptor", 3394 | "hashbrown 0.15.5", 3395 | "libc", 3396 | "libloading", 3397 | "log", 3398 | "metal", 3399 | "naga", 3400 | "objc", 3401 | "ordered-float", 3402 | "parking_lot", 3403 | "portable-atomic", 3404 | "portable-atomic-util", 3405 | "profiling", 3406 | "range-alloc", 3407 | "raw-window-handle", 3408 | "renderdoc-sys", 3409 | "smallvec", 3410 | "thiserror 2.0.17", 3411 | "wgpu-types", 3412 | "windows 0.58.0", 3413 | "windows-core 0.58.0", 3414 | ] 3415 | 3416 | [[package]] 3417 | name = "wgpu-types" 3418 | version = "26.0.0" 3419 | source = "registry+https://github.com/rust-lang/crates.io-index" 3420 | checksum = "eca7a8d8af57c18f57d393601a1fb159ace8b2328f1b6b5f80893f7d672c9ae2" 3421 | dependencies = [ 3422 | "bitflags 2.10.0", 3423 | "bytemuck", 3424 | "js-sys", 3425 | "log", 3426 | "serde", 3427 | "thiserror 2.0.17", 3428 | "web-sys", 3429 | ] 3430 | 3431 | [[package]] 3432 | name = "winapi-util" 3433 | version = "0.1.11" 3434 | source = "registry+https://github.com/rust-lang/crates.io-index" 3435 | checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" 3436 | dependencies = [ 3437 | "windows-sys 0.61.2", 3438 | ] 3439 | 3440 | [[package]] 3441 | name = "windows" 3442 | version = "0.58.0" 3443 | source = "registry+https://github.com/rust-lang/crates.io-index" 3444 | checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" 3445 | dependencies = [ 3446 | "windows-core 0.58.0", 3447 | "windows-targets 0.52.6", 3448 | ] 3449 | 3450 | [[package]] 3451 | name = "windows" 3452 | version = "0.61.3" 3453 | source = "registry+https://github.com/rust-lang/crates.io-index" 3454 | checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" 3455 | dependencies = [ 3456 | "windows-collections", 3457 | "windows-core 0.61.2", 3458 | "windows-future", 3459 | "windows-link 0.1.3", 3460 | "windows-numerics", 3461 | ] 3462 | 3463 | [[package]] 3464 | name = "windows-collections" 3465 | version = "0.2.0" 3466 | source = "registry+https://github.com/rust-lang/crates.io-index" 3467 | checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" 3468 | dependencies = [ 3469 | "windows-core 0.61.2", 3470 | ] 3471 | 3472 | [[package]] 3473 | name = "windows-core" 3474 | version = "0.58.0" 3475 | source = "registry+https://github.com/rust-lang/crates.io-index" 3476 | checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" 3477 | dependencies = [ 3478 | "windows-implement 0.58.0", 3479 | "windows-interface 0.58.0", 3480 | "windows-result 0.2.0", 3481 | "windows-strings 0.1.0", 3482 | "windows-targets 0.52.6", 3483 | ] 3484 | 3485 | [[package]] 3486 | name = "windows-core" 3487 | version = "0.61.2" 3488 | source = "registry+https://github.com/rust-lang/crates.io-index" 3489 | checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" 3490 | dependencies = [ 3491 | "windows-implement 0.60.2", 3492 | "windows-interface 0.59.3", 3493 | "windows-link 0.1.3", 3494 | "windows-result 0.3.4", 3495 | "windows-strings 0.4.2", 3496 | ] 3497 | 3498 | [[package]] 3499 | name = "windows-future" 3500 | version = "0.2.1" 3501 | source = "registry+https://github.com/rust-lang/crates.io-index" 3502 | checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" 3503 | dependencies = [ 3504 | "windows-core 0.61.2", 3505 | "windows-link 0.1.3", 3506 | "windows-threading", 3507 | ] 3508 | 3509 | [[package]] 3510 | name = "windows-implement" 3511 | version = "0.58.0" 3512 | source = "registry+https://github.com/rust-lang/crates.io-index" 3513 | checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" 3514 | dependencies = [ 3515 | "proc-macro2", 3516 | "quote", 3517 | "syn", 3518 | ] 3519 | 3520 | [[package]] 3521 | name = "windows-implement" 3522 | version = "0.60.2" 3523 | source = "registry+https://github.com/rust-lang/crates.io-index" 3524 | checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" 3525 | dependencies = [ 3526 | "proc-macro2", 3527 | "quote", 3528 | "syn", 3529 | ] 3530 | 3531 | [[package]] 3532 | name = "windows-interface" 3533 | version = "0.58.0" 3534 | source = "registry+https://github.com/rust-lang/crates.io-index" 3535 | checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" 3536 | dependencies = [ 3537 | "proc-macro2", 3538 | "quote", 3539 | "syn", 3540 | ] 3541 | 3542 | [[package]] 3543 | name = "windows-interface" 3544 | version = "0.59.3" 3545 | source = "registry+https://github.com/rust-lang/crates.io-index" 3546 | checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" 3547 | dependencies = [ 3548 | "proc-macro2", 3549 | "quote", 3550 | "syn", 3551 | ] 3552 | 3553 | [[package]] 3554 | name = "windows-link" 3555 | version = "0.1.3" 3556 | source = "registry+https://github.com/rust-lang/crates.io-index" 3557 | checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" 3558 | 3559 | [[package]] 3560 | name = "windows-link" 3561 | version = "0.2.1" 3562 | source = "registry+https://github.com/rust-lang/crates.io-index" 3563 | checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" 3564 | 3565 | [[package]] 3566 | name = "windows-numerics" 3567 | version = "0.2.0" 3568 | source = "registry+https://github.com/rust-lang/crates.io-index" 3569 | checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" 3570 | dependencies = [ 3571 | "windows-core 0.61.2", 3572 | "windows-link 0.1.3", 3573 | ] 3574 | 3575 | [[package]] 3576 | name = "windows-result" 3577 | version = "0.2.0" 3578 | source = "registry+https://github.com/rust-lang/crates.io-index" 3579 | checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" 3580 | dependencies = [ 3581 | "windows-targets 0.52.6", 3582 | ] 3583 | 3584 | [[package]] 3585 | name = "windows-result" 3586 | version = "0.3.4" 3587 | source = "registry+https://github.com/rust-lang/crates.io-index" 3588 | checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" 3589 | dependencies = [ 3590 | "windows-link 0.1.3", 3591 | ] 3592 | 3593 | [[package]] 3594 | name = "windows-strings" 3595 | version = "0.1.0" 3596 | source = "registry+https://github.com/rust-lang/crates.io-index" 3597 | checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" 3598 | dependencies = [ 3599 | "windows-result 0.2.0", 3600 | "windows-targets 0.52.6", 3601 | ] 3602 | 3603 | [[package]] 3604 | name = "windows-strings" 3605 | version = "0.4.2" 3606 | source = "registry+https://github.com/rust-lang/crates.io-index" 3607 | checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" 3608 | dependencies = [ 3609 | "windows-link 0.1.3", 3610 | ] 3611 | 3612 | [[package]] 3613 | name = "windows-sys" 3614 | version = "0.45.0" 3615 | source = "registry+https://github.com/rust-lang/crates.io-index" 3616 | checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" 3617 | dependencies = [ 3618 | "windows-targets 0.42.2", 3619 | ] 3620 | 3621 | [[package]] 3622 | name = "windows-sys" 3623 | version = "0.52.0" 3624 | source = "registry+https://github.com/rust-lang/crates.io-index" 3625 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 3626 | dependencies = [ 3627 | "windows-targets 0.52.6", 3628 | ] 3629 | 3630 | [[package]] 3631 | name = "windows-sys" 3632 | version = "0.59.0" 3633 | source = "registry+https://github.com/rust-lang/crates.io-index" 3634 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 3635 | dependencies = [ 3636 | "windows-targets 0.52.6", 3637 | ] 3638 | 3639 | [[package]] 3640 | name = "windows-sys" 3641 | version = "0.61.2" 3642 | source = "registry+https://github.com/rust-lang/crates.io-index" 3643 | checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" 3644 | dependencies = [ 3645 | "windows-link 0.2.1", 3646 | ] 3647 | 3648 | [[package]] 3649 | name = "windows-targets" 3650 | version = "0.42.2" 3651 | source = "registry+https://github.com/rust-lang/crates.io-index" 3652 | checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" 3653 | dependencies = [ 3654 | "windows_aarch64_gnullvm 0.42.2", 3655 | "windows_aarch64_msvc 0.42.2", 3656 | "windows_i686_gnu 0.42.2", 3657 | "windows_i686_msvc 0.42.2", 3658 | "windows_x86_64_gnu 0.42.2", 3659 | "windows_x86_64_gnullvm 0.42.2", 3660 | "windows_x86_64_msvc 0.42.2", 3661 | ] 3662 | 3663 | [[package]] 3664 | name = "windows-targets" 3665 | version = "0.52.6" 3666 | source = "registry+https://github.com/rust-lang/crates.io-index" 3667 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 3668 | dependencies = [ 3669 | "windows_aarch64_gnullvm 0.52.6", 3670 | "windows_aarch64_msvc 0.52.6", 3671 | "windows_i686_gnu 0.52.6", 3672 | "windows_i686_gnullvm", 3673 | "windows_i686_msvc 0.52.6", 3674 | "windows_x86_64_gnu 0.52.6", 3675 | "windows_x86_64_gnullvm 0.52.6", 3676 | "windows_x86_64_msvc 0.52.6", 3677 | ] 3678 | 3679 | [[package]] 3680 | name = "windows-threading" 3681 | version = "0.1.0" 3682 | source = "registry+https://github.com/rust-lang/crates.io-index" 3683 | checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" 3684 | dependencies = [ 3685 | "windows-link 0.1.3", 3686 | ] 3687 | 3688 | [[package]] 3689 | name = "windows_aarch64_gnullvm" 3690 | version = "0.42.2" 3691 | source = "registry+https://github.com/rust-lang/crates.io-index" 3692 | checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" 3693 | 3694 | [[package]] 3695 | name = "windows_aarch64_gnullvm" 3696 | version = "0.52.6" 3697 | source = "registry+https://github.com/rust-lang/crates.io-index" 3698 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 3699 | 3700 | [[package]] 3701 | name = "windows_aarch64_msvc" 3702 | version = "0.42.2" 3703 | source = "registry+https://github.com/rust-lang/crates.io-index" 3704 | checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" 3705 | 3706 | [[package]] 3707 | name = "windows_aarch64_msvc" 3708 | version = "0.52.6" 3709 | source = "registry+https://github.com/rust-lang/crates.io-index" 3710 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 3711 | 3712 | [[package]] 3713 | name = "windows_i686_gnu" 3714 | version = "0.42.2" 3715 | source = "registry+https://github.com/rust-lang/crates.io-index" 3716 | checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" 3717 | 3718 | [[package]] 3719 | name = "windows_i686_gnu" 3720 | version = "0.52.6" 3721 | source = "registry+https://github.com/rust-lang/crates.io-index" 3722 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 3723 | 3724 | [[package]] 3725 | name = "windows_i686_gnullvm" 3726 | version = "0.52.6" 3727 | source = "registry+https://github.com/rust-lang/crates.io-index" 3728 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 3729 | 3730 | [[package]] 3731 | name = "windows_i686_msvc" 3732 | version = "0.42.2" 3733 | source = "registry+https://github.com/rust-lang/crates.io-index" 3734 | checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" 3735 | 3736 | [[package]] 3737 | name = "windows_i686_msvc" 3738 | version = "0.52.6" 3739 | source = "registry+https://github.com/rust-lang/crates.io-index" 3740 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 3741 | 3742 | [[package]] 3743 | name = "windows_x86_64_gnu" 3744 | version = "0.42.2" 3745 | source = "registry+https://github.com/rust-lang/crates.io-index" 3746 | checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" 3747 | 3748 | [[package]] 3749 | name = "windows_x86_64_gnu" 3750 | version = "0.52.6" 3751 | source = "registry+https://github.com/rust-lang/crates.io-index" 3752 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 3753 | 3754 | [[package]] 3755 | name = "windows_x86_64_gnullvm" 3756 | version = "0.42.2" 3757 | source = "registry+https://github.com/rust-lang/crates.io-index" 3758 | checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" 3759 | 3760 | [[package]] 3761 | name = "windows_x86_64_gnullvm" 3762 | version = "0.52.6" 3763 | source = "registry+https://github.com/rust-lang/crates.io-index" 3764 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 3765 | 3766 | [[package]] 3767 | name = "windows_x86_64_msvc" 3768 | version = "0.42.2" 3769 | source = "registry+https://github.com/rust-lang/crates.io-index" 3770 | checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" 3771 | 3772 | [[package]] 3773 | name = "windows_x86_64_msvc" 3774 | version = "0.52.6" 3775 | source = "registry+https://github.com/rust-lang/crates.io-index" 3776 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 3777 | 3778 | [[package]] 3779 | name = "winit" 3780 | version = "0.30.12" 3781 | source = "registry+https://github.com/rust-lang/crates.io-index" 3782 | checksum = "c66d4b9ed69c4009f6321f762d6e61ad8a2389cd431b97cb1e146812e9e6c732" 3783 | dependencies = [ 3784 | "android-activity", 3785 | "atomic-waker", 3786 | "bitflags 2.10.0", 3787 | "block2", 3788 | "bytemuck", 3789 | "calloop", 3790 | "cfg_aliases", 3791 | "concurrent-queue", 3792 | "core-foundation 0.9.4", 3793 | "core-graphics", 3794 | "cursor-icon", 3795 | "dpi", 3796 | "js-sys", 3797 | "libc", 3798 | "ndk", 3799 | "objc2", 3800 | "objc2-app-kit", 3801 | "objc2-foundation", 3802 | "objc2-ui-kit", 3803 | "orbclient", 3804 | "percent-encoding", 3805 | "pin-project", 3806 | "raw-window-handle", 3807 | "redox_syscall 0.4.1", 3808 | "rustix 0.38.44", 3809 | "smol_str", 3810 | "tracing", 3811 | "unicode-segmentation", 3812 | "wasm-bindgen", 3813 | "wasm-bindgen-futures", 3814 | "web-sys", 3815 | "web-time", 3816 | "windows-sys 0.52.0", 3817 | "x11-dl", 3818 | "x11rb", 3819 | "xkbcommon-dl", 3820 | ] 3821 | 3822 | [[package]] 3823 | name = "winnow" 3824 | version = "0.7.13" 3825 | source = "registry+https://github.com/rust-lang/crates.io-index" 3826 | checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" 3827 | dependencies = [ 3828 | "memchr", 3829 | ] 3830 | 3831 | [[package]] 3832 | name = "wit-bindgen" 3833 | version = "0.46.0" 3834 | source = "registry+https://github.com/rust-lang/crates.io-index" 3835 | checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" 3836 | 3837 | [[package]] 3838 | name = "x11-dl" 3839 | version = "2.21.0" 3840 | source = "registry+https://github.com/rust-lang/crates.io-index" 3841 | checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" 3842 | dependencies = [ 3843 | "libc", 3844 | "once_cell", 3845 | "pkg-config", 3846 | ] 3847 | 3848 | [[package]] 3849 | name = "x11rb" 3850 | version = "0.13.2" 3851 | source = "registry+https://github.com/rust-lang/crates.io-index" 3852 | checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" 3853 | dependencies = [ 3854 | "as-raw-xcb-connection", 3855 | "gethostname", 3856 | "libc", 3857 | "libloading", 3858 | "once_cell", 3859 | "rustix 1.1.2", 3860 | "x11rb-protocol", 3861 | ] 3862 | 3863 | [[package]] 3864 | name = "x11rb-protocol" 3865 | version = "0.13.2" 3866 | source = "registry+https://github.com/rust-lang/crates.io-index" 3867 | checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" 3868 | 3869 | [[package]] 3870 | name = "xkbcommon-dl" 3871 | version = "0.4.2" 3872 | source = "registry+https://github.com/rust-lang/crates.io-index" 3873 | checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" 3874 | dependencies = [ 3875 | "bitflags 2.10.0", 3876 | "dlib", 3877 | "log", 3878 | "once_cell", 3879 | "xkeysym", 3880 | ] 3881 | 3882 | [[package]] 3883 | name = "xkeysym" 3884 | version = "0.2.1" 3885 | source = "registry+https://github.com/rust-lang/crates.io-index" 3886 | checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" 3887 | 3888 | [[package]] 3889 | name = "zerocopy" 3890 | version = "0.8.27" 3891 | source = "registry+https://github.com/rust-lang/crates.io-index" 3892 | checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" 3893 | dependencies = [ 3894 | "zerocopy-derive", 3895 | ] 3896 | 3897 | [[package]] 3898 | name = "zerocopy-derive" 3899 | version = "0.8.27" 3900 | source = "registry+https://github.com/rust-lang/crates.io-index" 3901 | checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" 3902 | dependencies = [ 3903 | "proc-macro2", 3904 | "quote", 3905 | "syn", 3906 | ] 3907 | --------------------------------------------------------------------------------