├── .gitignore
├── .cargo
└── config.toml
├── web
├── main.js
├── build.sh
├── style.css
└── index.html
├── .idea
├── .gitignore
├── vcs.xml
├── modules.xml
├── fractal_viewer.iml
└── misc.xml
├── src
├── main.rs
├── web.rs
├── uniforms.rs
├── shader.wgsl
├── settings
│ ├── mod.rs
│ └── compat.rs
└── lib.rs
├── LICENSE
├── README.MD
├── Cargo.toml
└── Cargo.lock
/.gitignore:
--------------------------------------------------------------------------------
1 | /target
2 | /web/pkg
3 | /web/*.zip
--------------------------------------------------------------------------------
/.cargo/config.toml:
--------------------------------------------------------------------------------
1 | [target.wasm32-unknown-unknown]
2 | rustflags = [ "--cfg=web_sys_unstable_apis" ]
--------------------------------------------------------------------------------
/web/main.js:
--------------------------------------------------------------------------------
1 | import init from "./fractal_viewer.js";
2 |
3 | init().then(() => console.log("WASM loaded!"));
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 | # Editor-based HTTP Client requests
5 | /httpRequests/
6 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/web/build.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | cd "$(dirname "$0")"
3 | rm -rf pkg
4 | mkdir pkg
5 | cp index.html main.js style.css pkg
6 | wasm-pack build --target web --no-typescript --no-pack -d web/pkg
7 | cd pkg
8 | zip -r ../fractal_viewer_web.zip *
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/src/main.rs:
--------------------------------------------------------------------------------
1 | use fractal_viewer::FractalViewerApp;
2 | use eframe::NativeOptions;
3 |
4 | fn main() -> Result<(), eframe::Error> {
5 | env_logger::init();
6 | let options = NativeOptions::default();
7 | eframe::run_native(
8 | "fractal_viewer",
9 | options,
10 | Box::new(|cc| Ok(Box::new(FractalViewerApp::new(cc).unwrap()))),
11 | )
12 | }
13 |
--------------------------------------------------------------------------------
/web/style.css:
--------------------------------------------------------------------------------
1 | html {
2 | touch-action: manipulation;
3 | }
4 |
5 | html, body {
6 | overflow: hidden;
7 | margin: 0 !important;
8 | padding: 0 !important;
9 | height: 100%;
10 | width: 100%;
11 | }
12 |
13 | canvas {
14 | margin-right: auto;
15 | margin-left: auto;
16 | display: block;
17 | position: absolute;
18 | top: 0;
19 | left: 0;
20 | width: 100%;
21 | height: 100%;
22 | }
--------------------------------------------------------------------------------
/.idea/fractal_viewer.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/web/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | fractal_viewer
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/web.rs:
--------------------------------------------------------------------------------
1 | use crate::FractalViewerApp;
2 | use wasm_bindgen::prelude::*;
3 | use web_sys::HtmlCanvasElement;
4 |
5 | #[wasm_bindgen(start)]
6 | async fn wasm_main() -> Result<(), JsValue> {
7 | console_log::init().expect("error initialising logger");
8 |
9 | let canvas: HtmlCanvasElement = web_sys::window()
10 | .and_then(|window| window.document())
11 | .and_then(|document| document.get_element_by_id("fv_canvas"))
12 | .expect("Failed to get canvas element!")
13 | .dyn_into()
14 | .expect("fv_canvas was not an HtmlCanvasElement!");
15 |
16 | let runner = eframe::WebRunner::new();
17 | runner
18 | .start(
19 | canvas,
20 | eframe::WebOptions::default(),
21 | Box::new(|cc| Ok(Box::new(FractalViewerApp::new(cc).unwrap()))),
22 | )
23 | .await
24 | }
25 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2022-2024 arthomnix and contributors
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4 |
5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
6 |
7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
/src/uniforms.rs:
--------------------------------------------------------------------------------
1 | use crate::settings::UserSettings;
2 | use eframe::egui::Vec2;
3 |
4 | pub(crate) fn calculate_scale(size: Vec2, settings: &UserSettings) -> f32 {
5 | 4.0 / settings.zoom / size.min_elem()
6 | }
7 |
8 | #[repr(C)]
9 | #[derive(Debug, Copy, Clone, bytemuck::Pod, bytemuck::Zeroable)]
10 | pub(crate) struct Uniforms {
11 | scale: f32,
12 | escape_threshold: f32,
13 | centre: [f32; 2],
14 | iterations: i32,
15 | flags: u32,
16 | initial_value: [f32; 2],
17 | }
18 |
19 | impl Uniforms {
20 | pub(crate) fn new(size: Vec2, settings: &UserSettings) -> Self {
21 | let scale = calculate_scale(size, settings);
22 | Uniforms {
23 | scale,
24 | centre: [
25 | size.x / 2.0 * scale - settings.centre[0],
26 | size.y / 2.0 * scale - settings.centre[1],
27 | ],
28 | iterations: settings.iterations,
29 | flags: (settings.initial_c as u32) << 3
30 | | (settings.internal_black as u32) << 2
31 | | (settings.smoothen as u32) << 1
32 | | (settings.julia_set as u32),
33 | initial_value: settings.initial_value,
34 | escape_threshold: settings.escape_threshold,
35 | }
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/README.MD:
--------------------------------------------------------------------------------
1 | # fractal_viewer
2 | A cross-platform, GPU-accelerated viewer for the Mandelbrot Set and related fractals.
3 | #### [Try it online!](https://arthomnix.dev/fractal)
4 |
5 | ## Usage
6 | Scroll wheel to zoom, click and drag to pan. Change the initial value of z or c by right-clicking.
7 |
8 | Custom functions should be valid WGSL expressions, with the following extra functions available:
9 | * `csquare(vec2) -> vec2`: square of a complex number
10 | * `cpow(vec2, f32) -> vec2`: real power of a complex number (can cause precision issues)
11 | * `ccpow(vec2, vec2) -> vec2`: complex power of a complex number
12 | * `cdiv(vec2, vec2) -> vec2`: divide two complex numbers
13 | * `cmul(vec2, vec2) -> vec2`: multiply two complex numbers
14 |
15 | * `rgb(u32) -> vec3` - Convert a hex RGB colour (in the form `0xRRGGBBu`) to the format WebGPU expects
16 | * `hsv_rgb(vec3) -> vec3` - Convert an HSV colour to RGB
17 |
18 | All builtin WGSL functions are also available.
19 |
20 | ## Note on Git history
21 | Version 2 (this branch) is a rewrite, using wgpu on top of eframe instead of egui on top of raw
22 | wgpu/winit. This was done on a fresh "orphan" branch which does not contain any of the Git commit
23 | history of the old master branch. If you want to view the history of the old version, you will need
24 | to look at that branch.
--------------------------------------------------------------------------------
/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "fractal_viewer"
3 | version = "2.1.2"
4 | edition = "2021"
5 | description = "Cross-platform GPU-accelerated viewer for the Mandelbrot set and related fractals"
6 | repository = "https://github.com/arthomnix/fractal_viewer"
7 | license = "MIT"
8 |
9 | [[bin]]
10 | name = "fractal_viewer_bin"
11 | path = "src/main.rs"
12 |
13 | [lib]
14 | crate-type = ["cdylib", "rlib"]
15 |
16 | [dependencies]
17 | eframe = { version = "0.32", default-features = false, features = [ "wgpu", "accesskit", "default_fonts", "wayland", "web_screen_reader" ] }
18 | egui-wgpu = "0.32"
19 | wgpu = { version = "25.0", features = ["webgpu", "webgl"] }
20 | log = "0.4"
21 | env_logger = "0.11"
22 | bytemuck = { version = "1.23", features = [ "derive" ] }
23 | bincode = { version = "2.0", features = ["serde"] }
24 | serde = { version = "1.0", features = [ "derive"] }
25 | base64 = "0.22"
26 | url = "2.5"
27 | instant = { version = "0.1", features = [ "wasm-bindgen" ] }
28 |
29 | [target.'cfg(not(target_arch = "wasm32"))'.dependencies]
30 | arboard = { version = "3.4", features = [ "wayland-data-control" ] }
31 |
32 | [target.'cfg(target_arch = "wasm32")'.dependencies]
33 | console_error_panic_hook = "0.1"
34 | console_log = { version = "1.0", features = [ "color" ] }
35 | wasm-bindgen = "0.2"
36 | wasm-bindgen-futures = "0.4"
37 | web-sys = { version = "0.3", features = [ "Window", "Location", "Document", "Element" ] }
38 | naga = "25.0"
--------------------------------------------------------------------------------
/src/shader.wgsl:
--------------------------------------------------------------------------------
1 | struct Uniforms {
2 | scale: f32,
3 | escape_threshold: f32,
4 | centre: vec2,
5 | iterations: i32,
6 | flags: u32,
7 | initial_value: vec2,
8 | }
9 |
10 | const JULIA_SET = 1u;
11 | const SMOOTHEN = 2u;
12 | const INTERNAL_BLACK = 4u;
13 | const INITIAL_C = 8u;
14 |
15 | @group(0) @binding(0) var uniforms: Uniforms;
16 |
17 | @vertex
18 | fn vs_main(@builtin(vertex_index) in_vertex_index: u32) -> @builtin(position) vec4 {
19 | var vertex_positions: array, 6> = array, 6>(
20 | vec4(-1.0, -1.0, 0.0, 1.0),
21 | vec4(1.0, -1.0, 0.0, 1.0),
22 | vec4(-1.0, 1.0, 0.0, 1.0),
23 | vec4(1.0, -1.0, 0.0, 1.0),
24 | vec4(1.0, 1.0, 0.0, 1.0),
25 | vec4(-1.0, 1.0, 0.0, 1.0),
26 | );
27 | return vertex_positions[in_vertex_index];
28 | }
29 |
30 | fn cpow(z: vec2, p: f32) -> vec2 {
31 | let r: f32 = length(z);
32 | let arg: f32 = atan2(z.y, z.x);
33 | return vec2(pow(r, p) * cos(p * arg), pow(r, p) * sin(p * arg));
34 | }
35 |
36 | fn ccpow(z: vec2, w: vec2) -> vec2 {
37 | let r: f32 = length(z);
38 | var len: f32 = pow(r, w.x);
39 | let arg: f32 = atan2(z.y, z.x);
40 | var phase: f32 = arg * w.x;
41 | if (w.y != 0.0) {
42 | len /= exp(arg * w.y);
43 | phase += w.y * log(r);
44 | }
45 | return vec2(len * cos(phase), len * sin(phase));
46 | }
47 |
48 | fn cdiv(w: vec2, z: vec2) -> vec2 {
49 | return vec2(w.x * z.x + w.y * z.y, w.y * z.x - w.x * z.y) / (z.x * z.x + z.y * z.y);
50 | }
51 |
52 | fn cmul(w: vec2, z: vec2) -> vec2 {
53 | return vec2(z.x * w.x - z.y * w.y, z.x * w.y + z.y * w.x);
54 | }
55 |
56 | fn csquare(z: vec2) -> vec2 {
57 | return cmul(z, z);
58 | }
59 |
60 | fn hsv_rgb(hsv: vec3) -> vec3 {
61 | if (hsv.y == 0.0) {
62 | return vec3(hsv.z, hsv.z, hsv.z);
63 | } else {
64 | var hp: f32 = hsv.x * 6.0;
65 | if (hp == 6.0) {
66 | hp = 0.0;
67 | }
68 | let hpi: i32 = i32(hp);
69 | let v1: f32 = hsv.z * (1.0 - hsv.y);
70 | let v2: f32 = hsv.z * (1.0 - hsv.y * (hp - f32(hpi)));
71 | let v3: f32 = hsv.z * (1.0 - hsv.y * (1.0 - (hp - f32(hpi))));
72 | switch (hpi) {
73 | case 0: {
74 | return vec3(hsv.z, v3, v1);
75 | }
76 | case 1: {
77 | return vec3(v2, hsv.z, v1);
78 | }
79 | case 2: {
80 | return vec3(v1, hsv.z, v3);
81 | }
82 | case 3: {
83 | return vec3(v1, v2, hsv.z);
84 | }
85 | case 4: {
86 | return vec3(v3, v1, hsv.z);
87 | }
88 | default: {
89 | return vec3(hsv.z, v1, v2);
90 | }
91 | }
92 | }
93 | }
94 |
95 | fn rgb(rgb: u32) -> vec3 {
96 | return vec3(
97 | f32((rgb & 0xFF0000) >> 16),
98 | f32((rgb & 0x00FF00) >> 8 ),
99 | f32((rgb & 0x0000FF) ),
100 | ) / 255.0;
101 | }
102 |
103 | fn get_fragment_colour(c: vec2) -> vec4 {
104 | var i: i32 = 0;
105 | var z: vec2;
106 |
107 | if ((uniforms.flags & JULIA_SET) == 0u) {
108 | if ((uniforms.flags & INITIAL_C) != 0u) {
109 | z = c;
110 | i++;
111 | }
112 |
113 | for (
114 | z += uniforms.initial_value;
115 | length(z) < uniforms.escape_threshold;
116 | z = REPLACE_FRACTAL_EQN // gets replaced by user-defined expression
117 | ) {
118 | i++;
119 | if (i == uniforms.iterations) {
120 | if ((uniforms.flags & INTERNAL_BLACK) != 0u) {
121 | return vec4(0.0, 0.0, 0.0, 1.0);
122 | } else {
123 | break;
124 | }
125 | }
126 | }
127 | } else {
128 | z = c;
129 | var c: vec2 = uniforms.initial_value;
130 | for (;
131 | length(z) < uniforms.escape_threshold;
132 | z = REPLACE_FRACTAL_EQN // gets replaced by user-defined expression
133 | ) {
134 | i++;
135 | if (i == uniforms.iterations) {
136 | if ((uniforms.flags & INTERNAL_BLACK) != 0u) {
137 | return vec4(0.0, 0.0, 0.0, 1.0);
138 | } else {
139 | break;
140 | }
141 | }
142 | }
143 | }
144 |
145 | var n = f32(i);
146 |
147 | if ((uniforms.flags & SMOOTHEN) != 0u && i > 0) {
148 | z = REPLACE_FRACTAL_EQN;
149 | z = REPLACE_FRACTAL_EQN;
150 |
151 | n += 2.0 - log2(log(length(z)));
152 | }
153 |
154 | return vec4(REPLACE_COLOR, 1.0); // gets replaced by user-defined expression
155 | }
156 |
157 | @fragment
158 | fn fs_main(@builtin(position) in: vec4) -> @location(0) vec4 {
159 | return get_fragment_colour(in.xy * uniforms.scale - uniforms.centre);
160 | }
--------------------------------------------------------------------------------
/src/settings/mod.rs:
--------------------------------------------------------------------------------
1 | mod compat;
2 |
3 | use crate::SHADER;
4 | use base64::{engine::general_purpose, Engine};
5 | use std::fmt::{Display, Formatter};
6 |
7 | #[derive(Debug, serde::Deserialize)]
8 | pub enum InvalidSettingsImportError {
9 | InvalidFormat,
10 | VersionMismatch,
11 | InvalidBase64,
12 | DeserialisationFailed,
13 | }
14 |
15 | impl InvalidSettingsImportError {
16 | fn to_str(&self) -> &str {
17 | match self {
18 | InvalidSettingsImportError::InvalidFormat => "Invalid settings string format",
19 | InvalidSettingsImportError::VersionMismatch => "Version mismatch or invalid format",
20 | InvalidSettingsImportError::InvalidBase64 => "Base64 decoding failed",
21 | InvalidSettingsImportError::DeserialisationFailed => "Deserialising data failed",
22 | }
23 | }
24 | }
25 |
26 | impl Display for InvalidSettingsImportError {
27 | fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
28 | write!(f, "{}", self.to_str())
29 | }
30 | }
31 |
32 | impl std::error::Error for InvalidSettingsImportError {
33 | fn description(&self) -> &str {
34 | self.to_str()
35 | }
36 | }
37 |
38 | fn get_major_minor_version() -> String {
39 | let mut version_iterator = env!("CARGO_PKG_VERSION").split('.');
40 | format!(
41 | "{}.{}",
42 | version_iterator.next().unwrap(),
43 | version_iterator.next().unwrap()
44 | )
45 | }
46 |
47 | #[derive(Clone, serde::Serialize, serde::Deserialize)]
48 | pub(crate) struct CustomShaderData {
49 | pub(crate) equation: String,
50 | pub(crate) colour: String,
51 | pub(crate) additional: String,
52 | }
53 |
54 | impl CustomShaderData {
55 | pub(crate) fn shader(&self) -> String {
56 | SHADER
57 | .replace("REPLACE_FRACTAL_EQN", &self.equation)
58 | .replace("REPLACE_COLOR", &self.colour)
59 | + &self.additional
60 | }
61 | }
62 |
63 | #[derive(Clone, serde::Serialize, serde::Deserialize)]
64 | pub(crate) struct UserSettings {
65 | pub(crate) zoom: f32,
66 | pub(crate) centre: [f32; 2],
67 | pub(crate) iterations: i32,
68 | pub(crate) julia_set: bool,
69 | pub(crate) smoothen: bool,
70 | pub(crate) internal_black: bool,
71 | pub(crate) initial_value: [f32; 2],
72 | pub(crate) escape_threshold: f32,
73 | pub(crate) initial_c: bool,
74 | pub(crate) shader_data: CustomShaderData,
75 | }
76 |
77 | impl UserSettings {
78 | pub(crate) fn export_string(&self) -> String {
79 | let encoded = bincode::serde::encode_to_vec(self, bincode::config::legacy()).unwrap();
80 | format!(
81 | "{};{}",
82 | get_major_minor_version(),
83 | general_purpose::STANDARD.encode(encoded)
84 | )
85 | }
86 |
87 | pub(crate) fn import_string(string: &str) -> Result {
88 | let string = match url::Url::parse(string) {
89 | Ok(url) => url.query().unwrap_or_default().to_string(),
90 | Err(_) => string.to_string(),
91 | };
92 |
93 | if string.is_empty() {
94 | return Err(InvalidSettingsImportError::InvalidFormat);
95 | }
96 |
97 | let mut iterator = string.split(';');
98 |
99 | let major_minor_version = iterator
100 | .next()
101 | .ok_or(InvalidSettingsImportError::InvalidFormat)?;
102 |
103 | let base64 = iterator
104 | .next()
105 | .ok_or(InvalidSettingsImportError::InvalidFormat)?;
106 |
107 | let this_ver = get_major_minor_version();
108 | match major_minor_version {
109 | s if s == &this_ver => {
110 | let bytes = general_purpose::STANDARD
111 | .decode(base64)
112 | .map_err(|_| InvalidSettingsImportError::InvalidBase64)?;
113 | let result = bincode::serde::decode_from_slice::(bytes.as_slice(), bincode::config::legacy())
114 | .map_err(|_| InvalidSettingsImportError::DeserialisationFailed)?
115 | .0;
116 | Ok(result)
117 | }
118 | "2.0" => Ok(compat::v2_0::UserSettings::import_string(base64)?.into()),
119 | "0.5" => Ok(compat::v0_5::UserSettings::import_string(base64)?.into()),
120 | "0.3" => Ok(compat::v0_3::UserSettings::import_string(base64)?.into()),
121 | "0.4" => Ok(compat::v0_4::UserSettings::import_string(base64)?.into()),
122 | _ => Err(InvalidSettingsImportError::VersionMismatch),
123 | }
124 | }
125 | }
126 |
127 | impl Default for CustomShaderData {
128 | fn default() -> Self {
129 | Self {
130 | equation: "csquare(z) + c".to_string(),
131 | colour: "hsv_rgb(vec3(log(n + 1.0) / log(f32(uniforms.iterations) + 1.0), 0.8, 0.8))"
132 | .to_string(),
133 | additional: String::new(),
134 | }
135 | }
136 | }
137 |
138 | impl Default for UserSettings {
139 | fn default() -> Self {
140 | Self {
141 | zoom: 1.0,
142 | centre: [0.0, 0.0],
143 | iterations: 100,
144 | julia_set: false,
145 | smoothen: false,
146 | internal_black: true,
147 | initial_value: [0.0, 0.0],
148 | escape_threshold: 2.0,
149 | initial_c: false,
150 | shader_data: Default::default(),
151 | }
152 | }
153 | }
154 |
--------------------------------------------------------------------------------
/src/settings/compat.rs:
--------------------------------------------------------------------------------
1 | pub(crate) mod v0_3 {
2 | use crate::settings::{CustomShaderData, InvalidSettingsImportError};
3 |
4 | use base64::engine::general_purpose;
5 | use base64::Engine;
6 |
7 | #[derive(Clone, serde::Serialize, serde::Deserialize)]
8 | pub(crate) struct UserSettings {
9 | zoom: f32,
10 | centre: [f32; 2],
11 | iterations: i32,
12 | equation: String,
13 | prev_equation: String,
14 | equation_valid: bool,
15 | julia_set: bool,
16 | initial_value: [f32; 2],
17 | escape_threshold: f32,
18 | }
19 |
20 | impl UserSettings {
21 | pub(crate) fn import_string(string: &str) -> Result {
22 | let bytes = general_purpose::STANDARD
23 | .decode(string)
24 | .map_err(|_| InvalidSettingsImportError::InvalidBase64)?;
25 | let result = bincode::serde::decode_from_slice::(bytes.as_slice(), bincode::config::legacy())
26 | .map_err(|_| InvalidSettingsImportError::DeserialisationFailed)?
27 | .0;
28 | Ok(result)
29 | }
30 | }
31 |
32 | impl Into for UserSettings {
33 | fn into(self) -> crate::settings::UserSettings {
34 | crate::settings::UserSettings {
35 | zoom: self.zoom,
36 | centre: self.centre,
37 | iterations: self.iterations,
38 | julia_set: self.julia_set,
39 | initial_value: self.initial_value,
40 | escape_threshold: self.escape_threshold,
41 | shader_data: CustomShaderData {
42 | equation: self.equation,
43 | ..Default::default()
44 | },
45 | ..Default::default()
46 | }
47 | }
48 | }
49 | }
50 |
51 | pub(crate) mod v0_4 {
52 | use crate::settings::{CustomShaderData, InvalidSettingsImportError};
53 |
54 | use base64::engine::general_purpose;
55 | use base64::Engine;
56 |
57 | #[derive(Clone, serde::Serialize, serde::Deserialize)]
58 | pub(crate) struct UserSettings {
59 | zoom: f32,
60 | centre: [f32; 2],
61 | iterations: i32,
62 | equation: String,
63 | prev_equation: String,
64 | colour: String,
65 | prev_colour: String,
66 | equation_valid: bool,
67 | julia_set: bool,
68 | smoothen: bool,
69 | internal_black: bool,
70 | initial_value: [f32; 2],
71 | escape_threshold: f32,
72 | }
73 |
74 | impl UserSettings {
75 | pub(crate) fn import_string(string: &str) -> Result {
76 | let bytes = general_purpose::STANDARD
77 | .decode(string)
78 | .map_err(|_| InvalidSettingsImportError::InvalidBase64)?;
79 | let result = bincode::serde::decode_from_slice::(bytes.as_slice(), bincode::config::legacy())
80 | .map_err(|_| InvalidSettingsImportError::DeserialisationFailed)?
81 | .0;
82 | Ok(result)
83 | }
84 | }
85 |
86 | impl Into for UserSettings {
87 | fn into(self) -> crate::settings::UserSettings {
88 | crate::settings::UserSettings {
89 | zoom: self.zoom,
90 | centre: self.centre,
91 | iterations: self.iterations,
92 | julia_set: self.julia_set,
93 | smoothen: self.smoothen,
94 | internal_black: self.internal_black,
95 | initial_value: self.initial_value,
96 | escape_threshold: self.escape_threshold,
97 | shader_data: CustomShaderData {
98 | equation: self.equation,
99 | colour: self.colour,
100 | ..Default::default()
101 | },
102 | ..Default::default()
103 | }
104 | }
105 | }
106 | }
107 |
108 | pub(crate) mod v0_5 {
109 | use crate::settings::{CustomShaderData, InvalidSettingsImportError};
110 |
111 | use base64::engine::general_purpose;
112 | use base64::Engine;
113 |
114 | #[derive(Clone, serde::Serialize, serde::Deserialize)]
115 | pub(crate) struct UserSettings {
116 | zoom: f32,
117 | centre: [f32; 2],
118 | iterations: i32,
119 | equation: String,
120 | prev_equation: String,
121 | colour: String,
122 | prev_colour: String,
123 | equation_valid: bool,
124 | julia_set: bool,
125 | smoothen: bool,
126 | internal_black: bool,
127 | initial_value: [f32; 2],
128 | escape_threshold: f32,
129 | initial_c: bool,
130 | }
131 |
132 | impl UserSettings {
133 | pub(crate) fn import_string(string: &str) -> Result {
134 | let bytes = general_purpose::STANDARD
135 | .decode(string)
136 | .map_err(|_| InvalidSettingsImportError::InvalidBase64)?;
137 | let result = bincode::serde::decode_from_slice::(bytes.as_slice(), bincode::config::legacy())
138 | .map_err(|_| InvalidSettingsImportError::DeserialisationFailed)?
139 | .0;
140 | Ok(result)
141 | }
142 | }
143 |
144 | impl Into for UserSettings {
145 | fn into(self) -> crate::settings::UserSettings {
146 | crate::settings::UserSettings {
147 | zoom: self.zoom,
148 | centre: self.centre,
149 | iterations: self.iterations,
150 | julia_set: self.julia_set,
151 | smoothen: self.smoothen,
152 | internal_black: self.internal_black,
153 | initial_value: self.initial_value,
154 | escape_threshold: self.escape_threshold,
155 | initial_c: self.initial_c,
156 | shader_data: CustomShaderData {
157 | equation: self.equation,
158 | colour: self.colour,
159 | ..Default::default()
160 | },
161 | ..Default::default()
162 | }
163 | }
164 | }
165 | }
166 |
167 | pub(crate) mod v2_0 {
168 | use crate::settings::{CustomShaderData, InvalidSettingsImportError};
169 |
170 | use base64::engine::general_purpose;
171 | use base64::Engine;
172 |
173 | #[derive(Clone, serde::Serialize, serde::Deserialize)]
174 | pub(crate) struct UserSettings {
175 | zoom: f32,
176 | centre: [f32; 2],
177 | iterations: i32,
178 | equation: String,
179 | colour: String,
180 | julia_set: bool,
181 | smoothen: bool,
182 | internal_black: bool,
183 | initial_value: [f32; 2],
184 | escape_threshold: f32,
185 | initial_c: bool,
186 | }
187 |
188 | impl UserSettings {
189 | pub(crate) fn import_string(string: &str) -> Result {
190 | let bytes = general_purpose::STANDARD
191 | .decode(string)
192 | .map_err(|_| InvalidSettingsImportError::InvalidBase64)?;
193 | let result = bincode::serde::decode_from_slice::(bytes.as_slice(), bincode::config::legacy())
194 | .map_err(|_| InvalidSettingsImportError::DeserialisationFailed)?
195 | .0;
196 | Ok(result)
197 | }
198 | }
199 |
200 | impl Into for UserSettings {
201 | fn into(self) -> crate::settings::UserSettings {
202 | crate::settings::UserSettings {
203 | zoom: self.zoom,
204 | centre: self.centre,
205 | iterations: self.iterations,
206 | julia_set: self.julia_set,
207 | smoothen: self.smoothen,
208 | internal_black: self.internal_black,
209 | initial_value: self.initial_value,
210 | escape_threshold: self.escape_threshold,
211 | initial_c: self.initial_c,
212 | shader_data: CustomShaderData {
213 | equation: self.equation,
214 | colour: self.colour,
215 | ..Default::default()
216 | },
217 | ..Default::default()
218 | }
219 | }
220 | }
221 | }
222 |
--------------------------------------------------------------------------------
/src/lib.rs:
--------------------------------------------------------------------------------
1 | mod settings;
2 | mod uniforms;
3 | #[cfg(target_arch = "wasm32")]
4 | mod web;
5 |
6 | use egui_wgpu::wgpu;
7 | #[cfg(not(target_arch = "wasm32"))]
8 | use egui_wgpu::wgpu::naga;
9 |
10 | use crate::settings::{CustomShaderData, UserSettings};
11 | use crate::uniforms::{calculate_scale, Uniforms};
12 | #[allow(unused_imports)] // eframe::egui::ViewportCommand used on native but not web
13 | use eframe::egui::{
14 | Color32, Context, Key, PaintCallbackInfo, PointerButton, TextEdit, ViewportCommand,
15 | };
16 | use eframe::{egui, Frame};
17 | use egui_wgpu::{CallbackResources, ScreenDescriptor};
18 | use instant::Instant;
19 | use naga::valid::{Capabilities, ValidationFlags};
20 | use std::collections::VecDeque;
21 | use std::time::Duration;
22 | use wgpu::util::{BufferInitDescriptor, DeviceExt};
23 | use wgpu::{
24 | Backend, BindGroup, BindGroupDescriptor, BindGroupEntry, BindGroupLayout,
25 | BindGroupLayoutDescriptor, BindGroupLayoutEntry, BindingType, Buffer, BufferBindingType,
26 | BufferUsages, ColorTargetState, CommandBuffer, CommandEncoder, Device, FragmentState,
27 | MultisampleState, PipelineLayoutDescriptor, PrimitiveState, Queue, RenderPass, RenderPipeline,
28 | RenderPipelineDescriptor, ShaderModuleDescriptor, ShaderSource, ShaderStages, VertexState,
29 | };
30 |
31 | static SHADER: &str = include_str!("shader.wgsl");
32 |
33 | fn validate_shader(options: &CustomShaderData) -> Result<(), String> {
34 | let shader_src = options.shader();
35 |
36 | let module = naga::front::wgsl::Frontend::new()
37 | .parse(&shader_src)
38 | .map_err(|e| e.to_string())?;
39 | naga::valid::Validator::new(ValidationFlags::all(), Capabilities::empty())
40 | .validate(&module)
41 | .map_err(|e| e.to_string())?;
42 | Ok(())
43 | }
44 |
45 | pub struct FractalViewerApp {
46 | settings: UserSettings,
47 | last_frame: Instant,
48 | prev_frame_time: Duration,
49 | backend: &'static str,
50 | driver_info: String,
51 | show_ui: bool,
52 | recompile_shader: bool,
53 | shader_error: Option,
54 | import_error: Option,
55 | fps_samples: VecDeque,
56 | last_title_update: Option,
57 | #[cfg(not(target_arch = "wasm32"))]
58 | clipboard: arboard::Clipboard,
59 | }
60 |
61 | impl FractalViewerApp {
62 | pub fn new<'a>(cc: &'a eframe::CreationContext<'a>) -> Option {
63 | #[cfg(not(target_arch = "wasm32"))]
64 | let settings = UserSettings::default();
65 | #[cfg(not(target_arch = "wasm32"))]
66 | let import_error = None;
67 |
68 | #[cfg(target_arch = "wasm32")]
69 | let (mut settings, mut import_error) = match web_sys::window()
70 | .and_then(|w| match w.location().href().ok() {
71 | Some(s) if s.contains('?') => Some(s),
72 | _ => None,
73 | })
74 | .map(|url| UserSettings::import_string(&url))
75 | .unwrap_or_else(|| Ok(UserSettings::default()))
76 | {
77 | Ok(settings) => (settings, None),
78 | Err(e) => (UserSettings::default(), Some(e.to_string())),
79 | };
80 |
81 | #[cfg(target_arch = "wasm32")]
82 | if let Err(e) = validate_shader(&settings.shader_data) {
83 | import_error = Some(format!("Invalid equation or colour expression: {e}"));
84 | settings = UserSettings::default();
85 | }
86 |
87 | let wgpu_render_state = cc.wgpu_render_state.as_ref()?;
88 | let device = &wgpu_render_state.device;
89 |
90 | let size = cc.egui_ctx.screen_rect().size();
91 |
92 | let uniform_buffer = device.create_buffer_init(&BufferInitDescriptor {
93 | label: Some("fv_uniform_buffer"),
94 | contents: bytemuck::cast_slice(&[Uniforms::new(size, &settings)]),
95 | usage: BufferUsages::UNIFORM | BufferUsages::COPY_DST,
96 | });
97 |
98 | let uniform_bind_group_layout =
99 | device.create_bind_group_layout(&BindGroupLayoutDescriptor {
100 | label: Some("fv_uniform_bind_group_layout"),
101 | entries: &[BindGroupLayoutEntry {
102 | binding: 0,
103 | visibility: ShaderStages::VERTEX_FRAGMENT,
104 | ty: BindingType::Buffer {
105 | ty: BufferBindingType::Uniform,
106 | has_dynamic_offset: false,
107 | min_binding_size: None,
108 | },
109 | count: None,
110 | }],
111 | });
112 |
113 | let uniform_bind_group = device.create_bind_group(&BindGroupDescriptor {
114 | label: Some("fv_uniform_bind_group"),
115 | layout: &uniform_bind_group_layout,
116 | entries: &[BindGroupEntry {
117 | binding: 0,
118 | resource: uniform_buffer.as_entire_binding(),
119 | }],
120 | });
121 |
122 | let renderer_state = RendererState {
123 | target_format: wgpu_render_state.target_format.into(),
124 | bind_group_layout: uniform_bind_group_layout,
125 | bind_group: uniform_bind_group,
126 | uniform_buffer,
127 | };
128 |
129 | let pipeline = renderer_state.generate_pipeline(device, &settings.shader_data);
130 |
131 | wgpu_render_state
132 | .renderer
133 | .write()
134 | .callback_resources
135 | .insert(FvRenderer {
136 | pipeline,
137 | state: renderer_state,
138 | });
139 |
140 | let adapter_info = wgpu_render_state.adapter.get_info();
141 | let backend = match adapter_info.backend {
142 | Backend::Noop => "Empty",
143 | Backend::Vulkan => "Vulkan",
144 | Backend::Metal => "Metal",
145 | Backend::Dx12 => "DirectX 12",
146 | Backend::Gl => "WebGL/OpenGL",
147 | Backend::BrowserWebGpu => "WebGPU",
148 | };
149 | let driver_info = adapter_info.driver_info.clone();
150 |
151 | Some(Self {
152 | settings,
153 | last_frame: Instant::now(),
154 | prev_frame_time: Duration::from_secs(0),
155 | backend,
156 | driver_info,
157 | show_ui: true,
158 | recompile_shader: false,
159 | shader_error: None,
160 | import_error,
161 | fps_samples: VecDeque::new(),
162 | last_title_update: None,
163 | #[cfg(not(target_arch = "wasm32"))]
164 | clipboard: arboard::Clipboard::new().unwrap(),
165 | })
166 | }
167 |
168 | pub fn paint_fractal(&mut self, ui: &mut egui::Ui) {
169 | let size = ui.available_size();
170 | let (rect, response) = ui.allocate_exact_size(size, egui::Sense::click_and_drag());
171 |
172 | let scale = calculate_scale(size, &self.settings);
173 | if response.dragged_by(PointerButton::Primary) {
174 | let drag_motion = response.drag_delta();
175 | self.settings.centre[0] -= drag_motion.x * scale;
176 | self.settings.centre[1] -= drag_motion.y * scale;
177 | } else if response.clicked_by(PointerButton::Secondary)
178 | || response.dragged_by(PointerButton::Secondary)
179 | {
180 | let pointer_pos = response.interact_pointer_pos().unwrap();
181 | self.settings.initial_value[0] =
182 | (pointer_pos.x - size.x / 2.0) * scale + self.settings.centre[0];
183 | self.settings.initial_value[1] =
184 | (pointer_pos.y - size.y / 2.0) * scale + self.settings.centre[1];
185 | }
186 |
187 | let scroll = ui.input(|i| i.raw_scroll_delta);
188 | self.settings.zoom += self.settings.zoom * (scroll.y / 300.0).max(-0.9);
189 |
190 | let uniforms = Uniforms::new(size, &self.settings);
191 |
192 | let callback = FvRenderCallback {
193 | uniforms,
194 | shader_recompilation_options: if self.recompile_shader {
195 | self.recompile_shader = false;
196 | Some(self.settings.shader_data.clone())
197 | } else {
198 | None
199 | },
200 | };
201 |
202 | ui.painter()
203 | .add(egui_wgpu::Callback::new_paint_callback(rect, callback));
204 | }
205 | }
206 |
207 | impl eframe::App for FractalViewerApp {
208 | fn update(&mut self, ctx: &Context, _frame: &mut Frame) {
209 | let fps = self.fps_samples.iter().sum::() / self.fps_samples.len() as f32;
210 | if self.last_title_update.is_none()
211 | || self
212 | .last_title_update
213 | .is_some_and(|i| i.elapsed() >= Duration::from_secs(1))
214 | {
215 | let title = format!(
216 | "{} {} [{} | {} | {:.0} FPS]",
217 | env!("CARGO_PKG_NAME"),
218 | env!("CARGO_PKG_VERSION"),
219 | self.backend,
220 | std::env::consts::ARCH,
221 | fps
222 | );
223 |
224 | #[cfg(not(target_arch = "wasm32"))]
225 | ctx.send_viewport_cmd(ViewportCommand::Title(title));
226 |
227 | #[cfg(target_arch = "wasm32")]
228 | if let Some(title_element) = web_sys::window()
229 | .and_then(|window| window.document())
230 | .and_then(|document| document.get_element_by_id("title"))
231 | {
232 | title_element.set_inner_html(&title);
233 | }
234 |
235 | self.last_title_update = Some(Instant::now());
236 | }
237 |
238 | #[cfg(not(target_arch = "wasm32"))]
239 | if ctx.input(|i| i.key_pressed(Key::F11)) {
240 | let current_fullscreen = ctx.input(|i| i.viewport().fullscreen.unwrap());
241 | ctx.send_viewport_cmd(ViewportCommand::Fullscreen(!current_fullscreen));
242 | }
243 |
244 | if ctx.input(|i| i.key_pressed(Key::F1)) {
245 | self.show_ui = !self.show_ui;
246 | }
247 |
248 | egui::CentralPanel::default()
249 | .frame(egui::Frame::default().inner_margin(0.0))
250 | .show(ctx, |ui| self.paint_fractal(ui));
251 |
252 | egui::Window::new(env!("CARGO_PKG_NAME"))
253 | .title_bar(true)
254 | .open(&mut self.show_ui)
255 | .show(ctx, |ui| {
256 | ui.label(format!(
257 | "Version {} ({}{}{})",
258 | env!("CARGO_PKG_VERSION"),
259 | std::env::consts::OS,
260 | if std::env::consts::OS.is_empty() {
261 | ""
262 | } else {
263 | " "
264 | },
265 | std::env::consts::ARCH
266 | ));
267 |
268 | if self.driver_info.is_empty() {
269 | ui.label(format!("Render backend: {}", self.backend));
270 | } else {
271 | ui.label(format!("Render backend: {} ({})", self.backend, &self.driver_info));
272 | }
273 |
274 | ui.label(format!(
275 | "Last frame: {:.1}ms (smoothed FPS: {:.0})",
276 | self.prev_frame_time.as_micros() as f64 / 1000.0,
277 | self.fps_samples.iter().sum::() / self.fps_samples.len() as f32
278 | ));
279 | #[cfg(not(target_arch = "wasm32"))]
280 | ui.label("Fullscreen: [F11]");
281 |
282 | ui.label("Toggle UI: [F1]");
283 | ui.separator();
284 |
285 | ui.collapsing("Zoom [Scroll]", |ui| {
286 | ui.label("Zoom");
287 | ui.add(
288 | egui::Slider::new(&mut self.settings.zoom, 0.0..=100000.0)
289 | .logarithmic(true),
290 | );
291 | });
292 | ui.separator();
293 | ui.collapsing("Iterations", |ui| {
294 | ui.label("Iterations");
295 | ui.add(
296 | egui::Slider::new(&mut self.settings.iterations, 1..=10000)
297 | .logarithmic(true),
298 | );
299 | ui.label("Escape threshold");
300 | ui.add(
301 | egui::Slider::new(
302 | &mut self.settings.escape_threshold,
303 | 1.0..=f32::MAX,
304 | )
305 | .logarithmic(true),
306 | );
307 | });
308 | ui.separator();
309 | ui.collapsing("Centre [Click and drag to pan]", |ui| {
310 | ui.label("Centre");
311 | ui.add(
312 | egui::DragValue::new(&mut self.settings.centre[0])
313 | .speed(0.1 / self.settings.zoom),
314 | );
315 | ui.add(
316 | egui::DragValue::new(&mut self.settings.centre[1])
317 | .speed(0.1 / self.settings.zoom)
318 | .suffix("i"),
319 | );
320 | if ui.button("Reset").clicked() {
321 | self.settings.centre = [0.0, 0.0];
322 | }
323 | });
324 | ui.separator();
325 | ui.checkbox(&mut self.settings.julia_set, "Julia set");
326 | ui.separator();
327 | ui.collapsing("Initial value [Hold right click and drag]", |ui| {
328 | ui.label("Initial value of z");
329 | ui.label("(or value of c for Julia sets)");
330 | ui.add(egui::DragValue::new(&mut self.settings.initial_value[0]).speed(0.01));
331 | ui.add(
332 | egui::DragValue::new(&mut self.settings.initial_value[1])
333 | .speed(0.01)
334 | .suffix("i"),
335 | );
336 | if ui.button("Reset").clicked() {
337 | self.settings.initial_value = [0.0, 0.0];
338 | }
339 | ui.checkbox(&mut self.settings.initial_c, "Add c to initial value");
340 | });
341 | ui.separator();
342 | ui.collapsing("Equation", |ui| {
343 | ui.label("Iterative function (WGSL expression)");
344 | egui::ComboBox::from_label("Iterative function")
345 | .selected_text("Select default equation")
346 | .show_ui(ui, |ui| {
347 | if ui.selectable_value(
348 | &mut self.settings.shader_data.equation,
349 | "csquare(z) + c".to_string(),
350 | "Mandelbrot set",
351 | ).clicked() || ui.selectable_value(
352 | &mut self.settings.shader_data.equation,
353 | "csquare(abs(z)) + c".to_string(),
354 | "Burning ship fractal",
355 | ).clicked() || ui.selectable_value(
356 | &mut self.settings.shader_data.equation,
357 | "cdiv(cmul(csquare(z), z), vec2(1.0, 0.0) + z * z) + c"
358 | .to_string(),
359 | "Feather fractal",
360 | ).clicked() || ui.selectable_value(
361 | &mut self.settings.shader_data.equation,
362 | "csquare(vec2(z.x, -z.y)) + c".to_string(),
363 | "Tricorn fractal",
364 | ).clicked() {
365 | self.recompile_shader = true;
366 | }
367 | });
368 | ui.label("...Or edit it yourself!");
369 | if ui.add(TextEdit::singleline(&mut self.settings.shader_data.equation).desired_width(ui.max_rect().width())).changed() {
370 | self.recompile_shader = true;
371 | };
372 | ui.label("Colour expression:");
373 | ui.horizontal(|ui| {
374 | if ui.text_edit_singleline(&mut self.settings.shader_data.colour).changed() {
375 | self.recompile_shader = true;
376 | };
377 | if ui.button("Reset").clicked() {
378 | self.settings.shader_data.colour = "hsv_rgb(vec3(log(n + 1.0) / log(f32(uniforms.iterations) + 1.0), 0.8, 0.8))".to_string();
379 | self.recompile_shader = true;
380 | }
381 | });
382 |
383 | ui.label("Additional code to include in shader:");
384 | if ui.add(TextEdit::multiline(&mut self.settings.shader_data.additional).code_editor()).changed() {
385 | self.recompile_shader = true;
386 | };
387 |
388 | ui.checkbox(&mut self.settings.internal_black, "Always colour inside of set black");
389 |
390 | if let Some(e) = &self.shader_error {
391 | ui.colored_label(Color32::RED, format!("Invalid expression: {e}"));
392 | }
393 | });
394 |
395 | {
396 | ui.separator();
397 | ui.checkbox(&mut self.settings.smoothen, "Smoothen (warning: only produces correct results on a normal Mandelbrot set!)");
398 | }
399 | {
400 | ui.separator();
401 | egui::CollapsingHeader::new("Export and import options")
402 | .default_open(self.import_error.is_some())
403 | .show(ui, |ui| {
404 | if ui.button("Export to clipboard").clicked() {
405 | ctx.copy_text(self.settings.export_string());
406 | }
407 | if ui.button("Export link to clipboard").clicked() {
408 | ctx.copy_text(format!("{}?{}", option_env!("SITE_LINK").unwrap_or("https://arthomnix.dev/fractal/"), self.settings.export_string()));
409 | }
410 | // Reading clipboard doesn't work in Firefox, so we only support importing from link on web
411 | #[cfg(not(target_arch = "wasm32"))]
412 | if ui.button("Import from clipboard").clicked() {
413 | let text = self.clipboard.get_text().unwrap_or_default();
414 | match UserSettings::import_string(&text) {
415 | Ok(settings) => {
416 | self.settings = settings;
417 | self.import_error = None;
418 | self.recompile_shader = true;
419 | }
420 | Err(e) => self.import_error = Some(e.to_string()),
421 | };
422 | }
423 | if let Some(e) = &self.import_error {
424 | ui.colored_label(Color32::RED, format!("Import failed: {e}"));
425 | }
426 | #[cfg(target_arch = "wasm32")]
427 | ui.label("To import a settings string on web, add '?' to the end of this page's URL.")
428 | });
429 | }
430 |
431 | #[cfg(target_arch = "wasm32")]
432 | {
433 | ui.separator();
434 | ui.horizontal(|ui| {
435 | ui.hyperlink_to("Source code", option_env!("SOURCE_LINK").unwrap_or("https://github.com/arthomnix/fractal_viewer"));
436 | ui.label("|");
437 | ui.hyperlink_to("Download desktop version", option_env!("DL_LINK").unwrap_or("https://github.com/arthomnix/fractal_viewer/releases/latest"));
438 | })
439 | }
440 | });
441 |
442 | // Validate custom expressions
443 | if self.recompile_shader {
444 | if let Err(e) = validate_shader(&self.settings.shader_data) {
445 | self.shader_error = Some(e);
446 | self.recompile_shader = false;
447 | } else {
448 | self.shader_error = None;
449 | }
450 | }
451 |
452 | self.prev_frame_time = self.last_frame.elapsed();
453 | let new_fps = self.prev_frame_time.as_secs_f32().recip();
454 | self.fps_samples.push_back(new_fps);
455 | if self.fps_samples.len() > 200 {
456 | self.fps_samples.pop_front();
457 | }
458 | self.last_frame = Instant::now();
459 | }
460 | }
461 |
462 | struct RendererState {
463 | target_format: ColorTargetState,
464 | bind_group_layout: BindGroupLayout,
465 | bind_group: BindGroup,
466 | uniform_buffer: Buffer,
467 | }
468 |
469 | impl RendererState {
470 | fn generate_pipeline(&self, device: &Device, shader_data: &CustomShaderData) -> RenderPipeline {
471 | let shader = device.create_shader_module(ShaderModuleDescriptor {
472 | label: Some("fv_shader"),
473 | source: ShaderSource::Wgsl(shader_data.shader().into()),
474 | });
475 |
476 | let pipeline_layout = device
477 | .create_pipeline_layout(&PipelineLayoutDescriptor {
478 | label: Some("fv_pipeline_layout"),
479 | bind_group_layouts: &[&self.bind_group_layout],
480 | push_constant_ranges: &[],
481 | });
482 |
483 | device
484 | .create_render_pipeline(&RenderPipelineDescriptor {
485 | label: Some("fv_pipeline"),
486 | layout: Some(&pipeline_layout),
487 | vertex: VertexState {
488 | module: &shader,
489 | entry_point: Some("vs_main"),
490 | compilation_options: Default::default(),
491 | buffers: &[],
492 | },
493 | fragment: Some(FragmentState {
494 | module: &shader,
495 | entry_point: Some("fs_main"),
496 | compilation_options: Default::default(),
497 | targets: &[Some(self.target_format.clone())],
498 | }),
499 | primitive: PrimitiveState::default(),
500 | depth_stencil: None,
501 | multisample: MultisampleState::default(),
502 | multiview: None,
503 | cache: None,
504 | })
505 | }
506 | }
507 |
508 | struct FvRenderer {
509 | pipeline: RenderPipeline,
510 | state: RendererState,
511 | }
512 |
513 | impl FvRenderer {
514 | fn prepare(&mut self, device: &Device, queue: &Queue, callback: &FvRenderCallback) {
515 | if let Some(data) = &callback.shader_recompilation_options {
516 | self.pipeline = self.state.generate_pipeline(device, data);
517 | }
518 |
519 | queue.write_buffer(
520 | &self.state.uniform_buffer,
521 | 0,
522 | bytemuck::cast_slice(&[callback.uniforms]),
523 | );
524 | }
525 |
526 | fn paint(&self, render_pass: &mut RenderPass<'static>) {
527 | render_pass.set_pipeline(&self.pipeline);
528 | render_pass.set_bind_group(0, &self.state.bind_group, &[]);
529 | render_pass.draw(0..6, 0..1);
530 | }
531 | }
532 |
533 | struct FvRenderCallback {
534 | uniforms: Uniforms,
535 | shader_recompilation_options: Option,
536 | }
537 |
538 | impl egui_wgpu::CallbackTrait for FvRenderCallback {
539 | fn prepare(
540 | &self,
541 | device: &Device,
542 | queue: &Queue,
543 | _screen_descriptor: &ScreenDescriptor,
544 | _egui_encoder: &mut CommandEncoder,
545 | callback_resources: &mut CallbackResources,
546 | ) -> Vec {
547 | let renderer: &mut FvRenderer = callback_resources.get_mut().unwrap();
548 | renderer.prepare(device, queue, self);
549 | vec![]
550 | }
551 |
552 | fn paint(
553 | &self,
554 | _info: PaintCallbackInfo,
555 | render_pass: &mut RenderPass<'static>,
556 | callback_resources: &CallbackResources,
557 | ) {
558 | let renderer: &FvRenderer = callback_resources.get().unwrap();
559 | renderer.paint(render_pass);
560 | }
561 | }
562 |
--------------------------------------------------------------------------------
/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 = "ab_glyph"
7 | version = "0.2.31"
8 | source = "registry+https://github.com/rust-lang/crates.io-index"
9 | checksum = "e074464580a518d16a7126262fffaaa47af89d4099d4cb403f8ed938ba12ee7d"
10 | dependencies = [
11 | "ab_glyph_rasterizer",
12 | "owned_ttf_parser",
13 | ]
14 |
15 | [[package]]
16 | name = "ab_glyph_rasterizer"
17 | version = "0.1.10"
18 | source = "registry+https://github.com/rust-lang/crates.io-index"
19 | checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618"
20 |
21 | [[package]]
22 | name = "accesskit"
23 | version = "0.19.0"
24 | source = "registry+https://github.com/rust-lang/crates.io-index"
25 | checksum = "e25ae84c0260bdf5df07796d7cc4882460de26a2b406ec0e6c42461a723b271b"
26 |
27 | [[package]]
28 | name = "accesskit_atspi_common"
29 | version = "0.12.0"
30 | source = "registry+https://github.com/rust-lang/crates.io-index"
31 | checksum = "29bd41de2e54451a8ca0dd95ebf45b54d349d29ebceb7f20be264eee14e3d477"
32 | dependencies = [
33 | "accesskit",
34 | "accesskit_consumer",
35 | "atspi-common",
36 | "serde",
37 | "thiserror 1.0.69",
38 | "zvariant",
39 | ]
40 |
41 | [[package]]
42 | name = "accesskit_consumer"
43 | version = "0.28.0"
44 | source = "registry+https://github.com/rust-lang/crates.io-index"
45 | checksum = "8bfae7c152994a31dc7d99b8eeac7784a919f71d1b306f4b83217e110fd3824c"
46 | dependencies = [
47 | "accesskit",
48 | "hashbrown 0.15.5",
49 | ]
50 |
51 | [[package]]
52 | name = "accesskit_macos"
53 | version = "0.20.0"
54 | source = "registry+https://github.com/rust-lang/crates.io-index"
55 | checksum = "692dd318ff8a7a0ffda67271c4bd10cf32249656f4e49390db0b26ca92b095f2"
56 | dependencies = [
57 | "accesskit",
58 | "accesskit_consumer",
59 | "hashbrown 0.15.5",
60 | "objc2 0.5.2",
61 | "objc2-app-kit 0.2.2",
62 | "objc2-foundation 0.2.2",
63 | ]
64 |
65 | [[package]]
66 | name = "accesskit_unix"
67 | version = "0.15.0"
68 | source = "registry+https://github.com/rust-lang/crates.io-index"
69 | checksum = "c5f7474c36606d0fe4f438291d667bae7042ea2760f506650ad2366926358fc8"
70 | dependencies = [
71 | "accesskit",
72 | "accesskit_atspi_common",
73 | "async-channel",
74 | "async-executor",
75 | "async-task",
76 | "atspi",
77 | "futures-lite",
78 | "futures-util",
79 | "serde",
80 | "zbus",
81 | ]
82 |
83 | [[package]]
84 | name = "accesskit_windows"
85 | version = "0.27.0"
86 | source = "registry+https://github.com/rust-lang/crates.io-index"
87 | checksum = "70a042b62c9c05bf7b616f015515c17d2813f3ba89978d6f4fc369735d60700a"
88 | dependencies = [
89 | "accesskit",
90 | "accesskit_consumer",
91 | "hashbrown 0.15.5",
92 | "static_assertions",
93 | "windows 0.61.3",
94 | "windows-core 0.61.2",
95 | ]
96 |
97 | [[package]]
98 | name = "accesskit_winit"
99 | version = "0.27.0"
100 | source = "registry+https://github.com/rust-lang/crates.io-index"
101 | checksum = "5c1f0d3d13113d8857542a4f8d1a1c24d1dc1527b77aee8426127f4901588708"
102 | dependencies = [
103 | "accesskit",
104 | "accesskit_macos",
105 | "accesskit_unix",
106 | "accesskit_windows",
107 | "raw-window-handle",
108 | "winit",
109 | ]
110 |
111 | [[package]]
112 | name = "adler2"
113 | version = "2.0.1"
114 | source = "registry+https://github.com/rust-lang/crates.io-index"
115 | checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
116 |
117 | [[package]]
118 | name = "ahash"
119 | version = "0.8.12"
120 | source = "registry+https://github.com/rust-lang/crates.io-index"
121 | checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75"
122 | dependencies = [
123 | "cfg-if",
124 | "getrandom",
125 | "once_cell",
126 | "version_check",
127 | "zerocopy",
128 | ]
129 |
130 | [[package]]
131 | name = "aho-corasick"
132 | version = "1.1.3"
133 | source = "registry+https://github.com/rust-lang/crates.io-index"
134 | checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
135 | dependencies = [
136 | "memchr",
137 | ]
138 |
139 | [[package]]
140 | name = "android-activity"
141 | version = "0.6.0"
142 | source = "registry+https://github.com/rust-lang/crates.io-index"
143 | checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046"
144 | dependencies = [
145 | "android-properties",
146 | "bitflags 2.9.4",
147 | "cc",
148 | "cesu8",
149 | "jni",
150 | "jni-sys",
151 | "libc",
152 | "log",
153 | "ndk",
154 | "ndk-context",
155 | "ndk-sys 0.6.0+11769913",
156 | "num_enum",
157 | "thiserror 1.0.69",
158 | ]
159 |
160 | [[package]]
161 | name = "android-properties"
162 | version = "0.2.2"
163 | source = "registry+https://github.com/rust-lang/crates.io-index"
164 | checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04"
165 |
166 | [[package]]
167 | name = "android_system_properties"
168 | version = "0.1.5"
169 | source = "registry+https://github.com/rust-lang/crates.io-index"
170 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
171 | dependencies = [
172 | "libc",
173 | ]
174 |
175 | [[package]]
176 | name = "anstream"
177 | version = "0.6.20"
178 | source = "registry+https://github.com/rust-lang/crates.io-index"
179 | checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192"
180 | dependencies = [
181 | "anstyle",
182 | "anstyle-parse",
183 | "anstyle-query",
184 | "anstyle-wincon",
185 | "colorchoice",
186 | "is_terminal_polyfill",
187 | "utf8parse",
188 | ]
189 |
190 | [[package]]
191 | name = "anstyle"
192 | version = "1.0.11"
193 | source = "registry+https://github.com/rust-lang/crates.io-index"
194 | checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd"
195 |
196 | [[package]]
197 | name = "anstyle-parse"
198 | version = "0.2.7"
199 | source = "registry+https://github.com/rust-lang/crates.io-index"
200 | checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2"
201 | dependencies = [
202 | "utf8parse",
203 | ]
204 |
205 | [[package]]
206 | name = "anstyle-query"
207 | version = "1.1.4"
208 | source = "registry+https://github.com/rust-lang/crates.io-index"
209 | checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2"
210 | dependencies = [
211 | "windows-sys 0.60.2",
212 | ]
213 |
214 | [[package]]
215 | name = "anstyle-wincon"
216 | version = "3.0.10"
217 | source = "registry+https://github.com/rust-lang/crates.io-index"
218 | checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a"
219 | dependencies = [
220 | "anstyle",
221 | "once_cell_polyfill",
222 | "windows-sys 0.60.2",
223 | ]
224 |
225 | [[package]]
226 | name = "arboard"
227 | version = "3.6.1"
228 | source = "registry+https://github.com/rust-lang/crates.io-index"
229 | checksum = "0348a1c054491f4bfe6ab86a7b6ab1e44e45d899005de92f58b3df180b36ddaf"
230 | dependencies = [
231 | "clipboard-win",
232 | "image",
233 | "log",
234 | "objc2 0.6.2",
235 | "objc2-app-kit 0.3.1",
236 | "objc2-core-foundation",
237 | "objc2-core-graphics",
238 | "objc2-foundation 0.3.1",
239 | "parking_lot",
240 | "percent-encoding",
241 | "windows-sys 0.60.2",
242 | "wl-clipboard-rs",
243 | "x11rb",
244 | ]
245 |
246 | [[package]]
247 | name = "arrayvec"
248 | version = "0.7.6"
249 | source = "registry+https://github.com/rust-lang/crates.io-index"
250 | checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
251 |
252 | [[package]]
253 | name = "as-raw-xcb-connection"
254 | version = "1.0.1"
255 | source = "registry+https://github.com/rust-lang/crates.io-index"
256 | checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b"
257 |
258 | [[package]]
259 | name = "ash"
260 | version = "0.38.0+1.3.281"
261 | source = "registry+https://github.com/rust-lang/crates.io-index"
262 | checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f"
263 | dependencies = [
264 | "libloading",
265 | ]
266 |
267 | [[package]]
268 | name = "async-broadcast"
269 | version = "0.7.2"
270 | source = "registry+https://github.com/rust-lang/crates.io-index"
271 | checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532"
272 | dependencies = [
273 | "event-listener",
274 | "event-listener-strategy",
275 | "futures-core",
276 | "pin-project-lite",
277 | ]
278 |
279 | [[package]]
280 | name = "async-channel"
281 | version = "2.5.0"
282 | source = "registry+https://github.com/rust-lang/crates.io-index"
283 | checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2"
284 | dependencies = [
285 | "concurrent-queue",
286 | "event-listener-strategy",
287 | "futures-core",
288 | "pin-project-lite",
289 | ]
290 |
291 | [[package]]
292 | name = "async-executor"
293 | version = "1.13.3"
294 | source = "registry+https://github.com/rust-lang/crates.io-index"
295 | checksum = "497c00e0fd83a72a79a39fcbd8e3e2f055d6f6c7e025f3b3d91f4f8e76527fb8"
296 | dependencies = [
297 | "async-task",
298 | "concurrent-queue",
299 | "fastrand",
300 | "futures-lite",
301 | "pin-project-lite",
302 | "slab",
303 | ]
304 |
305 | [[package]]
306 | name = "async-io"
307 | version = "2.6.0"
308 | source = "registry+https://github.com/rust-lang/crates.io-index"
309 | checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc"
310 | dependencies = [
311 | "autocfg",
312 | "cfg-if",
313 | "concurrent-queue",
314 | "futures-io",
315 | "futures-lite",
316 | "parking",
317 | "polling",
318 | "rustix 1.1.2",
319 | "slab",
320 | "windows-sys 0.61.0",
321 | ]
322 |
323 | [[package]]
324 | name = "async-lock"
325 | version = "3.4.1"
326 | source = "registry+https://github.com/rust-lang/crates.io-index"
327 | checksum = "5fd03604047cee9b6ce9de9f70c6cd540a0520c813cbd49bae61f33ab80ed1dc"
328 | dependencies = [
329 | "event-listener",
330 | "event-listener-strategy",
331 | "pin-project-lite",
332 | ]
333 |
334 | [[package]]
335 | name = "async-process"
336 | version = "2.5.0"
337 | source = "registry+https://github.com/rust-lang/crates.io-index"
338 | checksum = "fc50921ec0055cdd8a16de48773bfeec5c972598674347252c0399676be7da75"
339 | dependencies = [
340 | "async-channel",
341 | "async-io",
342 | "async-lock",
343 | "async-signal",
344 | "async-task",
345 | "blocking",
346 | "cfg-if",
347 | "event-listener",
348 | "futures-lite",
349 | "rustix 1.1.2",
350 | ]
351 |
352 | [[package]]
353 | name = "async-recursion"
354 | version = "1.1.1"
355 | source = "registry+https://github.com/rust-lang/crates.io-index"
356 | checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11"
357 | dependencies = [
358 | "proc-macro2",
359 | "quote",
360 | "syn",
361 | ]
362 |
363 | [[package]]
364 | name = "async-signal"
365 | version = "0.2.13"
366 | source = "registry+https://github.com/rust-lang/crates.io-index"
367 | checksum = "43c070bbf59cd3570b6b2dd54cd772527c7c3620fce8be898406dd3ed6adc64c"
368 | dependencies = [
369 | "async-io",
370 | "async-lock",
371 | "atomic-waker",
372 | "cfg-if",
373 | "futures-core",
374 | "futures-io",
375 | "rustix 1.1.2",
376 | "signal-hook-registry",
377 | "slab",
378 | "windows-sys 0.61.0",
379 | ]
380 |
381 | [[package]]
382 | name = "async-task"
383 | version = "4.7.1"
384 | source = "registry+https://github.com/rust-lang/crates.io-index"
385 | checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de"
386 |
387 | [[package]]
388 | name = "async-trait"
389 | version = "0.1.89"
390 | source = "registry+https://github.com/rust-lang/crates.io-index"
391 | checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
392 | dependencies = [
393 | "proc-macro2",
394 | "quote",
395 | "syn",
396 | ]
397 |
398 | [[package]]
399 | name = "atomic-waker"
400 | version = "1.1.2"
401 | source = "registry+https://github.com/rust-lang/crates.io-index"
402 | checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
403 |
404 | [[package]]
405 | name = "atspi"
406 | version = "0.25.0"
407 | source = "registry+https://github.com/rust-lang/crates.io-index"
408 | checksum = "c83247582e7508838caf5f316c00791eee0e15c0bf743e6880585b867e16815c"
409 | dependencies = [
410 | "atspi-common",
411 | "atspi-connection",
412 | "atspi-proxies",
413 | ]
414 |
415 | [[package]]
416 | name = "atspi-common"
417 | version = "0.9.0"
418 | source = "registry+https://github.com/rust-lang/crates.io-index"
419 | checksum = "33dfc05e7cdf90988a197803bf24f5788f94f7c94a69efa95683e8ffe76cfdfb"
420 | dependencies = [
421 | "enumflags2",
422 | "serde",
423 | "static_assertions",
424 | "zbus",
425 | "zbus-lockstep",
426 | "zbus-lockstep-macros",
427 | "zbus_names",
428 | "zvariant",
429 | ]
430 |
431 | [[package]]
432 | name = "atspi-connection"
433 | version = "0.9.0"
434 | source = "registry+https://github.com/rust-lang/crates.io-index"
435 | checksum = "4193d51303d8332304056ae0004714256b46b6635a5c556109b319c0d3784938"
436 | dependencies = [
437 | "atspi-common",
438 | "atspi-proxies",
439 | "futures-lite",
440 | "zbus",
441 | ]
442 |
443 | [[package]]
444 | name = "atspi-proxies"
445 | version = "0.9.0"
446 | source = "registry+https://github.com/rust-lang/crates.io-index"
447 | checksum = "d2eebcb9e7e76f26d0bcfd6f0295e1cd1e6f33bedbc5698a971db8dc43d7751c"
448 | dependencies = [
449 | "atspi-common",
450 | "serde",
451 | "zbus",
452 | ]
453 |
454 | [[package]]
455 | name = "autocfg"
456 | version = "1.5.0"
457 | source = "registry+https://github.com/rust-lang/crates.io-index"
458 | checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
459 |
460 | [[package]]
461 | name = "base64"
462 | version = "0.22.1"
463 | source = "registry+https://github.com/rust-lang/crates.io-index"
464 | checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
465 |
466 | [[package]]
467 | name = "bincode"
468 | version = "2.0.1"
469 | source = "registry+https://github.com/rust-lang/crates.io-index"
470 | checksum = "36eaf5d7b090263e8150820482d5d93cd964a81e4019913c972f4edcc6edb740"
471 | dependencies = [
472 | "bincode_derive",
473 | "serde",
474 | "unty",
475 | ]
476 |
477 | [[package]]
478 | name = "bincode_derive"
479 | version = "2.0.1"
480 | source = "registry+https://github.com/rust-lang/crates.io-index"
481 | checksum = "bf95709a440f45e986983918d0e8a1f30a9b1df04918fc828670606804ac3c09"
482 | dependencies = [
483 | "virtue",
484 | ]
485 |
486 | [[package]]
487 | name = "bit-set"
488 | version = "0.8.0"
489 | source = "registry+https://github.com/rust-lang/crates.io-index"
490 | checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3"
491 | dependencies = [
492 | "bit-vec",
493 | ]
494 |
495 | [[package]]
496 | name = "bit-vec"
497 | version = "0.8.0"
498 | source = "registry+https://github.com/rust-lang/crates.io-index"
499 | checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7"
500 |
501 | [[package]]
502 | name = "bitflags"
503 | version = "1.3.2"
504 | source = "registry+https://github.com/rust-lang/crates.io-index"
505 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
506 |
507 | [[package]]
508 | name = "bitflags"
509 | version = "2.9.4"
510 | source = "registry+https://github.com/rust-lang/crates.io-index"
511 | checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394"
512 | dependencies = [
513 | "serde",
514 | ]
515 |
516 | [[package]]
517 | name = "block"
518 | version = "0.1.6"
519 | source = "registry+https://github.com/rust-lang/crates.io-index"
520 | checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
521 |
522 | [[package]]
523 | name = "block2"
524 | version = "0.5.1"
525 | source = "registry+https://github.com/rust-lang/crates.io-index"
526 | checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f"
527 | dependencies = [
528 | "objc2 0.5.2",
529 | ]
530 |
531 | [[package]]
532 | name = "blocking"
533 | version = "1.6.2"
534 | source = "registry+https://github.com/rust-lang/crates.io-index"
535 | checksum = "e83f8d02be6967315521be875afa792a316e28d57b5a2d401897e2a7921b7f21"
536 | dependencies = [
537 | "async-channel",
538 | "async-task",
539 | "futures-io",
540 | "futures-lite",
541 | "piper",
542 | ]
543 |
544 | [[package]]
545 | name = "bumpalo"
546 | version = "3.19.0"
547 | source = "registry+https://github.com/rust-lang/crates.io-index"
548 | checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43"
549 |
550 | [[package]]
551 | name = "bytemuck"
552 | version = "1.23.2"
553 | source = "registry+https://github.com/rust-lang/crates.io-index"
554 | checksum = "3995eaeebcdf32f91f980d360f78732ddc061097ab4e39991ae7a6ace9194677"
555 | dependencies = [
556 | "bytemuck_derive",
557 | ]
558 |
559 | [[package]]
560 | name = "bytemuck_derive"
561 | version = "1.10.1"
562 | source = "registry+https://github.com/rust-lang/crates.io-index"
563 | checksum = "4f154e572231cb6ba2bd1176980827e3d5dc04cc183a75dea38109fbdd672d29"
564 | dependencies = [
565 | "proc-macro2",
566 | "quote",
567 | "syn",
568 | ]
569 |
570 | [[package]]
571 | name = "byteorder-lite"
572 | version = "0.1.0"
573 | source = "registry+https://github.com/rust-lang/crates.io-index"
574 | checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495"
575 |
576 | [[package]]
577 | name = "bytes"
578 | version = "1.10.1"
579 | source = "registry+https://github.com/rust-lang/crates.io-index"
580 | checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
581 |
582 | [[package]]
583 | name = "calloop"
584 | version = "0.13.0"
585 | source = "registry+https://github.com/rust-lang/crates.io-index"
586 | checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec"
587 | dependencies = [
588 | "bitflags 2.9.4",
589 | "log",
590 | "polling",
591 | "rustix 0.38.44",
592 | "slab",
593 | "thiserror 1.0.69",
594 | ]
595 |
596 | [[package]]
597 | name = "calloop-wayland-source"
598 | version = "0.3.0"
599 | source = "registry+https://github.com/rust-lang/crates.io-index"
600 | checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20"
601 | dependencies = [
602 | "calloop",
603 | "rustix 0.38.44",
604 | "wayland-backend",
605 | "wayland-client",
606 | ]
607 |
608 | [[package]]
609 | name = "cc"
610 | version = "1.2.38"
611 | source = "registry+https://github.com/rust-lang/crates.io-index"
612 | checksum = "80f41ae168f955c12fb8960b057d70d0ca153fb83182b57d86380443527be7e9"
613 | dependencies = [
614 | "find-msvc-tools",
615 | "jobserver",
616 | "libc",
617 | "shlex",
618 | ]
619 |
620 | [[package]]
621 | name = "cesu8"
622 | version = "1.1.0"
623 | source = "registry+https://github.com/rust-lang/crates.io-index"
624 | checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
625 |
626 | [[package]]
627 | name = "cfg-if"
628 | version = "1.0.3"
629 | source = "registry+https://github.com/rust-lang/crates.io-index"
630 | checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9"
631 |
632 | [[package]]
633 | name = "cfg_aliases"
634 | version = "0.2.1"
635 | source = "registry+https://github.com/rust-lang/crates.io-index"
636 | checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
637 |
638 | [[package]]
639 | name = "cgl"
640 | version = "0.3.2"
641 | source = "registry+https://github.com/rust-lang/crates.io-index"
642 | checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff"
643 | dependencies = [
644 | "libc",
645 | ]
646 |
647 | [[package]]
648 | name = "clipboard-win"
649 | version = "5.4.1"
650 | source = "registry+https://github.com/rust-lang/crates.io-index"
651 | checksum = "bde03770d3df201d4fb868f2c9c59e66a3e4e2bd06692a0fe701e7103c7e84d4"
652 | dependencies = [
653 | "error-code",
654 | ]
655 |
656 | [[package]]
657 | name = "codespan-reporting"
658 | version = "0.12.0"
659 | source = "registry+https://github.com/rust-lang/crates.io-index"
660 | checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81"
661 | dependencies = [
662 | "serde",
663 | "termcolor",
664 | "unicode-width",
665 | ]
666 |
667 | [[package]]
668 | name = "colorchoice"
669 | version = "1.0.4"
670 | source = "registry+https://github.com/rust-lang/crates.io-index"
671 | checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75"
672 |
673 | [[package]]
674 | name = "combine"
675 | version = "4.6.7"
676 | source = "registry+https://github.com/rust-lang/crates.io-index"
677 | checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd"
678 | dependencies = [
679 | "bytes",
680 | "memchr",
681 | ]
682 |
683 | [[package]]
684 | name = "concurrent-queue"
685 | version = "2.5.0"
686 | source = "registry+https://github.com/rust-lang/crates.io-index"
687 | checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973"
688 | dependencies = [
689 | "crossbeam-utils",
690 | ]
691 |
692 | [[package]]
693 | name = "console_error_panic_hook"
694 | version = "0.1.7"
695 | source = "registry+https://github.com/rust-lang/crates.io-index"
696 | checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc"
697 | dependencies = [
698 | "cfg-if",
699 | "wasm-bindgen",
700 | ]
701 |
702 | [[package]]
703 | name = "console_log"
704 | version = "1.0.0"
705 | source = "registry+https://github.com/rust-lang/crates.io-index"
706 | checksum = "be8aed40e4edbf4d3b4431ab260b63fdc40f5780a4766824329ea0f1eefe3c0f"
707 | dependencies = [
708 | "log",
709 | "wasm-bindgen",
710 | "web-sys",
711 | ]
712 |
713 | [[package]]
714 | name = "core-foundation"
715 | version = "0.9.4"
716 | source = "registry+https://github.com/rust-lang/crates.io-index"
717 | checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
718 | dependencies = [
719 | "core-foundation-sys",
720 | "libc",
721 | ]
722 |
723 | [[package]]
724 | name = "core-foundation"
725 | version = "0.10.1"
726 | source = "registry+https://github.com/rust-lang/crates.io-index"
727 | checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6"
728 | dependencies = [
729 | "core-foundation-sys",
730 | "libc",
731 | ]
732 |
733 | [[package]]
734 | name = "core-foundation-sys"
735 | version = "0.8.7"
736 | source = "registry+https://github.com/rust-lang/crates.io-index"
737 | checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
738 |
739 | [[package]]
740 | name = "core-graphics"
741 | version = "0.23.2"
742 | source = "registry+https://github.com/rust-lang/crates.io-index"
743 | checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081"
744 | dependencies = [
745 | "bitflags 1.3.2",
746 | "core-foundation 0.9.4",
747 | "core-graphics-types",
748 | "foreign-types",
749 | "libc",
750 | ]
751 |
752 | [[package]]
753 | name = "core-graphics-types"
754 | version = "0.1.3"
755 | source = "registry+https://github.com/rust-lang/crates.io-index"
756 | checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf"
757 | dependencies = [
758 | "bitflags 1.3.2",
759 | "core-foundation 0.9.4",
760 | "libc",
761 | ]
762 |
763 | [[package]]
764 | name = "crc32fast"
765 | version = "1.5.0"
766 | source = "registry+https://github.com/rust-lang/crates.io-index"
767 | checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511"
768 | dependencies = [
769 | "cfg-if",
770 | ]
771 |
772 | [[package]]
773 | name = "crossbeam-utils"
774 | version = "0.8.21"
775 | source = "registry+https://github.com/rust-lang/crates.io-index"
776 | checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
777 |
778 | [[package]]
779 | name = "crunchy"
780 | version = "0.2.4"
781 | source = "registry+https://github.com/rust-lang/crates.io-index"
782 | checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5"
783 |
784 | [[package]]
785 | name = "cursor-icon"
786 | version = "1.2.0"
787 | source = "registry+https://github.com/rust-lang/crates.io-index"
788 | checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f"
789 |
790 | [[package]]
791 | name = "dispatch"
792 | version = "0.2.0"
793 | source = "registry+https://github.com/rust-lang/crates.io-index"
794 | checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
795 |
796 | [[package]]
797 | name = "dispatch2"
798 | version = "0.3.0"
799 | source = "registry+https://github.com/rust-lang/crates.io-index"
800 | checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec"
801 | dependencies = [
802 | "bitflags 2.9.4",
803 | "objc2 0.6.2",
804 | ]
805 |
806 | [[package]]
807 | name = "displaydoc"
808 | version = "0.2.5"
809 | source = "registry+https://github.com/rust-lang/crates.io-index"
810 | checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
811 | dependencies = [
812 | "proc-macro2",
813 | "quote",
814 | "syn",
815 | ]
816 |
817 | [[package]]
818 | name = "dlib"
819 | version = "0.5.2"
820 | source = "registry+https://github.com/rust-lang/crates.io-index"
821 | checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412"
822 | dependencies = [
823 | "libloading",
824 | ]
825 |
826 | [[package]]
827 | name = "document-features"
828 | version = "0.2.11"
829 | source = "registry+https://github.com/rust-lang/crates.io-index"
830 | checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d"
831 | dependencies = [
832 | "litrs",
833 | ]
834 |
835 | [[package]]
836 | name = "downcast-rs"
837 | version = "1.2.1"
838 | source = "registry+https://github.com/rust-lang/crates.io-index"
839 | checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2"
840 |
841 | [[package]]
842 | name = "dpi"
843 | version = "0.1.2"
844 | source = "registry+https://github.com/rust-lang/crates.io-index"
845 | checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76"
846 |
847 | [[package]]
848 | name = "ecolor"
849 | version = "0.32.3"
850 | source = "registry+https://github.com/rust-lang/crates.io-index"
851 | checksum = "94bdf37f8d5bd9aa7f753573fdda9cf7343afa73dd28d7bfe9593bd9798fc07e"
852 | dependencies = [
853 | "bytemuck",
854 | "emath",
855 | ]
856 |
857 | [[package]]
858 | name = "eframe"
859 | version = "0.32.3"
860 | source = "registry+https://github.com/rust-lang/crates.io-index"
861 | checksum = "14d1c15e7bd136b309bd3487e6ffe5f668b354cd9768636a836dd738ac90eb0b"
862 | dependencies = [
863 | "ahash",
864 | "bytemuck",
865 | "document-features",
866 | "egui",
867 | "egui-wgpu",
868 | "egui-winit",
869 | "egui_glow",
870 | "glutin",
871 | "glutin-winit",
872 | "image",
873 | "js-sys",
874 | "log",
875 | "objc2 0.5.2",
876 | "objc2-app-kit 0.2.2",
877 | "objc2-foundation 0.2.2",
878 | "parking_lot",
879 | "percent-encoding",
880 | "pollster",
881 | "profiling",
882 | "raw-window-handle",
883 | "static_assertions",
884 | "wasm-bindgen",
885 | "wasm-bindgen-futures",
886 | "web-sys",
887 | "web-time",
888 | "wgpu",
889 | "winapi",
890 | "windows-sys 0.59.0",
891 | "winit",
892 | ]
893 |
894 | [[package]]
895 | name = "egui"
896 | version = "0.32.3"
897 | source = "registry+https://github.com/rust-lang/crates.io-index"
898 | checksum = "5d5d0306cd61ca75e29682926d71f2390160247f135965242e904a636f51c0dc"
899 | dependencies = [
900 | "accesskit",
901 | "ahash",
902 | "bitflags 2.9.4",
903 | "emath",
904 | "epaint",
905 | "log",
906 | "nohash-hasher",
907 | "profiling",
908 | "smallvec",
909 | "unicode-segmentation",
910 | ]
911 |
912 | [[package]]
913 | name = "egui-wgpu"
914 | version = "0.32.3"
915 | source = "registry+https://github.com/rust-lang/crates.io-index"
916 | checksum = "c12eca13293f8eba27a32aaaa1c765bfbf31acd43e8d30d5881dcbe5e99ca0c7"
917 | dependencies = [
918 | "ahash",
919 | "bytemuck",
920 | "document-features",
921 | "egui",
922 | "epaint",
923 | "log",
924 | "profiling",
925 | "thiserror 1.0.69",
926 | "type-map",
927 | "web-time",
928 | "wgpu",
929 | "winit",
930 | ]
931 |
932 | [[package]]
933 | name = "egui-winit"
934 | version = "0.32.3"
935 | source = "registry+https://github.com/rust-lang/crates.io-index"
936 | checksum = "f95d0a91f9cb0dc2e732d49c2d521ac8948e1f0b758f306fb7b14d6f5db3927f"
937 | dependencies = [
938 | "accesskit_winit",
939 | "ahash",
940 | "arboard",
941 | "bytemuck",
942 | "egui",
943 | "log",
944 | "profiling",
945 | "raw-window-handle",
946 | "smithay-clipboard",
947 | "web-time",
948 | "webbrowser",
949 | "winit",
950 | ]
951 |
952 | [[package]]
953 | name = "egui_glow"
954 | version = "0.32.3"
955 | source = "registry+https://github.com/rust-lang/crates.io-index"
956 | checksum = "cc7037813341727937f9e22f78d912f3e29bc3c46e2f40a9e82bb51cbf5e4cfb"
957 | dependencies = [
958 | "ahash",
959 | "bytemuck",
960 | "egui",
961 | "glow",
962 | "log",
963 | "memoffset",
964 | "profiling",
965 | "wasm-bindgen",
966 | "web-sys",
967 | "winit",
968 | ]
969 |
970 | [[package]]
971 | name = "emath"
972 | version = "0.32.3"
973 | source = "registry+https://github.com/rust-lang/crates.io-index"
974 | checksum = "45fd7bc25f769a3c198fe1cf183124bf4de3bd62ef7b4f1eaf6b08711a3af8db"
975 | dependencies = [
976 | "bytemuck",
977 | ]
978 |
979 | [[package]]
980 | name = "endi"
981 | version = "1.1.0"
982 | source = "registry+https://github.com/rust-lang/crates.io-index"
983 | checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf"
984 |
985 | [[package]]
986 | name = "enumflags2"
987 | version = "0.7.12"
988 | source = "registry+https://github.com/rust-lang/crates.io-index"
989 | checksum = "1027f7680c853e056ebcec683615fb6fbbc07dbaa13b4d5d9442b146ded4ecef"
990 | dependencies = [
991 | "enumflags2_derive",
992 | "serde",
993 | ]
994 |
995 | [[package]]
996 | name = "enumflags2_derive"
997 | version = "0.7.12"
998 | source = "registry+https://github.com/rust-lang/crates.io-index"
999 | checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827"
1000 | dependencies = [
1001 | "proc-macro2",
1002 | "quote",
1003 | "syn",
1004 | ]
1005 |
1006 | [[package]]
1007 | name = "env_filter"
1008 | version = "0.1.3"
1009 | source = "registry+https://github.com/rust-lang/crates.io-index"
1010 | checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0"
1011 | dependencies = [
1012 | "log",
1013 | "regex",
1014 | ]
1015 |
1016 | [[package]]
1017 | name = "env_logger"
1018 | version = "0.11.8"
1019 | source = "registry+https://github.com/rust-lang/crates.io-index"
1020 | checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f"
1021 | dependencies = [
1022 | "anstream",
1023 | "anstyle",
1024 | "env_filter",
1025 | "jiff",
1026 | "log",
1027 | ]
1028 |
1029 | [[package]]
1030 | name = "epaint"
1031 | version = "0.32.3"
1032 | source = "registry+https://github.com/rust-lang/crates.io-index"
1033 | checksum = "63adcea970b7a13094fe97a36ab9307c35a750f9e24bf00bb7ef3de573e0fddb"
1034 | dependencies = [
1035 | "ab_glyph",
1036 | "ahash",
1037 | "bytemuck",
1038 | "ecolor",
1039 | "emath",
1040 | "epaint_default_fonts",
1041 | "log",
1042 | "nohash-hasher",
1043 | "parking_lot",
1044 | "profiling",
1045 | ]
1046 |
1047 | [[package]]
1048 | name = "epaint_default_fonts"
1049 | version = "0.32.3"
1050 | source = "registry+https://github.com/rust-lang/crates.io-index"
1051 | checksum = "1537accc50c9cab5a272c39300bdd0dd5dca210f6e5e8d70be048df9596e7ca2"
1052 |
1053 | [[package]]
1054 | name = "equivalent"
1055 | version = "1.0.2"
1056 | source = "registry+https://github.com/rust-lang/crates.io-index"
1057 | checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
1058 |
1059 | [[package]]
1060 | name = "errno"
1061 | version = "0.3.14"
1062 | source = "registry+https://github.com/rust-lang/crates.io-index"
1063 | checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
1064 | dependencies = [
1065 | "libc",
1066 | "windows-sys 0.61.0",
1067 | ]
1068 |
1069 | [[package]]
1070 | name = "error-code"
1071 | version = "3.3.2"
1072 | source = "registry+https://github.com/rust-lang/crates.io-index"
1073 | checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59"
1074 |
1075 | [[package]]
1076 | name = "event-listener"
1077 | version = "5.4.1"
1078 | source = "registry+https://github.com/rust-lang/crates.io-index"
1079 | checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab"
1080 | dependencies = [
1081 | "concurrent-queue",
1082 | "parking",
1083 | "pin-project-lite",
1084 | ]
1085 |
1086 | [[package]]
1087 | name = "event-listener-strategy"
1088 | version = "0.5.4"
1089 | source = "registry+https://github.com/rust-lang/crates.io-index"
1090 | checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93"
1091 | dependencies = [
1092 | "event-listener",
1093 | "pin-project-lite",
1094 | ]
1095 |
1096 | [[package]]
1097 | name = "fastrand"
1098 | version = "2.3.0"
1099 | source = "registry+https://github.com/rust-lang/crates.io-index"
1100 | checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
1101 |
1102 | [[package]]
1103 | name = "fax"
1104 | version = "0.2.6"
1105 | source = "registry+https://github.com/rust-lang/crates.io-index"
1106 | checksum = "f05de7d48f37cd6730705cbca900770cab77a89f413d23e100ad7fad7795a0ab"
1107 | dependencies = [
1108 | "fax_derive",
1109 | ]
1110 |
1111 | [[package]]
1112 | name = "fax_derive"
1113 | version = "0.2.0"
1114 | source = "registry+https://github.com/rust-lang/crates.io-index"
1115 | checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d"
1116 | dependencies = [
1117 | "proc-macro2",
1118 | "quote",
1119 | "syn",
1120 | ]
1121 |
1122 | [[package]]
1123 | name = "fdeflate"
1124 | version = "0.3.7"
1125 | source = "registry+https://github.com/rust-lang/crates.io-index"
1126 | checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c"
1127 | dependencies = [
1128 | "simd-adler32",
1129 | ]
1130 |
1131 | [[package]]
1132 | name = "find-msvc-tools"
1133 | version = "0.1.2"
1134 | source = "registry+https://github.com/rust-lang/crates.io-index"
1135 | checksum = "1ced73b1dacfc750a6db6c0a0c3a3853c8b41997e2e2c563dc90804ae6867959"
1136 |
1137 | [[package]]
1138 | name = "fixedbitset"
1139 | version = "0.4.2"
1140 | source = "registry+https://github.com/rust-lang/crates.io-index"
1141 | checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
1142 |
1143 | [[package]]
1144 | name = "flate2"
1145 | version = "1.1.2"
1146 | source = "registry+https://github.com/rust-lang/crates.io-index"
1147 | checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d"
1148 | dependencies = [
1149 | "crc32fast",
1150 | "miniz_oxide",
1151 | ]
1152 |
1153 | [[package]]
1154 | name = "foldhash"
1155 | version = "0.1.5"
1156 | source = "registry+https://github.com/rust-lang/crates.io-index"
1157 | checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
1158 |
1159 | [[package]]
1160 | name = "foreign-types"
1161 | version = "0.5.0"
1162 | source = "registry+https://github.com/rust-lang/crates.io-index"
1163 | checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965"
1164 | dependencies = [
1165 | "foreign-types-macros",
1166 | "foreign-types-shared",
1167 | ]
1168 |
1169 | [[package]]
1170 | name = "foreign-types-macros"
1171 | version = "0.2.3"
1172 | source = "registry+https://github.com/rust-lang/crates.io-index"
1173 | checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
1174 | dependencies = [
1175 | "proc-macro2",
1176 | "quote",
1177 | "syn",
1178 | ]
1179 |
1180 | [[package]]
1181 | name = "foreign-types-shared"
1182 | version = "0.3.1"
1183 | source = "registry+https://github.com/rust-lang/crates.io-index"
1184 | checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b"
1185 |
1186 | [[package]]
1187 | name = "form_urlencoded"
1188 | version = "1.2.2"
1189 | source = "registry+https://github.com/rust-lang/crates.io-index"
1190 | checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"
1191 | dependencies = [
1192 | "percent-encoding",
1193 | ]
1194 |
1195 | [[package]]
1196 | name = "fractal_viewer"
1197 | version = "2.1.2"
1198 | dependencies = [
1199 | "arboard",
1200 | "base64",
1201 | "bincode",
1202 | "bytemuck",
1203 | "console_error_panic_hook",
1204 | "console_log",
1205 | "eframe",
1206 | "egui-wgpu",
1207 | "env_logger",
1208 | "instant",
1209 | "log",
1210 | "naga",
1211 | "serde",
1212 | "url",
1213 | "wasm-bindgen",
1214 | "wasm-bindgen-futures",
1215 | "web-sys",
1216 | "wgpu",
1217 | ]
1218 |
1219 | [[package]]
1220 | name = "futures-core"
1221 | version = "0.3.31"
1222 | source = "registry+https://github.com/rust-lang/crates.io-index"
1223 | checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
1224 |
1225 | [[package]]
1226 | name = "futures-io"
1227 | version = "0.3.31"
1228 | source = "registry+https://github.com/rust-lang/crates.io-index"
1229 | checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"
1230 |
1231 | [[package]]
1232 | name = "futures-lite"
1233 | version = "2.6.1"
1234 | source = "registry+https://github.com/rust-lang/crates.io-index"
1235 | checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad"
1236 | dependencies = [
1237 | "fastrand",
1238 | "futures-core",
1239 | "futures-io",
1240 | "parking",
1241 | "pin-project-lite",
1242 | ]
1243 |
1244 | [[package]]
1245 | name = "futures-macro"
1246 | version = "0.3.31"
1247 | source = "registry+https://github.com/rust-lang/crates.io-index"
1248 | checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
1249 | dependencies = [
1250 | "proc-macro2",
1251 | "quote",
1252 | "syn",
1253 | ]
1254 |
1255 | [[package]]
1256 | name = "futures-task"
1257 | version = "0.3.31"
1258 | source = "registry+https://github.com/rust-lang/crates.io-index"
1259 | checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988"
1260 |
1261 | [[package]]
1262 | name = "futures-util"
1263 | version = "0.3.31"
1264 | source = "registry+https://github.com/rust-lang/crates.io-index"
1265 | checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
1266 | dependencies = [
1267 | "futures-core",
1268 | "futures-macro",
1269 | "futures-task",
1270 | "pin-project-lite",
1271 | "pin-utils",
1272 | "slab",
1273 | ]
1274 |
1275 | [[package]]
1276 | name = "gethostname"
1277 | version = "1.0.2"
1278 | source = "registry+https://github.com/rust-lang/crates.io-index"
1279 | checksum = "fc257fdb4038301ce4b9cd1b3b51704509692bb3ff716a410cbd07925d9dae55"
1280 | dependencies = [
1281 | "rustix 1.1.2",
1282 | "windows-targets 0.52.6",
1283 | ]
1284 |
1285 | [[package]]
1286 | name = "getrandom"
1287 | version = "0.3.3"
1288 | source = "registry+https://github.com/rust-lang/crates.io-index"
1289 | checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4"
1290 | dependencies = [
1291 | "cfg-if",
1292 | "libc",
1293 | "r-efi",
1294 | "wasi",
1295 | ]
1296 |
1297 | [[package]]
1298 | name = "gl_generator"
1299 | version = "0.14.0"
1300 | source = "registry+https://github.com/rust-lang/crates.io-index"
1301 | checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d"
1302 | dependencies = [
1303 | "khronos_api",
1304 | "log",
1305 | "xml-rs",
1306 | ]
1307 |
1308 | [[package]]
1309 | name = "glow"
1310 | version = "0.16.0"
1311 | source = "registry+https://github.com/rust-lang/crates.io-index"
1312 | checksum = "c5e5ea60d70410161c8bf5da3fdfeaa1c72ed2c15f8bbb9d19fe3a4fad085f08"
1313 | dependencies = [
1314 | "js-sys",
1315 | "slotmap",
1316 | "wasm-bindgen",
1317 | "web-sys",
1318 | ]
1319 |
1320 | [[package]]
1321 | name = "glutin"
1322 | version = "0.32.3"
1323 | source = "registry+https://github.com/rust-lang/crates.io-index"
1324 | checksum = "12124de845cacfebedff80e877bb37b5b75c34c5a4c89e47e1cdd67fb6041325"
1325 | dependencies = [
1326 | "bitflags 2.9.4",
1327 | "cfg_aliases",
1328 | "cgl",
1329 | "dispatch2",
1330 | "glutin_egl_sys",
1331 | "glutin_wgl_sys",
1332 | "libloading",
1333 | "objc2 0.6.2",
1334 | "objc2-app-kit 0.3.1",
1335 | "objc2-core-foundation",
1336 | "objc2-foundation 0.3.1",
1337 | "once_cell",
1338 | "raw-window-handle",
1339 | "wayland-sys",
1340 | "windows-sys 0.52.0",
1341 | ]
1342 |
1343 | [[package]]
1344 | name = "glutin-winit"
1345 | version = "0.5.0"
1346 | source = "registry+https://github.com/rust-lang/crates.io-index"
1347 | checksum = "85edca7075f8fc728f28cb8fbb111a96c3b89e930574369e3e9c27eb75d3788f"
1348 | dependencies = [
1349 | "cfg_aliases",
1350 | "glutin",
1351 | "raw-window-handle",
1352 | "winit",
1353 | ]
1354 |
1355 | [[package]]
1356 | name = "glutin_egl_sys"
1357 | version = "0.7.1"
1358 | source = "registry+https://github.com/rust-lang/crates.io-index"
1359 | checksum = "4c4680ba6195f424febdc3ba46e7a42a0e58743f2edb115297b86d7f8ecc02d2"
1360 | dependencies = [
1361 | "gl_generator",
1362 | "windows-sys 0.52.0",
1363 | ]
1364 |
1365 | [[package]]
1366 | name = "glutin_wgl_sys"
1367 | version = "0.6.1"
1368 | source = "registry+https://github.com/rust-lang/crates.io-index"
1369 | checksum = "2c4ee00b289aba7a9e5306d57c2d05499b2e5dc427f84ac708bd2c090212cf3e"
1370 | dependencies = [
1371 | "gl_generator",
1372 | ]
1373 |
1374 | [[package]]
1375 | name = "gpu-alloc"
1376 | version = "0.6.0"
1377 | source = "registry+https://github.com/rust-lang/crates.io-index"
1378 | checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171"
1379 | dependencies = [
1380 | "bitflags 2.9.4",
1381 | "gpu-alloc-types",
1382 | ]
1383 |
1384 | [[package]]
1385 | name = "gpu-alloc-types"
1386 | version = "0.3.0"
1387 | source = "registry+https://github.com/rust-lang/crates.io-index"
1388 | checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4"
1389 | dependencies = [
1390 | "bitflags 2.9.4",
1391 | ]
1392 |
1393 | [[package]]
1394 | name = "gpu-allocator"
1395 | version = "0.27.0"
1396 | source = "registry+https://github.com/rust-lang/crates.io-index"
1397 | checksum = "c151a2a5ef800297b4e79efa4f4bec035c5f51d5ae587287c9b952bdf734cacd"
1398 | dependencies = [
1399 | "log",
1400 | "presser",
1401 | "thiserror 1.0.69",
1402 | "windows 0.58.0",
1403 | ]
1404 |
1405 | [[package]]
1406 | name = "gpu-descriptor"
1407 | version = "0.3.2"
1408 | source = "registry+https://github.com/rust-lang/crates.io-index"
1409 | checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca"
1410 | dependencies = [
1411 | "bitflags 2.9.4",
1412 | "gpu-descriptor-types",
1413 | "hashbrown 0.15.5",
1414 | ]
1415 |
1416 | [[package]]
1417 | name = "gpu-descriptor-types"
1418 | version = "0.2.0"
1419 | source = "registry+https://github.com/rust-lang/crates.io-index"
1420 | checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91"
1421 | dependencies = [
1422 | "bitflags 2.9.4",
1423 | ]
1424 |
1425 | [[package]]
1426 | name = "half"
1427 | version = "2.6.0"
1428 | source = "registry+https://github.com/rust-lang/crates.io-index"
1429 | checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9"
1430 | dependencies = [
1431 | "cfg-if",
1432 | "crunchy",
1433 | "num-traits",
1434 | ]
1435 |
1436 | [[package]]
1437 | name = "hashbrown"
1438 | version = "0.15.5"
1439 | source = "registry+https://github.com/rust-lang/crates.io-index"
1440 | checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
1441 | dependencies = [
1442 | "foldhash",
1443 | ]
1444 |
1445 | [[package]]
1446 | name = "hashbrown"
1447 | version = "0.16.0"
1448 | source = "registry+https://github.com/rust-lang/crates.io-index"
1449 | checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d"
1450 |
1451 | [[package]]
1452 | name = "heck"
1453 | version = "0.5.0"
1454 | source = "registry+https://github.com/rust-lang/crates.io-index"
1455 | checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
1456 |
1457 | [[package]]
1458 | name = "hermit-abi"
1459 | version = "0.5.2"
1460 | source = "registry+https://github.com/rust-lang/crates.io-index"
1461 | checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c"
1462 |
1463 | [[package]]
1464 | name = "hex"
1465 | version = "0.4.3"
1466 | source = "registry+https://github.com/rust-lang/crates.io-index"
1467 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
1468 |
1469 | [[package]]
1470 | name = "hexf-parse"
1471 | version = "0.2.1"
1472 | source = "registry+https://github.com/rust-lang/crates.io-index"
1473 | checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df"
1474 |
1475 | [[package]]
1476 | name = "icu_collections"
1477 | version = "2.0.0"
1478 | source = "registry+https://github.com/rust-lang/crates.io-index"
1479 | checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47"
1480 | dependencies = [
1481 | "displaydoc",
1482 | "potential_utf",
1483 | "yoke",
1484 | "zerofrom",
1485 | "zerovec",
1486 | ]
1487 |
1488 | [[package]]
1489 | name = "icu_locale_core"
1490 | version = "2.0.0"
1491 | source = "registry+https://github.com/rust-lang/crates.io-index"
1492 | checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a"
1493 | dependencies = [
1494 | "displaydoc",
1495 | "litemap",
1496 | "tinystr",
1497 | "writeable",
1498 | "zerovec",
1499 | ]
1500 |
1501 | [[package]]
1502 | name = "icu_normalizer"
1503 | version = "2.0.0"
1504 | source = "registry+https://github.com/rust-lang/crates.io-index"
1505 | checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979"
1506 | dependencies = [
1507 | "displaydoc",
1508 | "icu_collections",
1509 | "icu_normalizer_data",
1510 | "icu_properties",
1511 | "icu_provider",
1512 | "smallvec",
1513 | "zerovec",
1514 | ]
1515 |
1516 | [[package]]
1517 | name = "icu_normalizer_data"
1518 | version = "2.0.0"
1519 | source = "registry+https://github.com/rust-lang/crates.io-index"
1520 | checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3"
1521 |
1522 | [[package]]
1523 | name = "icu_properties"
1524 | version = "2.0.1"
1525 | source = "registry+https://github.com/rust-lang/crates.io-index"
1526 | checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b"
1527 | dependencies = [
1528 | "displaydoc",
1529 | "icu_collections",
1530 | "icu_locale_core",
1531 | "icu_properties_data",
1532 | "icu_provider",
1533 | "potential_utf",
1534 | "zerotrie",
1535 | "zerovec",
1536 | ]
1537 |
1538 | [[package]]
1539 | name = "icu_properties_data"
1540 | version = "2.0.1"
1541 | source = "registry+https://github.com/rust-lang/crates.io-index"
1542 | checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632"
1543 |
1544 | [[package]]
1545 | name = "icu_provider"
1546 | version = "2.0.0"
1547 | source = "registry+https://github.com/rust-lang/crates.io-index"
1548 | checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af"
1549 | dependencies = [
1550 | "displaydoc",
1551 | "icu_locale_core",
1552 | "stable_deref_trait",
1553 | "tinystr",
1554 | "writeable",
1555 | "yoke",
1556 | "zerofrom",
1557 | "zerotrie",
1558 | "zerovec",
1559 | ]
1560 |
1561 | [[package]]
1562 | name = "idna"
1563 | version = "1.1.0"
1564 | source = "registry+https://github.com/rust-lang/crates.io-index"
1565 | checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"
1566 | dependencies = [
1567 | "idna_adapter",
1568 | "smallvec",
1569 | "utf8_iter",
1570 | ]
1571 |
1572 | [[package]]
1573 | name = "idna_adapter"
1574 | version = "1.2.1"
1575 | source = "registry+https://github.com/rust-lang/crates.io-index"
1576 | checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344"
1577 | dependencies = [
1578 | "icu_normalizer",
1579 | "icu_properties",
1580 | ]
1581 |
1582 | [[package]]
1583 | name = "image"
1584 | version = "0.25.8"
1585 | source = "registry+https://github.com/rust-lang/crates.io-index"
1586 | checksum = "529feb3e6769d234375c4cf1ee2ce713682b8e76538cb13f9fc23e1400a591e7"
1587 | dependencies = [
1588 | "bytemuck",
1589 | "byteorder-lite",
1590 | "moxcms",
1591 | "num-traits",
1592 | "png",
1593 | "tiff",
1594 | ]
1595 |
1596 | [[package]]
1597 | name = "indexmap"
1598 | version = "2.11.4"
1599 | source = "registry+https://github.com/rust-lang/crates.io-index"
1600 | checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5"
1601 | dependencies = [
1602 | "equivalent",
1603 | "hashbrown 0.16.0",
1604 | ]
1605 |
1606 | [[package]]
1607 | name = "instant"
1608 | version = "0.1.13"
1609 | source = "registry+https://github.com/rust-lang/crates.io-index"
1610 | checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222"
1611 | dependencies = [
1612 | "cfg-if",
1613 | "js-sys",
1614 | "wasm-bindgen",
1615 | "web-sys",
1616 | ]
1617 |
1618 | [[package]]
1619 | name = "is_terminal_polyfill"
1620 | version = "1.70.1"
1621 | source = "registry+https://github.com/rust-lang/crates.io-index"
1622 | checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf"
1623 |
1624 | [[package]]
1625 | name = "jiff"
1626 | version = "0.2.15"
1627 | source = "registry+https://github.com/rust-lang/crates.io-index"
1628 | checksum = "be1f93b8b1eb69c77f24bbb0afdf66f54b632ee39af40ca21c4365a1d7347e49"
1629 | dependencies = [
1630 | "jiff-static",
1631 | "log",
1632 | "portable-atomic",
1633 | "portable-atomic-util",
1634 | "serde",
1635 | ]
1636 |
1637 | [[package]]
1638 | name = "jiff-static"
1639 | version = "0.2.15"
1640 | source = "registry+https://github.com/rust-lang/crates.io-index"
1641 | checksum = "03343451ff899767262ec32146f6d559dd759fdadf42ff0e227c7c48f72594b4"
1642 | dependencies = [
1643 | "proc-macro2",
1644 | "quote",
1645 | "syn",
1646 | ]
1647 |
1648 | [[package]]
1649 | name = "jni"
1650 | version = "0.21.1"
1651 | source = "registry+https://github.com/rust-lang/crates.io-index"
1652 | checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97"
1653 | dependencies = [
1654 | "cesu8",
1655 | "cfg-if",
1656 | "combine",
1657 | "jni-sys",
1658 | "log",
1659 | "thiserror 1.0.69",
1660 | "walkdir",
1661 | "windows-sys 0.45.0",
1662 | ]
1663 |
1664 | [[package]]
1665 | name = "jni-sys"
1666 | version = "0.3.0"
1667 | source = "registry+https://github.com/rust-lang/crates.io-index"
1668 | checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
1669 |
1670 | [[package]]
1671 | name = "jobserver"
1672 | version = "0.1.34"
1673 | source = "registry+https://github.com/rust-lang/crates.io-index"
1674 | checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33"
1675 | dependencies = [
1676 | "getrandom",
1677 | "libc",
1678 | ]
1679 |
1680 | [[package]]
1681 | name = "js-sys"
1682 | version = "0.3.80"
1683 | source = "registry+https://github.com/rust-lang/crates.io-index"
1684 | checksum = "852f13bec5eba4ba9afbeb93fd7c13fe56147f055939ae21c43a29a0ecb2702e"
1685 | dependencies = [
1686 | "once_cell",
1687 | "wasm-bindgen",
1688 | ]
1689 |
1690 | [[package]]
1691 | name = "khronos-egl"
1692 | version = "6.0.0"
1693 | source = "registry+https://github.com/rust-lang/crates.io-index"
1694 | checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76"
1695 | dependencies = [
1696 | "libc",
1697 | "libloading",
1698 | "pkg-config",
1699 | ]
1700 |
1701 | [[package]]
1702 | name = "khronos_api"
1703 | version = "3.1.0"
1704 | source = "registry+https://github.com/rust-lang/crates.io-index"
1705 | checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc"
1706 |
1707 | [[package]]
1708 | name = "libc"
1709 | version = "0.2.175"
1710 | source = "registry+https://github.com/rust-lang/crates.io-index"
1711 | checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543"
1712 |
1713 | [[package]]
1714 | name = "libloading"
1715 | version = "0.8.9"
1716 | source = "registry+https://github.com/rust-lang/crates.io-index"
1717 | checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55"
1718 | dependencies = [
1719 | "cfg-if",
1720 | "windows-link 0.2.0",
1721 | ]
1722 |
1723 | [[package]]
1724 | name = "libm"
1725 | version = "0.2.15"
1726 | source = "registry+https://github.com/rust-lang/crates.io-index"
1727 | checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de"
1728 |
1729 | [[package]]
1730 | name = "libredox"
1731 | version = "0.1.10"
1732 | source = "registry+https://github.com/rust-lang/crates.io-index"
1733 | checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb"
1734 | dependencies = [
1735 | "bitflags 2.9.4",
1736 | "libc",
1737 | "redox_syscall 0.5.17",
1738 | ]
1739 |
1740 | [[package]]
1741 | name = "linux-raw-sys"
1742 | version = "0.4.15"
1743 | source = "registry+https://github.com/rust-lang/crates.io-index"
1744 | checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
1745 |
1746 | [[package]]
1747 | name = "linux-raw-sys"
1748 | version = "0.11.0"
1749 | source = "registry+https://github.com/rust-lang/crates.io-index"
1750 | checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039"
1751 |
1752 | [[package]]
1753 | name = "litemap"
1754 | version = "0.8.0"
1755 | source = "registry+https://github.com/rust-lang/crates.io-index"
1756 | checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956"
1757 |
1758 | [[package]]
1759 | name = "litrs"
1760 | version = "0.4.2"
1761 | source = "registry+https://github.com/rust-lang/crates.io-index"
1762 | checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed"
1763 |
1764 | [[package]]
1765 | name = "lock_api"
1766 | version = "0.4.13"
1767 | source = "registry+https://github.com/rust-lang/crates.io-index"
1768 | checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765"
1769 | dependencies = [
1770 | "autocfg",
1771 | "scopeguard",
1772 | ]
1773 |
1774 | [[package]]
1775 | name = "log"
1776 | version = "0.4.28"
1777 | source = "registry+https://github.com/rust-lang/crates.io-index"
1778 | checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432"
1779 |
1780 | [[package]]
1781 | name = "malloc_buf"
1782 | version = "0.0.6"
1783 | source = "registry+https://github.com/rust-lang/crates.io-index"
1784 | checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
1785 | dependencies = [
1786 | "libc",
1787 | ]
1788 |
1789 | [[package]]
1790 | name = "memchr"
1791 | version = "2.7.5"
1792 | source = "registry+https://github.com/rust-lang/crates.io-index"
1793 | checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0"
1794 |
1795 | [[package]]
1796 | name = "memmap2"
1797 | version = "0.9.8"
1798 | source = "registry+https://github.com/rust-lang/crates.io-index"
1799 | checksum = "843a98750cd611cc2965a8213b53b43e715f13c37a9e096c6408e69990961db7"
1800 | dependencies = [
1801 | "libc",
1802 | ]
1803 |
1804 | [[package]]
1805 | name = "memoffset"
1806 | version = "0.9.1"
1807 | source = "registry+https://github.com/rust-lang/crates.io-index"
1808 | checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
1809 | dependencies = [
1810 | "autocfg",
1811 | ]
1812 |
1813 | [[package]]
1814 | name = "metal"
1815 | version = "0.31.0"
1816 | source = "registry+https://github.com/rust-lang/crates.io-index"
1817 | checksum = "f569fb946490b5743ad69813cb19629130ce9374034abe31614a36402d18f99e"
1818 | dependencies = [
1819 | "bitflags 2.9.4",
1820 | "block",
1821 | "core-graphics-types",
1822 | "foreign-types",
1823 | "log",
1824 | "objc",
1825 | "paste",
1826 | ]
1827 |
1828 | [[package]]
1829 | name = "minimal-lexical"
1830 | version = "0.2.1"
1831 | source = "registry+https://github.com/rust-lang/crates.io-index"
1832 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
1833 |
1834 | [[package]]
1835 | name = "miniz_oxide"
1836 | version = "0.8.9"
1837 | source = "registry+https://github.com/rust-lang/crates.io-index"
1838 | checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
1839 | dependencies = [
1840 | "adler2",
1841 | "simd-adler32",
1842 | ]
1843 |
1844 | [[package]]
1845 | name = "moxcms"
1846 | version = "0.7.5"
1847 | source = "registry+https://github.com/rust-lang/crates.io-index"
1848 | checksum = "ddd32fa8935aeadb8a8a6b6b351e40225570a37c43de67690383d87ef170cd08"
1849 | dependencies = [
1850 | "num-traits",
1851 | "pxfm",
1852 | ]
1853 |
1854 | [[package]]
1855 | name = "naga"
1856 | version = "25.0.1"
1857 | source = "registry+https://github.com/rust-lang/crates.io-index"
1858 | checksum = "2b977c445f26e49757f9aca3631c3b8b836942cb278d69a92e7b80d3b24da632"
1859 | dependencies = [
1860 | "arrayvec",
1861 | "bit-set",
1862 | "bitflags 2.9.4",
1863 | "cfg_aliases",
1864 | "codespan-reporting",
1865 | "half",
1866 | "hashbrown 0.15.5",
1867 | "hexf-parse",
1868 | "indexmap",
1869 | "log",
1870 | "num-traits",
1871 | "once_cell",
1872 | "rustc-hash 1.1.0",
1873 | "spirv",
1874 | "strum",
1875 | "thiserror 2.0.16",
1876 | "unicode-ident",
1877 | ]
1878 |
1879 | [[package]]
1880 | name = "ndk"
1881 | version = "0.9.0"
1882 | source = "registry+https://github.com/rust-lang/crates.io-index"
1883 | checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4"
1884 | dependencies = [
1885 | "bitflags 2.9.4",
1886 | "jni-sys",
1887 | "log",
1888 | "ndk-sys 0.6.0+11769913",
1889 | "num_enum",
1890 | "raw-window-handle",
1891 | "thiserror 1.0.69",
1892 | ]
1893 |
1894 | [[package]]
1895 | name = "ndk-context"
1896 | version = "0.1.1"
1897 | source = "registry+https://github.com/rust-lang/crates.io-index"
1898 | checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
1899 |
1900 | [[package]]
1901 | name = "ndk-sys"
1902 | version = "0.5.0+25.2.9519653"
1903 | source = "registry+https://github.com/rust-lang/crates.io-index"
1904 | checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691"
1905 | dependencies = [
1906 | "jni-sys",
1907 | ]
1908 |
1909 | [[package]]
1910 | name = "ndk-sys"
1911 | version = "0.6.0+11769913"
1912 | source = "registry+https://github.com/rust-lang/crates.io-index"
1913 | checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873"
1914 | dependencies = [
1915 | "jni-sys",
1916 | ]
1917 |
1918 | [[package]]
1919 | name = "nix"
1920 | version = "0.30.1"
1921 | source = "registry+https://github.com/rust-lang/crates.io-index"
1922 | checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6"
1923 | dependencies = [
1924 | "bitflags 2.9.4",
1925 | "cfg-if",
1926 | "cfg_aliases",
1927 | "libc",
1928 | "memoffset",
1929 | ]
1930 |
1931 | [[package]]
1932 | name = "nohash-hasher"
1933 | version = "0.2.0"
1934 | source = "registry+https://github.com/rust-lang/crates.io-index"
1935 | checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451"
1936 |
1937 | [[package]]
1938 | name = "nom"
1939 | version = "7.1.3"
1940 | source = "registry+https://github.com/rust-lang/crates.io-index"
1941 | checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
1942 | dependencies = [
1943 | "memchr",
1944 | "minimal-lexical",
1945 | ]
1946 |
1947 | [[package]]
1948 | name = "num-traits"
1949 | version = "0.2.19"
1950 | source = "registry+https://github.com/rust-lang/crates.io-index"
1951 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
1952 | dependencies = [
1953 | "autocfg",
1954 | "libm",
1955 | ]
1956 |
1957 | [[package]]
1958 | name = "num_enum"
1959 | version = "0.7.4"
1960 | source = "registry+https://github.com/rust-lang/crates.io-index"
1961 | checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a"
1962 | dependencies = [
1963 | "num_enum_derive",
1964 | "rustversion",
1965 | ]
1966 |
1967 | [[package]]
1968 | name = "num_enum_derive"
1969 | version = "0.7.4"
1970 | source = "registry+https://github.com/rust-lang/crates.io-index"
1971 | checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d"
1972 | dependencies = [
1973 | "proc-macro-crate",
1974 | "proc-macro2",
1975 | "quote",
1976 | "syn",
1977 | ]
1978 |
1979 | [[package]]
1980 | name = "objc"
1981 | version = "0.2.7"
1982 | source = "registry+https://github.com/rust-lang/crates.io-index"
1983 | checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
1984 | dependencies = [
1985 | "malloc_buf",
1986 | ]
1987 |
1988 | [[package]]
1989 | name = "objc-sys"
1990 | version = "0.3.5"
1991 | source = "registry+https://github.com/rust-lang/crates.io-index"
1992 | checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310"
1993 |
1994 | [[package]]
1995 | name = "objc2"
1996 | version = "0.5.2"
1997 | source = "registry+https://github.com/rust-lang/crates.io-index"
1998 | checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804"
1999 | dependencies = [
2000 | "objc-sys",
2001 | "objc2-encode",
2002 | ]
2003 |
2004 | [[package]]
2005 | name = "objc2"
2006 | version = "0.6.2"
2007 | source = "registry+https://github.com/rust-lang/crates.io-index"
2008 | checksum = "561f357ba7f3a2a61563a186a163d0a3a5247e1089524a3981d49adb775078bc"
2009 | dependencies = [
2010 | "objc2-encode",
2011 | ]
2012 |
2013 | [[package]]
2014 | name = "objc2-app-kit"
2015 | version = "0.2.2"
2016 | source = "registry+https://github.com/rust-lang/crates.io-index"
2017 | checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff"
2018 | dependencies = [
2019 | "bitflags 2.9.4",
2020 | "block2",
2021 | "libc",
2022 | "objc2 0.5.2",
2023 | "objc2-core-data",
2024 | "objc2-core-image",
2025 | "objc2-foundation 0.2.2",
2026 | "objc2-quartz-core",
2027 | ]
2028 |
2029 | [[package]]
2030 | name = "objc2-app-kit"
2031 | version = "0.3.1"
2032 | source = "registry+https://github.com/rust-lang/crates.io-index"
2033 | checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc"
2034 | dependencies = [
2035 | "bitflags 2.9.4",
2036 | "objc2 0.6.2",
2037 | "objc2-core-foundation",
2038 | "objc2-core-graphics",
2039 | "objc2-foundation 0.3.1",
2040 | ]
2041 |
2042 | [[package]]
2043 | name = "objc2-cloud-kit"
2044 | version = "0.2.2"
2045 | source = "registry+https://github.com/rust-lang/crates.io-index"
2046 | checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009"
2047 | dependencies = [
2048 | "bitflags 2.9.4",
2049 | "block2",
2050 | "objc2 0.5.2",
2051 | "objc2-core-location",
2052 | "objc2-foundation 0.2.2",
2053 | ]
2054 |
2055 | [[package]]
2056 | name = "objc2-contacts"
2057 | version = "0.2.2"
2058 | source = "registry+https://github.com/rust-lang/crates.io-index"
2059 | checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889"
2060 | dependencies = [
2061 | "block2",
2062 | "objc2 0.5.2",
2063 | "objc2-foundation 0.2.2",
2064 | ]
2065 |
2066 | [[package]]
2067 | name = "objc2-core-data"
2068 | version = "0.2.2"
2069 | source = "registry+https://github.com/rust-lang/crates.io-index"
2070 | checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef"
2071 | dependencies = [
2072 | "bitflags 2.9.4",
2073 | "block2",
2074 | "objc2 0.5.2",
2075 | "objc2-foundation 0.2.2",
2076 | ]
2077 |
2078 | [[package]]
2079 | name = "objc2-core-foundation"
2080 | version = "0.3.1"
2081 | source = "registry+https://github.com/rust-lang/crates.io-index"
2082 | checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166"
2083 | dependencies = [
2084 | "bitflags 2.9.4",
2085 | "dispatch2",
2086 | "objc2 0.6.2",
2087 | ]
2088 |
2089 | [[package]]
2090 | name = "objc2-core-graphics"
2091 | version = "0.3.1"
2092 | source = "registry+https://github.com/rust-lang/crates.io-index"
2093 | checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4"
2094 | dependencies = [
2095 | "bitflags 2.9.4",
2096 | "dispatch2",
2097 | "objc2 0.6.2",
2098 | "objc2-core-foundation",
2099 | "objc2-io-surface",
2100 | ]
2101 |
2102 | [[package]]
2103 | name = "objc2-core-image"
2104 | version = "0.2.2"
2105 | source = "registry+https://github.com/rust-lang/crates.io-index"
2106 | checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80"
2107 | dependencies = [
2108 | "block2",
2109 | "objc2 0.5.2",
2110 | "objc2-foundation 0.2.2",
2111 | "objc2-metal",
2112 | ]
2113 |
2114 | [[package]]
2115 | name = "objc2-core-location"
2116 | version = "0.2.2"
2117 | source = "registry+https://github.com/rust-lang/crates.io-index"
2118 | checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781"
2119 | dependencies = [
2120 | "block2",
2121 | "objc2 0.5.2",
2122 | "objc2-contacts",
2123 | "objc2-foundation 0.2.2",
2124 | ]
2125 |
2126 | [[package]]
2127 | name = "objc2-encode"
2128 | version = "4.1.0"
2129 | source = "registry+https://github.com/rust-lang/crates.io-index"
2130 | checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33"
2131 |
2132 | [[package]]
2133 | name = "objc2-foundation"
2134 | version = "0.2.2"
2135 | source = "registry+https://github.com/rust-lang/crates.io-index"
2136 | checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8"
2137 | dependencies = [
2138 | "bitflags 2.9.4",
2139 | "block2",
2140 | "dispatch",
2141 | "libc",
2142 | "objc2 0.5.2",
2143 | ]
2144 |
2145 | [[package]]
2146 | name = "objc2-foundation"
2147 | version = "0.3.1"
2148 | source = "registry+https://github.com/rust-lang/crates.io-index"
2149 | checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c"
2150 | dependencies = [
2151 | "bitflags 2.9.4",
2152 | "objc2 0.6.2",
2153 | "objc2-core-foundation",
2154 | ]
2155 |
2156 | [[package]]
2157 | name = "objc2-io-surface"
2158 | version = "0.3.1"
2159 | source = "registry+https://github.com/rust-lang/crates.io-index"
2160 | checksum = "7282e9ac92529fa3457ce90ebb15f4ecbc383e8338060960760fa2cf75420c3c"
2161 | dependencies = [
2162 | "bitflags 2.9.4",
2163 | "objc2 0.6.2",
2164 | "objc2-core-foundation",
2165 | ]
2166 |
2167 | [[package]]
2168 | name = "objc2-link-presentation"
2169 | version = "0.2.2"
2170 | source = "registry+https://github.com/rust-lang/crates.io-index"
2171 | checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398"
2172 | dependencies = [
2173 | "block2",
2174 | "objc2 0.5.2",
2175 | "objc2-app-kit 0.2.2",
2176 | "objc2-foundation 0.2.2",
2177 | ]
2178 |
2179 | [[package]]
2180 | name = "objc2-metal"
2181 | version = "0.2.2"
2182 | source = "registry+https://github.com/rust-lang/crates.io-index"
2183 | checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6"
2184 | dependencies = [
2185 | "bitflags 2.9.4",
2186 | "block2",
2187 | "objc2 0.5.2",
2188 | "objc2-foundation 0.2.2",
2189 | ]
2190 |
2191 | [[package]]
2192 | name = "objc2-quartz-core"
2193 | version = "0.2.2"
2194 | source = "registry+https://github.com/rust-lang/crates.io-index"
2195 | checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a"
2196 | dependencies = [
2197 | "bitflags 2.9.4",
2198 | "block2",
2199 | "objc2 0.5.2",
2200 | "objc2-foundation 0.2.2",
2201 | "objc2-metal",
2202 | ]
2203 |
2204 | [[package]]
2205 | name = "objc2-symbols"
2206 | version = "0.2.2"
2207 | source = "registry+https://github.com/rust-lang/crates.io-index"
2208 | checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc"
2209 | dependencies = [
2210 | "objc2 0.5.2",
2211 | "objc2-foundation 0.2.2",
2212 | ]
2213 |
2214 | [[package]]
2215 | name = "objc2-ui-kit"
2216 | version = "0.2.2"
2217 | source = "registry+https://github.com/rust-lang/crates.io-index"
2218 | checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f"
2219 | dependencies = [
2220 | "bitflags 2.9.4",
2221 | "block2",
2222 | "objc2 0.5.2",
2223 | "objc2-cloud-kit",
2224 | "objc2-core-data",
2225 | "objc2-core-image",
2226 | "objc2-core-location",
2227 | "objc2-foundation 0.2.2",
2228 | "objc2-link-presentation",
2229 | "objc2-quartz-core",
2230 | "objc2-symbols",
2231 | "objc2-uniform-type-identifiers",
2232 | "objc2-user-notifications",
2233 | ]
2234 |
2235 | [[package]]
2236 | name = "objc2-uniform-type-identifiers"
2237 | version = "0.2.2"
2238 | source = "registry+https://github.com/rust-lang/crates.io-index"
2239 | checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe"
2240 | dependencies = [
2241 | "block2",
2242 | "objc2 0.5.2",
2243 | "objc2-foundation 0.2.2",
2244 | ]
2245 |
2246 | [[package]]
2247 | name = "objc2-user-notifications"
2248 | version = "0.2.2"
2249 | source = "registry+https://github.com/rust-lang/crates.io-index"
2250 | checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3"
2251 | dependencies = [
2252 | "bitflags 2.9.4",
2253 | "block2",
2254 | "objc2 0.5.2",
2255 | "objc2-core-location",
2256 | "objc2-foundation 0.2.2",
2257 | ]
2258 |
2259 | [[package]]
2260 | name = "once_cell"
2261 | version = "1.21.3"
2262 | source = "registry+https://github.com/rust-lang/crates.io-index"
2263 | checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
2264 |
2265 | [[package]]
2266 | name = "once_cell_polyfill"
2267 | version = "1.70.1"
2268 | source = "registry+https://github.com/rust-lang/crates.io-index"
2269 | checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad"
2270 |
2271 | [[package]]
2272 | name = "orbclient"
2273 | version = "0.3.48"
2274 | source = "registry+https://github.com/rust-lang/crates.io-index"
2275 | checksum = "ba0b26cec2e24f08ed8bb31519a9333140a6599b867dac464bb150bdb796fd43"
2276 | dependencies = [
2277 | "libredox",
2278 | ]
2279 |
2280 | [[package]]
2281 | name = "ordered-float"
2282 | version = "4.6.0"
2283 | source = "registry+https://github.com/rust-lang/crates.io-index"
2284 | checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951"
2285 | dependencies = [
2286 | "num-traits",
2287 | ]
2288 |
2289 | [[package]]
2290 | name = "ordered-stream"
2291 | version = "0.2.0"
2292 | source = "registry+https://github.com/rust-lang/crates.io-index"
2293 | checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50"
2294 | dependencies = [
2295 | "futures-core",
2296 | "pin-project-lite",
2297 | ]
2298 |
2299 | [[package]]
2300 | name = "os_pipe"
2301 | version = "1.2.2"
2302 | source = "registry+https://github.com/rust-lang/crates.io-index"
2303 | checksum = "db335f4760b14ead6290116f2427bf33a14d4f0617d49f78a246de10c1831224"
2304 | dependencies = [
2305 | "libc",
2306 | "windows-sys 0.59.0",
2307 | ]
2308 |
2309 | [[package]]
2310 | name = "owned_ttf_parser"
2311 | version = "0.25.1"
2312 | source = "registry+https://github.com/rust-lang/crates.io-index"
2313 | checksum = "36820e9051aca1014ddc75770aab4d68bc1e9e632f0f5627c4086bc216fb583b"
2314 | dependencies = [
2315 | "ttf-parser",
2316 | ]
2317 |
2318 | [[package]]
2319 | name = "parking"
2320 | version = "2.2.1"
2321 | source = "registry+https://github.com/rust-lang/crates.io-index"
2322 | checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba"
2323 |
2324 | [[package]]
2325 | name = "parking_lot"
2326 | version = "0.12.4"
2327 | source = "registry+https://github.com/rust-lang/crates.io-index"
2328 | checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13"
2329 | dependencies = [
2330 | "lock_api",
2331 | "parking_lot_core",
2332 | ]
2333 |
2334 | [[package]]
2335 | name = "parking_lot_core"
2336 | version = "0.9.11"
2337 | source = "registry+https://github.com/rust-lang/crates.io-index"
2338 | checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5"
2339 | dependencies = [
2340 | "cfg-if",
2341 | "libc",
2342 | "redox_syscall 0.5.17",
2343 | "smallvec",
2344 | "windows-targets 0.52.6",
2345 | ]
2346 |
2347 | [[package]]
2348 | name = "paste"
2349 | version = "1.0.15"
2350 | source = "registry+https://github.com/rust-lang/crates.io-index"
2351 | checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
2352 |
2353 | [[package]]
2354 | name = "percent-encoding"
2355 | version = "2.3.2"
2356 | source = "registry+https://github.com/rust-lang/crates.io-index"
2357 | checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
2358 |
2359 | [[package]]
2360 | name = "petgraph"
2361 | version = "0.6.5"
2362 | source = "registry+https://github.com/rust-lang/crates.io-index"
2363 | checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db"
2364 | dependencies = [
2365 | "fixedbitset",
2366 | "indexmap",
2367 | ]
2368 |
2369 | [[package]]
2370 | name = "pin-project"
2371 | version = "1.1.10"
2372 | source = "registry+https://github.com/rust-lang/crates.io-index"
2373 | checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a"
2374 | dependencies = [
2375 | "pin-project-internal",
2376 | ]
2377 |
2378 | [[package]]
2379 | name = "pin-project-internal"
2380 | version = "1.1.10"
2381 | source = "registry+https://github.com/rust-lang/crates.io-index"
2382 | checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861"
2383 | dependencies = [
2384 | "proc-macro2",
2385 | "quote",
2386 | "syn",
2387 | ]
2388 |
2389 | [[package]]
2390 | name = "pin-project-lite"
2391 | version = "0.2.16"
2392 | source = "registry+https://github.com/rust-lang/crates.io-index"
2393 | checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
2394 |
2395 | [[package]]
2396 | name = "pin-utils"
2397 | version = "0.1.0"
2398 | source = "registry+https://github.com/rust-lang/crates.io-index"
2399 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
2400 |
2401 | [[package]]
2402 | name = "piper"
2403 | version = "0.2.4"
2404 | source = "registry+https://github.com/rust-lang/crates.io-index"
2405 | checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066"
2406 | dependencies = [
2407 | "atomic-waker",
2408 | "fastrand",
2409 | "futures-io",
2410 | ]
2411 |
2412 | [[package]]
2413 | name = "pkg-config"
2414 | version = "0.3.32"
2415 | source = "registry+https://github.com/rust-lang/crates.io-index"
2416 | checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
2417 |
2418 | [[package]]
2419 | name = "png"
2420 | version = "0.18.0"
2421 | source = "registry+https://github.com/rust-lang/crates.io-index"
2422 | checksum = "97baced388464909d42d89643fe4361939af9b7ce7a31ee32a168f832a70f2a0"
2423 | dependencies = [
2424 | "bitflags 2.9.4",
2425 | "crc32fast",
2426 | "fdeflate",
2427 | "flate2",
2428 | "miniz_oxide",
2429 | ]
2430 |
2431 | [[package]]
2432 | name = "polling"
2433 | version = "3.11.0"
2434 | source = "registry+https://github.com/rust-lang/crates.io-index"
2435 | checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218"
2436 | dependencies = [
2437 | "cfg-if",
2438 | "concurrent-queue",
2439 | "hermit-abi",
2440 | "pin-project-lite",
2441 | "rustix 1.1.2",
2442 | "windows-sys 0.61.0",
2443 | ]
2444 |
2445 | [[package]]
2446 | name = "pollster"
2447 | version = "0.4.0"
2448 | source = "registry+https://github.com/rust-lang/crates.io-index"
2449 | checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3"
2450 |
2451 | [[package]]
2452 | name = "portable-atomic"
2453 | version = "1.11.1"
2454 | source = "registry+https://github.com/rust-lang/crates.io-index"
2455 | checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483"
2456 |
2457 | [[package]]
2458 | name = "portable-atomic-util"
2459 | version = "0.2.4"
2460 | source = "registry+https://github.com/rust-lang/crates.io-index"
2461 | checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507"
2462 | dependencies = [
2463 | "portable-atomic",
2464 | ]
2465 |
2466 | [[package]]
2467 | name = "potential_utf"
2468 | version = "0.1.3"
2469 | source = "registry+https://github.com/rust-lang/crates.io-index"
2470 | checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a"
2471 | dependencies = [
2472 | "zerovec",
2473 | ]
2474 |
2475 | [[package]]
2476 | name = "presser"
2477 | version = "0.3.1"
2478 | source = "registry+https://github.com/rust-lang/crates.io-index"
2479 | checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa"
2480 |
2481 | [[package]]
2482 | name = "proc-macro-crate"
2483 | version = "3.4.0"
2484 | source = "registry+https://github.com/rust-lang/crates.io-index"
2485 | checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983"
2486 | dependencies = [
2487 | "toml_edit",
2488 | ]
2489 |
2490 | [[package]]
2491 | name = "proc-macro2"
2492 | version = "1.0.101"
2493 | source = "registry+https://github.com/rust-lang/crates.io-index"
2494 | checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de"
2495 | dependencies = [
2496 | "unicode-ident",
2497 | ]
2498 |
2499 | [[package]]
2500 | name = "profiling"
2501 | version = "1.0.17"
2502 | source = "registry+https://github.com/rust-lang/crates.io-index"
2503 | checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773"
2504 |
2505 | [[package]]
2506 | name = "pxfm"
2507 | version = "0.1.24"
2508 | source = "registry+https://github.com/rust-lang/crates.io-index"
2509 | checksum = "83f9b339b02259ada5c0f4a389b7fb472f933aa17ce176fd2ad98f28bb401fde"
2510 | dependencies = [
2511 | "num-traits",
2512 | ]
2513 |
2514 | [[package]]
2515 | name = "quick-error"
2516 | version = "2.0.1"
2517 | source = "registry+https://github.com/rust-lang/crates.io-index"
2518 | checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3"
2519 |
2520 | [[package]]
2521 | name = "quick-xml"
2522 | version = "0.36.2"
2523 | source = "registry+https://github.com/rust-lang/crates.io-index"
2524 | checksum = "f7649a7b4df05aed9ea7ec6f628c67c9953a43869b8bc50929569b2999d443fe"
2525 | dependencies = [
2526 | "memchr",
2527 | "serde",
2528 | ]
2529 |
2530 | [[package]]
2531 | name = "quick-xml"
2532 | version = "0.37.5"
2533 | source = "registry+https://github.com/rust-lang/crates.io-index"
2534 | checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb"
2535 | dependencies = [
2536 | "memchr",
2537 | ]
2538 |
2539 | [[package]]
2540 | name = "quote"
2541 | version = "1.0.40"
2542 | source = "registry+https://github.com/rust-lang/crates.io-index"
2543 | checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
2544 | dependencies = [
2545 | "proc-macro2",
2546 | ]
2547 |
2548 | [[package]]
2549 | name = "r-efi"
2550 | version = "5.3.0"
2551 | source = "registry+https://github.com/rust-lang/crates.io-index"
2552 | checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
2553 |
2554 | [[package]]
2555 | name = "range-alloc"
2556 | version = "0.1.4"
2557 | source = "registry+https://github.com/rust-lang/crates.io-index"
2558 | checksum = "c3d6831663a5098ea164f89cff59c6284e95f4e3c76ce9848d4529f5ccca9bde"
2559 |
2560 | [[package]]
2561 | name = "raw-window-handle"
2562 | version = "0.6.2"
2563 | source = "registry+https://github.com/rust-lang/crates.io-index"
2564 | checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539"
2565 |
2566 | [[package]]
2567 | name = "redox_syscall"
2568 | version = "0.4.1"
2569 | source = "registry+https://github.com/rust-lang/crates.io-index"
2570 | checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
2571 | dependencies = [
2572 | "bitflags 1.3.2",
2573 | ]
2574 |
2575 | [[package]]
2576 | name = "redox_syscall"
2577 | version = "0.5.17"
2578 | source = "registry+https://github.com/rust-lang/crates.io-index"
2579 | checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77"
2580 | dependencies = [
2581 | "bitflags 2.9.4",
2582 | ]
2583 |
2584 | [[package]]
2585 | name = "regex"
2586 | version = "1.11.2"
2587 | source = "registry+https://github.com/rust-lang/crates.io-index"
2588 | checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912"
2589 | dependencies = [
2590 | "aho-corasick",
2591 | "memchr",
2592 | "regex-automata",
2593 | "regex-syntax",
2594 | ]
2595 |
2596 | [[package]]
2597 | name = "regex-automata"
2598 | version = "0.4.10"
2599 | source = "registry+https://github.com/rust-lang/crates.io-index"
2600 | checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6"
2601 | dependencies = [
2602 | "aho-corasick",
2603 | "memchr",
2604 | "regex-syntax",
2605 | ]
2606 |
2607 | [[package]]
2608 | name = "regex-syntax"
2609 | version = "0.8.6"
2610 | source = "registry+https://github.com/rust-lang/crates.io-index"
2611 | checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001"
2612 |
2613 | [[package]]
2614 | name = "renderdoc-sys"
2615 | version = "1.1.0"
2616 | source = "registry+https://github.com/rust-lang/crates.io-index"
2617 | checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832"
2618 |
2619 | [[package]]
2620 | name = "rustc-hash"
2621 | version = "1.1.0"
2622 | source = "registry+https://github.com/rust-lang/crates.io-index"
2623 | checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
2624 |
2625 | [[package]]
2626 | name = "rustc-hash"
2627 | version = "2.1.1"
2628 | source = "registry+https://github.com/rust-lang/crates.io-index"
2629 | checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d"
2630 |
2631 | [[package]]
2632 | name = "rustix"
2633 | version = "0.38.44"
2634 | source = "registry+https://github.com/rust-lang/crates.io-index"
2635 | checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154"
2636 | dependencies = [
2637 | "bitflags 2.9.4",
2638 | "errno",
2639 | "libc",
2640 | "linux-raw-sys 0.4.15",
2641 | "windows-sys 0.59.0",
2642 | ]
2643 |
2644 | [[package]]
2645 | name = "rustix"
2646 | version = "1.1.2"
2647 | source = "registry+https://github.com/rust-lang/crates.io-index"
2648 | checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e"
2649 | dependencies = [
2650 | "bitflags 2.9.4",
2651 | "errno",
2652 | "libc",
2653 | "linux-raw-sys 0.11.0",
2654 | "windows-sys 0.61.0",
2655 | ]
2656 |
2657 | [[package]]
2658 | name = "rustversion"
2659 | version = "1.0.22"
2660 | source = "registry+https://github.com/rust-lang/crates.io-index"
2661 | checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
2662 |
2663 | [[package]]
2664 | name = "same-file"
2665 | version = "1.0.6"
2666 | source = "registry+https://github.com/rust-lang/crates.io-index"
2667 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
2668 | dependencies = [
2669 | "winapi-util",
2670 | ]
2671 |
2672 | [[package]]
2673 | name = "scoped-tls"
2674 | version = "1.0.1"
2675 | source = "registry+https://github.com/rust-lang/crates.io-index"
2676 | checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
2677 |
2678 | [[package]]
2679 | name = "scopeguard"
2680 | version = "1.2.0"
2681 | source = "registry+https://github.com/rust-lang/crates.io-index"
2682 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
2683 |
2684 | [[package]]
2685 | name = "serde"
2686 | version = "1.0.226"
2687 | source = "registry+https://github.com/rust-lang/crates.io-index"
2688 | checksum = "0dca6411025b24b60bfa7ec1fe1f8e710ac09782dca409ee8237ba74b51295fd"
2689 | dependencies = [
2690 | "serde_core",
2691 | "serde_derive",
2692 | ]
2693 |
2694 | [[package]]
2695 | name = "serde_core"
2696 | version = "1.0.226"
2697 | source = "registry+https://github.com/rust-lang/crates.io-index"
2698 | checksum = "ba2ba63999edb9dac981fb34b3e5c0d111a69b0924e253ed29d83f7c99e966a4"
2699 | dependencies = [
2700 | "serde_derive",
2701 | ]
2702 |
2703 | [[package]]
2704 | name = "serde_derive"
2705 | version = "1.0.226"
2706 | source = "registry+https://github.com/rust-lang/crates.io-index"
2707 | checksum = "8db53ae22f34573731bafa1db20f04027b2d25e02d8205921b569171699cdb33"
2708 | dependencies = [
2709 | "proc-macro2",
2710 | "quote",
2711 | "syn",
2712 | ]
2713 |
2714 | [[package]]
2715 | name = "serde_repr"
2716 | version = "0.1.20"
2717 | source = "registry+https://github.com/rust-lang/crates.io-index"
2718 | checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c"
2719 | dependencies = [
2720 | "proc-macro2",
2721 | "quote",
2722 | "syn",
2723 | ]
2724 |
2725 | [[package]]
2726 | name = "shlex"
2727 | version = "1.3.0"
2728 | source = "registry+https://github.com/rust-lang/crates.io-index"
2729 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
2730 |
2731 | [[package]]
2732 | name = "signal-hook-registry"
2733 | version = "1.4.6"
2734 | source = "registry+https://github.com/rust-lang/crates.io-index"
2735 | checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b"
2736 | dependencies = [
2737 | "libc",
2738 | ]
2739 |
2740 | [[package]]
2741 | name = "simd-adler32"
2742 | version = "0.3.7"
2743 | source = "registry+https://github.com/rust-lang/crates.io-index"
2744 | checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
2745 |
2746 | [[package]]
2747 | name = "slab"
2748 | version = "0.4.11"
2749 | source = "registry+https://github.com/rust-lang/crates.io-index"
2750 | checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589"
2751 |
2752 | [[package]]
2753 | name = "slotmap"
2754 | version = "1.0.7"
2755 | source = "registry+https://github.com/rust-lang/crates.io-index"
2756 | checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a"
2757 | dependencies = [
2758 | "version_check",
2759 | ]
2760 |
2761 | [[package]]
2762 | name = "smallvec"
2763 | version = "1.15.1"
2764 | source = "registry+https://github.com/rust-lang/crates.io-index"
2765 | checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
2766 |
2767 | [[package]]
2768 | name = "smithay-client-toolkit"
2769 | version = "0.19.2"
2770 | source = "registry+https://github.com/rust-lang/crates.io-index"
2771 | checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016"
2772 | dependencies = [
2773 | "bitflags 2.9.4",
2774 | "calloop",
2775 | "calloop-wayland-source",
2776 | "cursor-icon",
2777 | "libc",
2778 | "log",
2779 | "memmap2",
2780 | "rustix 0.38.44",
2781 | "thiserror 1.0.69",
2782 | "wayland-backend",
2783 | "wayland-client",
2784 | "wayland-csd-frame",
2785 | "wayland-cursor",
2786 | "wayland-protocols",
2787 | "wayland-protocols-wlr",
2788 | "wayland-scanner",
2789 | "xkeysym",
2790 | ]
2791 |
2792 | [[package]]
2793 | name = "smithay-clipboard"
2794 | version = "0.7.2"
2795 | source = "registry+https://github.com/rust-lang/crates.io-index"
2796 | checksum = "cc8216eec463674a0e90f29e0ae41a4db573ec5b56b1c6c1c71615d249b6d846"
2797 | dependencies = [
2798 | "libc",
2799 | "smithay-client-toolkit",
2800 | "wayland-backend",
2801 | ]
2802 |
2803 | [[package]]
2804 | name = "smol_str"
2805 | version = "0.2.2"
2806 | source = "registry+https://github.com/rust-lang/crates.io-index"
2807 | checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead"
2808 | dependencies = [
2809 | "serde",
2810 | ]
2811 |
2812 | [[package]]
2813 | name = "spirv"
2814 | version = "0.3.0+sdk-1.3.268.0"
2815 | source = "registry+https://github.com/rust-lang/crates.io-index"
2816 | checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844"
2817 | dependencies = [
2818 | "bitflags 2.9.4",
2819 | ]
2820 |
2821 | [[package]]
2822 | name = "stable_deref_trait"
2823 | version = "1.2.0"
2824 | source = "registry+https://github.com/rust-lang/crates.io-index"
2825 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
2826 |
2827 | [[package]]
2828 | name = "static_assertions"
2829 | version = "1.1.0"
2830 | source = "registry+https://github.com/rust-lang/crates.io-index"
2831 | checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
2832 |
2833 | [[package]]
2834 | name = "strum"
2835 | version = "0.26.3"
2836 | source = "registry+https://github.com/rust-lang/crates.io-index"
2837 | checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06"
2838 | dependencies = [
2839 | "strum_macros",
2840 | ]
2841 |
2842 | [[package]]
2843 | name = "strum_macros"
2844 | version = "0.26.4"
2845 | source = "registry+https://github.com/rust-lang/crates.io-index"
2846 | checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be"
2847 | dependencies = [
2848 | "heck",
2849 | "proc-macro2",
2850 | "quote",
2851 | "rustversion",
2852 | "syn",
2853 | ]
2854 |
2855 | [[package]]
2856 | name = "syn"
2857 | version = "2.0.106"
2858 | source = "registry+https://github.com/rust-lang/crates.io-index"
2859 | checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6"
2860 | dependencies = [
2861 | "proc-macro2",
2862 | "quote",
2863 | "unicode-ident",
2864 | ]
2865 |
2866 | [[package]]
2867 | name = "synstructure"
2868 | version = "0.13.2"
2869 | source = "registry+https://github.com/rust-lang/crates.io-index"
2870 | checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
2871 | dependencies = [
2872 | "proc-macro2",
2873 | "quote",
2874 | "syn",
2875 | ]
2876 |
2877 | [[package]]
2878 | name = "tempfile"
2879 | version = "3.22.0"
2880 | source = "registry+https://github.com/rust-lang/crates.io-index"
2881 | checksum = "84fa4d11fadde498443cca10fd3ac23c951f0dc59e080e9f4b93d4df4e4eea53"
2882 | dependencies = [
2883 | "fastrand",
2884 | "getrandom",
2885 | "once_cell",
2886 | "rustix 1.1.2",
2887 | "windows-sys 0.61.0",
2888 | ]
2889 |
2890 | [[package]]
2891 | name = "termcolor"
2892 | version = "1.4.1"
2893 | source = "registry+https://github.com/rust-lang/crates.io-index"
2894 | checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
2895 | dependencies = [
2896 | "winapi-util",
2897 | ]
2898 |
2899 | [[package]]
2900 | name = "thiserror"
2901 | version = "1.0.69"
2902 | source = "registry+https://github.com/rust-lang/crates.io-index"
2903 | checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
2904 | dependencies = [
2905 | "thiserror-impl 1.0.69",
2906 | ]
2907 |
2908 | [[package]]
2909 | name = "thiserror"
2910 | version = "2.0.16"
2911 | source = "registry+https://github.com/rust-lang/crates.io-index"
2912 | checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0"
2913 | dependencies = [
2914 | "thiserror-impl 2.0.16",
2915 | ]
2916 |
2917 | [[package]]
2918 | name = "thiserror-impl"
2919 | version = "1.0.69"
2920 | source = "registry+https://github.com/rust-lang/crates.io-index"
2921 | checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
2922 | dependencies = [
2923 | "proc-macro2",
2924 | "quote",
2925 | "syn",
2926 | ]
2927 |
2928 | [[package]]
2929 | name = "thiserror-impl"
2930 | version = "2.0.16"
2931 | source = "registry+https://github.com/rust-lang/crates.io-index"
2932 | checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960"
2933 | dependencies = [
2934 | "proc-macro2",
2935 | "quote",
2936 | "syn",
2937 | ]
2938 |
2939 | [[package]]
2940 | name = "tiff"
2941 | version = "0.10.3"
2942 | source = "registry+https://github.com/rust-lang/crates.io-index"
2943 | checksum = "af9605de7fee8d9551863fd692cce7637f548dbd9db9180fcc07ccc6d26c336f"
2944 | dependencies = [
2945 | "fax",
2946 | "flate2",
2947 | "half",
2948 | "quick-error",
2949 | "weezl",
2950 | "zune-jpeg",
2951 | ]
2952 |
2953 | [[package]]
2954 | name = "tinystr"
2955 | version = "0.8.1"
2956 | source = "registry+https://github.com/rust-lang/crates.io-index"
2957 | checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b"
2958 | dependencies = [
2959 | "displaydoc",
2960 | "zerovec",
2961 | ]
2962 |
2963 | [[package]]
2964 | name = "toml_datetime"
2965 | version = "0.7.2"
2966 | source = "registry+https://github.com/rust-lang/crates.io-index"
2967 | checksum = "32f1085dec27c2b6632b04c80b3bb1b4300d6495d1e129693bdda7d91e72eec1"
2968 | dependencies = [
2969 | "serde_core",
2970 | ]
2971 |
2972 | [[package]]
2973 | name = "toml_edit"
2974 | version = "0.23.6"
2975 | source = "registry+https://github.com/rust-lang/crates.io-index"
2976 | checksum = "f3effe7c0e86fdff4f69cdd2ccc1b96f933e24811c5441d44904e8683e27184b"
2977 | dependencies = [
2978 | "indexmap",
2979 | "toml_datetime",
2980 | "toml_parser",
2981 | "winnow",
2982 | ]
2983 |
2984 | [[package]]
2985 | name = "toml_parser"
2986 | version = "1.0.3"
2987 | source = "registry+https://github.com/rust-lang/crates.io-index"
2988 | checksum = "4cf893c33be71572e0e9aa6dd15e6677937abd686b066eac3f8cd3531688a627"
2989 | dependencies = [
2990 | "winnow",
2991 | ]
2992 |
2993 | [[package]]
2994 | name = "tracing"
2995 | version = "0.1.41"
2996 | source = "registry+https://github.com/rust-lang/crates.io-index"
2997 | checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0"
2998 | dependencies = [
2999 | "pin-project-lite",
3000 | "tracing-attributes",
3001 | "tracing-core",
3002 | ]
3003 |
3004 | [[package]]
3005 | name = "tracing-attributes"
3006 | version = "0.1.30"
3007 | source = "registry+https://github.com/rust-lang/crates.io-index"
3008 | checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903"
3009 | dependencies = [
3010 | "proc-macro2",
3011 | "quote",
3012 | "syn",
3013 | ]
3014 |
3015 | [[package]]
3016 | name = "tracing-core"
3017 | version = "0.1.34"
3018 | source = "registry+https://github.com/rust-lang/crates.io-index"
3019 | checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678"
3020 | dependencies = [
3021 | "once_cell",
3022 | ]
3023 |
3024 | [[package]]
3025 | name = "tree_magic_mini"
3026 | version = "3.2.0"
3027 | source = "registry+https://github.com/rust-lang/crates.io-index"
3028 | checksum = "f943391d896cdfe8eec03a04d7110332d445be7df856db382dd96a730667562c"
3029 | dependencies = [
3030 | "memchr",
3031 | "nom",
3032 | "once_cell",
3033 | "petgraph",
3034 | ]
3035 |
3036 | [[package]]
3037 | name = "ttf-parser"
3038 | version = "0.25.1"
3039 | source = "registry+https://github.com/rust-lang/crates.io-index"
3040 | checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31"
3041 |
3042 | [[package]]
3043 | name = "type-map"
3044 | version = "0.5.1"
3045 | source = "registry+https://github.com/rust-lang/crates.io-index"
3046 | checksum = "cb30dbbd9036155e74adad6812e9898d03ec374946234fbcebd5dfc7b9187b90"
3047 | dependencies = [
3048 | "rustc-hash 2.1.1",
3049 | ]
3050 |
3051 | [[package]]
3052 | name = "uds_windows"
3053 | version = "1.1.0"
3054 | source = "registry+https://github.com/rust-lang/crates.io-index"
3055 | checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9"
3056 | dependencies = [
3057 | "memoffset",
3058 | "tempfile",
3059 | "winapi",
3060 | ]
3061 |
3062 | [[package]]
3063 | name = "unicode-ident"
3064 | version = "1.0.19"
3065 | source = "registry+https://github.com/rust-lang/crates.io-index"
3066 | checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d"
3067 |
3068 | [[package]]
3069 | name = "unicode-segmentation"
3070 | version = "1.12.0"
3071 | source = "registry+https://github.com/rust-lang/crates.io-index"
3072 | checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493"
3073 |
3074 | [[package]]
3075 | name = "unicode-width"
3076 | version = "0.2.1"
3077 | source = "registry+https://github.com/rust-lang/crates.io-index"
3078 | checksum = "4a1a07cc7db3810833284e8d372ccdc6da29741639ecc70c9ec107df0fa6154c"
3079 |
3080 | [[package]]
3081 | name = "unty"
3082 | version = "0.0.4"
3083 | source = "registry+https://github.com/rust-lang/crates.io-index"
3084 | checksum = "6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae"
3085 |
3086 | [[package]]
3087 | name = "url"
3088 | version = "2.5.7"
3089 | source = "registry+https://github.com/rust-lang/crates.io-index"
3090 | checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b"
3091 | dependencies = [
3092 | "form_urlencoded",
3093 | "idna",
3094 | "percent-encoding",
3095 | "serde",
3096 | ]
3097 |
3098 | [[package]]
3099 | name = "utf8_iter"
3100 | version = "1.0.4"
3101 | source = "registry+https://github.com/rust-lang/crates.io-index"
3102 | checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
3103 |
3104 | [[package]]
3105 | name = "utf8parse"
3106 | version = "0.2.2"
3107 | source = "registry+https://github.com/rust-lang/crates.io-index"
3108 | checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
3109 |
3110 | [[package]]
3111 | name = "version_check"
3112 | version = "0.9.5"
3113 | source = "registry+https://github.com/rust-lang/crates.io-index"
3114 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
3115 |
3116 | [[package]]
3117 | name = "virtue"
3118 | version = "0.0.18"
3119 | source = "registry+https://github.com/rust-lang/crates.io-index"
3120 | checksum = "051eb1abcf10076295e815102942cc58f9d5e3b4560e46e53c21e8ff6f3af7b1"
3121 |
3122 | [[package]]
3123 | name = "walkdir"
3124 | version = "2.5.0"
3125 | source = "registry+https://github.com/rust-lang/crates.io-index"
3126 | checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
3127 | dependencies = [
3128 | "same-file",
3129 | "winapi-util",
3130 | ]
3131 |
3132 | [[package]]
3133 | name = "wasi"
3134 | version = "0.14.7+wasi-0.2.4"
3135 | source = "registry+https://github.com/rust-lang/crates.io-index"
3136 | checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c"
3137 | dependencies = [
3138 | "wasip2",
3139 | ]
3140 |
3141 | [[package]]
3142 | name = "wasip2"
3143 | version = "1.0.1+wasi-0.2.4"
3144 | source = "registry+https://github.com/rust-lang/crates.io-index"
3145 | checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7"
3146 | dependencies = [
3147 | "wit-bindgen",
3148 | ]
3149 |
3150 | [[package]]
3151 | name = "wasm-bindgen"
3152 | version = "0.2.103"
3153 | source = "registry+https://github.com/rust-lang/crates.io-index"
3154 | checksum = "ab10a69fbd0a177f5f649ad4d8d3305499c42bab9aef2f7ff592d0ec8f833819"
3155 | dependencies = [
3156 | "cfg-if",
3157 | "once_cell",
3158 | "rustversion",
3159 | "wasm-bindgen-macro",
3160 | "wasm-bindgen-shared",
3161 | ]
3162 |
3163 | [[package]]
3164 | name = "wasm-bindgen-backend"
3165 | version = "0.2.103"
3166 | source = "registry+https://github.com/rust-lang/crates.io-index"
3167 | checksum = "0bb702423545a6007bbc368fde243ba47ca275e549c8a28617f56f6ba53b1d1c"
3168 | dependencies = [
3169 | "bumpalo",
3170 | "log",
3171 | "proc-macro2",
3172 | "quote",
3173 | "syn",
3174 | "wasm-bindgen-shared",
3175 | ]
3176 |
3177 | [[package]]
3178 | name = "wasm-bindgen-futures"
3179 | version = "0.4.53"
3180 | source = "registry+https://github.com/rust-lang/crates.io-index"
3181 | checksum = "a0b221ff421256839509adbb55998214a70d829d3a28c69b4a6672e9d2a42f67"
3182 | dependencies = [
3183 | "cfg-if",
3184 | "js-sys",
3185 | "once_cell",
3186 | "wasm-bindgen",
3187 | "web-sys",
3188 | ]
3189 |
3190 | [[package]]
3191 | name = "wasm-bindgen-macro"
3192 | version = "0.2.103"
3193 | source = "registry+https://github.com/rust-lang/crates.io-index"
3194 | checksum = "fc65f4f411d91494355917b605e1480033152658d71f722a90647f56a70c88a0"
3195 | dependencies = [
3196 | "quote",
3197 | "wasm-bindgen-macro-support",
3198 | ]
3199 |
3200 | [[package]]
3201 | name = "wasm-bindgen-macro-support"
3202 | version = "0.2.103"
3203 | source = "registry+https://github.com/rust-lang/crates.io-index"
3204 | checksum = "ffc003a991398a8ee604a401e194b6b3a39677b3173d6e74495eb51b82e99a32"
3205 | dependencies = [
3206 | "proc-macro2",
3207 | "quote",
3208 | "syn",
3209 | "wasm-bindgen-backend",
3210 | "wasm-bindgen-shared",
3211 | ]
3212 |
3213 | [[package]]
3214 | name = "wasm-bindgen-shared"
3215 | version = "0.2.103"
3216 | source = "registry+https://github.com/rust-lang/crates.io-index"
3217 | checksum = "293c37f4efa430ca14db3721dfbe48d8c33308096bd44d80ebaa775ab71ba1cf"
3218 | dependencies = [
3219 | "unicode-ident",
3220 | ]
3221 |
3222 | [[package]]
3223 | name = "wayland-backend"
3224 | version = "0.3.11"
3225 | source = "registry+https://github.com/rust-lang/crates.io-index"
3226 | checksum = "673a33c33048a5ade91a6b139580fa174e19fb0d23f396dca9fa15f2e1e49b35"
3227 | dependencies = [
3228 | "cc",
3229 | "downcast-rs",
3230 | "rustix 1.1.2",
3231 | "scoped-tls",
3232 | "smallvec",
3233 | "wayland-sys",
3234 | ]
3235 |
3236 | [[package]]
3237 | name = "wayland-client"
3238 | version = "0.31.11"
3239 | source = "registry+https://github.com/rust-lang/crates.io-index"
3240 | checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d"
3241 | dependencies = [
3242 | "bitflags 2.9.4",
3243 | "rustix 1.1.2",
3244 | "wayland-backend",
3245 | "wayland-scanner",
3246 | ]
3247 |
3248 | [[package]]
3249 | name = "wayland-csd-frame"
3250 | version = "0.3.0"
3251 | source = "registry+https://github.com/rust-lang/crates.io-index"
3252 | checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e"
3253 | dependencies = [
3254 | "bitflags 2.9.4",
3255 | "cursor-icon",
3256 | "wayland-backend",
3257 | ]
3258 |
3259 | [[package]]
3260 | name = "wayland-cursor"
3261 | version = "0.31.11"
3262 | source = "registry+https://github.com/rust-lang/crates.io-index"
3263 | checksum = "447ccc440a881271b19e9989f75726d60faa09b95b0200a9b7eb5cc47c3eeb29"
3264 | dependencies = [
3265 | "rustix 1.1.2",
3266 | "wayland-client",
3267 | "xcursor",
3268 | ]
3269 |
3270 | [[package]]
3271 | name = "wayland-protocols"
3272 | version = "0.32.9"
3273 | source = "registry+https://github.com/rust-lang/crates.io-index"
3274 | checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901"
3275 | dependencies = [
3276 | "bitflags 2.9.4",
3277 | "wayland-backend",
3278 | "wayland-client",
3279 | "wayland-scanner",
3280 | ]
3281 |
3282 | [[package]]
3283 | name = "wayland-protocols-plasma"
3284 | version = "0.3.9"
3285 | source = "registry+https://github.com/rust-lang/crates.io-index"
3286 | checksum = "a07a14257c077ab3279987c4f8bb987851bf57081b93710381daea94f2c2c032"
3287 | dependencies = [
3288 | "bitflags 2.9.4",
3289 | "wayland-backend",
3290 | "wayland-client",
3291 | "wayland-protocols",
3292 | "wayland-scanner",
3293 | ]
3294 |
3295 | [[package]]
3296 | name = "wayland-protocols-wlr"
3297 | version = "0.3.9"
3298 | source = "registry+https://github.com/rust-lang/crates.io-index"
3299 | checksum = "efd94963ed43cf9938a090ca4f7da58eb55325ec8200c3848963e98dc25b78ec"
3300 | dependencies = [
3301 | "bitflags 2.9.4",
3302 | "wayland-backend",
3303 | "wayland-client",
3304 | "wayland-protocols",
3305 | "wayland-scanner",
3306 | ]
3307 |
3308 | [[package]]
3309 | name = "wayland-scanner"
3310 | version = "0.31.7"
3311 | source = "registry+https://github.com/rust-lang/crates.io-index"
3312 | checksum = "54cb1e9dc49da91950bdfd8b848c49330536d9d1fb03d4bfec8cae50caa50ae3"
3313 | dependencies = [
3314 | "proc-macro2",
3315 | "quick-xml 0.37.5",
3316 | "quote",
3317 | ]
3318 |
3319 | [[package]]
3320 | name = "wayland-sys"
3321 | version = "0.31.7"
3322 | source = "registry+https://github.com/rust-lang/crates.io-index"
3323 | checksum = "34949b42822155826b41db8e5d0c1be3a2bd296c747577a43a3e6daefc296142"
3324 | dependencies = [
3325 | "dlib",
3326 | "log",
3327 | "once_cell",
3328 | "pkg-config",
3329 | ]
3330 |
3331 | [[package]]
3332 | name = "web-sys"
3333 | version = "0.3.80"
3334 | source = "registry+https://github.com/rust-lang/crates.io-index"
3335 | checksum = "fbe734895e869dc429d78c4b433f8d17d95f8d05317440b4fad5ab2d33e596dc"
3336 | dependencies = [
3337 | "js-sys",
3338 | "wasm-bindgen",
3339 | ]
3340 |
3341 | [[package]]
3342 | name = "web-time"
3343 | version = "1.1.0"
3344 | source = "registry+https://github.com/rust-lang/crates.io-index"
3345 | checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb"
3346 | dependencies = [
3347 | "js-sys",
3348 | "wasm-bindgen",
3349 | ]
3350 |
3351 | [[package]]
3352 | name = "webbrowser"
3353 | version = "1.0.5"
3354 | source = "registry+https://github.com/rust-lang/crates.io-index"
3355 | checksum = "aaf4f3c0ba838e82b4e5ccc4157003fb8c324ee24c058470ffb82820becbde98"
3356 | dependencies = [
3357 | "core-foundation 0.10.1",
3358 | "jni",
3359 | "log",
3360 | "ndk-context",
3361 | "objc2 0.6.2",
3362 | "objc2-foundation 0.3.1",
3363 | "url",
3364 | "web-sys",
3365 | ]
3366 |
3367 | [[package]]
3368 | name = "weezl"
3369 | version = "0.1.10"
3370 | source = "registry+https://github.com/rust-lang/crates.io-index"
3371 | checksum = "a751b3277700db47d3e574514de2eced5e54dc8a5436a3bf7a0b248b2cee16f3"
3372 |
3373 | [[package]]
3374 | name = "wgpu"
3375 | version = "25.0.2"
3376 | source = "registry+https://github.com/rust-lang/crates.io-index"
3377 | checksum = "ec8fb398f119472be4d80bc3647339f56eb63b2a331f6a3d16e25d8144197dd9"
3378 | dependencies = [
3379 | "arrayvec",
3380 | "bitflags 2.9.4",
3381 | "cfg_aliases",
3382 | "document-features",
3383 | "hashbrown 0.15.5",
3384 | "js-sys",
3385 | "log",
3386 | "naga",
3387 | "parking_lot",
3388 | "portable-atomic",
3389 | "profiling",
3390 | "raw-window-handle",
3391 | "smallvec",
3392 | "static_assertions",
3393 | "wasm-bindgen",
3394 | "wasm-bindgen-futures",
3395 | "web-sys",
3396 | "wgpu-core",
3397 | "wgpu-hal",
3398 | "wgpu-types",
3399 | ]
3400 |
3401 | [[package]]
3402 | name = "wgpu-core"
3403 | version = "25.0.2"
3404 | source = "registry+https://github.com/rust-lang/crates.io-index"
3405 | checksum = "f7b882196f8368511d613c6aeec80655160db6646aebddf8328879a88d54e500"
3406 | dependencies = [
3407 | "arrayvec",
3408 | "bit-set",
3409 | "bit-vec",
3410 | "bitflags 2.9.4",
3411 | "cfg_aliases",
3412 | "document-features",
3413 | "hashbrown 0.15.5",
3414 | "indexmap",
3415 | "log",
3416 | "naga",
3417 | "once_cell",
3418 | "parking_lot",
3419 | "portable-atomic",
3420 | "profiling",
3421 | "raw-window-handle",
3422 | "rustc-hash 1.1.0",
3423 | "smallvec",
3424 | "thiserror 2.0.16",
3425 | "wgpu-core-deps-apple",
3426 | "wgpu-core-deps-emscripten",
3427 | "wgpu-core-deps-wasm",
3428 | "wgpu-core-deps-windows-linux-android",
3429 | "wgpu-hal",
3430 | "wgpu-types",
3431 | ]
3432 |
3433 | [[package]]
3434 | name = "wgpu-core-deps-apple"
3435 | version = "25.0.0"
3436 | source = "registry+https://github.com/rust-lang/crates.io-index"
3437 | checksum = "cfd488b3239b6b7b185c3b045c39ca6bf8af34467a4c5de4e0b1a564135d093d"
3438 | dependencies = [
3439 | "wgpu-hal",
3440 | ]
3441 |
3442 | [[package]]
3443 | name = "wgpu-core-deps-emscripten"
3444 | version = "25.0.0"
3445 | source = "registry+https://github.com/rust-lang/crates.io-index"
3446 | checksum = "f09ad7aceb3818e52539acc679f049d3475775586f3f4e311c30165cf2c00445"
3447 | dependencies = [
3448 | "wgpu-hal",
3449 | ]
3450 |
3451 | [[package]]
3452 | name = "wgpu-core-deps-wasm"
3453 | version = "25.0.0"
3454 | source = "registry+https://github.com/rust-lang/crates.io-index"
3455 | checksum = "eca8809ad123f6c7f2c5e01a2c7117c4fdfd02f70bd422ee2533f69dfa98756c"
3456 | dependencies = [
3457 | "wgpu-hal",
3458 | ]
3459 |
3460 | [[package]]
3461 | name = "wgpu-core-deps-windows-linux-android"
3462 | version = "25.0.0"
3463 | source = "registry+https://github.com/rust-lang/crates.io-index"
3464 | checksum = "cba5fb5f7f9c98baa7c889d444f63ace25574833df56f5b817985f641af58e46"
3465 | dependencies = [
3466 | "wgpu-hal",
3467 | ]
3468 |
3469 | [[package]]
3470 | name = "wgpu-hal"
3471 | version = "25.0.2"
3472 | source = "registry+https://github.com/rust-lang/crates.io-index"
3473 | checksum = "f968767fe4d3d33747bbd1473ccd55bf0f6451f55d733b5597e67b5deab4ad17"
3474 | dependencies = [
3475 | "android_system_properties",
3476 | "arrayvec",
3477 | "ash",
3478 | "bit-set",
3479 | "bitflags 2.9.4",
3480 | "block",
3481 | "bytemuck",
3482 | "cfg-if",
3483 | "cfg_aliases",
3484 | "core-graphics-types",
3485 | "glow",
3486 | "glutin_wgl_sys",
3487 | "gpu-alloc",
3488 | "gpu-allocator",
3489 | "gpu-descriptor",
3490 | "hashbrown 0.15.5",
3491 | "js-sys",
3492 | "khronos-egl",
3493 | "libc",
3494 | "libloading",
3495 | "log",
3496 | "metal",
3497 | "naga",
3498 | "ndk-sys 0.5.0+25.2.9519653",
3499 | "objc",
3500 | "ordered-float",
3501 | "parking_lot",
3502 | "portable-atomic",
3503 | "profiling",
3504 | "range-alloc",
3505 | "raw-window-handle",
3506 | "renderdoc-sys",
3507 | "smallvec",
3508 | "thiserror 2.0.16",
3509 | "wasm-bindgen",
3510 | "web-sys",
3511 | "wgpu-types",
3512 | "windows 0.58.0",
3513 | "windows-core 0.58.0",
3514 | ]
3515 |
3516 | [[package]]
3517 | name = "wgpu-types"
3518 | version = "25.0.0"
3519 | source = "registry+https://github.com/rust-lang/crates.io-index"
3520 | checksum = "2aa49460c2a8ee8edba3fca54325540d904dd85b2e086ada762767e17d06e8bc"
3521 | dependencies = [
3522 | "bitflags 2.9.4",
3523 | "bytemuck",
3524 | "js-sys",
3525 | "log",
3526 | "thiserror 2.0.16",
3527 | "web-sys",
3528 | ]
3529 |
3530 | [[package]]
3531 | name = "winapi"
3532 | version = "0.3.9"
3533 | source = "registry+https://github.com/rust-lang/crates.io-index"
3534 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
3535 | dependencies = [
3536 | "winapi-i686-pc-windows-gnu",
3537 | "winapi-x86_64-pc-windows-gnu",
3538 | ]
3539 |
3540 | [[package]]
3541 | name = "winapi-i686-pc-windows-gnu"
3542 | version = "0.4.0"
3543 | source = "registry+https://github.com/rust-lang/crates.io-index"
3544 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
3545 |
3546 | [[package]]
3547 | name = "winapi-util"
3548 | version = "0.1.11"
3549 | source = "registry+https://github.com/rust-lang/crates.io-index"
3550 | checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
3551 | dependencies = [
3552 | "windows-sys 0.61.0",
3553 | ]
3554 |
3555 | [[package]]
3556 | name = "winapi-x86_64-pc-windows-gnu"
3557 | version = "0.4.0"
3558 | source = "registry+https://github.com/rust-lang/crates.io-index"
3559 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
3560 |
3561 | [[package]]
3562 | name = "windows"
3563 | version = "0.58.0"
3564 | source = "registry+https://github.com/rust-lang/crates.io-index"
3565 | checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6"
3566 | dependencies = [
3567 | "windows-core 0.58.0",
3568 | "windows-targets 0.52.6",
3569 | ]
3570 |
3571 | [[package]]
3572 | name = "windows"
3573 | version = "0.61.3"
3574 | source = "registry+https://github.com/rust-lang/crates.io-index"
3575 | checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893"
3576 | dependencies = [
3577 | "windows-collections",
3578 | "windows-core 0.61.2",
3579 | "windows-future",
3580 | "windows-link 0.1.3",
3581 | "windows-numerics",
3582 | ]
3583 |
3584 | [[package]]
3585 | name = "windows-collections"
3586 | version = "0.2.0"
3587 | source = "registry+https://github.com/rust-lang/crates.io-index"
3588 | checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8"
3589 | dependencies = [
3590 | "windows-core 0.61.2",
3591 | ]
3592 |
3593 | [[package]]
3594 | name = "windows-core"
3595 | version = "0.58.0"
3596 | source = "registry+https://github.com/rust-lang/crates.io-index"
3597 | checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99"
3598 | dependencies = [
3599 | "windows-implement 0.58.0",
3600 | "windows-interface 0.58.0",
3601 | "windows-result 0.2.0",
3602 | "windows-strings 0.1.0",
3603 | "windows-targets 0.52.6",
3604 | ]
3605 |
3606 | [[package]]
3607 | name = "windows-core"
3608 | version = "0.61.2"
3609 | source = "registry+https://github.com/rust-lang/crates.io-index"
3610 | checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3"
3611 | dependencies = [
3612 | "windows-implement 0.60.0",
3613 | "windows-interface 0.59.1",
3614 | "windows-link 0.1.3",
3615 | "windows-result 0.3.4",
3616 | "windows-strings 0.4.2",
3617 | ]
3618 |
3619 | [[package]]
3620 | name = "windows-future"
3621 | version = "0.2.1"
3622 | source = "registry+https://github.com/rust-lang/crates.io-index"
3623 | checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e"
3624 | dependencies = [
3625 | "windows-core 0.61.2",
3626 | "windows-link 0.1.3",
3627 | "windows-threading",
3628 | ]
3629 |
3630 | [[package]]
3631 | name = "windows-implement"
3632 | version = "0.58.0"
3633 | source = "registry+https://github.com/rust-lang/crates.io-index"
3634 | checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b"
3635 | dependencies = [
3636 | "proc-macro2",
3637 | "quote",
3638 | "syn",
3639 | ]
3640 |
3641 | [[package]]
3642 | name = "windows-implement"
3643 | version = "0.60.0"
3644 | source = "registry+https://github.com/rust-lang/crates.io-index"
3645 | checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836"
3646 | dependencies = [
3647 | "proc-macro2",
3648 | "quote",
3649 | "syn",
3650 | ]
3651 |
3652 | [[package]]
3653 | name = "windows-interface"
3654 | version = "0.58.0"
3655 | source = "registry+https://github.com/rust-lang/crates.io-index"
3656 | checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515"
3657 | dependencies = [
3658 | "proc-macro2",
3659 | "quote",
3660 | "syn",
3661 | ]
3662 |
3663 | [[package]]
3664 | name = "windows-interface"
3665 | version = "0.59.1"
3666 | source = "registry+https://github.com/rust-lang/crates.io-index"
3667 | checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8"
3668 | dependencies = [
3669 | "proc-macro2",
3670 | "quote",
3671 | "syn",
3672 | ]
3673 |
3674 | [[package]]
3675 | name = "windows-link"
3676 | version = "0.1.3"
3677 | source = "registry+https://github.com/rust-lang/crates.io-index"
3678 | checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a"
3679 |
3680 | [[package]]
3681 | name = "windows-link"
3682 | version = "0.2.0"
3683 | source = "registry+https://github.com/rust-lang/crates.io-index"
3684 | checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65"
3685 |
3686 | [[package]]
3687 | name = "windows-numerics"
3688 | version = "0.2.0"
3689 | source = "registry+https://github.com/rust-lang/crates.io-index"
3690 | checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1"
3691 | dependencies = [
3692 | "windows-core 0.61.2",
3693 | "windows-link 0.1.3",
3694 | ]
3695 |
3696 | [[package]]
3697 | name = "windows-result"
3698 | version = "0.2.0"
3699 | source = "registry+https://github.com/rust-lang/crates.io-index"
3700 | checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e"
3701 | dependencies = [
3702 | "windows-targets 0.52.6",
3703 | ]
3704 |
3705 | [[package]]
3706 | name = "windows-result"
3707 | version = "0.3.4"
3708 | source = "registry+https://github.com/rust-lang/crates.io-index"
3709 | checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6"
3710 | dependencies = [
3711 | "windows-link 0.1.3",
3712 | ]
3713 |
3714 | [[package]]
3715 | name = "windows-strings"
3716 | version = "0.1.0"
3717 | source = "registry+https://github.com/rust-lang/crates.io-index"
3718 | checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10"
3719 | dependencies = [
3720 | "windows-result 0.2.0",
3721 | "windows-targets 0.52.6",
3722 | ]
3723 |
3724 | [[package]]
3725 | name = "windows-strings"
3726 | version = "0.4.2"
3727 | source = "registry+https://github.com/rust-lang/crates.io-index"
3728 | checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57"
3729 | dependencies = [
3730 | "windows-link 0.1.3",
3731 | ]
3732 |
3733 | [[package]]
3734 | name = "windows-sys"
3735 | version = "0.45.0"
3736 | source = "registry+https://github.com/rust-lang/crates.io-index"
3737 | checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
3738 | dependencies = [
3739 | "windows-targets 0.42.2",
3740 | ]
3741 |
3742 | [[package]]
3743 | name = "windows-sys"
3744 | version = "0.52.0"
3745 | source = "registry+https://github.com/rust-lang/crates.io-index"
3746 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
3747 | dependencies = [
3748 | "windows-targets 0.52.6",
3749 | ]
3750 |
3751 | [[package]]
3752 | name = "windows-sys"
3753 | version = "0.59.0"
3754 | source = "registry+https://github.com/rust-lang/crates.io-index"
3755 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
3756 | dependencies = [
3757 | "windows-targets 0.52.6",
3758 | ]
3759 |
3760 | [[package]]
3761 | name = "windows-sys"
3762 | version = "0.60.2"
3763 | source = "registry+https://github.com/rust-lang/crates.io-index"
3764 | checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
3765 | dependencies = [
3766 | "windows-targets 0.53.3",
3767 | ]
3768 |
3769 | [[package]]
3770 | name = "windows-sys"
3771 | version = "0.61.0"
3772 | source = "registry+https://github.com/rust-lang/crates.io-index"
3773 | checksum = "e201184e40b2ede64bc2ea34968b28e33622acdbbf37104f0e4a33f7abe657aa"
3774 | dependencies = [
3775 | "windows-link 0.2.0",
3776 | ]
3777 |
3778 | [[package]]
3779 | name = "windows-targets"
3780 | version = "0.42.2"
3781 | source = "registry+https://github.com/rust-lang/crates.io-index"
3782 | checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
3783 | dependencies = [
3784 | "windows_aarch64_gnullvm 0.42.2",
3785 | "windows_aarch64_msvc 0.42.2",
3786 | "windows_i686_gnu 0.42.2",
3787 | "windows_i686_msvc 0.42.2",
3788 | "windows_x86_64_gnu 0.42.2",
3789 | "windows_x86_64_gnullvm 0.42.2",
3790 | "windows_x86_64_msvc 0.42.2",
3791 | ]
3792 |
3793 | [[package]]
3794 | name = "windows-targets"
3795 | version = "0.52.6"
3796 | source = "registry+https://github.com/rust-lang/crates.io-index"
3797 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
3798 | dependencies = [
3799 | "windows_aarch64_gnullvm 0.52.6",
3800 | "windows_aarch64_msvc 0.52.6",
3801 | "windows_i686_gnu 0.52.6",
3802 | "windows_i686_gnullvm 0.52.6",
3803 | "windows_i686_msvc 0.52.6",
3804 | "windows_x86_64_gnu 0.52.6",
3805 | "windows_x86_64_gnullvm 0.52.6",
3806 | "windows_x86_64_msvc 0.52.6",
3807 | ]
3808 |
3809 | [[package]]
3810 | name = "windows-targets"
3811 | version = "0.53.3"
3812 | source = "registry+https://github.com/rust-lang/crates.io-index"
3813 | checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91"
3814 | dependencies = [
3815 | "windows-link 0.1.3",
3816 | "windows_aarch64_gnullvm 0.53.0",
3817 | "windows_aarch64_msvc 0.53.0",
3818 | "windows_i686_gnu 0.53.0",
3819 | "windows_i686_gnullvm 0.53.0",
3820 | "windows_i686_msvc 0.53.0",
3821 | "windows_x86_64_gnu 0.53.0",
3822 | "windows_x86_64_gnullvm 0.53.0",
3823 | "windows_x86_64_msvc 0.53.0",
3824 | ]
3825 |
3826 | [[package]]
3827 | name = "windows-threading"
3828 | version = "0.1.0"
3829 | source = "registry+https://github.com/rust-lang/crates.io-index"
3830 | checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6"
3831 | dependencies = [
3832 | "windows-link 0.1.3",
3833 | ]
3834 |
3835 | [[package]]
3836 | name = "windows_aarch64_gnullvm"
3837 | version = "0.42.2"
3838 | source = "registry+https://github.com/rust-lang/crates.io-index"
3839 | checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
3840 |
3841 | [[package]]
3842 | name = "windows_aarch64_gnullvm"
3843 | version = "0.52.6"
3844 | source = "registry+https://github.com/rust-lang/crates.io-index"
3845 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
3846 |
3847 | [[package]]
3848 | name = "windows_aarch64_gnullvm"
3849 | version = "0.53.0"
3850 | source = "registry+https://github.com/rust-lang/crates.io-index"
3851 | checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764"
3852 |
3853 | [[package]]
3854 | name = "windows_aarch64_msvc"
3855 | version = "0.42.2"
3856 | source = "registry+https://github.com/rust-lang/crates.io-index"
3857 | checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
3858 |
3859 | [[package]]
3860 | name = "windows_aarch64_msvc"
3861 | version = "0.52.6"
3862 | source = "registry+https://github.com/rust-lang/crates.io-index"
3863 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
3864 |
3865 | [[package]]
3866 | name = "windows_aarch64_msvc"
3867 | version = "0.53.0"
3868 | source = "registry+https://github.com/rust-lang/crates.io-index"
3869 | checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c"
3870 |
3871 | [[package]]
3872 | name = "windows_i686_gnu"
3873 | version = "0.42.2"
3874 | source = "registry+https://github.com/rust-lang/crates.io-index"
3875 | checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
3876 |
3877 | [[package]]
3878 | name = "windows_i686_gnu"
3879 | version = "0.52.6"
3880 | source = "registry+https://github.com/rust-lang/crates.io-index"
3881 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
3882 |
3883 | [[package]]
3884 | name = "windows_i686_gnu"
3885 | version = "0.53.0"
3886 | source = "registry+https://github.com/rust-lang/crates.io-index"
3887 | checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3"
3888 |
3889 | [[package]]
3890 | name = "windows_i686_gnullvm"
3891 | version = "0.52.6"
3892 | source = "registry+https://github.com/rust-lang/crates.io-index"
3893 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
3894 |
3895 | [[package]]
3896 | name = "windows_i686_gnullvm"
3897 | version = "0.53.0"
3898 | source = "registry+https://github.com/rust-lang/crates.io-index"
3899 | checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11"
3900 |
3901 | [[package]]
3902 | name = "windows_i686_msvc"
3903 | version = "0.42.2"
3904 | source = "registry+https://github.com/rust-lang/crates.io-index"
3905 | checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
3906 |
3907 | [[package]]
3908 | name = "windows_i686_msvc"
3909 | version = "0.52.6"
3910 | source = "registry+https://github.com/rust-lang/crates.io-index"
3911 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
3912 |
3913 | [[package]]
3914 | name = "windows_i686_msvc"
3915 | version = "0.53.0"
3916 | source = "registry+https://github.com/rust-lang/crates.io-index"
3917 | checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d"
3918 |
3919 | [[package]]
3920 | name = "windows_x86_64_gnu"
3921 | version = "0.42.2"
3922 | source = "registry+https://github.com/rust-lang/crates.io-index"
3923 | checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
3924 |
3925 | [[package]]
3926 | name = "windows_x86_64_gnu"
3927 | version = "0.52.6"
3928 | source = "registry+https://github.com/rust-lang/crates.io-index"
3929 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
3930 |
3931 | [[package]]
3932 | name = "windows_x86_64_gnu"
3933 | version = "0.53.0"
3934 | source = "registry+https://github.com/rust-lang/crates.io-index"
3935 | checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba"
3936 |
3937 | [[package]]
3938 | name = "windows_x86_64_gnullvm"
3939 | version = "0.42.2"
3940 | source = "registry+https://github.com/rust-lang/crates.io-index"
3941 | checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
3942 |
3943 | [[package]]
3944 | name = "windows_x86_64_gnullvm"
3945 | version = "0.52.6"
3946 | source = "registry+https://github.com/rust-lang/crates.io-index"
3947 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
3948 |
3949 | [[package]]
3950 | name = "windows_x86_64_gnullvm"
3951 | version = "0.53.0"
3952 | source = "registry+https://github.com/rust-lang/crates.io-index"
3953 | checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57"
3954 |
3955 | [[package]]
3956 | name = "windows_x86_64_msvc"
3957 | version = "0.42.2"
3958 | source = "registry+https://github.com/rust-lang/crates.io-index"
3959 | checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
3960 |
3961 | [[package]]
3962 | name = "windows_x86_64_msvc"
3963 | version = "0.52.6"
3964 | source = "registry+https://github.com/rust-lang/crates.io-index"
3965 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
3966 |
3967 | [[package]]
3968 | name = "windows_x86_64_msvc"
3969 | version = "0.53.0"
3970 | source = "registry+https://github.com/rust-lang/crates.io-index"
3971 | checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486"
3972 |
3973 | [[package]]
3974 | name = "winit"
3975 | version = "0.30.12"
3976 | source = "registry+https://github.com/rust-lang/crates.io-index"
3977 | checksum = "c66d4b9ed69c4009f6321f762d6e61ad8a2389cd431b97cb1e146812e9e6c732"
3978 | dependencies = [
3979 | "ahash",
3980 | "android-activity",
3981 | "atomic-waker",
3982 | "bitflags 2.9.4",
3983 | "block2",
3984 | "bytemuck",
3985 | "calloop",
3986 | "cfg_aliases",
3987 | "concurrent-queue",
3988 | "core-foundation 0.9.4",
3989 | "core-graphics",
3990 | "cursor-icon",
3991 | "dpi",
3992 | "js-sys",
3993 | "libc",
3994 | "memmap2",
3995 | "ndk",
3996 | "objc2 0.5.2",
3997 | "objc2-app-kit 0.2.2",
3998 | "objc2-foundation 0.2.2",
3999 | "objc2-ui-kit",
4000 | "orbclient",
4001 | "percent-encoding",
4002 | "pin-project",
4003 | "raw-window-handle",
4004 | "redox_syscall 0.4.1",
4005 | "rustix 0.38.44",
4006 | "smithay-client-toolkit",
4007 | "smol_str",
4008 | "tracing",
4009 | "unicode-segmentation",
4010 | "wasm-bindgen",
4011 | "wasm-bindgen-futures",
4012 | "wayland-backend",
4013 | "wayland-client",
4014 | "wayland-protocols",
4015 | "wayland-protocols-plasma",
4016 | "web-sys",
4017 | "web-time",
4018 | "windows-sys 0.52.0",
4019 | "x11-dl",
4020 | "x11rb",
4021 | "xkbcommon-dl",
4022 | ]
4023 |
4024 | [[package]]
4025 | name = "winnow"
4026 | version = "0.7.13"
4027 | source = "registry+https://github.com/rust-lang/crates.io-index"
4028 | checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf"
4029 | dependencies = [
4030 | "memchr",
4031 | ]
4032 |
4033 | [[package]]
4034 | name = "wit-bindgen"
4035 | version = "0.46.0"
4036 | source = "registry+https://github.com/rust-lang/crates.io-index"
4037 | checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59"
4038 |
4039 | [[package]]
4040 | name = "wl-clipboard-rs"
4041 | version = "0.9.2"
4042 | source = "registry+https://github.com/rust-lang/crates.io-index"
4043 | checksum = "8e5ff8d0e60065f549fafd9d6cb626203ea64a798186c80d8e7df4f8af56baeb"
4044 | dependencies = [
4045 | "libc",
4046 | "log",
4047 | "os_pipe",
4048 | "rustix 0.38.44",
4049 | "tempfile",
4050 | "thiserror 2.0.16",
4051 | "tree_magic_mini",
4052 | "wayland-backend",
4053 | "wayland-client",
4054 | "wayland-protocols",
4055 | "wayland-protocols-wlr",
4056 | ]
4057 |
4058 | [[package]]
4059 | name = "writeable"
4060 | version = "0.6.1"
4061 | source = "registry+https://github.com/rust-lang/crates.io-index"
4062 | checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb"
4063 |
4064 | [[package]]
4065 | name = "x11-dl"
4066 | version = "2.21.0"
4067 | source = "registry+https://github.com/rust-lang/crates.io-index"
4068 | checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f"
4069 | dependencies = [
4070 | "libc",
4071 | "once_cell",
4072 | "pkg-config",
4073 | ]
4074 |
4075 | [[package]]
4076 | name = "x11rb"
4077 | version = "0.13.2"
4078 | source = "registry+https://github.com/rust-lang/crates.io-index"
4079 | checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414"
4080 | dependencies = [
4081 | "as-raw-xcb-connection",
4082 | "gethostname",
4083 | "libc",
4084 | "libloading",
4085 | "once_cell",
4086 | "rustix 1.1.2",
4087 | "x11rb-protocol",
4088 | ]
4089 |
4090 | [[package]]
4091 | name = "x11rb-protocol"
4092 | version = "0.13.2"
4093 | source = "registry+https://github.com/rust-lang/crates.io-index"
4094 | checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd"
4095 |
4096 | [[package]]
4097 | name = "xcursor"
4098 | version = "0.3.10"
4099 | source = "registry+https://github.com/rust-lang/crates.io-index"
4100 | checksum = "bec9e4a500ca8864c5b47b8b482a73d62e4237670e5b5f1d6b9e3cae50f28f2b"
4101 |
4102 | [[package]]
4103 | name = "xkbcommon-dl"
4104 | version = "0.4.2"
4105 | source = "registry+https://github.com/rust-lang/crates.io-index"
4106 | checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5"
4107 | dependencies = [
4108 | "bitflags 2.9.4",
4109 | "dlib",
4110 | "log",
4111 | "once_cell",
4112 | "xkeysym",
4113 | ]
4114 |
4115 | [[package]]
4116 | name = "xkeysym"
4117 | version = "0.2.1"
4118 | source = "registry+https://github.com/rust-lang/crates.io-index"
4119 | checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56"
4120 |
4121 | [[package]]
4122 | name = "xml-rs"
4123 | version = "0.8.27"
4124 | source = "registry+https://github.com/rust-lang/crates.io-index"
4125 | checksum = "6fd8403733700263c6eb89f192880191f1b83e332f7a20371ddcf421c4a337c7"
4126 |
4127 | [[package]]
4128 | name = "yoke"
4129 | version = "0.8.0"
4130 | source = "registry+https://github.com/rust-lang/crates.io-index"
4131 | checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc"
4132 | dependencies = [
4133 | "serde",
4134 | "stable_deref_trait",
4135 | "yoke-derive",
4136 | "zerofrom",
4137 | ]
4138 |
4139 | [[package]]
4140 | name = "yoke-derive"
4141 | version = "0.8.0"
4142 | source = "registry+https://github.com/rust-lang/crates.io-index"
4143 | checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6"
4144 | dependencies = [
4145 | "proc-macro2",
4146 | "quote",
4147 | "syn",
4148 | "synstructure",
4149 | ]
4150 |
4151 | [[package]]
4152 | name = "zbus"
4153 | version = "5.11.0"
4154 | source = "registry+https://github.com/rust-lang/crates.io-index"
4155 | checksum = "2d07e46d035fb8e375b2ce63ba4e4ff90a7f73cf2ffb0138b29e1158d2eaadf7"
4156 | dependencies = [
4157 | "async-broadcast",
4158 | "async-executor",
4159 | "async-io",
4160 | "async-lock",
4161 | "async-process",
4162 | "async-recursion",
4163 | "async-task",
4164 | "async-trait",
4165 | "blocking",
4166 | "enumflags2",
4167 | "event-listener",
4168 | "futures-core",
4169 | "futures-lite",
4170 | "hex",
4171 | "nix",
4172 | "ordered-stream",
4173 | "serde",
4174 | "serde_repr",
4175 | "tracing",
4176 | "uds_windows",
4177 | "windows-sys 0.60.2",
4178 | "winnow",
4179 | "zbus_macros",
4180 | "zbus_names",
4181 | "zvariant",
4182 | ]
4183 |
4184 | [[package]]
4185 | name = "zbus-lockstep"
4186 | version = "0.5.1"
4187 | source = "registry+https://github.com/rust-lang/crates.io-index"
4188 | checksum = "29e96e38ded30eeab90b6ba88cb888d70aef4e7489b6cd212c5e5b5ec38045b6"
4189 | dependencies = [
4190 | "zbus_xml",
4191 | "zvariant",
4192 | ]
4193 |
4194 | [[package]]
4195 | name = "zbus-lockstep-macros"
4196 | version = "0.5.1"
4197 | source = "registry+https://github.com/rust-lang/crates.io-index"
4198 | checksum = "dc6821851fa840b708b4cbbaf6241868cabc85a2dc22f426361b0292bfc0b836"
4199 | dependencies = [
4200 | "proc-macro2",
4201 | "quote",
4202 | "syn",
4203 | "zbus-lockstep",
4204 | "zbus_xml",
4205 | "zvariant",
4206 | ]
4207 |
4208 | [[package]]
4209 | name = "zbus_macros"
4210 | version = "5.11.0"
4211 | source = "registry+https://github.com/rust-lang/crates.io-index"
4212 | checksum = "57e797a9c847ed3ccc5b6254e8bcce056494b375b511b3d6edcec0aeb4defaca"
4213 | dependencies = [
4214 | "proc-macro-crate",
4215 | "proc-macro2",
4216 | "quote",
4217 | "syn",
4218 | "zbus_names",
4219 | "zvariant",
4220 | "zvariant_utils",
4221 | ]
4222 |
4223 | [[package]]
4224 | name = "zbus_names"
4225 | version = "4.2.0"
4226 | source = "registry+https://github.com/rust-lang/crates.io-index"
4227 | checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97"
4228 | dependencies = [
4229 | "serde",
4230 | "static_assertions",
4231 | "winnow",
4232 | "zvariant",
4233 | ]
4234 |
4235 | [[package]]
4236 | name = "zbus_xml"
4237 | version = "5.0.2"
4238 | source = "registry+https://github.com/rust-lang/crates.io-index"
4239 | checksum = "589e9a02bfafb9754bb2340a9e3b38f389772684c63d9637e76b1870377bec29"
4240 | dependencies = [
4241 | "quick-xml 0.36.2",
4242 | "serde",
4243 | "static_assertions",
4244 | "zbus_names",
4245 | "zvariant",
4246 | ]
4247 |
4248 | [[package]]
4249 | name = "zerocopy"
4250 | version = "0.8.27"
4251 | source = "registry+https://github.com/rust-lang/crates.io-index"
4252 | checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c"
4253 | dependencies = [
4254 | "zerocopy-derive",
4255 | ]
4256 |
4257 | [[package]]
4258 | name = "zerocopy-derive"
4259 | version = "0.8.27"
4260 | source = "registry+https://github.com/rust-lang/crates.io-index"
4261 | checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831"
4262 | dependencies = [
4263 | "proc-macro2",
4264 | "quote",
4265 | "syn",
4266 | ]
4267 |
4268 | [[package]]
4269 | name = "zerofrom"
4270 | version = "0.1.6"
4271 | source = "registry+https://github.com/rust-lang/crates.io-index"
4272 | checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5"
4273 | dependencies = [
4274 | "zerofrom-derive",
4275 | ]
4276 |
4277 | [[package]]
4278 | name = "zerofrom-derive"
4279 | version = "0.1.6"
4280 | source = "registry+https://github.com/rust-lang/crates.io-index"
4281 | checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
4282 | dependencies = [
4283 | "proc-macro2",
4284 | "quote",
4285 | "syn",
4286 | "synstructure",
4287 | ]
4288 |
4289 | [[package]]
4290 | name = "zerotrie"
4291 | version = "0.2.2"
4292 | source = "registry+https://github.com/rust-lang/crates.io-index"
4293 | checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595"
4294 | dependencies = [
4295 | "displaydoc",
4296 | "yoke",
4297 | "zerofrom",
4298 | ]
4299 |
4300 | [[package]]
4301 | name = "zerovec"
4302 | version = "0.11.4"
4303 | source = "registry+https://github.com/rust-lang/crates.io-index"
4304 | checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b"
4305 | dependencies = [
4306 | "yoke",
4307 | "zerofrom",
4308 | "zerovec-derive",
4309 | ]
4310 |
4311 | [[package]]
4312 | name = "zerovec-derive"
4313 | version = "0.11.1"
4314 | source = "registry+https://github.com/rust-lang/crates.io-index"
4315 | checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f"
4316 | dependencies = [
4317 | "proc-macro2",
4318 | "quote",
4319 | "syn",
4320 | ]
4321 |
4322 | [[package]]
4323 | name = "zune-core"
4324 | version = "0.4.12"
4325 | source = "registry+https://github.com/rust-lang/crates.io-index"
4326 | checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a"
4327 |
4328 | [[package]]
4329 | name = "zune-jpeg"
4330 | version = "0.4.21"
4331 | source = "registry+https://github.com/rust-lang/crates.io-index"
4332 | checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713"
4333 | dependencies = [
4334 | "zune-core",
4335 | ]
4336 |
4337 | [[package]]
4338 | name = "zvariant"
4339 | version = "5.7.0"
4340 | source = "registry+https://github.com/rust-lang/crates.io-index"
4341 | checksum = "999dd3be73c52b1fccd109a4a81e4fcd20fab1d3599c8121b38d04e1419498db"
4342 | dependencies = [
4343 | "endi",
4344 | "enumflags2",
4345 | "serde",
4346 | "winnow",
4347 | "zvariant_derive",
4348 | "zvariant_utils",
4349 | ]
4350 |
4351 | [[package]]
4352 | name = "zvariant_derive"
4353 | version = "5.7.0"
4354 | source = "registry+https://github.com/rust-lang/crates.io-index"
4355 | checksum = "6643fd0b26a46d226bd90d3f07c1b5321fe9bb7f04673cb37ac6d6883885b68e"
4356 | dependencies = [
4357 | "proc-macro-crate",
4358 | "proc-macro2",
4359 | "quote",
4360 | "syn",
4361 | "zvariant_utils",
4362 | ]
4363 |
4364 | [[package]]
4365 | name = "zvariant_utils"
4366 | version = "3.2.1"
4367 | source = "registry+https://github.com/rust-lang/crates.io-index"
4368 | checksum = "c6949d142f89f6916deca2232cf26a8afacf2b9fdc35ce766105e104478be599"
4369 | dependencies = [
4370 | "proc-macro2",
4371 | "quote",
4372 | "serde",
4373 | "syn",
4374 | "winnow",
4375 | ]
4376 |
--------------------------------------------------------------------------------