+3
.gitignore
+3
.gitignore
+49
-44
Cargo.lock
+49
-44
Cargo.lock
···
1425
1425
"binrw",
1426
1426
"futures",
1427
1427
"image 0.25.6",
1428
-
"vee",
1428
+
"vfl",
1429
1429
]
1430
1430
1431
1431
[[package]]
···
2660
2660
source = "registry+https://github.com/rust-lang/crates.io-index"
2661
2661
checksum = "6b46b9ca4690308844c644e7c634d68792467260e051c8543e0c7871662b3ba7"
2662
2662
dependencies = [
2663
+
"bytemuck",
2663
2664
"mint",
2664
2665
]
2665
2666
···
3022
3023
]
3023
3024
3024
3025
[[package]]
3026
+
name = "image-compare"
3027
+
version = "0.4.1"
3028
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3029
+
checksum = "96cd73af13ae2e7220a1c02fe7d6bb53be50612ba7fabbb5c88e7753645f1f3c"
3030
+
dependencies = [
3031
+
"image 0.25.6",
3032
+
"itertools 0.12.1",
3033
+
"rayon",
3034
+
"thiserror 1.0.69",
3035
+
]
3036
+
3037
+
[[package]]
3025
3038
name = "image-webp"
3026
3039
version = "0.2.1"
3027
3040
source = "registry+https://github.com/rust-lang/crates.io-index"
···
3291
3304
]
3292
3305
3293
3306
[[package]]
3307
+
name = "lightweight_viewer"
3308
+
version = "0.1.0"
3309
+
dependencies = [
3310
+
"bytemuck",
3311
+
"glam 0.30.3",
3312
+
"image 0.25.6",
3313
+
"nalgebra 0.33.2",
3314
+
"pollster",
3315
+
"vfl",
3316
+
"wgpu 25.0.0",
3317
+
"winit",
3318
+
]
3319
+
3320
+
[[package]]
3294
3321
name = "linux-raw-sys"
3295
3322
version = "0.4.15"
3296
3323
source = "registry+https://github.com/rust-lang/crates.io-index"
···
3465
3492
"pp-rs",
3466
3493
"rustc-hash",
3467
3494
"spirv",
3468
-
"strum 0.26.3",
3495
+
"strum",
3469
3496
"termcolor",
3470
3497
"thiserror 2.0.12",
3471
3498
"unicode-xid",
···
3491
3518
"once_cell",
3492
3519
"rustc-hash",
3493
3520
"spirv",
3494
-
"strum 0.26.3",
3521
+
"strum",
3495
3522
"thiserror 2.0.12",
3496
3523
"unicode-ident",
3497
3524
]
···
4989
5016
source = "registry+https://github.com/rust-lang/crates.io-index"
4990
5017
checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06"
4991
5018
dependencies = [
4992
-
"strum_macros 0.26.4",
4993
-
]
4994
-
4995
-
[[package]]
4996
-
name = "strum"
4997
-
version = "0.27.1"
4998
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4999
-
checksum = "f64def088c51c9510a8579e3c5d67c65349dcf755e5479ad3d010aa6454e2c32"
5000
-
dependencies = [
5001
-
"strum_macros 0.27.1",
5019
+
"strum_macros",
5002
5020
]
5003
5021
5004
5022
[[package]]
···
5015
5033
]
5016
5034
5017
5035
[[package]]
5018
-
name = "strum_macros"
5019
-
version = "0.27.1"
5020
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5021
-
checksum = "c77a8c5abcaf0f9ce05d62342b7d298c346515365c36b673df4ebe3ced01fde8"
5022
-
dependencies = [
5023
-
"heck",
5024
-
"proc-macro2",
5025
-
"quote",
5026
-
"rustversion",
5027
-
"syn 2.0.101",
5028
-
]
5029
-
5030
-
[[package]]
5031
5036
name = "svg_fmt"
5032
5037
version = "0.4.5"
5033
5038
source = "registry+https://github.com/rust-lang/crates.io-index"
···
5546
5551
checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
5547
5552
5548
5553
[[package]]
5549
-
name = "vee"
5550
-
version = "0.1.0"
5554
+
name = "version-compare"
5555
+
version = "0.2.0"
5556
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5557
+
checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b"
5558
+
5559
+
[[package]]
5560
+
name = "version_check"
5561
+
version = "0.9.5"
5562
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5563
+
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
5564
+
5565
+
[[package]]
5566
+
name = "vfl"
5567
+
version = "0.0.1"
5551
5568
dependencies = [
5552
5569
"binrw",
5553
5570
"bytemuck",
···
5556
5573
"glam 0.30.3",
5557
5574
"half",
5558
5575
"image 0.25.6",
5576
+
"image-compare",
5559
5577
"itertools 0.14.0",
5560
5578
"mesh-tools",
5561
5579
"mint",
5562
5580
"nalgebra 0.33.2",
5581
+
"num_enum",
5563
5582
"pollster",
5564
-
"strum 0.27.1",
5565
-
"strum_macros 0.27.1",
5566
5583
"tegra_swizzle",
5567
5584
"texture2ddecoder",
5568
5585
"wgpu 25.0.0",
5569
5586
]
5570
-
5571
-
[[package]]
5572
-
name = "version-compare"
5573
-
version = "0.2.0"
5574
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5575
-
checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b"
5576
-
5577
-
[[package]]
5578
-
name = "version_check"
5579
-
version = "0.9.5"
5580
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5581
-
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
5582
5587
5583
5588
[[package]]
5584
5589
name = "walkdir"
···
6571
6576
6572
6577
[[package]]
6573
6578
name = "winit"
6574
-
version = "0.30.10"
6579
+
version = "0.30.11"
6575
6580
source = "registry+https://github.com/rust-lang/crates.io-index"
6576
-
checksum = "b0d05bd8908e14618c9609471db04007e644fd9cce6529756046cfc577f9155e"
6581
+
checksum = "a4409c10174df8779dc29a4788cac85ed84024ccbc1743b776b21a520ee1aaf4"
6577
6582
dependencies = [
6578
6583
"ahash",
6579
6584
"android-activity",
+5
-5
Cargo.toml
+5
-5
Cargo.toml
···
1
1
[workspace]
2
2
resolver = "2"
3
-
members = [ "bevy_viewer", "vee" ]
3
+
members = ["bevy_viewer", "lightweight_viewer", "vfl"]
4
4
5
5
# Enable a small amount of optimization in the dev profile.
6
-
[profile.dev]
7
-
opt-level = 1
6
+
#[profile.dev]
7
+
#opt-level = 1
8
8
9
9
# Enable a large amount of optimization in the dev profile for dependencies.
10
-
[profile.dev.package."*"]
11
-
opt-level = 3
10
+
#[profile.dev.package."*"]
11
+
#opt-level = 3
+176
LICENSE-APACHE
+176
LICENSE-APACHE
···
1
+
Apache License
2
+
Version 2.0, January 2004
3
+
http://www.apache.org/licenses/
4
+
5
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+
1. Definitions.
8
+
9
+
"License" shall mean the terms and conditions for use, reproduction,
10
+
and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+
"Licensor" shall mean the copyright owner or entity authorized by
13
+
the copyright owner that is granting the License.
14
+
15
+
"Legal Entity" shall mean the union of the acting entity and all
16
+
other entities that control, are controlled by, or are under common
17
+
control with that entity. For the purposes of this definition,
18
+
"control" means (i) the power, direct or indirect, to cause the
19
+
direction or management of such entity, whether by contract or
20
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+
outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+
"You" (or "Your") shall mean an individual or Legal Entity
24
+
exercising permissions granted by this License.
25
+
26
+
"Source" form shall mean the preferred form for making modifications,
27
+
including but not limited to software source code, documentation
28
+
source, and configuration files.
29
+
30
+
"Object" form shall mean any form resulting from mechanical
31
+
transformation or translation of a Source form, including but
32
+
not limited to compiled object code, generated documentation,
33
+
and conversions to other media types.
34
+
35
+
"Work" shall mean the work of authorship, whether in Source or
36
+
Object form, made available under the License, as indicated by a
37
+
copyright notice that is included in or attached to the work
38
+
(an example is provided in the Appendix below).
39
+
40
+
"Derivative Works" shall mean any work, whether in Source or Object
41
+
form, that is based on (or derived from) the Work and for which the
42
+
editorial revisions, annotations, elaborations, or other modifications
43
+
represent, as a whole, an original work of authorship. For the purposes
44
+
of this License, Derivative Works shall not include works that remain
45
+
separable from, or merely link (or bind by name) to the interfaces of,
46
+
the Work and Derivative Works thereof.
47
+
48
+
"Contribution" shall mean any work of authorship, including
49
+
the original version of the Work and any modifications or additions
50
+
to that Work or Derivative Works thereof, that is intentionally
51
+
submitted to Licensor for inclusion in the Work by the copyright owner
52
+
or by an individual or Legal Entity authorized to submit on behalf of
53
+
the copyright owner. For the purposes of this definition, "submitted"
54
+
means any form of electronic, verbal, or written communication sent
55
+
to the Licensor or its representatives, including but not limited to
56
+
communication on electronic mailing lists, source code control systems,
57
+
and issue tracking systems that are managed by, or on behalf of, the
58
+
Licensor for the purpose of discussing and improving the Work, but
59
+
excluding communication that is conspicuously marked or otherwise
60
+
designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+
"Contributor" shall mean Licensor and any individual or Legal Entity
63
+
on behalf of whom a Contribution has been received by Licensor and
64
+
subsequently incorporated within the Work.
65
+
66
+
2. Grant of Copyright License. Subject to the terms and conditions of
67
+
this License, each Contributor hereby grants to You a perpetual,
68
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+
copyright license to reproduce, prepare Derivative Works of,
70
+
publicly display, publicly perform, sublicense, and distribute the
71
+
Work and such Derivative Works in Source or Object form.
72
+
73
+
3. Grant of Patent License. Subject to the terms and conditions of
74
+
this License, each Contributor hereby grants to You a perpetual,
75
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+
(except as stated in this section) patent license to make, have made,
77
+
use, offer to sell, sell, import, and otherwise transfer the Work,
78
+
where such license applies only to those patent claims licensable
79
+
by such Contributor that are necessarily infringed by their
80
+
Contribution(s) alone or by combination of their Contribution(s)
81
+
with the Work to which such Contribution(s) was submitted. If You
82
+
institute patent litigation against any entity (including a
83
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+
or a Contribution incorporated within the Work constitutes direct
85
+
or contributory patent infringement, then any patent licenses
86
+
granted to You under this License for that Work shall terminate
87
+
as of the date such litigation is filed.
88
+
89
+
4. Redistribution. You may reproduce and distribute copies of the
90
+
Work or Derivative Works thereof in any medium, with or without
91
+
modifications, and in Source or Object form, provided that You
92
+
meet the following conditions:
93
+
94
+
(a) You must give any other recipients of the Work or
95
+
Derivative Works a copy of this License; and
96
+
97
+
(b) You must cause any modified files to carry prominent notices
98
+
stating that You changed the files; and
99
+
100
+
(c) You must retain, in the Source form of any Derivative Works
101
+
that You distribute, all copyright, patent, trademark, and
102
+
attribution notices from the Source form of the Work,
103
+
excluding those notices that do not pertain to any part of
104
+
the Derivative Works; and
105
+
106
+
(d) If the Work includes a "NOTICE" text file as part of its
107
+
distribution, then any Derivative Works that You distribute must
108
+
include a readable copy of the attribution notices contained
109
+
within such NOTICE file, excluding those notices that do not
110
+
pertain to any part of the Derivative Works, in at least one
111
+
of the following places: within a NOTICE text file distributed
112
+
as part of the Derivative Works; within the Source form or
113
+
documentation, if provided along with the Derivative Works; or,
114
+
within a display generated by the Derivative Works, if and
115
+
wherever such third-party notices normally appear. The contents
116
+
of the NOTICE file are for informational purposes only and
117
+
do not modify the License. You may add Your own attribution
118
+
notices within Derivative Works that You distribute, alongside
119
+
or as an addendum to the NOTICE text from the Work, provided
120
+
that such additional attribution notices cannot be construed
121
+
as modifying the License.
122
+
123
+
You may add Your own copyright statement to Your modifications and
124
+
may provide additional or different license terms and conditions
125
+
for use, reproduction, or distribution of Your modifications, or
126
+
for any such Derivative Works as a whole, provided Your use,
127
+
reproduction, and distribution of the Work otherwise complies with
128
+
the conditions stated in this License.
129
+
130
+
5. Submission of Contributions. Unless You explicitly state otherwise,
131
+
any Contribution intentionally submitted for inclusion in the Work
132
+
by You to the Licensor shall be under the terms and conditions of
133
+
this License, without any additional terms or conditions.
134
+
Notwithstanding the above, nothing herein shall supersede or modify
135
+
the terms of any separate license agreement you may have executed
136
+
with Licensor regarding such Contributions.
137
+
138
+
6. Trademarks. This License does not grant permission to use the trade
139
+
names, trademarks, service marks, or product names of the Licensor,
140
+
except as required for reasonable and customary use in describing the
141
+
origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+
7. Disclaimer of Warranty. Unless required by applicable law or
144
+
agreed to in writing, Licensor provides the Work (and each
145
+
Contributor provides its Contributions) on an "AS IS" BASIS,
146
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+
implied, including, without limitation, any warranties or conditions
148
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+
PARTICULAR PURPOSE. You are solely responsible for determining the
150
+
appropriateness of using or redistributing the Work and assume any
151
+
risks associated with Your exercise of permissions under this License.
152
+
153
+
8. Limitation of Liability. In no event and under no legal theory,
154
+
whether in tort (including negligence), contract, or otherwise,
155
+
unless required by applicable law (such as deliberate and grossly
156
+
negligent acts) or agreed to in writing, shall any Contributor be
157
+
liable to You for damages, including any direct, indirect, special,
158
+
incidental, or consequential damages of any character arising as a
159
+
result of this License or out of the use or inability to use the
160
+
Work (including but not limited to damages for loss of goodwill,
161
+
work stoppage, computer failure or malfunction, or any and all
162
+
other commercial damages or losses), even if such Contributor
163
+
has been advised of the possibility of such damages.
164
+
165
+
9. Accepting Warranty or Additional Liability. While redistributing
166
+
the Work or Derivative Works thereof, You may choose to offer,
167
+
and charge a fee for, acceptance of support, warranty, indemnity,
168
+
or other liability obligations and/or rights consistent with this
169
+
License. However, in accepting such obligations, You may act only
170
+
on Your own behalf and on Your sole responsibility, not on behalf
171
+
of any other Contributor, and only if You agree to indemnify,
172
+
defend, and hold each Contributor harmless for any liability
173
+
incurred by, or claims asserted against, such Contributor by reason
174
+
of your accepting any such warranty or additional liability.
175
+
176
+
END OF TERMS AND CONDITIONS
+25
LICENSE-MIT
+25
LICENSE-MIT
···
1
+
Copyright (c) Jo Null
2
+
3
+
Permission is hereby granted, free of charge, to any
4
+
person obtaining a copy of this software and associated
5
+
documentation files (the "Software"), to deal in the
6
+
Software without restriction, including without
7
+
limitation the rights to use, copy, modify, merge,
8
+
publish, distribute, sublicense, and/or sell copies of
9
+
the Software, and to permit persons to whom the Software
10
+
is furnished to do so, subject to the following
11
+
conditions:
12
+
13
+
The above copyright notice and this permission notice
14
+
shall be included in all copies or substantial portions
15
+
of the Software.
16
+
17
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
18
+
ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
19
+
TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
20
+
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
21
+
SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
22
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
23
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
24
+
IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+
DEALINGS IN THE SOFTWARE.
+20
-3
README.md
+20
-3
README.md
···
1
-
# vee
1
+
# VFL โ Vee Face Library
2
+
3
+
Research library for replicating Mii functionality from decompilations in a more modern language & runtime. Ideally, this library will replicate functionality accurately from these targets:
4
+
- Cafe (WUP)
5
+
- Centrair (CTR) <sup><sub>Why did they name it after an airportโฝ</sub></sup>
6
+
- Nx (NX)
7
+
8
+
Targets not currently aimed for:
9
+
- Revolution (RFL)
10
+
- Nitro (NTR)
11
+
2
12
3
-
Mii library. Features are limited, currently.
13
+
Features are limited, currently.
4
14
5
15
6
16
## bevy_viewer
7
17
8
18
Setup:
9
-
- Obtain `ShapeMid.dat` and place in `./vee/`
19
+
- Dump shape and texture resources from your hardware and place in `./vee/`
10
20
- `cargo run`
11
21
12
22
Web build:
13
23
- Install [`wasm-server-runner`](https://github.com/jakobhellermann/wasm-server-runner)
14
24
- `cargo run --target wasm32-unknown-unknown`
25
+
26
+
## Acknowledgements
27
+
- Arian Kordi @ariankordi for help and guidance through terse decompiled C++
28
+
- https://github.com/ariankordi/FFL-Testing
29
+
- @aboood40091 for [FFL Decomp](https://github.com/aboood40091/ffl)
30
+
- Petari team @SMGCommunity for the [RFL Decomp](https://github.com/SMGCommunity/Petari/tree/master/src/RVLFaceLib)
31
+
- Probably other people too
Untitled.hexproj
Untitled.hexproj
This is a binary file and will not be displayed.
+2
-1
bevy_viewer/Cargo.toml
+2
-1
bevy_viewer/Cargo.toml
···
2
2
name = "bevy_viewer"
3
3
version = "0.1.0"
4
4
edition = "2024"
5
+
license = "MIT OR Apache-2.0"
5
6
6
7
[dependencies]
7
-
vee = { path = "../vee" }
8
+
vfl = { path = "../vfl", features = ["res", "draw"] }
8
9
bevy_egui = "0.34.1"
9
10
bevy = { version = "0.16.0", features = ["bevy_picking", "bevy_dev_tools"] }
10
11
binrw = "0.15.0"
+50
-8
bevy_viewer/src/char.rs
+50
-8
bevy_viewer/src/char.rs
···
1
1
use crate::load::{load_mesh, setup_image, shape_bundle, shape_tex_bundle};
2
-
use crate::{CharDataRes, load};
2
+
use crate::{CHAR_TRANSFORM, CHARINFO, CharDataRes, CharMesh, load};
3
3
use bevy::prelude::*;
4
4
use binrw::BinRead;
5
5
use std::{fs::File, io::BufReader};
6
-
use vee::{
6
+
use vfl::color::cafe::{FACELINE_COLOR, HAIR_COLOR};
7
+
use vfl::res::shape::nx::{ResourceShape, SHAPE_MID_DAT};
8
+
use vfl::{
7
9
charinfo::nx::NxCharInfo,
8
-
shape_load::nx::Shape,
9
-
tex_load::nx::{ResourceTexture, TEXTURE_MID_SRGB_DAT},
10
+
res::shape::nx::Shape,
11
+
res::tex::nx::{ResourceTexture, TEXTURE_MID_SRGB_DAT},
10
12
};
11
13
12
14
pub fn setup_char(
···
18
20
) {
19
21
res.0 = Some(load::get_res().unwrap());
20
22
21
-
let mut char = File::open(concat!(env!("CARGO_MANIFEST_DIR"), "/../Jasmine.charinfo")).unwrap();
23
+
let mut char = File::open(CHARINFO).unwrap();
22
24
23
25
let char = NxCharInfo::read(&mut char).unwrap();
24
26
···
27
29
&mut meshes,
28
30
&res.0.unwrap(),
29
31
char.faceline_type as usize,
30
-
4,
32
+
char.faceline_color as usize,
31
33
dbg!(Shape::FaceLine),
32
34
));
33
35
···
35
37
&mut materials,
36
38
&mut meshes,
37
39
&res.0.unwrap(),
38
-
char.faceline_type as usize,
39
-
4,
40
+
char.hair_type as usize,
41
+
char.faceline_color as usize,
40
42
dbg!(Shape::ForeheadNormal),
41
43
));
44
+
45
+
// TODO: offset nose
46
+
println!("Nose needs offsetting");
47
+
48
+
let nose = false;
49
+
if nose {
50
+
let mut shape_file = BufReader::new(File::open(SHAPE_MID_DAT).unwrap());
51
+
let res_shape = ResourceShape::read(&mut shape_file).unwrap();
52
+
let nose_translate =
53
+
res_shape.face_line_transform[char.faceline_type as usize].nose_translate;
54
+
55
+
let shape_translation = vec3(
56
+
nose_translate[0],
57
+
5.0 + nose_translate[1] + -1.5 * f32::from(char.glass_y),
58
+
2.0 + nose_translate[2],
59
+
);
60
+
let shape_scale = 0.15 * f32::from(char.glass_scale);
61
+
62
+
commands.spawn({
63
+
let materials: &mut ResMut<Assets<StandardMaterial>> = &mut materials;
64
+
let meshes: &mut ResMut<Assets<Mesh>> = &mut meshes;
65
+
let res: &ResourceShape = &res.0.unwrap();
66
+
let hair_num = char.nose_type as usize;
67
+
let color_num = char.faceline_color as usize;
68
+
let shape = dbg!(Shape::Nose);
69
+
let [r, g, b, _a] = match shape {
70
+
Shape::HairNormal => HAIR_COLOR[color_num],
71
+
Shape::FaceLine | Shape::ForeheadNormal | Shape::Nose => FACELINE_COLOR[color_num],
72
+
_ => [0.4, 0.2, 0.6, 1.0],
73
+
};
74
+
75
+
(
76
+
Mesh3d(meshes.add(load_mesh(*res, shape, hair_num).unwrap())),
77
+
MeshMaterial3d(materials.add(Color::srgb(r, g, b))),
78
+
Transform::from_translation(shape_translation * 0.05)
79
+
.with_scale(Vec3::splat(shape_scale) * 0.05),
80
+
CharMesh,
81
+
)
82
+
});
83
+
}
42
84
43
85
// Create and save a handle to the mesh.
44
86
// Render the mesh with the custom texture, and add the marker.
+14
-9
bevy_viewer/src/load.rs
+14
-9
bevy_viewer/src/load.rs
···
1
-
use crate::CharMesh;
1
+
use crate::{CHAR_TRANSFORM, CharMesh};
2
2
use bevy::{
3
3
asset::RenderAssetUsages,
4
4
prelude::*,
···
7
7
use binrw::{BinRead, io::BufReader};
8
8
use image::{DynamicImage, RgbaImage};
9
9
use std::fs::File;
10
-
use vee::{
11
-
color::cafe::HAIR_COLOR,
12
-
shape_load::nx::{GenericResourceShape, ResourceShape, SHAPE_MID_DAT, Shape, ShapeData},
10
+
use vfl::{
11
+
color::cafe::{FACELINE_COLOR, HAIR_COLOR},
12
+
res::shape::nx::{GenericResourceShape, ResourceShape, SHAPE_MID_DAT, Shape, ShapeData},
13
13
};
14
14
15
15
fn shape_data_to_mesh(data: ShapeData) -> Mesh {
···
55
55
mesh
56
56
}
57
57
pub fn load_mesh(res: ResourceShape, shape: Shape, hair_num: usize) -> Result<Mesh> {
58
-
let GenericResourceShape::Element(mut shape) = res.fetch_shape(shape, hair_num).unwrap() else {
58
+
let GenericResourceShape::Element(mut shape) = res.index_by_shape(shape, hair_num).unwrap()
59
+
else {
59
60
panic!("wah")
60
61
};
61
62
···
96
97
color_num: usize,
97
98
shape: Shape,
98
99
) -> impl Bundle {
99
-
let [r, g, b, _a] = HAIR_COLOR[color_num];
100
+
let [r, g, b, _a] = match shape {
101
+
Shape::HairNormal => vfl::color::nx::linear::COMMON_COLOR[color_num],
102
+
Shape::FaceLine | Shape::ForeheadNormal => FACELINE_COLOR[color_num],
103
+
_ => [1.0, 0.0, 1.0, 1.0],
104
+
};
100
105
101
106
(
102
107
Mesh3d(meshes.add(load_mesh(*res, shape, hair_num).unwrap())),
103
-
MeshMaterial3d(materials.add(Color::srgb_from_array([r, g, b]))),
104
-
Transform::from_translation(Vec3::ZERO).with_scale(Vec3::splat(0.05)),
108
+
MeshMaterial3d(materials.add(Color::srgb(r, g, b))),
109
+
CHAR_TRANSFORM,
105
110
CharMesh,
106
111
)
107
112
}
···
117
122
(
118
123
Mesh3d(meshes.add(load_mesh(*res, shape, hair_num).unwrap())),
119
124
MeshMaterial3d(materials.add(StandardMaterial::from(tex))),
120
-
Transform::from_translation(Vec3::ZERO).with_scale(Vec3::splat(0.05)),
125
+
CHAR_TRANSFORM,
121
126
CharMesh,
122
127
)
123
128
}
+14
-9
bevy_viewer/src/main.rs
+14
-9
bevy_viewer/src/main.rs
···
14
14
use char::setup_char;
15
15
use egui_blocking_plugin::{EguiBlockInputState, EguiBlockingPlugin};
16
16
use mask::{setup_glasses, setup_mask};
17
-
use std::f32::consts::*;
18
-
use vee::{
17
+
use std::{
18
+
f32::consts::*,
19
+
path::{Path, PathBuf},
20
+
str::FromStr,
21
+
};
22
+
use vfl::{
19
23
color::cafe::HAIR_COLOR,
20
-
shape_load::nx::{ResourceShape, Shape},
24
+
res::shape::nx::{ResourceShape, Shape},
21
25
};
22
26
23
27
mod char;
24
28
mod load;
25
29
mod mask;
26
30
31
+
const CHARINFO: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/../soyun.charinfo");
32
+
static CHAR_TRANSFORM: Transform = Transform::from_scale(Vec3::splat(0.05));
27
33
#[derive(Component)]
28
34
struct MainPassCamera;
29
35
···
58
64
}),
59
65
EguiBlockingPlugin,
60
66
))
61
-
.add_systems(
62
-
Startup,
63
-
(setup, setup_mask, setup_char, setup_glasses).chain(),
64
-
)
67
+
.add_systems(Startup, (setup, setup_mask, setup_char).chain())
65
68
.add_systems(Update, (cursor_ungrab, orbit))
66
69
.add_plugins(EguiPlugin {
67
70
enable_multipass_for_primary_context: true,
···
136
139
Transform::from_xyz(50.0, 50.0, 50.0).looking_at(Vec3::ZERO, Vec3::Y),
137
140
MainPassCamera,
138
141
));
142
+
143
+
// commands.spawn((PointLight::default(), Transform::from_xyz(0.0, 1.0, 0.0)));
139
144
commands.spawn((
140
145
Name::new("Light"),
141
146
PointLight {
142
147
shadows_enabled: false,
143
-
intensity: 3_000_000.0,
148
+
// intensity: 1_000_000.0,
144
149
..default()
145
150
},
146
-
Transform::from_xyz(0.0, 0.0, 8.0),
151
+
Transform::from_xyz(0.0, 5.0, 3.0),
147
152
));
148
153
149
154
// circular base
+40
-17
bevy_viewer/src/mask.rs
+40
-17
bevy_viewer/src/mask.rs
···
1
1
use bevy::{
2
2
asset::RenderAssetUsages,
3
+
color::palettes::css::REBECCA_PURPLE,
3
4
prelude::*,
4
5
render::{
5
6
render_resource::{Extent3d, TextureDimension, TextureFormat, TextureUsages},
···
7
8
},
8
9
};
9
10
use binrw::BinRead;
10
-
use std::{fs::File, io::BufReader};
11
-
use vee::{
11
+
use std::{fs::File, io::BufReader, path::PathBuf, str::FromStr};
12
+
use vfl::{
12
13
charinfo::nx::NxCharInfo,
13
-
mask::wgpu_render::{RenderContext, render_context_wgpu},
14
-
shape_load::nx::{ResourceShape, SHAPE_MID_DAT, Shape},
15
-
tex_load::nx::TEXTURE_MID_SRGB_DAT,
14
+
draw::wgpu_render::{FACE_OUTPUT_SIZE, RenderContext, render_context_wgpu},
15
+
res::shape::nx::{ResourceShape, SHAPE_MID_DAT, Shape},
16
+
res::tex::nx::{ResourceTexture, TEXTURE_MID_SRGB_DAT},
16
17
};
17
18
18
19
use crate::{
19
-
CharDataRes,
20
+
CHAR_TRANSFORM, CHARINFO, CharDataRes,
20
21
load::{self, load_mesh, setup_image},
21
22
};
22
23
···
28
29
let mut tex_file = BufReader::new(File::open(TEXTURE_MID_SRGB_DAT).unwrap());
29
30
let mut tex_shape = BufReader::new(File::open(SHAPE_MID_DAT).unwrap());
30
31
31
-
let mut char = File::open(concat!(env!("CARGO_MANIFEST_DIR"), "/../Jasmine.charinfo")).unwrap();
32
+
let mut char = File::open(CHARINFO).unwrap();
32
33
let char = NxCharInfo::read(&mut char).unwrap();
33
34
34
35
let image = futures::executor::block_on(render_context_wgpu(
···
61
62
res.0 = Some(load::get_res().unwrap());
62
63
63
64
let size = Extent3d {
64
-
width: 256,
65
-
height: 256,
65
+
width: FACE_OUTPUT_SIZE.into(),
66
+
height: FACE_OUTPUT_SIZE.into(),
66
67
..default()
67
68
};
68
69
···
112
113
(
113
114
Mesh3d(meshes.add(load_mesh(*res, shape, 1).unwrap())),
114
115
MeshMaterial3d(material_handle),
115
-
Transform::from_translation(Vec3::ZERO).with_scale(Vec3::splat(0.05)),
116
+
CHAR_TRANSFORM,
116
117
)
117
118
});
118
119
}
119
120
121
+
type ShapeTransform = Transform;
122
+
123
+
#[must_use]
120
124
fn draw_char_glasses(
121
125
images: &mut ResMut<Assets<Image>>,
122
126
commands: &mut Commands,
123
127
render_layer: RenderLayers,
124
-
) {
128
+
) -> ShapeTransform {
125
129
let mut tex_file = BufReader::new(File::open(TEXTURE_MID_SRGB_DAT).unwrap());
126
-
let mut tex_shape = BufReader::new(File::open(SHAPE_MID_DAT).unwrap());
130
+
let mut shape_file = BufReader::new(File::open(SHAPE_MID_DAT).unwrap());
127
131
128
-
let mut char = File::open(concat!(env!("CARGO_MANIFEST_DIR"), "/../Jasmine.charinfo")).unwrap();
132
+
let mut char = File::open(CHARINFO).unwrap();
129
133
let char = NxCharInfo::read(&mut char).unwrap();
130
134
131
135
let image = futures::executor::block_on(render_context_wgpu(
132
136
RenderContext::new_glasses(
133
137
// &FaceParts::init_glasses(&char, 256.0),
134
138
&char,
135
-
(&mut tex_shape, &mut tex_file),
139
+
(&mut shape_file, &mut tex_file),
136
140
)
137
141
.unwrap(),
138
142
))
···
146
150
render_layer,
147
151
Transform::from_scale(vec3(1.0, -1.0, 1.0)),
148
152
));
153
+
154
+
let mut shape_file = BufReader::new(File::open(SHAPE_MID_DAT).unwrap());
155
+
let res_shape = ResourceShape::read(&mut shape_file).unwrap();
156
+
let nose_translate = res_shape.face_line_transform[char.faceline_type as usize].nose_translate;
157
+
158
+
let shape_translation = vec3(
159
+
nose_translate[0],
160
+
5.0 + nose_translate[1] + -1.5 * f32::from(char.glass_y),
161
+
2.0 + nose_translate[2],
162
+
);
163
+
let shape_scale = 0.15 * f32::from(char.glass_scale);
164
+
165
+
Transform::from_translation(shape_translation).with_scale(Vec3::splat(shape_scale))
166
+
167
+
// (shape_translation, shape_scale)
149
168
}
150
169
151
170
pub fn setup_glasses(
···
180
199
// This specifies the layer used for the first pass, which will be attached to the first pass camera and cube.
181
200
let first_pass_layer = RenderLayers::layer(2);
182
201
183
-
draw_char_glasses(&mut images, &mut commands, first_pass_layer.clone());
202
+
let mut glasses_shape_transform =
203
+
draw_char_glasses(&mut images, &mut commands, first_pass_layer.clone());
204
+
205
+
// glasses_shape_transform.scale *= 0.05; // todo fix this resizing
206
+
// glasses_shape_transform.translation *= 0.05; // todo fix this resizing
184
207
185
208
commands.spawn((
186
209
Camera2d,
187
210
Camera {
188
211
target: image_handle.clone().into(),
189
-
clear_color: Color::NONE.into(),
212
+
clear_color: Color::from(REBECCA_PURPLE).into(),
190
213
..default()
191
214
},
192
215
first_pass_layer.clone(),
···
209
232
(
210
233
Mesh3d(meshes.add(load_mesh(*res, shape, 0).unwrap())),
211
234
MeshMaterial3d(material_handle),
212
-
Transform::from_translation(Vec3::ZERO).with_scale(Vec3::splat(0.05)),
235
+
glasses_shape_transform,
213
236
)
214
237
});
215
238
}
+28
justfile
+28
justfile
···
1
+
# This justfile is for my convenience only.
2
+
# Please don't use this unless you need to.
3
+
4
+
# Yeah, idk.
5
+
xcode:
6
+
cargo build --bin lightweight_viewer
7
+
open /private/var/folders/sl/mys5xs454210crk192gs9sk00000gn/T/BED4E4F3-9BCC-436E-992A-9352729F3DFA/lightweight_viewer.xcworkspace
8
+
9
+
profile:
10
+
just profile-instrument
11
+
12
+
# Requires samply.
13
+
profile-samply:
14
+
cargo build --bin lightweight_viewer --profile profiling
15
+
BROWSER=/Applications/Firefox\ Nightly.app/Contents/MacOS/firefox samply record ./target/profiling/lightweight_viewer
16
+
profile-samply-debug:
17
+
cargo build --bin lightweight_viewer
18
+
BROWSER=/Applications/Firefox\ Nightly.app/Contents/MacOS/firefox samply record ./target/debug/lightweight_viewer
19
+
20
+
# Requires Xcode (Instruments).
21
+
profile-instrument:
22
+
cargo build --bin lightweight_viewer --profile profiling
23
+
rm -rf /tmp/tracefile.trace
24
+
xcrun xctrace record \
25
+
--template "Time Profiler" \
26
+
--output /tmp/tracefile.trace \
27
+
--launch -- ./target/profiling/lightweight_viewer
28
+
open /tmp/tracefile.trace
+14
lightweight_viewer/Cargo.toml
+14
lightweight_viewer/Cargo.toml
···
1
+
[package]
2
+
name = "lightweight_viewer"
3
+
version = "0.1.0"
4
+
edition = "2024"
5
+
6
+
[dependencies]
7
+
pollster = "0.4"
8
+
wgpu = "25.0.0"
9
+
winit = { version = "0.30.11" }
10
+
vfl = { path = "../vfl", features = ["res", "draw"] }
11
+
glam = { version = "0.30.3", features = ["bytemuck"] }
12
+
bytemuck = "1.23.0"
13
+
image = "0.25.6"
14
+
nalgebra = "0.33.2"
+274
lightweight_viewer/src/char.rs
+274
lightweight_viewer/src/char.rs
···
1
+
use crate::State;
2
+
use crate::render::shape_data_to_render_3d_shape;
3
+
use glam::{Vec3, uvec2};
4
+
use image::DynamicImage;
5
+
use vfl::color::nx::ModulationIntent;
6
+
use vfl::draw::render_2d::texture_format_to_wgpu;
7
+
use vfl::draw::render_3d::Rendered3dShape;
8
+
use vfl::draw::wgpu_render::texture::TextureBundle;
9
+
use vfl::res::tex::nx::{RawTexture, ResourceTexture, TextureElement};
10
+
use vfl::{
11
+
color::nx::{ColorModulated, modulate},
12
+
draw::{
13
+
render_2d::Rendered2dShape,
14
+
wgpu_render::{RenderContext, texture},
15
+
},
16
+
res::shape::nx::{GenericResourceShape, Shape},
17
+
};
18
+
use wgpu::{CommandEncoder, TextureView};
19
+
20
+
pub fn draw_noseline(
21
+
st: &mut State,
22
+
texture_view: Option<TextureBundle>,
23
+
encoder: &mut CommandEncoder,
24
+
) -> texture::TextureBundle {
25
+
let res_texture = &st.resources.texture_header;
26
+
let file_texture = &st.resources.texture_data;
27
+
28
+
let noseline_num = usize::from(st.char_info.nose_type);
29
+
30
+
let tex = res_texture.noseline[noseline_num]
31
+
.get_uncompressed_bytes(file_texture)
32
+
.unwrap()
33
+
.unwrap();
34
+
35
+
let output_texture = if let Some(texture_view) = texture_view {
36
+
texture_view
37
+
} else {
38
+
texture::TextureBundle::create_texture(&st.device, &uvec2(256, 256), "noselinetex")
39
+
};
40
+
41
+
Rendered2dShape::render_texture_trivial(
42
+
tex,
43
+
modulate(ColorModulated::NoseLineShape, &st.char_info),
44
+
None,
45
+
st,
46
+
&output_texture.view,
47
+
encoder,
48
+
);
49
+
50
+
output_texture
51
+
}
52
+
53
+
pub fn draw_mask(st: &mut State, texture_view: &TextureView, encoder: &mut CommandEncoder) {
54
+
let res_shape = &st.resources.shape_header;
55
+
let res_texture = &st.resources.texture_header;
56
+
let file_texture = &st.resources.texture_data;
57
+
58
+
let render_context =
59
+
RenderContext::new(&st.char_info.clone(), res_texture, res_shape, file_texture).unwrap();
60
+
61
+
for shape in render_context.shape {
62
+
shape.render(st, texture_view, encoder);
63
+
}
64
+
}
65
+
66
+
// Looks up a TextureElement, and returns the texture with any modulation that needs to be done.
67
+
// Returns an Option<T> because the texture could not exist (e.g. CharInfo w/o Beard)
68
+
fn load_faceline_texture(
69
+
st: &mut State,
70
+
texture_element: TextureElement,
71
+
modulated: ColorModulated,
72
+
) -> Option<(RawTexture, ModulationIntent)> {
73
+
texture_element
74
+
.get_uncompressed_bytes(&st.resources.texture_data)
75
+
.unwrap()
76
+
.map(|bytes| (bytes, modulate(modulated, &st.char_info)))
77
+
}
78
+
79
+
// Load faceline textures in order [wrinkle, makeup, beard], and removes any that don't exist
80
+
fn get_faceline_textures(
81
+
st: &mut State,
82
+
res_texture: &ResourceTexture,
83
+
) -> Vec<(RawTexture, ModulationIntent)> {
84
+
vec![
85
+
load_faceline_texture(
86
+
st,
87
+
res_texture.wrinkle[st.char_info.faceline_wrinkle as usize],
88
+
ColorModulated::FacelineWrinkle,
89
+
),
90
+
load_faceline_texture(
91
+
st,
92
+
res_texture.makeup[st.char_info.faceline_make as usize],
93
+
ColorModulated::FacelineMakeup,
94
+
),
95
+
{
96
+
// We need to do a smarter check here.
97
+
if st.char_info.beard_type >= 4 {
98
+
load_faceline_texture(st, res_texture.beard[1], ColorModulated::BeardTexture)
99
+
} else {
100
+
None
101
+
}
102
+
},
103
+
]
104
+
.into_iter()
105
+
.flatten()
106
+
.collect()
107
+
}
108
+
109
+
fn draw_faceline(st: &mut State, texture_view: &TextureView, encoder: &mut CommandEncoder) {
110
+
let res_texture = st.resources.texture_header;
111
+
112
+
let textures = get_faceline_textures(st, &res_texture);
113
+
114
+
for (i, (rendered_texture, modulation)) in textures.iter().enumerate() {
115
+
// Check if we are the first to be rendered out, then add an opaque background.
116
+
// We don't want an opaque redraw happening over our other faceline textures.
117
+
let opaque = (i == 0).then_some(
118
+
vfl::color::nx::srgb::FACELINE_COLOR[usize::from(st.char_info.faceline_color)],
119
+
);
120
+
121
+
Rendered2dShape::render_texture_trivial(
122
+
rendered_texture.to_owned(),
123
+
modulation.to_owned(),
124
+
None,
125
+
st,
126
+
texture_view,
127
+
encoder,
128
+
);
129
+
}
130
+
}
131
+
132
+
pub fn draw_char(st: &mut State, texture_view: &TextureView, encoder: &mut CommandEncoder) {
133
+
let shapes = get_char_shapes(st, encoder);
134
+
135
+
for mut shape in shapes {
136
+
shape.render(st, texture_view, encoder);
137
+
}
138
+
}
139
+
140
+
pub(crate) fn load_shape(
141
+
shape_kind: Shape,
142
+
shape_index: u8,
143
+
shape_color: u8,
144
+
st: &mut State,
145
+
encoder: &mut CommandEncoder,
146
+
) -> Option<Rendered3dShape> {
147
+
let res_shape = &st.resources.shape_header;
148
+
149
+
// println!("Loading shp {shape_kind:?}[{shape_index:?}] col#{shape_color:?}");
150
+
151
+
let GenericResourceShape::FaceLineTransform(faceline_transform) = res_shape
152
+
.index_by_shape(
153
+
Shape::FaceLineTransform,
154
+
usize::from(st.char_info.faceline_type),
155
+
)
156
+
.unwrap()
157
+
else {
158
+
panic!()
159
+
};
160
+
161
+
let GenericResourceShape::Element(mut shape_element) = res_shape
162
+
.index_by_shape(shape_kind, usize::from(shape_index))
163
+
.unwrap()
164
+
else {
165
+
panic!()
166
+
};
167
+
168
+
// For some reason there are just empty gaps in the shape data.
169
+
// To validate this you just have to check that the size is 0? Who knows why.
170
+
if shape_element.common.size == 0 {
171
+
return None;
172
+
}
173
+
let position = match shape_kind {
174
+
Shape::Nose | Shape::NoseLine | Shape::Glasses => {
175
+
Vec3::from_array(faceline_transform.nose_translate)
176
+
}
177
+
_ => Vec3::ZERO,
178
+
};
179
+
180
+
// Draw out any textures we need.
181
+
let projected_texture = match shape_kind {
182
+
Shape::NoseLine => {
183
+
// let tex = res_texture.noseline[1]
184
+
// .get_image(&mut BufReader::new(
185
+
// File::open(TEXTURE_MID_SRGB_DAT).unwrap(),
186
+
// ))
187
+
// .unwrap()
188
+
// .unwrap();
189
+
190
+
// let tex = DynamicImage::ImageRgba8(tex);
191
+
192
+
// let noseline_texture =
193
+
// texture::Texture::from_image(&st.device, &st.queue, &tex, None).unwrap();
194
+
// // let noseline_texture = crate::texture::Texture::create_texture(
195
+
// // &st.device,
196
+
// // &PhysicalSize::<u32>::new(128, 128),
197
+
// // "noselinetex",
198
+
// // );
199
+
200
+
// let noseline_texture =
201
+
// texture::TextureBundle::create_texture(&st.device, &uvec2(256, 256), "noselinetex");
202
+
203
+
let noseline_texture = draw_noseline(st, None, encoder);
204
+
205
+
Some(noseline_texture)
206
+
}
207
+
Shape::Mask => {
208
+
let mask_texture =
209
+
texture::TextureBundle::create_texture(&st.device, &uvec2(512, 512), "masktex");
210
+
211
+
draw_mask(st, &mask_texture.view, encoder);
212
+
213
+
Some(mask_texture)
214
+
}
215
+
Shape::FaceLine => {
216
+
let faceline_texture =
217
+
texture::TextureBundle::create_texture(&st.device, &uvec2(512, 512), "facelinetex");
218
+
219
+
draw_faceline(st, &faceline_texture.view, encoder);
220
+
221
+
Some(faceline_texture)
222
+
}
223
+
_ => None,
224
+
};
225
+
226
+
let file_shape = &st.resources.shape_data[..];
227
+
228
+
Some(shape_data_to_render_3d_shape(
229
+
shape_element.shape_data(file_shape).unwrap(),
230
+
shape_kind,
231
+
usize::from(shape_color),
232
+
position,
233
+
projected_texture,
234
+
))
235
+
}
236
+
237
+
fn get_char_shapes(st: &mut State, encoder: &mut CommandEncoder) -> Vec<Rendered3dShape> {
238
+
// Order DOES matter for back-to-front sorting. It's not a perfect science, though.
239
+
vec![
240
+
load_shape(
241
+
Shape::FaceLine,
242
+
st.char_info.faceline_type,
243
+
st.char_info.faceline_color,
244
+
st,
245
+
encoder,
246
+
),
247
+
load_shape(
248
+
Shape::HairNormal,
249
+
st.char_info.hair_type,
250
+
st.char_info.hair_color,
251
+
st,
252
+
encoder,
253
+
),
254
+
load_shape(
255
+
Shape::Nose,
256
+
st.char_info.nose_type,
257
+
st.char_info.faceline_color,
258
+
st,
259
+
encoder,
260
+
),
261
+
load_shape(Shape::NoseLine, st.char_info.nose_type, 0, st, encoder),
262
+
{
263
+
if st.char_info.glass_type != 0 {
264
+
load_shape(Shape::Glasses, 0, st.char_info.glass_color, st, encoder)
265
+
} else {
266
+
None
267
+
}
268
+
},
269
+
load_shape(Shape::Mask, st.char_info.faceline_type, 0, st, encoder),
270
+
]
271
+
.into_iter()
272
+
.flatten()
273
+
.collect()
274
+
}
+70
lightweight_viewer/src/char_model.rs
+70
lightweight_viewer/src/char_model.rs
···
1
+
use vfl::{draw::render_3d::Rendered3dShape, res::shape::nx::Shape};
2
+
use wgpu::{CommandEncoder, TextureView};
3
+
4
+
use crate::{State, char::load_shape};
5
+
6
+
type Model = Rendered3dShape;
7
+
type ModelOpt = Option<Rendered3dShape>;
8
+
9
+
#[derive(Debug)]
10
+
pub struct CharModel {
11
+
pub face_line: Model,
12
+
pub mask: Model,
13
+
pub hair: ModelOpt,
14
+
pub nose: ModelOpt,
15
+
pub nose_line: Model,
16
+
}
17
+
impl CharModel {
18
+
pub fn new(st: &mut State, encoder: &mut CommandEncoder) -> CharModel {
19
+
CharModel {
20
+
face_line: face_line(st, encoder).unwrap(),
21
+
mask: mask(st, encoder).unwrap(),
22
+
hair: hair(st, encoder),
23
+
nose: None,
24
+
nose_line: nose_line(st, encoder).unwrap(),
25
+
}
26
+
}
27
+
28
+
pub fn render(
29
+
&mut self,
30
+
st: &mut State,
31
+
texture_view: &TextureView,
32
+
encoder: &mut CommandEncoder,
33
+
) {
34
+
self.face_line.render(st, texture_view, encoder);
35
+
// if let Some(hair) = self.hair.as_mut() {
36
+
// hair.render(st, texture_view, encoder);
37
+
// }
38
+
// self.mask.render(st, texture_view, encoder);
39
+
40
+
// self.nose_line.render(st, texture_view, encoder);
41
+
}
42
+
}
43
+
44
+
fn face_line(st: &mut State, encoder: &mut CommandEncoder) -> ModelOpt {
45
+
load_shape(
46
+
Shape::FaceLine,
47
+
st.char_info.faceline_type,
48
+
st.char_info.faceline_color,
49
+
st,
50
+
encoder,
51
+
)
52
+
}
53
+
54
+
fn hair(st: &mut State, encoder: &mut CommandEncoder) -> ModelOpt {
55
+
load_shape(
56
+
Shape::HairNormal,
57
+
st.char_info.hair_type,
58
+
st.char_info.hair_color,
59
+
st,
60
+
encoder,
61
+
)
62
+
}
63
+
64
+
fn mask(st: &mut State, encoder: &mut CommandEncoder) -> ModelOpt {
65
+
load_shape(Shape::Mask, st.char_info.faceline_type, 0, st, encoder)
66
+
}
67
+
68
+
fn nose_line(st: &mut State, encoder: &mut CommandEncoder) -> ModelOpt {
69
+
load_shape(Shape::NoseLine, st.char_info.nose_type, 0, st, encoder)
70
+
}
+670
lightweight_viewer/src/main.rs
+670
lightweight_viewer/src/main.rs
···
1
+
use camera::{Camera, CameraUniform};
2
+
use char_model::CharModel;
3
+
use glam::{UVec2, Vec3, Vec4, uvec2, vec4};
4
+
use std::sync::{Mutex, OnceLock};
5
+
use std::{f32::consts::FRAC_PI_2, fs::File, sync::Arc};
6
+
use vfl::res::shape::nx::ResourceShape;
7
+
use vfl::res::tex::nx::ResourceTexture;
8
+
use vfl::{
9
+
charinfo::nx::{BinRead, NxCharInfo},
10
+
draw::{render_3d::ProgramState, wgpu_render::texture},
11
+
res::{shape::nx::SHAPE_MID_DAT, tex::nx::TEXTURE_MID_SRGB_DAT},
12
+
};
13
+
use wgpu::Features;
14
+
use wgpu::{Backends, util::DeviceExt};
15
+
use winit::{
16
+
application::ApplicationHandler,
17
+
event::WindowEvent,
18
+
event_loop::{ActiveEventLoop, ControlFlow, EventLoop},
19
+
window::{Window, WindowId},
20
+
};
21
+
22
+
static CHAR_MODEL: OnceLock<Mutex<CharModel>> = OnceLock::new();
23
+
24
+
pub mod char;
25
+
pub mod char_model;
26
+
pub mod render;
27
+
28
+
#[allow(unused)]
29
+
const OVERLAY_REBECCA_PURPLE: wgpu::Color = wgpu::Color {
30
+
r: 0.1,
31
+
g: 0.12,
32
+
b: 0.1,
33
+
a: 0.3,
34
+
};
35
+
const DARK_REBECCA_PURPLE: wgpu::Color = wgpu::Color {
36
+
r: 0.2,
37
+
g: 0.1,
38
+
b: 0.3,
39
+
a: 1.0,
40
+
};
41
+
42
+
pub const fn wgpu_color_to_vec4(color: wgpu::Color) -> Vec4 {
43
+
vec4(
44
+
color.r as f32,
45
+
color.g as f32,
46
+
color.b as f32,
47
+
color.a as f32,
48
+
)
49
+
}
50
+
51
+
const FACES: [&str; 5] = [
52
+
"testguy.charinfo",
53
+
"j0.charinfo",
54
+
"charline.charinfo",
55
+
"Jasmine.charinfo",
56
+
"soyun.charinfo",
57
+
];
58
+
59
+
pub struct ResourceData {
60
+
texture_header: ResourceTexture,
61
+
shape_header: ResourceShape,
62
+
texture_data: Vec<u8>,
63
+
shape_data: Vec<u8>,
64
+
}
65
+
66
+
pub struct State {
67
+
window: Arc<Window>,
68
+
device: wgpu::Device,
69
+
queue: wgpu::Queue,
70
+
size: UVec2,
71
+
surface: wgpu::Surface<'static>,
72
+
surface_format: wgpu::TextureFormat,
73
+
char_info: NxCharInfo,
74
+
char_remake: bool,
75
+
camera: Camera,
76
+
camera_buffer: wgpu::Buffer,
77
+
camera_bind_group: wgpu::BindGroup,
78
+
camera_uniform: CameraUniform,
79
+
camera_bind_group_layout: wgpu::BindGroupLayout,
80
+
depth_texture: texture::TextureBundle,
81
+
camera_rotations: usize,
82
+
resources: ResourceData,
83
+
}
84
+
85
+
impl ProgramState for State {
86
+
fn device(&self) -> wgpu::Device {
87
+
self.device.clone()
88
+
}
89
+
90
+
fn queue(&self) -> wgpu::Queue {
91
+
self.queue.clone()
92
+
}
93
+
94
+
fn camera_bgl(&self) -> &wgpu::BindGroupLayout {
95
+
&self.camera_bind_group_layout
96
+
}
97
+
98
+
fn camera_bg(&self) -> &wgpu::BindGroup {
99
+
&self.camera_bind_group
100
+
}
101
+
102
+
fn surface_fmt(&self) -> wgpu::TextureFormat {
103
+
self.surface_format
104
+
}
105
+
106
+
fn depth_texture(&self) -> &vfl::draw::wgpu_render::texture::TextureBundle {
107
+
&self.depth_texture
108
+
}
109
+
}
110
+
111
+
impl State {
112
+
async fn new(window: Arc<Window>) -> State {
113
+
let instance = wgpu::Instance::new(&wgpu::InstanceDescriptor {
114
+
backends: Backends::PRIMARY | Backends::SECONDARY,
115
+
..Default::default()
116
+
});
117
+
let adapter = instance
118
+
.request_adapter(&wgpu::RequestAdapterOptions::default())
119
+
.await
120
+
.unwrap();
121
+
122
+
dbg!(
123
+
adapter.get_texture_format_features(wgpu::TextureFormat::Astc {
124
+
block: wgpu::AstcBlock::B4x4,
125
+
channel: wgpu::AstcChannel::Unorm
126
+
})
127
+
);
128
+
let device_descriptor = wgpu::DeviceDescriptor {
129
+
required_features: Features::TEXTURE_COMPRESSION_ASTC
130
+
| Features::TEXTURE_COMPRESSION_BC,
131
+
..Default::default()
132
+
};
133
+
let (device, queue) = adapter.request_device(&device_descriptor).await.unwrap();
134
+
135
+
let size = window.inner_size();
136
+
let size = uvec2(size.width, size.height);
137
+
138
+
let surface = instance.create_surface(window.clone()).unwrap();
139
+
let cap = surface.get_capabilities(&adapter);
140
+
let surface_format = cap.formats[0];
141
+
142
+
let depth_texture =
143
+
texture::TextureBundle::create_depth_texture(&device, &size, "depth_texture");
144
+
145
+
let mut char_info =
146
+
File::open(format!("{}/../{}", env!("CARGO_MANIFEST_DIR"), FACES[0])).unwrap();
147
+
let char_info = NxCharInfo::read(&mut char_info).unwrap();
148
+
149
+
let camera = Camera {
150
+
eye: (0.0, 25.0, 100.0).into(),
151
+
target: (0.0, 25.0, 0.0).into(),
152
+
up: Vec3::Y,
153
+
aspect: size.x as f32 / size.y as f32,
154
+
fov_y_radians: FRAC_PI_2,
155
+
znear: 0.1,
156
+
zfar: 10000.0,
157
+
};
158
+
159
+
let mut camera_uniform = CameraUniform::new();
160
+
camera_uniform.update_view_proj(&camera);
161
+
162
+
let camera_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor {
163
+
label: Some("Camera Buffer"),
164
+
contents: bytemuck::cast_slice(&[camera_uniform]),
165
+
usage: wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST,
166
+
});
167
+
168
+
let camera_bind_group_layout =
169
+
device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor {
170
+
entries: &[wgpu::BindGroupLayoutEntry {
171
+
binding: 0,
172
+
visibility: wgpu::ShaderStages::VERTEX,
173
+
ty: wgpu::BindingType::Buffer {
174
+
ty: wgpu::BufferBindingType::Uniform,
175
+
has_dynamic_offset: false,
176
+
min_binding_size: None,
177
+
},
178
+
count: None,
179
+
}],
180
+
label: Some("camera_bind_group_layout"),
181
+
});
182
+
183
+
let camera_bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor {
184
+
layout: &camera_bind_group_layout,
185
+
entries: &[wgpu::BindGroupEntry {
186
+
binding: 0,
187
+
resource: camera_buffer.as_entire_binding(),
188
+
}],
189
+
label: Some("camera_bind_group"),
190
+
});
191
+
192
+
let camera_rotations = 0;
193
+
194
+
let shape_header = ResourceShape::read(&mut File::open(SHAPE_MID_DAT).unwrap()).unwrap();
195
+
let texture_header =
196
+
ResourceTexture::read(&mut File::open(TEXTURE_MID_SRGB_DAT).unwrap()).unwrap();
197
+
let shape_data = std::fs::read(SHAPE_MID_DAT).unwrap();
198
+
let texture_data = std::fs::read(TEXTURE_MID_SRGB_DAT).unwrap();
199
+
200
+
let resources = ResourceData {
201
+
shape_header,
202
+
texture_header,
203
+
shape_data,
204
+
texture_data,
205
+
};
206
+
207
+
let state = State {
208
+
window,
209
+
device,
210
+
queue,
211
+
size,
212
+
surface,
213
+
surface_format,
214
+
char_info,
215
+
camera,
216
+
camera_buffer,
217
+
camera_bind_group,
218
+
camera_uniform,
219
+
camera_bind_group_layout,
220
+
depth_texture,
221
+
camera_rotations,
222
+
resources,
223
+
char_remake: true,
224
+
};
225
+
226
+
// Configure surface for the first time
227
+
state.configure_surface();
228
+
229
+
state
230
+
}
231
+
232
+
fn get_window(&self) -> &Window {
233
+
&self.window
234
+
}
235
+
236
+
fn configure_surface(&self) {
237
+
let surface_config = wgpu::SurfaceConfiguration {
238
+
usage: wgpu::TextureUsages::RENDER_ATTACHMENT,
239
+
format: self.surface_format,
240
+
// Request compatibility with the sRGB-format texture view weโre going to create later.
241
+
view_formats: vec![self.surface_format.add_srgb_suffix()],
242
+
alpha_mode: wgpu::CompositeAlphaMode::Auto,
243
+
width: self.size.x,
244
+
height: self.size.y,
245
+
desired_maximum_frame_latency: 2,
246
+
present_mode: wgpu::PresentMode::AutoVsync,
247
+
};
248
+
self.surface.configure(&self.device, &surface_config);
249
+
}
250
+
251
+
fn resize(&mut self, new_size: winit::dpi::PhysicalSize<u32>) {
252
+
self.size = uvec2(new_size.width, new_size.height);
253
+
254
+
// reconfigure the surface
255
+
self.configure_surface();
256
+
257
+
self.depth_texture =
258
+
texture::TextureBundle::create_depth_texture(&self.device, &self.size, "depth_texture");
259
+
}
260
+
261
+
fn render(&mut self) {
262
+
// Create texture view
263
+
let surface_texture = self
264
+
.surface
265
+
.get_current_texture()
266
+
.expect("failed to acquire next swapchain texture");
267
+
let texture_view = surface_texture
268
+
.texture
269
+
.create_view(&wgpu::TextureViewDescriptor {
270
+
// Without add_srgb_suffix() the image we will be working with
271
+
// might not be "gamma correct".
272
+
format: Some(self.surface_format.add_srgb_suffix()),
273
+
..Default::default()
274
+
});
275
+
276
+
// Clear the screen, so we can layer a BUNCH of render passes...
277
+
278
+
let mut encoder = self.device.create_command_encoder(&Default::default());
279
+
// Create the renderpass which will clear the screen.
280
+
let renderpass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor {
281
+
label: None,
282
+
color_attachments: &[Some(wgpu::RenderPassColorAttachment {
283
+
view: &texture_view,
284
+
resolve_target: None,
285
+
ops: wgpu::Operations {
286
+
load: wgpu::LoadOp::Clear(DARK_REBECCA_PURPLE),
287
+
store: wgpu::StoreOp::Store,
288
+
},
289
+
})],
290
+
// Clear the depth buffer, too.
291
+
depth_stencil_attachment: Some(wgpu::RenderPassDepthStencilAttachment {
292
+
view: &self.depth_texture.view,
293
+
depth_ops: Some(wgpu::Operations {
294
+
load: wgpu::LoadOp::Clear(1.0),
295
+
store: wgpu::StoreOp::Store,
296
+
}),
297
+
stencil_ops: None,
298
+
}),
299
+
timestamp_writes: None,
300
+
occlusion_query_set: None,
301
+
});
302
+
303
+
// If you wanted to call any drawing commands, they would go here.
304
+
305
+
// End the renderpass.
306
+
drop(renderpass);
307
+
308
+
// If you wanted to call any drawing commands, they would go here.
309
+
// draw_mask(self, &texture_view, &mut encoder);
310
+
311
+
if CHAR_MODEL.get().is_none() {
312
+
let new_model = CharModel::new(self, &mut encoder);
313
+
CHAR_MODEL.set(Mutex::new(new_model)).unwrap();
314
+
}
315
+
316
+
// For profiling:
317
+
// self.char_remake = true;
318
+
319
+
if self.char_remake {
320
+
self.char_remake = false;
321
+
// let mut encoder = self.device.create_command_encoder(&Default::default());
322
+
323
+
let new_model = CharModel::new(self, &mut encoder);
324
+
325
+
let mut state = CHAR_MODEL.get().unwrap().lock().unwrap();
326
+
*state = new_model;
327
+
}
328
+
329
+
CHAR_MODEL
330
+
.get()
331
+
.unwrap()
332
+
.lock()
333
+
.unwrap()
334
+
.render(self, &texture_view, &mut encoder);
335
+
336
+
// Submit the command in the queue to execute
337
+
self.queue.submit([encoder.finish()]);
338
+
self.window.pre_present_notify();
339
+
surface_texture.present();
340
+
}
341
+
342
+
fn update(&mut self) {
343
+
let forward = self.camera.target - self.camera.eye;
344
+
let forward_norm = forward.normalize();
345
+
let forward_mag = forward.length();
346
+
347
+
let right = forward_norm.cross(self.camera.up);
348
+
349
+
const CAMERA_ROTATE_SPEED: f32 = 2.0;
350
+
self.camera.eye =
351
+
self.camera.target - (forward + right * CAMERA_ROTATE_SPEED).normalize() * forward_mag;
352
+
353
+
let forward_new = self.camera.target - self.camera.eye;
354
+
let forward_new_norm = forward_new.normalize();
355
+
356
+
const ROTATION_POINT: f32 = 0.0;
357
+
if forward_norm.x < ROTATION_POINT && forward_new_norm.x >= ROTATION_POINT {
358
+
self.camera_rotations += 1;
359
+
360
+
let mut char_info = File::open(format!(
361
+
"{}/../{}",
362
+
env!("CARGO_MANIFEST_DIR"),
363
+
FACES[self.camera_rotations % FACES.len()]
364
+
))
365
+
.unwrap();
366
+
self.char_info = NxCharInfo::read(&mut char_info).unwrap();
367
+
368
+
self.char_remake = true;
369
+
// if CHAR_MODEL.get().is_none() {
370
+
// let new_model = CharModel::new(self, &mut encoder);
371
+
// CHAR_MODEL.set(Mutex::new(new_model)).unwrap();
372
+
// }
373
+
}
374
+
375
+
self.camera_uniform.update_view_proj(&self.camera);
376
+
self.queue.write_buffer(
377
+
&self.camera_buffer,
378
+
0,
379
+
bytemuck::cast_slice(&[self.camera_uniform]),
380
+
);
381
+
}
382
+
}
383
+
384
+
#[derive(Default)]
385
+
struct App {
386
+
state: Option<State>,
387
+
}
388
+
389
+
impl ApplicationHandler for App {
390
+
fn resumed(&mut self, event_loop: &ActiveEventLoop) {
391
+
// Create window object
392
+
let window = Arc::new(
393
+
event_loop
394
+
.create_window(Window::default_attributes().with_title("Vee(FL)-Testing"))
395
+
.unwrap(),
396
+
);
397
+
398
+
let state = pollster::block_on(State::new(window.clone()));
399
+
self.state = Some(state);
400
+
401
+
window.request_redraw();
402
+
}
403
+
404
+
fn window_event(&mut self, event_loop: &ActiveEventLoop, _id: WindowId, event: WindowEvent) {
405
+
let state = self.state.as_mut().unwrap();
406
+
match event {
407
+
WindowEvent::CloseRequested => {
408
+
println!("The close button was pressed; stopping");
409
+
event_loop.exit();
410
+
}
411
+
WindowEvent::RedrawRequested => {
412
+
state.update();
413
+
state.render();
414
+
// Emits a new redraw requested event.
415
+
state.get_window().request_redraw();
416
+
}
417
+
WindowEvent::Resized(size) => {
418
+
// Reconfigures the size of the surface. We do not re-render
419
+
// here as this event is always followed up by redraw request.
420
+
state.resize(size);
421
+
}
422
+
_ => (),
423
+
}
424
+
}
425
+
}
426
+
427
+
fn main() {
428
+
// wgpu uses `log` for all of our logging, so we initialize a logger with the `env_logger` crate.
429
+
//
430
+
// To change the log level, set the `RUST_LOG` environment variable. See the `env_logger`
431
+
// documentation for more information.
432
+
// env_logger::init();
433
+
434
+
let event_loop = EventLoop::new().unwrap();
435
+
436
+
// When the current loop iteration finishes, immediately begin a new
437
+
// iteration regardless of whether or not new events are available to
438
+
// process. Preferred for applications that want to render as fast as
439
+
// possible, like games.
440
+
event_loop.set_control_flow(ControlFlow::Poll);
441
+
442
+
// When the current loop iteration finishes, suspend the thread until
443
+
// another event arrives. Helps keeping CPU utilization low if nothing
444
+
// is happening, which is preferred if the application might be idling in
445
+
// the background.
446
+
// event_loop.set_control_flow(ControlFlow::Wait);
447
+
448
+
let mut app = App::default();
449
+
event_loop.run_app(&mut app).unwrap();
450
+
}
451
+
452
+
mod camera {
453
+
use glam::{Mat4, Vec3};
454
+
455
+
pub struct Camera {
456
+
pub eye: Vec3,
457
+
pub target: Vec3,
458
+
pub up: Vec3,
459
+
pub aspect: f32,
460
+
pub fov_y_radians: f32,
461
+
pub znear: f32,
462
+
pub zfar: f32,
463
+
}
464
+
465
+
impl Camera {
466
+
pub fn build_view_projection_matrix(&self) -> Mat4 {
467
+
let view = Mat4::look_at_rh(self.eye, self.target, self.up);
468
+
let proj = Mat4::perspective_rh(self.fov_y_radians, self.aspect, self.znear, self.zfar);
469
+
proj * view
470
+
}
471
+
}
472
+
473
+
#[repr(C)]
474
+
#[derive(Debug, Copy, Clone, bytemuck::Pod, bytemuck::Zeroable)]
475
+
pub struct CameraUniform {
476
+
view_proj: [[f32; 4]; 4],
477
+
}
478
+
479
+
impl CameraUniform {
480
+
pub fn new() -> Self {
481
+
Self {
482
+
view_proj: Mat4::IDENTITY.to_cols_array_2d(),
483
+
}
484
+
}
485
+
486
+
pub fn update_view_proj(&mut self, camera: &Camera) {
487
+
self.view_proj = camera.build_view_projection_matrix().to_cols_array_2d();
488
+
}
489
+
}
490
+
}
491
+
492
+
// mod texture {
493
+
// use std::error::Error;
494
+
495
+
// use image::GenericImageView;
496
+
// use wgpu::TextureFormat;
497
+
// use winit::dpi::PhysicalSize;
498
+
499
+
// pub struct Texture {
500
+
// #[allow(unused)]
501
+
// pub texture: wgpu::Texture,
502
+
// pub view: wgpu::TextureView,
503
+
// pub sampler: wgpu::Sampler,
504
+
// }
505
+
506
+
// #[allow(unused)]
507
+
// impl Texture {
508
+
// pub fn from_bytes(
509
+
// device: &wgpu::Device,
510
+
// queue: &wgpu::Queue,
511
+
// bytes: &[u8],
512
+
// label: &str,
513
+
// ) -> Result<Self, Box<dyn Error>> {
514
+
// let img = image::load_from_memory(bytes)?;
515
+
// Self::from_image(device, queue, &img, Some(label))
516
+
// }
517
+
518
+
// pub fn from_image(
519
+
// device: &wgpu::Device,
520
+
// queue: &wgpu::Queue,
521
+
// img: &image::DynamicImage,
522
+
// label: Option<&str>,
523
+
// ) -> Result<Self, Box<dyn Error>> {
524
+
// let rgba = img.to_rgba8();
525
+
// let dimensions = img.dimensions();
526
+
527
+
// let size = wgpu::Extent3d {
528
+
// width: dimensions.0,
529
+
// height: dimensions.1,
530
+
// depth_or_array_layers: 1,
531
+
// };
532
+
// let texture = device.create_texture(&wgpu::TextureDescriptor {
533
+
// label,
534
+
// size,
535
+
// mip_level_count: 1,
536
+
// sample_count: 1,
537
+
// dimension: wgpu::TextureDimension::D2,
538
+
// format: wgpu::TextureFormat::Rgba8UnormSrgb,
539
+
// usage: wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::COPY_DST,
540
+
// view_formats: &[],
541
+
// });
542
+
543
+
// queue.write_texture(
544
+
// wgpu::TexelCopyTextureInfo {
545
+
// aspect: wgpu::TextureAspect::All,
546
+
// texture: &texture,
547
+
// mip_level: 0,
548
+
// origin: wgpu::Origin3d::ZERO,
549
+
// },
550
+
// &rgba,
551
+
// wgpu::TexelCopyBufferLayout {
552
+
// offset: 0,
553
+
// bytes_per_row: Some(4 * dimensions.0),
554
+
// rows_per_image: Some(dimensions.1),
555
+
// },
556
+
// size,
557
+
// );
558
+
559
+
// let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
560
+
// let sampler = device.create_sampler(&wgpu::SamplerDescriptor {
561
+
// address_mode_u: wgpu::AddressMode::ClampToEdge,
562
+
// address_mode_v: wgpu::AddressMode::ClampToEdge,
563
+
// address_mode_w: wgpu::AddressMode::ClampToEdge,
564
+
// mag_filter: wgpu::FilterMode::Linear,
565
+
// min_filter: wgpu::FilterMode::Nearest,
566
+
// mipmap_filter: wgpu::FilterMode::Nearest,
567
+
// ..Default::default()
568
+
// });
569
+
570
+
// Ok(Self {
571
+
// texture,
572
+
// view,
573
+
// sampler,
574
+
// })
575
+
// }
576
+
577
+
// pub const DEPTH_FORMAT: wgpu::TextureFormat = wgpu::TextureFormat::Depth32Float; // 1.
578
+
579
+
// pub fn create_depth_texture(
580
+
// device: &wgpu::Device,
581
+
// size: &PhysicalSize<u32>,
582
+
// label: &str,
583
+
// ) -> Self {
584
+
// let size = wgpu::Extent3d {
585
+
// // 2.
586
+
// width: size.width.max(1),
587
+
// height: size.height.max(1),
588
+
// depth_or_array_layers: 1,
589
+
// };
590
+
// let desc = wgpu::TextureDescriptor {
591
+
// label: Some(label),
592
+
// size,
593
+
// mip_level_count: 1,
594
+
// sample_count: 1,
595
+
// dimension: wgpu::TextureDimension::D2,
596
+
// format: Self::DEPTH_FORMAT,
597
+
// usage: wgpu::TextureUsages::RENDER_ATTACHMENT // 3.
598
+
// | wgpu::TextureUsages::TEXTURE_BINDING,
599
+
// view_formats: &[],
600
+
// };
601
+
// let texture = device.create_texture(&desc);
602
+
603
+
// let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
604
+
// let sampler = device.create_sampler(&wgpu::SamplerDescriptor {
605
+
// // 4.
606
+
// address_mode_u: wgpu::AddressMode::ClampToEdge,
607
+
// address_mode_v: wgpu::AddressMode::ClampToEdge,
608
+
// address_mode_w: wgpu::AddressMode::ClampToEdge,
609
+
// mag_filter: wgpu::FilterMode::Linear,
610
+
// min_filter: wgpu::FilterMode::Linear,
611
+
// mipmap_filter: wgpu::FilterMode::Nearest,
612
+
// compare: Some(wgpu::CompareFunction::LessEqual), // 5.
613
+
// lod_min_clamp: 0.0,
614
+
// lod_max_clamp: 100.0,
615
+
// ..Default::default()
616
+
// });
617
+
618
+
// Self {
619
+
// texture,
620
+
// view,
621
+
// sampler,
622
+
// }
623
+
// }
624
+
625
+
// pub fn create_texture(
626
+
// device: &wgpu::Device,
627
+
// size: &PhysicalSize<u32>,
628
+
// label: &str,
629
+
// ) -> Self {
630
+
// let size = wgpu::Extent3d {
631
+
// // 2.
632
+
// width: size.width.max(1),
633
+
// height: size.height.max(1),
634
+
// depth_or_array_layers: 1,
635
+
// };
636
+
// let desc = wgpu::TextureDescriptor {
637
+
// label: Some(label),
638
+
// size,
639
+
// mip_level_count: 1,
640
+
// sample_count: 1,
641
+
// dimension: wgpu::TextureDimension::D2,
642
+
// format: TextureFormat::Bgra8UnormSrgb,
643
+
// usage: wgpu::TextureUsages::RENDER_ATTACHMENT // 3.
644
+
// | wgpu::TextureUsages::TEXTURE_BINDING,
645
+
// view_formats: &[],
646
+
// };
647
+
// let texture = device.create_texture(&desc);
648
+
649
+
// let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
650
+
// let sampler = device.create_sampler(&wgpu::SamplerDescriptor {
651
+
// // 4.
652
+
// address_mode_u: wgpu::AddressMode::MirrorRepeat,
653
+
// address_mode_v: wgpu::AddressMode::MirrorRepeat,
654
+
// address_mode_w: wgpu::AddressMode::MirrorRepeat,
655
+
// mag_filter: wgpu::FilterMode::Linear,
656
+
// min_filter: wgpu::FilterMode::Linear,
657
+
// mipmap_filter: wgpu::FilterMode::Nearest,
658
+
// lod_min_clamp: 0.0,
659
+
// lod_max_clamp: 100.0,
660
+
// ..Default::default()
661
+
// });
662
+
663
+
// Self {
664
+
// texture,
665
+
// view,
666
+
// sampler,
667
+
// }
668
+
// }
669
+
// }
670
+
// }
+47
lightweight_viewer/src/render.rs
+47
lightweight_viewer/src/render.rs
···
1
+
use glam::{Vec3, vec4};
2
+
use vfl::draw::render_3d::Rendered3dShape;
3
+
use vfl::draw::wgpu_render::texture;
4
+
use vfl::{
5
+
color::nx::linear::FACELINE_COLOR,
6
+
draw::wgpu_render::Vertex,
7
+
res::shape::nx::{Shape, ShapeData},
8
+
};
9
+
10
+
// I'm in a fucking horror of my own design
11
+
pub fn shape_data_to_render_3d_shape(
12
+
d: ShapeData,
13
+
shape: Shape,
14
+
color: usize,
15
+
position: Vec3,
16
+
projected_texture: Option<texture::TextureBundle>,
17
+
) -> Rendered3dShape {
18
+
let mut vertices: Vec<Vertex> = vec![];
19
+
let tex_coords = d
20
+
.uvs
21
+
.unwrap_or(vec![[f32::NAN, f32::NAN]; d.positions.len()]); // Go on, return NULL. See if I care.
22
+
let normals = d.normals.unwrap();
23
+
24
+
for i in 0..d.positions.len() {
25
+
vertices.push(Vertex {
26
+
position: d.positions[i],
27
+
tex_coords: tex_coords[i],
28
+
normal: normals[i],
29
+
})
30
+
}
31
+
32
+
let indices = d.indices.iter().map(|x| u32::from(*x)).collect();
33
+
34
+
Rendered3dShape {
35
+
vertices,
36
+
indices,
37
+
color: match shape {
38
+
Shape::HairNormal => vfl::color::nx::linear::COMMON_COLOR[color].into(),
39
+
Shape::FaceLine | Shape::ForeheadNormal | Shape::Nose => FACELINE_COLOR[color].into(),
40
+
Shape::Glasses => vec4(1.0, 0.0, 0.0, 0.0),
41
+
_ => vec4(0.0, 0.0, 0.0, 0.0),
42
+
// _ => wgpu_color_to_vec4(OVERLAY_REBECCA_PURPLE),
43
+
},
44
+
texture: projected_texture,
45
+
position,
46
+
}
47
+
}
+39
lightweight_viewer/src/shader-face.wgsl
+39
lightweight_viewer/src/shader-face.wgsl
···
1
+
struct TransformUniform {
2
+
mtx: mat4x4<f32>,
3
+
color_r: vec4<f32>,
4
+
color_g: vec4<f32>,
5
+
color_b: vec4<f32>,
6
+
texture_format: u32,
7
+
};
8
+
9
+
struct VertexOutput {
10
+
@builtin(position) clip_position: vec4<f32>,
11
+
@location(0) tex_coords: vec2<f32>,
12
+
}
13
+
14
+
@vertex
15
+
fn vs_main(
16
+
@location(0) position: vec3<f32>,
17
+
@location(1) tex_coords: vec2<f32>
18
+
) -> VertexOutput {
19
+
var out: VertexOutput;
20
+
out.tex_coords = tex_coords;
21
+
out.clip_position = vec4<f32>(position, 1.0);
22
+
return out;
23
+
}
24
+
25
+
@group(0) @binding(0)
26
+
var t_diffuse: texture_2d<f32>;
27
+
@group(0) @binding(1)
28
+
var s_diffuse: sampler;
29
+
30
+
@fragment
31
+
fn fs_main(in: VertexOutput) -> @location(0) vec4<f32> {
32
+
let color: vec4<f32> = textureSample(t_diffuse, s_diffuse, in.tex_coords - vec2(1.0, 0.0));
33
+
34
+
if color.a == 0.0 {
35
+
discard;
36
+
}
37
+
38
+
return color;
39
+
}
+60
lightweight_viewer/src/shader-texture.wgsl
+60
lightweight_viewer/src/shader-texture.wgsl
···
1
+
struct CameraUniform {
2
+
view_proj: mat4x4<f32>,
3
+
};
4
+
@group(0) @binding(0)
5
+
var<uniform> camera: CameraUniform;
6
+
7
+
struct CharShapeUniform {
8
+
color: vec4<f32>
9
+
}
10
+
@group(1) @binding(0)
11
+
var<uniform> char_shape: CharShapeUniform;
12
+
13
+
@group(2) @binding(0)
14
+
var t_diffuse: texture_2d<f32>;
15
+
@group(2) @binding(1)
16
+
var s_diffuse: sampler;
17
+
18
+
struct VertexInput {
19
+
@location(0) position: vec3<f32>,
20
+
@location(1) tex_coords: vec2<f32>,
21
+
@location(2) normal: vec3<f32>,
22
+
}
23
+
24
+
struct VertexOutput {
25
+
@builtin(position) clip_position: vec4<f32>,
26
+
@location(0) tex_coords: vec2<f32>,
27
+
@location(1) world_normal: vec3<f32>,
28
+
@location(2) world_position: vec3<f32>,
29
+
}
30
+
31
+
@vertex
32
+
fn vs_main(
33
+
model: VertexInput,
34
+
// instance: InstanceInput,
35
+
) -> VertexOutput {
36
+
var out: VertexOutput;
37
+
out.tex_coords = model.tex_coords;
38
+
out.world_normal = model.normal;
39
+
var world_position: vec4<f32> = vec4<f32>(model.position, 1.0);
40
+
out.world_position = world_position.xyz;
41
+
out.clip_position = camera.view_proj * world_position;
42
+
return out;
43
+
}
44
+
45
+
@fragment
46
+
fn fs_main(in: VertexOutput) -> @location(0) vec4<f32> {
47
+
48
+
// Sampler AddressMode::MirrorRepeat + Move down one tex = Free Y-flip!
49
+
let sample_position = in.tex_coords;
50
+
let tex_color = textureSample(t_diffuse, s_diffuse, sample_position);
51
+
52
+
// if tex_color.a == 0.0 {
53
+
// discard;
54
+
// }
55
+
56
+
// return tex_color;
57
+
58
+
return mix(char_shape.color, tex_color, tex_color.a);
59
+
60
+
}
+71
lightweight_viewer/src/shader.wgsl
+71
lightweight_viewer/src/shader.wgsl
···
1
+
struct CameraUniform {
2
+
view_proj: mat4x4<f32>,
3
+
};
4
+
@group(0) @binding(0)
5
+
var<uniform> camera: CameraUniform;
6
+
7
+
struct CharShapeUniform {
8
+
color: vec4<f32>,
9
+
position: vec3<f32>
10
+
}
11
+
@group(1) @binding(0)
12
+
var<uniform> char_shape: CharShapeUniform;
13
+
14
+
struct VertexInput {
15
+
@location(0) position: vec3<f32>,
16
+
@location(1) tex_coords: vec2<f32>,
17
+
@location(2) normal: vec3<f32>,
18
+
}
19
+
20
+
struct VertexOutput {
21
+
@builtin(position) clip_position: vec4<f32>,
22
+
@location(0) tex_coords: vec2<f32>,
23
+
@location(1) world_normal: vec3<f32>,
24
+
@location(2) world_position: vec3<f32>,
25
+
}
26
+
27
+
@vertex
28
+
fn vs_main(
29
+
model: VertexInput,
30
+
// instance: InstanceInput,
31
+
) -> VertexOutput {
32
+
var out: VertexOutput;
33
+
out.tex_coords = model.tex_coords;
34
+
out.world_normal = model.normal;
35
+
var world_position: vec4<f32> = vec4<f32>(model.position + char_shape.position, 1.0);
36
+
out.world_position = world_position.xyz;
37
+
out.clip_position = camera.view_proj * world_position;
38
+
return out;
39
+
}
40
+
41
+
// Fragment shader
42
+
43
+
@fragment
44
+
fn fs_main(in: VertexOutput) -> @location(0) vec4<f32> {
45
+
46
+
let color = char_shape.color;
47
+
48
+
if color.a == 0.0 {
49
+
discard;
50
+
}
51
+
return color;
52
+
// let object_color: vec4<f32> = textureSample(t_diffuse, s_diffuse, in.tex_coords);
53
+
54
+
// // We don't need (or want) much ambient light, so 0.1 is fine
55
+
// let ambient_strength = 0.1;
56
+
// let ambient_color = light.color * ambient_strength;
57
+
58
+
// let light_dir = normalize(light.position - in.world_position);
59
+
// let view_dir = normalize(camera.view_pos.xyz - in.world_position);
60
+
// let half_dir = normalize(view_dir + light_dir);
61
+
62
+
// let diffuse_strength = max(dot(in.world_normal, light_dir), 0.0);
63
+
// let diffuse_color = light.color * diffuse_strength;
64
+
65
+
// let specular_strength = pow(max(dot(in.world_normal, half_dir), 0.0), 32.0);
66
+
// let specular_color = specular_strength * light.color;
67
+
68
+
// let result = (ambient_color + diffuse_color + specular_color) * object_color.xyz;
69
+
70
+
// return vec4<f32>(result, object_color.a);
71
+
}
testbed/Formats.hexproj
testbed/Formats.hexproj
This is a binary file and will not be displayed.
-6450
vee/Cargo.lock
-6450
vee/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.29"
8
-
source = "registry+https://github.com/rust-lang/crates.io-index"
9
-
checksum = "ec3672c180e71eeaaac3a541fbbc5f5ad4def8b747c595ad30d674e43049f7b0"
10
-
dependencies = [
11
-
"ab_glyph_rasterizer",
12
-
"owned_ttf_parser",
13
-
]
14
-
15
-
[[package]]
16
-
name = "ab_glyph_rasterizer"
17
-
version = "0.1.8"
18
-
source = "registry+https://github.com/rust-lang/crates.io-index"
19
-
checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046"
20
-
21
-
[[package]]
22
-
name = "accesskit"
23
-
version = "0.18.0"
24
-
source = "registry+https://github.com/rust-lang/crates.io-index"
25
-
checksum = "becf0eb5215b6ecb0a739c31c21bd83c4f326524c9b46b7e882d77559b60a529"
26
-
27
-
[[package]]
28
-
name = "accesskit_consumer"
29
-
version = "0.27.0"
30
-
source = "registry+https://github.com/rust-lang/crates.io-index"
31
-
checksum = "d0bf66a7bf0b7ea4fd7742d50b64782a88f99217cf246b3f93b4162528dde520"
32
-
dependencies = [
33
-
"accesskit",
34
-
"hashbrown",
35
-
"immutable-chunkmap",
36
-
]
37
-
38
-
[[package]]
39
-
name = "accesskit_macos"
40
-
version = "0.19.0"
41
-
source = "registry+https://github.com/rust-lang/crates.io-index"
42
-
checksum = "09e230718177753b4e4ad9e1d9f6cfc2f4921212d4c1c480b253f526babb258d"
43
-
dependencies = [
44
-
"accesskit",
45
-
"accesskit_consumer",
46
-
"hashbrown",
47
-
"objc2 0.5.2",
48
-
"objc2-app-kit 0.2.2",
49
-
"objc2-foundation 0.2.2",
50
-
]
51
-
52
-
[[package]]
53
-
name = "accesskit_windows"
54
-
version = "0.25.0"
55
-
source = "registry+https://github.com/rust-lang/crates.io-index"
56
-
checksum = "65178f3df98a51e4238e584fcb255cb1a4f9111820848eeddd37663be40a625f"
57
-
dependencies = [
58
-
"accesskit",
59
-
"accesskit_consumer",
60
-
"hashbrown",
61
-
"paste",
62
-
"static_assertions",
63
-
"windows 0.58.0",
64
-
"windows-core 0.58.0",
65
-
]
66
-
67
-
[[package]]
68
-
name = "accesskit_winit"
69
-
version = "0.25.0"
70
-
source = "registry+https://github.com/rust-lang/crates.io-index"
71
-
checksum = "34d941bb8c414caba6e206de669c7dc0dbeb305640ea890772ee422a40e6b89f"
72
-
dependencies = [
73
-
"accesskit",
74
-
"accesskit_macos",
75
-
"accesskit_windows",
76
-
"raw-window-handle",
77
-
"winit",
78
-
]
79
-
80
-
[[package]]
81
-
name = "adler2"
82
-
version = "2.0.0"
83
-
source = "registry+https://github.com/rust-lang/crates.io-index"
84
-
checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627"
85
-
86
-
[[package]]
87
-
name = "ahash"
88
-
version = "0.8.12"
89
-
source = "registry+https://github.com/rust-lang/crates.io-index"
90
-
checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75"
91
-
dependencies = [
92
-
"cfg-if",
93
-
"getrandom 0.3.3",
94
-
"once_cell",
95
-
"version_check",
96
-
"zerocopy",
97
-
]
98
-
99
-
[[package]]
100
-
name = "aho-corasick"
101
-
version = "1.1.3"
102
-
source = "registry+https://github.com/rust-lang/crates.io-index"
103
-
checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
104
-
dependencies = [
105
-
"memchr",
106
-
]
107
-
108
-
[[package]]
109
-
name = "aligned-vec"
110
-
version = "0.5.0"
111
-
source = "registry+https://github.com/rust-lang/crates.io-index"
112
-
checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1"
113
-
114
-
[[package]]
115
-
name = "alsa"
116
-
version = "0.9.1"
117
-
source = "registry+https://github.com/rust-lang/crates.io-index"
118
-
checksum = "ed7572b7ba83a31e20d1b48970ee402d2e3e0537dcfe0a3ff4d6eb7508617d43"
119
-
dependencies = [
120
-
"alsa-sys",
121
-
"bitflags 2.9.0",
122
-
"cfg-if",
123
-
"libc",
124
-
]
125
-
126
-
[[package]]
127
-
name = "alsa-sys"
128
-
version = "0.3.1"
129
-
source = "registry+https://github.com/rust-lang/crates.io-index"
130
-
checksum = "db8fee663d06c4e303404ef5f40488a53e062f89ba8bfed81f42325aafad1527"
131
-
dependencies = [
132
-
"libc",
133
-
"pkg-config",
134
-
]
135
-
136
-
[[package]]
137
-
name = "android-activity"
138
-
version = "0.6.0"
139
-
source = "registry+https://github.com/rust-lang/crates.io-index"
140
-
checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046"
141
-
dependencies = [
142
-
"android-properties",
143
-
"bitflags 2.9.0",
144
-
"cc",
145
-
"cesu8",
146
-
"jni",
147
-
"jni-sys",
148
-
"libc",
149
-
"log",
150
-
"ndk 0.9.0",
151
-
"ndk-context",
152
-
"ndk-sys 0.6.0+11769913",
153
-
"num_enum",
154
-
"thiserror 1.0.69",
155
-
]
156
-
157
-
[[package]]
158
-
name = "android-properties"
159
-
version = "0.2.2"
160
-
source = "registry+https://github.com/rust-lang/crates.io-index"
161
-
checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04"
162
-
163
-
[[package]]
164
-
name = "android_log-sys"
165
-
version = "0.3.2"
166
-
source = "registry+https://github.com/rust-lang/crates.io-index"
167
-
checksum = "84521a3cf562bc62942e294181d9eef17eb38ceb8c68677bc49f144e4c3d4f8d"
168
-
169
-
[[package]]
170
-
name = "android_system_properties"
171
-
version = "0.1.5"
172
-
source = "registry+https://github.com/rust-lang/crates.io-index"
173
-
checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
174
-
dependencies = [
175
-
"libc",
176
-
]
177
-
178
-
[[package]]
179
-
name = "anyhow"
180
-
version = "1.0.98"
181
-
source = "registry+https://github.com/rust-lang/crates.io-index"
182
-
checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487"
183
-
184
-
[[package]]
185
-
name = "approx"
186
-
version = "0.5.1"
187
-
source = "registry+https://github.com/rust-lang/crates.io-index"
188
-
checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6"
189
-
dependencies = [
190
-
"num-traits",
191
-
]
192
-
193
-
[[package]]
194
-
name = "arbitrary"
195
-
version = "1.4.1"
196
-
source = "registry+https://github.com/rust-lang/crates.io-index"
197
-
checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223"
198
-
199
-
[[package]]
200
-
name = "arboard"
201
-
version = "3.5.0"
202
-
source = "registry+https://github.com/rust-lang/crates.io-index"
203
-
checksum = "c1df21f715862ede32a0c525ce2ca4d52626bb0007f8c18b87a384503ac33e70"
204
-
dependencies = [
205
-
"clipboard-win",
206
-
"image 0.25.6",
207
-
"log",
208
-
"objc2 0.6.1",
209
-
"objc2-app-kit 0.3.1",
210
-
"objc2-core-foundation",
211
-
"objc2-core-graphics",
212
-
"objc2-foundation 0.3.1",
213
-
"parking_lot",
214
-
"percent-encoding",
215
-
"windows-sys 0.59.0",
216
-
"x11rb",
217
-
]
218
-
219
-
[[package]]
220
-
name = "arg_enum_proc_macro"
221
-
version = "0.3.4"
222
-
source = "registry+https://github.com/rust-lang/crates.io-index"
223
-
checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea"
224
-
dependencies = [
225
-
"proc-macro2",
226
-
"quote",
227
-
"syn 2.0.101",
228
-
]
229
-
230
-
[[package]]
231
-
name = "array-init"
232
-
version = "2.1.0"
233
-
source = "registry+https://github.com/rust-lang/crates.io-index"
234
-
checksum = "3d62b7694a562cdf5a74227903507c56ab2cc8bdd1f781ed5cb4cf9c9f810bfc"
235
-
236
-
[[package]]
237
-
name = "arrayref"
238
-
version = "0.3.9"
239
-
source = "registry+https://github.com/rust-lang/crates.io-index"
240
-
checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb"
241
-
242
-
[[package]]
243
-
name = "arrayvec"
244
-
version = "0.7.6"
245
-
source = "registry+https://github.com/rust-lang/crates.io-index"
246
-
checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
247
-
248
-
[[package]]
249
-
name = "as-raw-xcb-connection"
250
-
version = "1.0.1"
251
-
source = "registry+https://github.com/rust-lang/crates.io-index"
252
-
checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b"
253
-
254
-
[[package]]
255
-
name = "ash"
256
-
version = "0.38.0+1.3.281"
257
-
source = "registry+https://github.com/rust-lang/crates.io-index"
258
-
checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f"
259
-
dependencies = [
260
-
"libloading",
261
-
]
262
-
263
-
[[package]]
264
-
name = "assert_type_match"
265
-
version = "0.1.1"
266
-
source = "registry+https://github.com/rust-lang/crates.io-index"
267
-
checksum = "f548ad2c4031f2902e3edc1f29c29e835829437de49562d8eb5dc5584d3a1043"
268
-
dependencies = [
269
-
"proc-macro2",
270
-
"quote",
271
-
"syn 2.0.101",
272
-
]
273
-
274
-
[[package]]
275
-
name = "async-broadcast"
276
-
version = "0.7.2"
277
-
source = "registry+https://github.com/rust-lang/crates.io-index"
278
-
checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532"
279
-
dependencies = [
280
-
"event-listener",
281
-
"event-listener-strategy",
282
-
"futures-core",
283
-
"pin-project-lite",
284
-
]
285
-
286
-
[[package]]
287
-
name = "async-channel"
288
-
version = "2.3.1"
289
-
source = "registry+https://github.com/rust-lang/crates.io-index"
290
-
checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a"
291
-
dependencies = [
292
-
"concurrent-queue",
293
-
"event-listener-strategy",
294
-
"futures-core",
295
-
"pin-project-lite",
296
-
]
297
-
298
-
[[package]]
299
-
name = "async-executor"
300
-
version = "1.13.2"
301
-
source = "registry+https://github.com/rust-lang/crates.io-index"
302
-
checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa"
303
-
dependencies = [
304
-
"async-task",
305
-
"concurrent-queue",
306
-
"fastrand",
307
-
"futures-lite",
308
-
"pin-project-lite",
309
-
"slab",
310
-
]
311
-
312
-
[[package]]
313
-
name = "async-fs"
314
-
version = "2.1.2"
315
-
source = "registry+https://github.com/rust-lang/crates.io-index"
316
-
checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a"
317
-
dependencies = [
318
-
"async-lock",
319
-
"blocking",
320
-
"futures-lite",
321
-
]
322
-
323
-
[[package]]
324
-
name = "async-lock"
325
-
version = "3.4.0"
326
-
source = "registry+https://github.com/rust-lang/crates.io-index"
327
-
checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18"
328
-
dependencies = [
329
-
"event-listener",
330
-
"event-listener-strategy",
331
-
"pin-project-lite",
332
-
]
333
-
334
-
[[package]]
335
-
name = "async-task"
336
-
version = "4.7.1"
337
-
source = "registry+https://github.com/rust-lang/crates.io-index"
338
-
checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de"
339
-
dependencies = [
340
-
"portable-atomic",
341
-
]
342
-
343
-
[[package]]
344
-
name = "atomic-waker"
345
-
version = "1.1.2"
346
-
source = "registry+https://github.com/rust-lang/crates.io-index"
347
-
checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
348
-
dependencies = [
349
-
"portable-atomic",
350
-
]
351
-
352
-
[[package]]
353
-
name = "atomicow"
354
-
version = "1.1.0"
355
-
source = "registry+https://github.com/rust-lang/crates.io-index"
356
-
checksum = "f52e8890bb9844440d0c412fa74b67fd2f14e85248b6e00708059b6da9e5f8bf"
357
-
dependencies = [
358
-
"portable-atomic",
359
-
"portable-atomic-util",
360
-
]
361
-
362
-
[[package]]
363
-
name = "autocfg"
364
-
version = "1.4.0"
365
-
source = "registry+https://github.com/rust-lang/crates.io-index"
366
-
checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
367
-
368
-
[[package]]
369
-
name = "av1-grain"
370
-
version = "0.2.3"
371
-
source = "registry+https://github.com/rust-lang/crates.io-index"
372
-
checksum = "6678909d8c5d46a42abcf571271e15fdbc0a225e3646cf23762cd415046c78bf"
373
-
dependencies = [
374
-
"anyhow",
375
-
"arrayvec",
376
-
"log",
377
-
"nom",
378
-
"num-rational",
379
-
"v_frame",
380
-
]
381
-
382
-
[[package]]
383
-
name = "avif-serialize"
384
-
version = "0.8.3"
385
-
source = "registry+https://github.com/rust-lang/crates.io-index"
386
-
checksum = "98922d6a4cfbcb08820c69d8eeccc05bb1f29bfa06b4f5b1dbfe9a868bd7608e"
387
-
dependencies = [
388
-
"arrayvec",
389
-
]
390
-
391
-
[[package]]
392
-
name = "base64"
393
-
version = "0.13.1"
394
-
source = "registry+https://github.com/rust-lang/crates.io-index"
395
-
checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
396
-
397
-
[[package]]
398
-
name = "base64"
399
-
version = "0.21.7"
400
-
source = "registry+https://github.com/rust-lang/crates.io-index"
401
-
checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
402
-
403
-
[[package]]
404
-
name = "base64"
405
-
version = "0.22.1"
406
-
source = "registry+https://github.com/rust-lang/crates.io-index"
407
-
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
408
-
409
-
[[package]]
410
-
name = "bevy"
411
-
version = "0.16.0"
412
-
source = "registry+https://github.com/rust-lang/crates.io-index"
413
-
checksum = "2a5cd3b24a5adb7c7378da7b3eea47639877643d11b6b087fc8a8094f2528615"
414
-
dependencies = [
415
-
"bevy_internal",
416
-
]
417
-
418
-
[[package]]
419
-
name = "bevy_a11y"
420
-
version = "0.16.0"
421
-
source = "registry+https://github.com/rust-lang/crates.io-index"
422
-
checksum = "91ed969a58fbe449ef35ebec58ab19578302537f34ee8a35d04e5a038b3c40f5"
423
-
dependencies = [
424
-
"accesskit",
425
-
"bevy_app",
426
-
"bevy_derive",
427
-
"bevy_ecs",
428
-
"bevy_reflect",
429
-
]
430
-
431
-
[[package]]
432
-
name = "bevy_animation"
433
-
version = "0.16.0"
434
-
source = "registry+https://github.com/rust-lang/crates.io-index"
435
-
checksum = "3647b67c6bfd456922b2720ccef980dec01742d155d0eb454dc3d8fdc65e7aff"
436
-
dependencies = [
437
-
"bevy_app",
438
-
"bevy_asset",
439
-
"bevy_color",
440
-
"bevy_derive",
441
-
"bevy_ecs",
442
-
"bevy_log",
443
-
"bevy_math",
444
-
"bevy_mesh",
445
-
"bevy_platform",
446
-
"bevy_reflect",
447
-
"bevy_render",
448
-
"bevy_time",
449
-
"bevy_transform",
450
-
"bevy_utils",
451
-
"blake3",
452
-
"derive_more",
453
-
"downcast-rs 2.0.1",
454
-
"either",
455
-
"petgraph",
456
-
"ron",
457
-
"serde",
458
-
"smallvec",
459
-
"thiserror 2.0.12",
460
-
"thread_local",
461
-
"tracing",
462
-
"uuid",
463
-
]
464
-
465
-
[[package]]
466
-
name = "bevy_app"
467
-
version = "0.16.0"
468
-
source = "registry+https://github.com/rust-lang/crates.io-index"
469
-
checksum = "a2b6267ac23a9947d5b2725ff047a1e1add70076d85fa9fb73d044ab9bea1f3c"
470
-
dependencies = [
471
-
"bevy_derive",
472
-
"bevy_ecs",
473
-
"bevy_platform",
474
-
"bevy_reflect",
475
-
"bevy_tasks",
476
-
"bevy_utils",
477
-
"cfg-if",
478
-
"console_error_panic_hook",
479
-
"ctrlc",
480
-
"downcast-rs 2.0.1",
481
-
"log",
482
-
"thiserror 2.0.12",
483
-
"variadics_please",
484
-
"wasm-bindgen",
485
-
"web-sys",
486
-
]
487
-
488
-
[[package]]
489
-
name = "bevy_asset"
490
-
version = "0.16.0"
491
-
source = "registry+https://github.com/rust-lang/crates.io-index"
492
-
checksum = "0698040d63199391ea77fd02e039630748e3e335c3070c6d932fd96cbf80f5d6"
493
-
dependencies = [
494
-
"async-broadcast",
495
-
"async-fs",
496
-
"async-lock",
497
-
"atomicow",
498
-
"bevy_app",
499
-
"bevy_asset_macros",
500
-
"bevy_ecs",
501
-
"bevy_platform",
502
-
"bevy_reflect",
503
-
"bevy_tasks",
504
-
"bevy_utils",
505
-
"bevy_window",
506
-
"bitflags 2.9.0",
507
-
"blake3",
508
-
"crossbeam-channel",
509
-
"derive_more",
510
-
"disqualified",
511
-
"downcast-rs 2.0.1",
512
-
"either",
513
-
"futures-io",
514
-
"futures-lite",
515
-
"js-sys",
516
-
"parking_lot",
517
-
"ron",
518
-
"serde",
519
-
"stackfuture",
520
-
"thiserror 2.0.12",
521
-
"tracing",
522
-
"uuid",
523
-
"wasm-bindgen",
524
-
"wasm-bindgen-futures",
525
-
"web-sys",
526
-
]
527
-
528
-
[[package]]
529
-
name = "bevy_asset_macros"
530
-
version = "0.16.0"
531
-
source = "registry+https://github.com/rust-lang/crates.io-index"
532
-
checksum = "0bf8c00b5d532f8e5ac7b49af10602f9f7774a2d522cf0638323b5dfeee7b31c"
533
-
dependencies = [
534
-
"bevy_macro_utils",
535
-
"proc-macro2",
536
-
"quote",
537
-
"syn 2.0.101",
538
-
]
539
-
540
-
[[package]]
541
-
name = "bevy_audio"
542
-
version = "0.16.0"
543
-
source = "registry+https://github.com/rust-lang/crates.io-index"
544
-
checksum = "74e54154e6369abdbaf5098e20424d59197c9b701d4f79fe8d0d2bde03d25f12"
545
-
dependencies = [
546
-
"bevy_app",
547
-
"bevy_asset",
548
-
"bevy_derive",
549
-
"bevy_ecs",
550
-
"bevy_math",
551
-
"bevy_reflect",
552
-
"bevy_transform",
553
-
"cpal",
554
-
"rodio",
555
-
"tracing",
556
-
]
557
-
558
-
[[package]]
559
-
name = "bevy_color"
560
-
version = "0.16.1"
561
-
source = "registry+https://github.com/rust-lang/crates.io-index"
562
-
checksum = "ddf6a5ad35496bbc41713efbcf06ab72b9a310fabcab0f9db1debb56e8488c6e"
563
-
dependencies = [
564
-
"bevy_math",
565
-
"bevy_reflect",
566
-
"bytemuck",
567
-
"derive_more",
568
-
"encase",
569
-
"serde",
570
-
"thiserror 2.0.12",
571
-
"wgpu-types",
572
-
]
573
-
574
-
[[package]]
575
-
name = "bevy_core_pipeline"
576
-
version = "0.16.0"
577
-
source = "registry+https://github.com/rust-lang/crates.io-index"
578
-
checksum = "55c2310717b9794e4a45513ee5946a7be0838852a4c1e185884195e1a8688ff3"
579
-
dependencies = [
580
-
"bevy_app",
581
-
"bevy_asset",
582
-
"bevy_color",
583
-
"bevy_derive",
584
-
"bevy_diagnostic",
585
-
"bevy_ecs",
586
-
"bevy_image",
587
-
"bevy_math",
588
-
"bevy_platform",
589
-
"bevy_reflect",
590
-
"bevy_render",
591
-
"bevy_transform",
592
-
"bevy_utils",
593
-
"bevy_window",
594
-
"bitflags 2.9.0",
595
-
"bytemuck",
596
-
"nonmax",
597
-
"radsort",
598
-
"serde",
599
-
"smallvec",
600
-
"thiserror 2.0.12",
601
-
"tracing",
602
-
]
603
-
604
-
[[package]]
605
-
name = "bevy_derive"
606
-
version = "0.16.0"
607
-
source = "registry+https://github.com/rust-lang/crates.io-index"
608
-
checksum = "f626531b9c05c25a758ede228727bd11c2c2c8498ecbed9925044386d525a2a3"
609
-
dependencies = [
610
-
"bevy_macro_utils",
611
-
"quote",
612
-
"syn 2.0.101",
613
-
]
614
-
615
-
[[package]]
616
-
name = "bevy_diagnostic"
617
-
version = "0.16.0"
618
-
source = "registry+https://github.com/rust-lang/crates.io-index"
619
-
checksum = "048a1ff3944a534b8472516866284181eef0a75b6dd4d39b6e5925715e350766"
620
-
dependencies = [
621
-
"bevy_app",
622
-
"bevy_ecs",
623
-
"bevy_platform",
624
-
"bevy_tasks",
625
-
"bevy_time",
626
-
"bevy_utils",
627
-
"const-fnv1a-hash",
628
-
"log",
629
-
"serde",
630
-
"sysinfo",
631
-
]
632
-
633
-
[[package]]
634
-
name = "bevy_ecs"
635
-
version = "0.16.0"
636
-
source = "registry+https://github.com/rust-lang/crates.io-index"
637
-
checksum = "d9e807b5d9aab3bb8dfe47e7a44c9ff088bad2ceefe299b80ac77609a87fe9d4"
638
-
dependencies = [
639
-
"arrayvec",
640
-
"bevy_ecs_macros",
641
-
"bevy_platform",
642
-
"bevy_ptr",
643
-
"bevy_reflect",
644
-
"bevy_tasks",
645
-
"bevy_utils",
646
-
"bitflags 2.9.0",
647
-
"bumpalo",
648
-
"concurrent-queue",
649
-
"derive_more",
650
-
"disqualified",
651
-
"fixedbitset",
652
-
"indexmap",
653
-
"log",
654
-
"nonmax",
655
-
"serde",
656
-
"smallvec",
657
-
"thiserror 2.0.12",
658
-
"variadics_please",
659
-
]
660
-
661
-
[[package]]
662
-
name = "bevy_ecs_macros"
663
-
version = "0.16.0"
664
-
source = "registry+https://github.com/rust-lang/crates.io-index"
665
-
checksum = "467d7bb98aeb8dd30f36e6a773000c12a891d4f1bee2adc3841ec89cc8eaf54e"
666
-
dependencies = [
667
-
"bevy_macro_utils",
668
-
"proc-macro2",
669
-
"quote",
670
-
"syn 2.0.101",
671
-
]
672
-
673
-
[[package]]
674
-
name = "bevy_egui"
675
-
version = "0.34.1"
676
-
source = "registry+https://github.com/rust-lang/crates.io-index"
677
-
checksum = "3a3d58a8afdb6100bca50251043a85320391742cae125d559f6cca3a16b84cdd"
678
-
dependencies = [
679
-
"arboard",
680
-
"bevy_app",
681
-
"bevy_asset",
682
-
"bevy_derive",
683
-
"bevy_ecs",
684
-
"bevy_image",
685
-
"bevy_input",
686
-
"bevy_log",
687
-
"bevy_math",
688
-
"bevy_picking",
689
-
"bevy_platform",
690
-
"bevy_reflect",
691
-
"bevy_render",
692
-
"bevy_time",
693
-
"bevy_window",
694
-
"bevy_winit",
695
-
"bytemuck",
696
-
"crossbeam-channel",
697
-
"egui",
698
-
"encase",
699
-
"image 0.25.6",
700
-
"js-sys",
701
-
"thread_local",
702
-
"wasm-bindgen",
703
-
"wasm-bindgen-futures",
704
-
"web-sys",
705
-
"webbrowser",
706
-
"wgpu-types",
707
-
"winit",
708
-
]
709
-
710
-
[[package]]
711
-
name = "bevy_encase_derive"
712
-
version = "0.16.0"
713
-
source = "registry+https://github.com/rust-lang/crates.io-index"
714
-
checksum = "b8bb31dc1090c6f8fabbf6b21994d19a12766e786885ee48ffc547f0f1fa7863"
715
-
dependencies = [
716
-
"bevy_macro_utils",
717
-
"encase_derive_impl",
718
-
]
719
-
720
-
[[package]]
721
-
name = "bevy_gilrs"
722
-
version = "0.16.0"
723
-
source = "registry+https://github.com/rust-lang/crates.io-index"
724
-
checksum = "950c84596dbff8a9691a050c37bb610ef9398af56369c2c2dd6dc41ef7b717a5"
725
-
dependencies = [
726
-
"bevy_app",
727
-
"bevy_ecs",
728
-
"bevy_input",
729
-
"bevy_platform",
730
-
"bevy_time",
731
-
"bevy_utils",
732
-
"gilrs",
733
-
"thiserror 2.0.12",
734
-
"tracing",
735
-
]
736
-
737
-
[[package]]
738
-
name = "bevy_gizmos"
739
-
version = "0.16.0"
740
-
source = "registry+https://github.com/rust-lang/crates.io-index"
741
-
checksum = "54af8145b35ab2a830a6dd1058e23c1e1ddc4b893db79d295259ef82f51c7520"
742
-
dependencies = [
743
-
"bevy_app",
744
-
"bevy_asset",
745
-
"bevy_color",
746
-
"bevy_core_pipeline",
747
-
"bevy_ecs",
748
-
"bevy_gizmos_macros",
749
-
"bevy_image",
750
-
"bevy_math",
751
-
"bevy_pbr",
752
-
"bevy_reflect",
753
-
"bevy_render",
754
-
"bevy_sprite",
755
-
"bevy_time",
756
-
"bevy_transform",
757
-
"bevy_utils",
758
-
"bytemuck",
759
-
"tracing",
760
-
]
761
-
762
-
[[package]]
763
-
name = "bevy_gizmos_macros"
764
-
version = "0.16.0"
765
-
source = "registry+https://github.com/rust-lang/crates.io-index"
766
-
checksum = "40137ace61f092b7a09eba41d7d1e6aef941f53a7818b06ef86dcce7b6a1fd3f"
767
-
dependencies = [
768
-
"bevy_macro_utils",
769
-
"proc-macro2",
770
-
"quote",
771
-
"syn 2.0.101",
772
-
]
773
-
774
-
[[package]]
775
-
name = "bevy_gltf"
776
-
version = "0.16.0"
777
-
source = "registry+https://github.com/rust-lang/crates.io-index"
778
-
checksum = "aa25b809ee024ef2682bafc1ca22ca8275552edb549dc6f69a030fdffd976c63"
779
-
dependencies = [
780
-
"base64 0.22.1",
781
-
"bevy_animation",
782
-
"bevy_app",
783
-
"bevy_asset",
784
-
"bevy_color",
785
-
"bevy_core_pipeline",
786
-
"bevy_ecs",
787
-
"bevy_image",
788
-
"bevy_math",
789
-
"bevy_mesh",
790
-
"bevy_pbr",
791
-
"bevy_platform",
792
-
"bevy_reflect",
793
-
"bevy_render",
794
-
"bevy_scene",
795
-
"bevy_tasks",
796
-
"bevy_transform",
797
-
"bevy_utils",
798
-
"fixedbitset",
799
-
"gltf",
800
-
"itertools 0.14.0",
801
-
"percent-encoding",
802
-
"serde",
803
-
"serde_json",
804
-
"smallvec",
805
-
"thiserror 2.0.12",
806
-
"tracing",
807
-
]
808
-
809
-
[[package]]
810
-
name = "bevy_image"
811
-
version = "0.16.0"
812
-
source = "registry+https://github.com/rust-lang/crates.io-index"
813
-
checksum = "840b25f7f58894c641739f756959028a04f519c448db7e2cd3e2e29fc5fd188d"
814
-
dependencies = [
815
-
"bevy_app",
816
-
"bevy_asset",
817
-
"bevy_color",
818
-
"bevy_math",
819
-
"bevy_platform",
820
-
"bevy_reflect",
821
-
"bevy_utils",
822
-
"bitflags 2.9.0",
823
-
"bytemuck",
824
-
"futures-lite",
825
-
"guillotiere",
826
-
"half",
827
-
"image 0.25.6",
828
-
"ktx2",
829
-
"rectangle-pack",
830
-
"ruzstd",
831
-
"serde",
832
-
"thiserror 2.0.12",
833
-
"tracing",
834
-
"wgpu-types",
835
-
]
836
-
837
-
[[package]]
838
-
name = "bevy_input"
839
-
version = "0.16.0"
840
-
source = "registry+https://github.com/rust-lang/crates.io-index"
841
-
checksum = "763410715714f3d4d2dcdf077af276e2e4ea93fd8081b183d446d060ea95baaa"
842
-
dependencies = [
843
-
"bevy_app",
844
-
"bevy_ecs",
845
-
"bevy_math",
846
-
"bevy_platform",
847
-
"bevy_reflect",
848
-
"bevy_utils",
849
-
"derive_more",
850
-
"log",
851
-
"smol_str",
852
-
"thiserror 2.0.12",
853
-
]
854
-
855
-
[[package]]
856
-
name = "bevy_input_focus"
857
-
version = "0.16.0"
858
-
source = "registry+https://github.com/rust-lang/crates.io-index"
859
-
checksum = "d7e7b4ed65e10927a39a987cf85ef98727dd319aafb6e6835f2cb05b883c6d66"
860
-
dependencies = [
861
-
"bevy_app",
862
-
"bevy_ecs",
863
-
"bevy_input",
864
-
"bevy_math",
865
-
"bevy_reflect",
866
-
"bevy_window",
867
-
"log",
868
-
"thiserror 2.0.12",
869
-
]
870
-
871
-
[[package]]
872
-
name = "bevy_internal"
873
-
version = "0.16.0"
874
-
source = "registry+https://github.com/rust-lang/crates.io-index"
875
-
checksum = "526ffd64c58004cb97308826e896c07d0e23dc056c243b97492e31cdf72e2830"
876
-
dependencies = [
877
-
"bevy_a11y",
878
-
"bevy_animation",
879
-
"bevy_app",
880
-
"bevy_asset",
881
-
"bevy_audio",
882
-
"bevy_color",
883
-
"bevy_core_pipeline",
884
-
"bevy_derive",
885
-
"bevy_diagnostic",
886
-
"bevy_ecs",
887
-
"bevy_gilrs",
888
-
"bevy_gizmos",
889
-
"bevy_gltf",
890
-
"bevy_image",
891
-
"bevy_input",
892
-
"bevy_input_focus",
893
-
"bevy_log",
894
-
"bevy_math",
895
-
"bevy_pbr",
896
-
"bevy_picking",
897
-
"bevy_platform",
898
-
"bevy_ptr",
899
-
"bevy_reflect",
900
-
"bevy_render",
901
-
"bevy_scene",
902
-
"bevy_sprite",
903
-
"bevy_state",
904
-
"bevy_tasks",
905
-
"bevy_text",
906
-
"bevy_time",
907
-
"bevy_transform",
908
-
"bevy_ui",
909
-
"bevy_utils",
910
-
"bevy_window",
911
-
"bevy_winit",
912
-
]
913
-
914
-
[[package]]
915
-
name = "bevy_log"
916
-
version = "0.16.0"
917
-
source = "registry+https://github.com/rust-lang/crates.io-index"
918
-
checksum = "7156df8d2f11135cf71c03eb4c11132b65201fd4f51648571e59e39c9c9ee2f6"
919
-
dependencies = [
920
-
"android_log-sys",
921
-
"bevy_app",
922
-
"bevy_ecs",
923
-
"bevy_utils",
924
-
"tracing",
925
-
"tracing-log",
926
-
"tracing-oslog",
927
-
"tracing-subscriber",
928
-
"tracing-wasm",
929
-
]
930
-
931
-
[[package]]
932
-
name = "bevy_macro_utils"
933
-
version = "0.16.0"
934
-
source = "registry+https://github.com/rust-lang/crates.io-index"
935
-
checksum = "7a2473db70d8785b5c75d6dd951a2e51e9be2c2311122db9692c79c9d887517b"
936
-
dependencies = [
937
-
"parking_lot",
938
-
"proc-macro2",
939
-
"quote",
940
-
"syn 2.0.101",
941
-
"toml_edit",
942
-
]
943
-
944
-
[[package]]
945
-
name = "bevy_math"
946
-
version = "0.16.0"
947
-
source = "registry+https://github.com/rust-lang/crates.io-index"
948
-
checksum = "f1a3a926d02dc501c6156a047510bdb538dcb1fa744eeba13c824b73ba88de55"
949
-
dependencies = [
950
-
"approx",
951
-
"bevy_reflect",
952
-
"derive_more",
953
-
"glam 0.29.3",
954
-
"itertools 0.14.0",
955
-
"libm",
956
-
"rand",
957
-
"rand_distr",
958
-
"serde",
959
-
"smallvec",
960
-
"thiserror 2.0.12",
961
-
"variadics_please",
962
-
]
963
-
964
-
[[package]]
965
-
name = "bevy_mesh"
966
-
version = "0.16.0"
967
-
source = "registry+https://github.com/rust-lang/crates.io-index"
968
-
checksum = "12af58280c7453e32e2f083d86eaa4c9b9d03ea8683977108ded8f1930c539f2"
969
-
dependencies = [
970
-
"bevy_asset",
971
-
"bevy_derive",
972
-
"bevy_ecs",
973
-
"bevy_image",
974
-
"bevy_math",
975
-
"bevy_mikktspace",
976
-
"bevy_platform",
977
-
"bevy_reflect",
978
-
"bevy_transform",
979
-
"bevy_utils",
980
-
"bitflags 2.9.0",
981
-
"bytemuck",
982
-
"hexasphere",
983
-
"serde",
984
-
"thiserror 2.0.12",
985
-
"tracing",
986
-
"wgpu-types",
987
-
]
988
-
989
-
[[package]]
990
-
name = "bevy_mikktspace"
991
-
version = "0.16.0"
992
-
source = "registry+https://github.com/rust-lang/crates.io-index"
993
-
checksum = "75e0258423c689f764556e36b5d9eebdbf624b29a1fd5b33cd9f6c42dcc4d5f3"
994
-
dependencies = [
995
-
"glam 0.29.3",
996
-
]
997
-
998
-
[[package]]
999
-
name = "bevy_pbr"
1000
-
version = "0.16.0"
1001
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1002
-
checksum = "d9fe0de43b68bf9e5090a33efc963f125e9d3f9d97be9ebece7bcfdde1b6da80"
1003
-
dependencies = [
1004
-
"bevy_app",
1005
-
"bevy_asset",
1006
-
"bevy_color",
1007
-
"bevy_core_pipeline",
1008
-
"bevy_derive",
1009
-
"bevy_diagnostic",
1010
-
"bevy_ecs",
1011
-
"bevy_image",
1012
-
"bevy_math",
1013
-
"bevy_platform",
1014
-
"bevy_reflect",
1015
-
"bevy_render",
1016
-
"bevy_transform",
1017
-
"bevy_utils",
1018
-
"bevy_window",
1019
-
"bitflags 2.9.0",
1020
-
"bytemuck",
1021
-
"derive_more",
1022
-
"fixedbitset",
1023
-
"nonmax",
1024
-
"offset-allocator",
1025
-
"radsort",
1026
-
"smallvec",
1027
-
"static_assertions",
1028
-
"thiserror 2.0.12",
1029
-
"tracing",
1030
-
]
1031
-
1032
-
[[package]]
1033
-
name = "bevy_picking"
1034
-
version = "0.16.0"
1035
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1036
-
checksum = "f73674f62b1033006bd75c89033f5d3516386cfd7d43bb9f7665012c0ab14d22"
1037
-
dependencies = [
1038
-
"bevy_app",
1039
-
"bevy_asset",
1040
-
"bevy_derive",
1041
-
"bevy_ecs",
1042
-
"bevy_input",
1043
-
"bevy_math",
1044
-
"bevy_mesh",
1045
-
"bevy_platform",
1046
-
"bevy_reflect",
1047
-
"bevy_render",
1048
-
"bevy_time",
1049
-
"bevy_transform",
1050
-
"bevy_utils",
1051
-
"bevy_window",
1052
-
"crossbeam-channel",
1053
-
"tracing",
1054
-
"uuid",
1055
-
]
1056
-
1057
-
[[package]]
1058
-
name = "bevy_platform"
1059
-
version = "0.16.0"
1060
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1061
-
checksum = "704db2c11b7bc31093df4fbbdd3769f9606a6a5287149f4b51f2680f25834ebc"
1062
-
dependencies = [
1063
-
"cfg-if",
1064
-
"critical-section",
1065
-
"foldhash",
1066
-
"getrandom 0.2.16",
1067
-
"hashbrown",
1068
-
"portable-atomic",
1069
-
"portable-atomic-util",
1070
-
"serde",
1071
-
"spin",
1072
-
"web-time",
1073
-
]
1074
-
1075
-
[[package]]
1076
-
name = "bevy_ptr"
1077
-
version = "0.16.0"
1078
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1079
-
checksum = "86f1275dfb4cfef4ffc90c3fa75408964864facf833acc932413d52aa5364ba4"
1080
-
1081
-
[[package]]
1082
-
name = "bevy_reflect"
1083
-
version = "0.16.0"
1084
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1085
-
checksum = "607ebacc31029cf2f39ac330eabf1d4bc411b159528ec08dbe6b0593eaccfd41"
1086
-
dependencies = [
1087
-
"assert_type_match",
1088
-
"bevy_platform",
1089
-
"bevy_ptr",
1090
-
"bevy_reflect_derive",
1091
-
"bevy_utils",
1092
-
"derive_more",
1093
-
"disqualified",
1094
-
"downcast-rs 2.0.1",
1095
-
"erased-serde",
1096
-
"foldhash",
1097
-
"glam 0.29.3",
1098
-
"petgraph",
1099
-
"serde",
1100
-
"smallvec",
1101
-
"smol_str",
1102
-
"thiserror 2.0.12",
1103
-
"uuid",
1104
-
"variadics_please",
1105
-
"wgpu-types",
1106
-
]
1107
-
1108
-
[[package]]
1109
-
name = "bevy_reflect_derive"
1110
-
version = "0.16.0"
1111
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1112
-
checksum = "cf35e45e4eb239018369f63f2adc2107a54c329f9276d020e01eee1625b0238b"
1113
-
dependencies = [
1114
-
"bevy_macro_utils",
1115
-
"proc-macro2",
1116
-
"quote",
1117
-
"syn 2.0.101",
1118
-
"uuid",
1119
-
]
1120
-
1121
-
[[package]]
1122
-
name = "bevy_render"
1123
-
version = "0.16.0"
1124
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1125
-
checksum = "85a7306235b3343b032801504f3e884b93abfb7ba58179fc555c479df509f349"
1126
-
dependencies = [
1127
-
"async-channel",
1128
-
"bevy_app",
1129
-
"bevy_asset",
1130
-
"bevy_color",
1131
-
"bevy_derive",
1132
-
"bevy_diagnostic",
1133
-
"bevy_ecs",
1134
-
"bevy_encase_derive",
1135
-
"bevy_image",
1136
-
"bevy_math",
1137
-
"bevy_mesh",
1138
-
"bevy_platform",
1139
-
"bevy_reflect",
1140
-
"bevy_render_macros",
1141
-
"bevy_tasks",
1142
-
"bevy_time",
1143
-
"bevy_transform",
1144
-
"bevy_utils",
1145
-
"bevy_window",
1146
-
"bitflags 2.9.0",
1147
-
"bytemuck",
1148
-
"codespan-reporting",
1149
-
"derive_more",
1150
-
"downcast-rs 2.0.1",
1151
-
"encase",
1152
-
"fixedbitset",
1153
-
"futures-lite",
1154
-
"image 0.25.6",
1155
-
"indexmap",
1156
-
"js-sys",
1157
-
"ktx2",
1158
-
"naga",
1159
-
"naga_oil",
1160
-
"nonmax",
1161
-
"offset-allocator",
1162
-
"send_wrapper",
1163
-
"serde",
1164
-
"smallvec",
1165
-
"thiserror 2.0.12",
1166
-
"tracing",
1167
-
"variadics_please",
1168
-
"wasm-bindgen",
1169
-
"web-sys",
1170
-
"wgpu",
1171
-
]
1172
-
1173
-
[[package]]
1174
-
name = "bevy_render_macros"
1175
-
version = "0.16.0"
1176
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1177
-
checksum = "b85c4fb26b66d3a257b655485d11b9b6df9d3c85026493ba8092767a5edfc1b2"
1178
-
dependencies = [
1179
-
"bevy_macro_utils",
1180
-
"proc-macro2",
1181
-
"quote",
1182
-
"syn 2.0.101",
1183
-
]
1184
-
1185
-
[[package]]
1186
-
name = "bevy_scene"
1187
-
version = "0.16.0"
1188
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1189
-
checksum = "e7b628f560f2d2fe9f35ecd4526627ba3992f082de03fd745536e4053a0266fe"
1190
-
dependencies = [
1191
-
"bevy_app",
1192
-
"bevy_asset",
1193
-
"bevy_derive",
1194
-
"bevy_ecs",
1195
-
"bevy_platform",
1196
-
"bevy_reflect",
1197
-
"bevy_render",
1198
-
"bevy_transform",
1199
-
"bevy_utils",
1200
-
"derive_more",
1201
-
"serde",
1202
-
"thiserror 2.0.12",
1203
-
"uuid",
1204
-
]
1205
-
1206
-
[[package]]
1207
-
name = "bevy_sprite"
1208
-
version = "0.16.0"
1209
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1210
-
checksum = "01f97bf54fb1c37a1077139b59bb32bc77f7ca53149cfcaa512adbb69a2d492c"
1211
-
dependencies = [
1212
-
"bevy_app",
1213
-
"bevy_asset",
1214
-
"bevy_color",
1215
-
"bevy_core_pipeline",
1216
-
"bevy_derive",
1217
-
"bevy_ecs",
1218
-
"bevy_image",
1219
-
"bevy_math",
1220
-
"bevy_picking",
1221
-
"bevy_platform",
1222
-
"bevy_reflect",
1223
-
"bevy_render",
1224
-
"bevy_transform",
1225
-
"bevy_utils",
1226
-
"bevy_window",
1227
-
"bitflags 2.9.0",
1228
-
"bytemuck",
1229
-
"derive_more",
1230
-
"fixedbitset",
1231
-
"nonmax",
1232
-
"radsort",
1233
-
"tracing",
1234
-
]
1235
-
1236
-
[[package]]
1237
-
name = "bevy_state"
1238
-
version = "0.16.0"
1239
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1240
-
checksum = "682c343c354b191fe6669823bce3b0695ee1ae4ac36f582e29c436a72b67cdd5"
1241
-
dependencies = [
1242
-
"bevy_app",
1243
-
"bevy_ecs",
1244
-
"bevy_platform",
1245
-
"bevy_reflect",
1246
-
"bevy_state_macros",
1247
-
"bevy_utils",
1248
-
"log",
1249
-
"variadics_please",
1250
-
]
1251
-
1252
-
[[package]]
1253
-
name = "bevy_state_macros"
1254
-
version = "0.16.0"
1255
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1256
-
checksum = "55b4bf3970c4f0e60572901df4641656722172c222d71a80c430d36b0e31426c"
1257
-
dependencies = [
1258
-
"bevy_macro_utils",
1259
-
"proc-macro2",
1260
-
"quote",
1261
-
"syn 2.0.101",
1262
-
]
1263
-
1264
-
[[package]]
1265
-
name = "bevy_tasks"
1266
-
version = "0.16.0"
1267
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1268
-
checksum = "444c450b65e108855f42ecb6db0c041a56ea7d7f10cc6222f0ca95e9536a7d19"
1269
-
dependencies = [
1270
-
"async-channel",
1271
-
"async-executor",
1272
-
"async-task",
1273
-
"atomic-waker",
1274
-
"bevy_platform",
1275
-
"cfg-if",
1276
-
"concurrent-queue",
1277
-
"crossbeam-queue",
1278
-
"derive_more",
1279
-
"futures-channel",
1280
-
"futures-lite",
1281
-
"heapless",
1282
-
"pin-project",
1283
-
"wasm-bindgen-futures",
1284
-
]
1285
-
1286
-
[[package]]
1287
-
name = "bevy_text"
1288
-
version = "0.16.0"
1289
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1290
-
checksum = "8ef071262c5a9afbc39caba4c0b282c7d045fbb5cf33bdab1924bd2343403833"
1291
-
dependencies = [
1292
-
"bevy_app",
1293
-
"bevy_asset",
1294
-
"bevy_color",
1295
-
"bevy_derive",
1296
-
"bevy_ecs",
1297
-
"bevy_image",
1298
-
"bevy_log",
1299
-
"bevy_math",
1300
-
"bevy_platform",
1301
-
"bevy_reflect",
1302
-
"bevy_render",
1303
-
"bevy_sprite",
1304
-
"bevy_transform",
1305
-
"bevy_utils",
1306
-
"bevy_window",
1307
-
"cosmic-text",
1308
-
"serde",
1309
-
"smallvec",
1310
-
"sys-locale",
1311
-
"thiserror 2.0.12",
1312
-
"tracing",
1313
-
"unicode-bidi",
1314
-
]
1315
-
1316
-
[[package]]
1317
-
name = "bevy_time"
1318
-
version = "0.16.0"
1319
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1320
-
checksum = "456369ca10f8e039aaf273332744674844827854833ee29e28f9e161702f2f55"
1321
-
dependencies = [
1322
-
"bevy_app",
1323
-
"bevy_ecs",
1324
-
"bevy_platform",
1325
-
"bevy_reflect",
1326
-
"crossbeam-channel",
1327
-
"log",
1328
-
"serde",
1329
-
]
1330
-
1331
-
[[package]]
1332
-
name = "bevy_transform"
1333
-
version = "0.16.0"
1334
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1335
-
checksum = "8479cdd5461246943956a7c8347e4e5d6ff857e57add889fb50eee0b5c26ab48"
1336
-
dependencies = [
1337
-
"bevy_app",
1338
-
"bevy_ecs",
1339
-
"bevy_log",
1340
-
"bevy_math",
1341
-
"bevy_reflect",
1342
-
"bevy_tasks",
1343
-
"bevy_utils",
1344
-
"derive_more",
1345
-
"serde",
1346
-
"thiserror 2.0.12",
1347
-
]
1348
-
1349
-
[[package]]
1350
-
name = "bevy_ui"
1351
-
version = "0.16.0"
1352
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1353
-
checksum = "110dc5d0059f112263512be8cd7bfe0466dfb7c26b9bf4c74529355249fd23f9"
1354
-
dependencies = [
1355
-
"accesskit",
1356
-
"bevy_a11y",
1357
-
"bevy_app",
1358
-
"bevy_asset",
1359
-
"bevy_color",
1360
-
"bevy_core_pipeline",
1361
-
"bevy_derive",
1362
-
"bevy_ecs",
1363
-
"bevy_image",
1364
-
"bevy_input",
1365
-
"bevy_math",
1366
-
"bevy_picking",
1367
-
"bevy_platform",
1368
-
"bevy_reflect",
1369
-
"bevy_render",
1370
-
"bevy_sprite",
1371
-
"bevy_text",
1372
-
"bevy_transform",
1373
-
"bevy_utils",
1374
-
"bevy_window",
1375
-
"bytemuck",
1376
-
"derive_more",
1377
-
"nonmax",
1378
-
"smallvec",
1379
-
"taffy",
1380
-
"thiserror 2.0.12",
1381
-
"tracing",
1382
-
]
1383
-
1384
-
[[package]]
1385
-
name = "bevy_utils"
1386
-
version = "0.16.0"
1387
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1388
-
checksum = "ac2da3b3c1f94dadefcbe837aaa4aa119fcea37f7bdc5307eb05b4ede1921e24"
1389
-
dependencies = [
1390
-
"bevy_platform",
1391
-
"thread_local",
1392
-
]
1393
-
1394
-
[[package]]
1395
-
name = "bevy_window"
1396
-
version = "0.16.0"
1397
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1398
-
checksum = "0d83327cc5584da463d12b7a88ddb97f9e006828832287e1564531171fffdeb4"
1399
-
dependencies = [
1400
-
"android-activity",
1401
-
"bevy_app",
1402
-
"bevy_ecs",
1403
-
"bevy_input",
1404
-
"bevy_math",
1405
-
"bevy_platform",
1406
-
"bevy_reflect",
1407
-
"bevy_utils",
1408
-
"log",
1409
-
"raw-window-handle",
1410
-
"serde",
1411
-
"smol_str",
1412
-
]
1413
-
1414
-
[[package]]
1415
-
name = "bevy_winit"
1416
-
version = "0.16.0"
1417
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1418
-
checksum = "57b14928923ae4274f4b867dce3d0e7b2c8a31bebcb0f6e65a4261c3e0765064"
1419
-
dependencies = [
1420
-
"accesskit",
1421
-
"accesskit_winit",
1422
-
"approx",
1423
-
"bevy_a11y",
1424
-
"bevy_app",
1425
-
"bevy_asset",
1426
-
"bevy_derive",
1427
-
"bevy_ecs",
1428
-
"bevy_image",
1429
-
"bevy_input",
1430
-
"bevy_input_focus",
1431
-
"bevy_log",
1432
-
"bevy_math",
1433
-
"bevy_platform",
1434
-
"bevy_reflect",
1435
-
"bevy_tasks",
1436
-
"bevy_utils",
1437
-
"bevy_window",
1438
-
"bytemuck",
1439
-
"cfg-if",
1440
-
"crossbeam-channel",
1441
-
"raw-window-handle",
1442
-
"tracing",
1443
-
"wasm-bindgen",
1444
-
"web-sys",
1445
-
"wgpu-types",
1446
-
"winit",
1447
-
]
1448
-
1449
-
[[package]]
1450
-
name = "bindgen"
1451
-
version = "0.70.1"
1452
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1453
-
checksum = "f49d8fed880d473ea71efb9bf597651e77201bdd4893efe54c9e5d65ae04ce6f"
1454
-
dependencies = [
1455
-
"bitflags 2.9.0",
1456
-
"cexpr",
1457
-
"clang-sys",
1458
-
"itertools 0.13.0",
1459
-
"log",
1460
-
"prettyplease",
1461
-
"proc-macro2",
1462
-
"quote",
1463
-
"regex",
1464
-
"rustc-hash",
1465
-
"shlex",
1466
-
"syn 2.0.101",
1467
-
]
1468
-
1469
-
[[package]]
1470
-
name = "binrw"
1471
-
version = "0.15.0"
1472
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1473
-
checksum = "81419ff39e6ed10a92a7f125290859776ced35d9a08a665ae40b23e7ca702f30"
1474
-
dependencies = [
1475
-
"array-init",
1476
-
"binrw_derive",
1477
-
"bytemuck",
1478
-
]
1479
-
1480
-
[[package]]
1481
-
name = "binrw_derive"
1482
-
version = "0.15.0"
1483
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1484
-
checksum = "376404e55ec40d0d6f8b4b7df3f87b87954bd987f0cf9a7207ea3b6ea5c9add4"
1485
-
dependencies = [
1486
-
"either",
1487
-
"owo-colors",
1488
-
"proc-macro2",
1489
-
"quote",
1490
-
"syn 2.0.101",
1491
-
]
1492
-
1493
-
[[package]]
1494
-
name = "bit-set"
1495
-
version = "0.5.3"
1496
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1497
-
checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1"
1498
-
dependencies = [
1499
-
"bit-vec 0.6.3",
1500
-
]
1501
-
1502
-
[[package]]
1503
-
name = "bit-set"
1504
-
version = "0.8.0"
1505
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1506
-
checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3"
1507
-
dependencies = [
1508
-
"bit-vec 0.8.0",
1509
-
]
1510
-
1511
-
[[package]]
1512
-
name = "bit-vec"
1513
-
version = "0.6.3"
1514
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1515
-
checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
1516
-
1517
-
[[package]]
1518
-
name = "bit-vec"
1519
-
version = "0.8.0"
1520
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1521
-
checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7"
1522
-
1523
-
[[package]]
1524
-
name = "bit_field"
1525
-
version = "0.10.2"
1526
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1527
-
checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61"
1528
-
1529
-
[[package]]
1530
-
name = "bitflags"
1531
-
version = "1.3.2"
1532
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1533
-
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
1534
-
1535
-
[[package]]
1536
-
name = "bitflags"
1537
-
version = "2.9.0"
1538
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1539
-
checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd"
1540
-
dependencies = [
1541
-
"serde",
1542
-
]
1543
-
1544
-
[[package]]
1545
-
name = "bitstream-io"
1546
-
version = "2.6.0"
1547
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1548
-
checksum = "6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2"
1549
-
1550
-
[[package]]
1551
-
name = "blake3"
1552
-
version = "1.8.2"
1553
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1554
-
checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0"
1555
-
dependencies = [
1556
-
"arrayref",
1557
-
"arrayvec",
1558
-
"cc",
1559
-
"cfg-if",
1560
-
"constant_time_eq",
1561
-
]
1562
-
1563
-
[[package]]
1564
-
name = "block"
1565
-
version = "0.1.6"
1566
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1567
-
checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
1568
-
1569
-
[[package]]
1570
-
name = "block2"
1571
-
version = "0.5.1"
1572
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1573
-
checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f"
1574
-
dependencies = [
1575
-
"objc2 0.5.2",
1576
-
]
1577
-
1578
-
[[package]]
1579
-
name = "blocking"
1580
-
version = "1.6.1"
1581
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1582
-
checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea"
1583
-
dependencies = [
1584
-
"async-channel",
1585
-
"async-task",
1586
-
"futures-io",
1587
-
"futures-lite",
1588
-
"piper",
1589
-
]
1590
-
1591
-
[[package]]
1592
-
name = "built"
1593
-
version = "0.7.7"
1594
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1595
-
checksum = "56ed6191a7e78c36abdb16ab65341eefd73d64d303fffccdbb00d51e4205967b"
1596
-
1597
-
[[package]]
1598
-
name = "bumpalo"
1599
-
version = "3.17.0"
1600
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1601
-
checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf"
1602
-
1603
-
[[package]]
1604
-
name = "bytemuck"
1605
-
version = "1.23.0"
1606
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1607
-
checksum = "9134a6ef01ce4b366b50689c94f82c14bc72bc5d0386829828a2e2752ef7958c"
1608
-
dependencies = [
1609
-
"bytemuck_derive",
1610
-
]
1611
-
1612
-
[[package]]
1613
-
name = "bytemuck_derive"
1614
-
version = "1.9.3"
1615
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1616
-
checksum = "7ecc273b49b3205b83d648f0690daa588925572cc5063745bfe547fe7ec8e1a1"
1617
-
dependencies = [
1618
-
"proc-macro2",
1619
-
"quote",
1620
-
"syn 2.0.101",
1621
-
]
1622
-
1623
-
[[package]]
1624
-
name = "byteorder"
1625
-
version = "1.5.0"
1626
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1627
-
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
1628
-
1629
-
[[package]]
1630
-
name = "byteorder-lite"
1631
-
version = "0.1.0"
1632
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1633
-
checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495"
1634
-
1635
-
[[package]]
1636
-
name = "bytes"
1637
-
version = "1.10.1"
1638
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1639
-
checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
1640
-
1641
-
[[package]]
1642
-
name = "calloop"
1643
-
version = "0.13.0"
1644
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1645
-
checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec"
1646
-
dependencies = [
1647
-
"bitflags 2.9.0",
1648
-
"log",
1649
-
"polling",
1650
-
"rustix",
1651
-
"slab",
1652
-
"thiserror 1.0.69",
1653
-
]
1654
-
1655
-
[[package]]
1656
-
name = "calloop-wayland-source"
1657
-
version = "0.3.0"
1658
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1659
-
checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20"
1660
-
dependencies = [
1661
-
"calloop",
1662
-
"rustix",
1663
-
"wayland-backend",
1664
-
"wayland-client",
1665
-
]
1666
-
1667
-
[[package]]
1668
-
name = "cc"
1669
-
version = "1.2.22"
1670
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1671
-
checksum = "32db95edf998450acc7881c932f94cd9b05c87b4b2599e8bab064753da4acfd1"
1672
-
dependencies = [
1673
-
"jobserver",
1674
-
"libc",
1675
-
"shlex",
1676
-
]
1677
-
1678
-
[[package]]
1679
-
name = "cesu8"
1680
-
version = "1.1.0"
1681
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1682
-
checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
1683
-
1684
-
[[package]]
1685
-
name = "cexpr"
1686
-
version = "0.6.0"
1687
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1688
-
checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
1689
-
dependencies = [
1690
-
"nom",
1691
-
]
1692
-
1693
-
[[package]]
1694
-
name = "cfg-expr"
1695
-
version = "0.15.8"
1696
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1697
-
checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02"
1698
-
dependencies = [
1699
-
"smallvec",
1700
-
"target-lexicon",
1701
-
]
1702
-
1703
-
[[package]]
1704
-
name = "cfg-if"
1705
-
version = "1.0.0"
1706
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1707
-
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
1708
-
1709
-
[[package]]
1710
-
name = "cfg_aliases"
1711
-
version = "0.2.1"
1712
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1713
-
checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
1714
-
1715
-
[[package]]
1716
-
name = "clang-sys"
1717
-
version = "1.8.1"
1718
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1719
-
checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4"
1720
-
dependencies = [
1721
-
"glob",
1722
-
"libc",
1723
-
"libloading",
1724
-
]
1725
-
1726
-
[[package]]
1727
-
name = "clipboard-win"
1728
-
version = "5.4.0"
1729
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1730
-
checksum = "15efe7a882b08f34e38556b14f2fb3daa98769d06c7f0c1b076dfd0d983bc892"
1731
-
dependencies = [
1732
-
"error-code",
1733
-
]
1734
-
1735
-
[[package]]
1736
-
name = "codespan-reporting"
1737
-
version = "0.11.1"
1738
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1739
-
checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
1740
-
dependencies = [
1741
-
"termcolor",
1742
-
"unicode-width",
1743
-
]
1744
-
1745
-
[[package]]
1746
-
name = "color_quant"
1747
-
version = "1.1.0"
1748
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1749
-
checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
1750
-
1751
-
[[package]]
1752
-
name = "combine"
1753
-
version = "4.6.7"
1754
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1755
-
checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd"
1756
-
dependencies = [
1757
-
"bytes",
1758
-
"memchr",
1759
-
]
1760
-
1761
-
[[package]]
1762
-
name = "concurrent-queue"
1763
-
version = "2.5.0"
1764
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1765
-
checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973"
1766
-
dependencies = [
1767
-
"crossbeam-utils",
1768
-
"portable-atomic",
1769
-
]
1770
-
1771
-
[[package]]
1772
-
name = "console_error_panic_hook"
1773
-
version = "0.1.7"
1774
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1775
-
checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc"
1776
-
dependencies = [
1777
-
"cfg-if",
1778
-
"wasm-bindgen",
1779
-
]
1780
-
1781
-
[[package]]
1782
-
name = "const-fnv1a-hash"
1783
-
version = "1.1.0"
1784
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1785
-
checksum = "32b13ea120a812beba79e34316b3942a857c86ec1593cb34f27bb28272ce2cca"
1786
-
1787
-
[[package]]
1788
-
name = "const_panic"
1789
-
version = "0.2.12"
1790
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1791
-
checksum = "2459fc9262a1aa204eb4b5764ad4f189caec88aea9634389c0a25f8be7f6265e"
1792
-
1793
-
[[package]]
1794
-
name = "const_soft_float"
1795
-
version = "0.1.4"
1796
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1797
-
checksum = "87ca1caa64ef4ed453e68bb3db612e51cf1b2f5b871337f0fcab1c8f87cc3dff"
1798
-
1799
-
[[package]]
1800
-
name = "constant_time_eq"
1801
-
version = "0.3.1"
1802
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1803
-
checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6"
1804
-
1805
-
[[package]]
1806
-
name = "constgebra"
1807
-
version = "0.1.4"
1808
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1809
-
checksum = "e1aaf9b65849a68662ac6c0810c8893a765c960b907dd7cfab9c4a50bf764fbc"
1810
-
dependencies = [
1811
-
"const_soft_float",
1812
-
]
1813
-
1814
-
[[package]]
1815
-
name = "core-foundation"
1816
-
version = "0.9.4"
1817
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1818
-
checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
1819
-
dependencies = [
1820
-
"core-foundation-sys",
1821
-
"libc",
1822
-
]
1823
-
1824
-
[[package]]
1825
-
name = "core-foundation"
1826
-
version = "0.10.0"
1827
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1828
-
checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63"
1829
-
dependencies = [
1830
-
"core-foundation-sys",
1831
-
"libc",
1832
-
]
1833
-
1834
-
[[package]]
1835
-
name = "core-foundation-sys"
1836
-
version = "0.8.7"
1837
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1838
-
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
1839
-
1840
-
[[package]]
1841
-
name = "core-graphics"
1842
-
version = "0.23.2"
1843
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1844
-
checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081"
1845
-
dependencies = [
1846
-
"bitflags 1.3.2",
1847
-
"core-foundation 0.9.4",
1848
-
"core-graphics-types",
1849
-
"foreign-types",
1850
-
"libc",
1851
-
]
1852
-
1853
-
[[package]]
1854
-
name = "core-graphics-types"
1855
-
version = "0.1.3"
1856
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1857
-
checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf"
1858
-
dependencies = [
1859
-
"bitflags 1.3.2",
1860
-
"core-foundation 0.9.4",
1861
-
"libc",
1862
-
]
1863
-
1864
-
[[package]]
1865
-
name = "coreaudio-rs"
1866
-
version = "0.11.3"
1867
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1868
-
checksum = "321077172d79c662f64f5071a03120748d5bb652f5231570141be24cfcd2bace"
1869
-
dependencies = [
1870
-
"bitflags 1.3.2",
1871
-
"core-foundation-sys",
1872
-
"coreaudio-sys",
1873
-
]
1874
-
1875
-
[[package]]
1876
-
name = "coreaudio-sys"
1877
-
version = "0.2.16"
1878
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1879
-
checksum = "2ce857aa0b77d77287acc1ac3e37a05a8c95a2af3647d23b15f263bdaeb7562b"
1880
-
dependencies = [
1881
-
"bindgen",
1882
-
]
1883
-
1884
-
[[package]]
1885
-
name = "cosmic-text"
1886
-
version = "0.13.2"
1887
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1888
-
checksum = "e418dd4f5128c3e93eab12246391c54a20c496811131f85754dc8152ee207892"
1889
-
dependencies = [
1890
-
"bitflags 2.9.0",
1891
-
"fontdb",
1892
-
"log",
1893
-
"rangemap",
1894
-
"rustc-hash",
1895
-
"rustybuzz",
1896
-
"self_cell",
1897
-
"smol_str",
1898
-
"swash",
1899
-
"sys-locale",
1900
-
"ttf-parser 0.21.1",
1901
-
"unicode-bidi",
1902
-
"unicode-linebreak",
1903
-
"unicode-script",
1904
-
"unicode-segmentation",
1905
-
]
1906
-
1907
-
[[package]]
1908
-
name = "cpal"
1909
-
version = "0.15.3"
1910
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1911
-
checksum = "873dab07c8f743075e57f524c583985fbaf745602acbe916a01539364369a779"
1912
-
dependencies = [
1913
-
"alsa",
1914
-
"core-foundation-sys",
1915
-
"coreaudio-rs",
1916
-
"dasp_sample",
1917
-
"jni",
1918
-
"js-sys",
1919
-
"libc",
1920
-
"mach2",
1921
-
"ndk 0.8.0",
1922
-
"ndk-context",
1923
-
"oboe",
1924
-
"wasm-bindgen",
1925
-
"wasm-bindgen-futures",
1926
-
"web-sys",
1927
-
"windows 0.54.0",
1928
-
]
1929
-
1930
-
[[package]]
1931
-
name = "crc32fast"
1932
-
version = "1.4.2"
1933
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1934
-
checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3"
1935
-
dependencies = [
1936
-
"cfg-if",
1937
-
]
1938
-
1939
-
[[package]]
1940
-
name = "critical-section"
1941
-
version = "1.2.0"
1942
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1943
-
checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b"
1944
-
1945
-
[[package]]
1946
-
name = "crossbeam-channel"
1947
-
version = "0.5.15"
1948
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1949
-
checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2"
1950
-
dependencies = [
1951
-
"crossbeam-utils",
1952
-
]
1953
-
1954
-
[[package]]
1955
-
name = "crossbeam-deque"
1956
-
version = "0.8.6"
1957
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1958
-
checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51"
1959
-
dependencies = [
1960
-
"crossbeam-epoch",
1961
-
"crossbeam-utils",
1962
-
]
1963
-
1964
-
[[package]]
1965
-
name = "crossbeam-epoch"
1966
-
version = "0.9.18"
1967
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1968
-
checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
1969
-
dependencies = [
1970
-
"crossbeam-utils",
1971
-
]
1972
-
1973
-
[[package]]
1974
-
name = "crossbeam-queue"
1975
-
version = "0.3.12"
1976
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1977
-
checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115"
1978
-
dependencies = [
1979
-
"crossbeam-utils",
1980
-
]
1981
-
1982
-
[[package]]
1983
-
name = "crossbeam-utils"
1984
-
version = "0.8.21"
1985
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1986
-
checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
1987
-
1988
-
[[package]]
1989
-
name = "crunchy"
1990
-
version = "0.2.3"
1991
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1992
-
checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929"
1993
-
1994
-
[[package]]
1995
-
name = "ctrlc"
1996
-
version = "3.4.6"
1997
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1998
-
checksum = "697b5419f348fd5ae2478e8018cb016c00a5881c7f46c717de98ffd135a5651c"
1999
-
dependencies = [
2000
-
"nix",
2001
-
"windows-sys 0.59.0",
2002
-
]
2003
-
2004
-
[[package]]
2005
-
name = "cursor-icon"
2006
-
version = "1.1.0"
2007
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2008
-
checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991"
2009
-
2010
-
[[package]]
2011
-
name = "dasp_sample"
2012
-
version = "0.11.0"
2013
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2014
-
checksum = "0c87e182de0887fd5361989c677c4e8f5000cd9491d6d563161a8f3a5519fc7f"
2015
-
2016
-
[[package]]
2017
-
name = "data-encoding"
2018
-
version = "2.9.0"
2019
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2020
-
checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476"
2021
-
2022
-
[[package]]
2023
-
name = "derive_more"
2024
-
version = "1.0.0"
2025
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2026
-
checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05"
2027
-
dependencies = [
2028
-
"derive_more-impl",
2029
-
]
2030
-
2031
-
[[package]]
2032
-
name = "derive_more-impl"
2033
-
version = "1.0.0"
2034
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2035
-
checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22"
2036
-
dependencies = [
2037
-
"proc-macro2",
2038
-
"quote",
2039
-
"syn 2.0.101",
2040
-
"unicode-xid",
2041
-
]
2042
-
2043
-
[[package]]
2044
-
name = "dispatch"
2045
-
version = "0.2.0"
2046
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2047
-
checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
2048
-
2049
-
[[package]]
2050
-
name = "dispatch2"
2051
-
version = "0.3.0"
2052
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2053
-
checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec"
2054
-
dependencies = [
2055
-
"bitflags 2.9.0",
2056
-
"objc2 0.6.1",
2057
-
]
2058
-
2059
-
[[package]]
2060
-
name = "displaydoc"
2061
-
version = "0.2.5"
2062
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2063
-
checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
2064
-
dependencies = [
2065
-
"proc-macro2",
2066
-
"quote",
2067
-
"syn 2.0.101",
2068
-
]
2069
-
2070
-
[[package]]
2071
-
name = "disqualified"
2072
-
version = "1.0.0"
2073
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2074
-
checksum = "c9c272297e804878a2a4b707cfcfc6d2328b5bb936944613b4fdf2b9269afdfd"
2075
-
2076
-
[[package]]
2077
-
name = "dlib"
2078
-
version = "0.5.2"
2079
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2080
-
checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412"
2081
-
dependencies = [
2082
-
"libloading",
2083
-
]
2084
-
2085
-
[[package]]
2086
-
name = "document-features"
2087
-
version = "0.2.11"
2088
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2089
-
checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d"
2090
-
dependencies = [
2091
-
"litrs",
2092
-
]
2093
-
2094
-
[[package]]
2095
-
name = "downcast-rs"
2096
-
version = "1.2.1"
2097
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2098
-
checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2"
2099
-
2100
-
[[package]]
2101
-
name = "downcast-rs"
2102
-
version = "2.0.1"
2103
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2104
-
checksum = "ea8a8b81cacc08888170eef4d13b775126db426d0b348bee9d18c2c1eaf123cf"
2105
-
2106
-
[[package]]
2107
-
name = "dpi"
2108
-
version = "0.1.2"
2109
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2110
-
checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76"
2111
-
2112
-
[[package]]
2113
-
name = "ecolor"
2114
-
version = "0.31.1"
2115
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2116
-
checksum = "bc4feb366740ded31a004a0e4452fbf84e80ef432ecf8314c485210229672fd1"
2117
-
dependencies = [
2118
-
"bytemuck",
2119
-
"emath",
2120
-
]
2121
-
2122
-
[[package]]
2123
-
name = "egui"
2124
-
version = "0.31.1"
2125
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2126
-
checksum = "25dd34cec49ab55d85ebf70139cb1ccd29c977ef6b6ba4fe85489d6877ee9ef3"
2127
-
dependencies = [
2128
-
"ahash",
2129
-
"bitflags 2.9.0",
2130
-
"emath",
2131
-
"epaint",
2132
-
"nohash-hasher",
2133
-
"profiling",
2134
-
]
2135
-
2136
-
[[package]]
2137
-
name = "either"
2138
-
version = "1.15.0"
2139
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2140
-
checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
2141
-
2142
-
[[package]]
2143
-
name = "emath"
2144
-
version = "0.31.1"
2145
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2146
-
checksum = "9e4cadcff7a5353ba72b7fea76bf2122b5ebdbc68e8155aa56dfdea90083fe1b"
2147
-
dependencies = [
2148
-
"bytemuck",
2149
-
]
2150
-
2151
-
[[package]]
2152
-
name = "encase"
2153
-
version = "0.10.0"
2154
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2155
-
checksum = "b0a05902cf601ed11d564128448097b98ebe3c6574bd7b6a653a3d56d54aa020"
2156
-
dependencies = [
2157
-
"const_panic",
2158
-
"encase_derive",
2159
-
"glam 0.29.3",
2160
-
"thiserror 1.0.69",
2161
-
]
2162
-
2163
-
[[package]]
2164
-
name = "encase_derive"
2165
-
version = "0.10.0"
2166
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2167
-
checksum = "181d475b694e2dd56ae919ce7699d344d1fd259292d590c723a50d1189a2ea85"
2168
-
dependencies = [
2169
-
"encase_derive_impl",
2170
-
]
2171
-
2172
-
[[package]]
2173
-
name = "encase_derive_impl"
2174
-
version = "0.10.0"
2175
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2176
-
checksum = "f97b51c5cc57ef7c5f7a0c57c250251c49ee4c28f819f87ac32f4aceabc36792"
2177
-
dependencies = [
2178
-
"proc-macro2",
2179
-
"quote",
2180
-
"syn 2.0.101",
2181
-
]
2182
-
2183
-
[[package]]
2184
-
name = "epaint"
2185
-
version = "0.31.1"
2186
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2187
-
checksum = "41fcc0f5a7c613afd2dee5e4b30c3e6acafb8ad6f0edb06068811f708a67c562"
2188
-
dependencies = [
2189
-
"ab_glyph",
2190
-
"ahash",
2191
-
"bytemuck",
2192
-
"ecolor",
2193
-
"emath",
2194
-
"epaint_default_fonts",
2195
-
"nohash-hasher",
2196
-
"parking_lot",
2197
-
"profiling",
2198
-
]
2199
-
2200
-
[[package]]
2201
-
name = "epaint_default_fonts"
2202
-
version = "0.31.1"
2203
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2204
-
checksum = "fc7e7a64c02cf7a5b51e745a9e45f60660a286f151c238b9d397b3e923f5082f"
2205
-
2206
-
[[package]]
2207
-
name = "equivalent"
2208
-
version = "1.0.2"
2209
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2210
-
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
2211
-
2212
-
[[package]]
2213
-
name = "erased-serde"
2214
-
version = "0.4.6"
2215
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2216
-
checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7"
2217
-
dependencies = [
2218
-
"serde",
2219
-
"typeid",
2220
-
]
2221
-
2222
-
[[package]]
2223
-
name = "errno"
2224
-
version = "0.3.11"
2225
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2226
-
checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e"
2227
-
dependencies = [
2228
-
"libc",
2229
-
"windows-sys 0.59.0",
2230
-
]
2231
-
2232
-
[[package]]
2233
-
name = "error-code"
2234
-
version = "3.3.2"
2235
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2236
-
checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59"
2237
-
2238
-
[[package]]
2239
-
name = "euclid"
2240
-
version = "0.22.11"
2241
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2242
-
checksum = "ad9cdb4b747e485a12abb0e6566612956c7a1bafa3bdb8d682c5b6d403589e48"
2243
-
dependencies = [
2244
-
"num-traits",
2245
-
]
2246
-
2247
-
[[package]]
2248
-
name = "event-listener"
2249
-
version = "5.4.0"
2250
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2251
-
checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae"
2252
-
dependencies = [
2253
-
"concurrent-queue",
2254
-
"parking",
2255
-
"pin-project-lite",
2256
-
]
2257
-
2258
-
[[package]]
2259
-
name = "event-listener-strategy"
2260
-
version = "0.5.4"
2261
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2262
-
checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93"
2263
-
dependencies = [
2264
-
"event-listener",
2265
-
"pin-project-lite",
2266
-
]
2267
-
2268
-
[[package]]
2269
-
name = "exr"
2270
-
version = "1.73.0"
2271
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2272
-
checksum = "f83197f59927b46c04a183a619b7c29df34e63e63c7869320862268c0ef687e0"
2273
-
dependencies = [
2274
-
"bit_field",
2275
-
"half",
2276
-
"lebe",
2277
-
"miniz_oxide",
2278
-
"rayon-core",
2279
-
"smallvec",
2280
-
"zune-inflate",
2281
-
]
2282
-
2283
-
[[package]]
2284
-
name = "fastrand"
2285
-
version = "2.3.0"
2286
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2287
-
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
2288
-
2289
-
[[package]]
2290
-
name = "fdeflate"
2291
-
version = "0.3.7"
2292
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2293
-
checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c"
2294
-
dependencies = [
2295
-
"simd-adler32",
2296
-
]
2297
-
2298
-
[[package]]
2299
-
name = "fixedbitset"
2300
-
version = "0.5.7"
2301
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2302
-
checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99"
2303
-
2304
-
[[package]]
2305
-
name = "flate2"
2306
-
version = "1.1.1"
2307
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2308
-
checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece"
2309
-
dependencies = [
2310
-
"crc32fast",
2311
-
"libz-rs-sys",
2312
-
"miniz_oxide",
2313
-
]
2314
-
2315
-
[[package]]
2316
-
name = "fnv"
2317
-
version = "1.0.7"
2318
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2319
-
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
2320
-
2321
-
[[package]]
2322
-
name = "foldhash"
2323
-
version = "0.1.5"
2324
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2325
-
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
2326
-
2327
-
[[package]]
2328
-
name = "font-types"
2329
-
version = "0.9.0"
2330
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2331
-
checksum = "02a596f5713680923a2080d86de50fe472fb290693cf0f701187a1c8b36996b7"
2332
-
dependencies = [
2333
-
"bytemuck",
2334
-
]
2335
-
2336
-
[[package]]
2337
-
name = "fontconfig-parser"
2338
-
version = "0.5.7"
2339
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2340
-
checksum = "c1fcfcd44ca6e90c921fee9fa665d530b21ef1327a4c1a6c5250ea44b776ada7"
2341
-
dependencies = [
2342
-
"roxmltree",
2343
-
]
2344
-
2345
-
[[package]]
2346
-
name = "fontdb"
2347
-
version = "0.16.2"
2348
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2349
-
checksum = "b0299020c3ef3f60f526a4f64ab4a3d4ce116b1acbf24cdd22da0068e5d81dc3"
2350
-
dependencies = [
2351
-
"fontconfig-parser",
2352
-
"log",
2353
-
"memmap2",
2354
-
"slotmap",
2355
-
"tinyvec",
2356
-
"ttf-parser 0.20.0",
2357
-
]
2358
-
2359
-
[[package]]
2360
-
name = "foreign-types"
2361
-
version = "0.5.0"
2362
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2363
-
checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965"
2364
-
dependencies = [
2365
-
"foreign-types-macros",
2366
-
"foreign-types-shared",
2367
-
]
2368
-
2369
-
[[package]]
2370
-
name = "foreign-types-macros"
2371
-
version = "0.2.3"
2372
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2373
-
checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
2374
-
dependencies = [
2375
-
"proc-macro2",
2376
-
"quote",
2377
-
"syn 2.0.101",
2378
-
]
2379
-
2380
-
[[package]]
2381
-
name = "foreign-types-shared"
2382
-
version = "0.3.1"
2383
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2384
-
checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b"
2385
-
2386
-
[[package]]
2387
-
name = "form_urlencoded"
2388
-
version = "1.2.1"
2389
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2390
-
checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
2391
-
dependencies = [
2392
-
"percent-encoding",
2393
-
]
2394
-
2395
-
[[package]]
2396
-
name = "futures-channel"
2397
-
version = "0.3.31"
2398
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2399
-
checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
2400
-
dependencies = [
2401
-
"futures-core",
2402
-
]
2403
-
2404
-
[[package]]
2405
-
name = "futures-core"
2406
-
version = "0.3.31"
2407
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2408
-
checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
2409
-
2410
-
[[package]]
2411
-
name = "futures-io"
2412
-
version = "0.3.31"
2413
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2414
-
checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"
2415
-
2416
-
[[package]]
2417
-
name = "futures-lite"
2418
-
version = "2.6.0"
2419
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2420
-
checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532"
2421
-
dependencies = [
2422
-
"fastrand",
2423
-
"futures-core",
2424
-
"futures-io",
2425
-
"parking",
2426
-
"pin-project-lite",
2427
-
]
2428
-
2429
-
[[package]]
2430
-
name = "gethostname"
2431
-
version = "0.4.3"
2432
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2433
-
checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818"
2434
-
dependencies = [
2435
-
"libc",
2436
-
"windows-targets 0.48.5",
2437
-
]
2438
-
2439
-
[[package]]
2440
-
name = "getrandom"
2441
-
version = "0.2.16"
2442
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2443
-
checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592"
2444
-
dependencies = [
2445
-
"cfg-if",
2446
-
"js-sys",
2447
-
"libc",
2448
-
"wasi 0.11.0+wasi-snapshot-preview1",
2449
-
"wasm-bindgen",
2450
-
]
2451
-
2452
-
[[package]]
2453
-
name = "getrandom"
2454
-
version = "0.3.3"
2455
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2456
-
checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4"
2457
-
dependencies = [
2458
-
"cfg-if",
2459
-
"libc",
2460
-
"r-efi",
2461
-
"wasi 0.14.2+wasi-0.2.4",
2462
-
]
2463
-
2464
-
[[package]]
2465
-
name = "gif"
2466
-
version = "0.13.1"
2467
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2468
-
checksum = "3fb2d69b19215e18bb912fa30f7ce15846e301408695e44e0ef719f1da9e19f2"
2469
-
dependencies = [
2470
-
"color_quant",
2471
-
"weezl",
2472
-
]
2473
-
2474
-
[[package]]
2475
-
name = "gilrs"
2476
-
version = "0.11.0"
2477
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2478
-
checksum = "bbb2c998745a3c1ac90f64f4f7b3a54219fd3612d7705e7798212935641ed18f"
2479
-
dependencies = [
2480
-
"fnv",
2481
-
"gilrs-core",
2482
-
"log",
2483
-
"uuid",
2484
-
"vec_map",
2485
-
]
2486
-
2487
-
[[package]]
2488
-
name = "gilrs-core"
2489
-
version = "0.6.4"
2490
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2491
-
checksum = "a6d95ae10ce5aa99543a28cf74e41c11f3b9e3c14f0452bbde46024753cd683e"
2492
-
dependencies = [
2493
-
"core-foundation 0.10.0",
2494
-
"inotify",
2495
-
"io-kit-sys",
2496
-
"js-sys",
2497
-
"libc",
2498
-
"libudev-sys",
2499
-
"log",
2500
-
"nix",
2501
-
"uuid",
2502
-
"vec_map",
2503
-
"wasm-bindgen",
2504
-
"web-sys",
2505
-
"windows 0.61.1",
2506
-
]
2507
-
2508
-
[[package]]
2509
-
name = "gl_generator"
2510
-
version = "0.14.0"
2511
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2512
-
checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d"
2513
-
dependencies = [
2514
-
"khronos_api",
2515
-
"log",
2516
-
"xml-rs",
2517
-
]
2518
-
2519
-
[[package]]
2520
-
name = "glam"
2521
-
version = "0.29.3"
2522
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2523
-
checksum = "8babf46d4c1c9d92deac9f7be466f76dfc4482b6452fc5024b5e8daf6ffeb3ee"
2524
-
dependencies = [
2525
-
"bytemuck",
2526
-
"libm",
2527
-
"rand",
2528
-
"serde",
2529
-
]
2530
-
2531
-
[[package]]
2532
-
name = "glam"
2533
-
version = "0.30.3"
2534
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2535
-
checksum = "6b46b9ca4690308844c644e7c634d68792467260e051c8543e0c7871662b3ba7"
2536
-
2537
-
[[package]]
2538
-
name = "glob"
2539
-
version = "0.3.2"
2540
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2541
-
checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2"
2542
-
2543
-
[[package]]
2544
-
name = "glow"
2545
-
version = "0.16.0"
2546
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2547
-
checksum = "c5e5ea60d70410161c8bf5da3fdfeaa1c72ed2c15f8bbb9d19fe3a4fad085f08"
2548
-
dependencies = [
2549
-
"js-sys",
2550
-
"slotmap",
2551
-
"wasm-bindgen",
2552
-
"web-sys",
2553
-
]
2554
-
2555
-
[[package]]
2556
-
name = "gltf"
2557
-
version = "1.4.1"
2558
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2559
-
checksum = "e3ce1918195723ce6ac74e80542c5a96a40c2b26162c1957a5cd70799b8cacf7"
2560
-
dependencies = [
2561
-
"byteorder",
2562
-
"gltf-json",
2563
-
"lazy_static",
2564
-
"serde_json",
2565
-
]
2566
-
2567
-
[[package]]
2568
-
name = "gltf-derive"
2569
-
version = "1.4.1"
2570
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2571
-
checksum = "14070e711538afba5d6c807edb74bcb84e5dbb9211a3bf5dea0dfab5b24f4c51"
2572
-
dependencies = [
2573
-
"inflections",
2574
-
"proc-macro2",
2575
-
"quote",
2576
-
"syn 2.0.101",
2577
-
]
2578
-
2579
-
[[package]]
2580
-
name = "gltf-json"
2581
-
version = "1.4.1"
2582
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2583
-
checksum = "e6176f9d60a7eab0a877e8e96548605dedbde9190a7ae1e80bbcc1c9af03ab14"
2584
-
dependencies = [
2585
-
"gltf-derive",
2586
-
"serde",
2587
-
"serde_derive",
2588
-
"serde_json",
2589
-
]
2590
-
2591
-
[[package]]
2592
-
name = "glutin_wgl_sys"
2593
-
version = "0.6.1"
2594
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2595
-
checksum = "2c4ee00b289aba7a9e5306d57c2d05499b2e5dc427f84ac708bd2c090212cf3e"
2596
-
dependencies = [
2597
-
"gl_generator",
2598
-
]
2599
-
2600
-
[[package]]
2601
-
name = "gpu-alloc"
2602
-
version = "0.6.0"
2603
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2604
-
checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171"
2605
-
dependencies = [
2606
-
"bitflags 2.9.0",
2607
-
"gpu-alloc-types",
2608
-
]
2609
-
2610
-
[[package]]
2611
-
name = "gpu-alloc-types"
2612
-
version = "0.3.0"
2613
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2614
-
checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4"
2615
-
dependencies = [
2616
-
"bitflags 2.9.0",
2617
-
]
2618
-
2619
-
[[package]]
2620
-
name = "gpu-allocator"
2621
-
version = "0.27.0"
2622
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2623
-
checksum = "c151a2a5ef800297b4e79efa4f4bec035c5f51d5ae587287c9b952bdf734cacd"
2624
-
dependencies = [
2625
-
"log",
2626
-
"presser",
2627
-
"thiserror 1.0.69",
2628
-
"windows 0.58.0",
2629
-
]
2630
-
2631
-
[[package]]
2632
-
name = "gpu-descriptor"
2633
-
version = "0.3.1"
2634
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2635
-
checksum = "dcf29e94d6d243368b7a56caa16bc213e4f9f8ed38c4d9557069527b5d5281ca"
2636
-
dependencies = [
2637
-
"bitflags 2.9.0",
2638
-
"gpu-descriptor-types",
2639
-
"hashbrown",
2640
-
]
2641
-
2642
-
[[package]]
2643
-
name = "gpu-descriptor-types"
2644
-
version = "0.2.0"
2645
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2646
-
checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91"
2647
-
dependencies = [
2648
-
"bitflags 2.9.0",
2649
-
]
2650
-
2651
-
[[package]]
2652
-
name = "grid"
2653
-
version = "0.15.0"
2654
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2655
-
checksum = "36119f3a540b086b4e436bb2b588cf98a68863470e0e880f4d0842f112a3183a"
2656
-
2657
-
[[package]]
2658
-
name = "guillotiere"
2659
-
version = "0.6.2"
2660
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2661
-
checksum = "b62d5865c036cb1393e23c50693df631d3f5d7bcca4c04fe4cc0fd592e74a782"
2662
-
dependencies = [
2663
-
"euclid",
2664
-
"svg_fmt",
2665
-
]
2666
-
2667
-
[[package]]
2668
-
name = "half"
2669
-
version = "2.6.0"
2670
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2671
-
checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9"
2672
-
dependencies = [
2673
-
"cfg-if",
2674
-
"crunchy",
2675
-
]
2676
-
2677
-
[[package]]
2678
-
name = "hash32"
2679
-
version = "0.3.1"
2680
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2681
-
checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606"
2682
-
dependencies = [
2683
-
"byteorder",
2684
-
]
2685
-
2686
-
[[package]]
2687
-
name = "hashbrown"
2688
-
version = "0.15.3"
2689
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2690
-
checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3"
2691
-
dependencies = [
2692
-
"equivalent",
2693
-
"foldhash",
2694
-
"serde",
2695
-
]
2696
-
2697
-
[[package]]
2698
-
name = "heapless"
2699
-
version = "0.8.0"
2700
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2701
-
checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad"
2702
-
dependencies = [
2703
-
"hash32",
2704
-
"portable-atomic",
2705
-
"stable_deref_trait",
2706
-
]
2707
-
2708
-
[[package]]
2709
-
name = "heck"
2710
-
version = "0.5.0"
2711
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2712
-
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
2713
-
2714
-
[[package]]
2715
-
name = "hermit-abi"
2716
-
version = "0.4.0"
2717
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2718
-
checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc"
2719
-
2720
-
[[package]]
2721
-
name = "hexasphere"
2722
-
version = "15.1.0"
2723
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2724
-
checksum = "d9c9e718d32b6e6b2b32354e1b0367025efdd0b11d6a740b905ddf5db1074679"
2725
-
dependencies = [
2726
-
"constgebra",
2727
-
"glam 0.29.3",
2728
-
"tinyvec",
2729
-
]
2730
-
2731
-
[[package]]
2732
-
name = "hexf-parse"
2733
-
version = "0.2.1"
2734
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2735
-
checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df"
2736
-
2737
-
[[package]]
2738
-
name = "home"
2739
-
version = "0.5.11"
2740
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2741
-
checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf"
2742
-
dependencies = [
2743
-
"windows-sys 0.59.0",
2744
-
]
2745
-
2746
-
[[package]]
2747
-
name = "icu_collections"
2748
-
version = "2.0.0"
2749
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2750
-
checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47"
2751
-
dependencies = [
2752
-
"displaydoc",
2753
-
"potential_utf",
2754
-
"yoke",
2755
-
"zerofrom",
2756
-
"zerovec",
2757
-
]
2758
-
2759
-
[[package]]
2760
-
name = "icu_locale_core"
2761
-
version = "2.0.0"
2762
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2763
-
checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a"
2764
-
dependencies = [
2765
-
"displaydoc",
2766
-
"litemap",
2767
-
"tinystr",
2768
-
"writeable",
2769
-
"zerovec",
2770
-
]
2771
-
2772
-
[[package]]
2773
-
name = "icu_normalizer"
2774
-
version = "2.0.0"
2775
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2776
-
checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979"
2777
-
dependencies = [
2778
-
"displaydoc",
2779
-
"icu_collections",
2780
-
"icu_normalizer_data",
2781
-
"icu_properties",
2782
-
"icu_provider",
2783
-
"smallvec",
2784
-
"zerovec",
2785
-
]
2786
-
2787
-
[[package]]
2788
-
name = "icu_normalizer_data"
2789
-
version = "2.0.0"
2790
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2791
-
checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3"
2792
-
2793
-
[[package]]
2794
-
name = "icu_properties"
2795
-
version = "2.0.0"
2796
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2797
-
checksum = "2549ca8c7241c82f59c80ba2a6f415d931c5b58d24fb8412caa1a1f02c49139a"
2798
-
dependencies = [
2799
-
"displaydoc",
2800
-
"icu_collections",
2801
-
"icu_locale_core",
2802
-
"icu_properties_data",
2803
-
"icu_provider",
2804
-
"potential_utf",
2805
-
"zerotrie",
2806
-
"zerovec",
2807
-
]
2808
-
2809
-
[[package]]
2810
-
name = "icu_properties_data"
2811
-
version = "2.0.0"
2812
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2813
-
checksum = "8197e866e47b68f8f7d95249e172903bec06004b18b2937f1095d40a0c57de04"
2814
-
2815
-
[[package]]
2816
-
name = "icu_provider"
2817
-
version = "2.0.0"
2818
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2819
-
checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af"
2820
-
dependencies = [
2821
-
"displaydoc",
2822
-
"icu_locale_core",
2823
-
"stable_deref_trait",
2824
-
"tinystr",
2825
-
"writeable",
2826
-
"yoke",
2827
-
"zerofrom",
2828
-
"zerotrie",
2829
-
"zerovec",
2830
-
]
2831
-
2832
-
[[package]]
2833
-
name = "idna"
2834
-
version = "1.0.3"
2835
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2836
-
checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e"
2837
-
dependencies = [
2838
-
"idna_adapter",
2839
-
"smallvec",
2840
-
"utf8_iter",
2841
-
]
2842
-
2843
-
[[package]]
2844
-
name = "idna_adapter"
2845
-
version = "1.2.1"
2846
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2847
-
checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344"
2848
-
dependencies = [
2849
-
"icu_normalizer",
2850
-
"icu_properties",
2851
-
]
2852
-
2853
-
[[package]]
2854
-
name = "image"
2855
-
version = "0.24.9"
2856
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2857
-
checksum = "5690139d2f55868e080017335e4b94cb7414274c74f1669c84fb5feba2c9f69d"
2858
-
dependencies = [
2859
-
"bytemuck",
2860
-
"byteorder",
2861
-
"color_quant",
2862
-
"exr",
2863
-
"gif",
2864
-
"jpeg-decoder",
2865
-
"num-traits",
2866
-
"png",
2867
-
"qoi",
2868
-
"tiff",
2869
-
]
2870
-
2871
-
[[package]]
2872
-
name = "image"
2873
-
version = "0.25.6"
2874
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2875
-
checksum = "db35664ce6b9810857a38a906215e75a9c879f0696556a39f59c62829710251a"
2876
-
dependencies = [
2877
-
"bytemuck",
2878
-
"byteorder-lite",
2879
-
"color_quant",
2880
-
"exr",
2881
-
"gif",
2882
-
"image-webp",
2883
-
"num-traits",
2884
-
"png",
2885
-
"qoi",
2886
-
"ravif",
2887
-
"rayon",
2888
-
"rgb",
2889
-
"tiff",
2890
-
"zune-core",
2891
-
"zune-jpeg",
2892
-
]
2893
-
2894
-
[[package]]
2895
-
name = "image-webp"
2896
-
version = "0.2.1"
2897
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2898
-
checksum = "b77d01e822461baa8409e156015a1d91735549f0f2c17691bd2d996bef238f7f"
2899
-
dependencies = [
2900
-
"byteorder-lite",
2901
-
"quick-error",
2902
-
]
2903
-
2904
-
[[package]]
2905
-
name = "imgref"
2906
-
version = "1.11.0"
2907
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2908
-
checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408"
2909
-
2910
-
[[package]]
2911
-
name = "immutable-chunkmap"
2912
-
version = "2.0.6"
2913
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2914
-
checksum = "12f97096f508d54f8f8ab8957862eee2ccd628847b6217af1a335e1c44dee578"
2915
-
dependencies = [
2916
-
"arrayvec",
2917
-
]
2918
-
2919
-
[[package]]
2920
-
name = "indexmap"
2921
-
version = "2.9.0"
2922
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2923
-
checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e"
2924
-
dependencies = [
2925
-
"equivalent",
2926
-
"hashbrown",
2927
-
"serde",
2928
-
]
2929
-
2930
-
[[package]]
2931
-
name = "inflections"
2932
-
version = "1.1.1"
2933
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2934
-
checksum = "a257582fdcde896fd96463bf2d40eefea0580021c0712a0e2b028b60b47a837a"
2935
-
2936
-
[[package]]
2937
-
name = "inotify"
2938
-
version = "0.11.0"
2939
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2940
-
checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3"
2941
-
dependencies = [
2942
-
"bitflags 2.9.0",
2943
-
"inotify-sys",
2944
-
"libc",
2945
-
]
2946
-
2947
-
[[package]]
2948
-
name = "inotify-sys"
2949
-
version = "0.1.5"
2950
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2951
-
checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb"
2952
-
dependencies = [
2953
-
"libc",
2954
-
]
2955
-
2956
-
[[package]]
2957
-
name = "interpolate_name"
2958
-
version = "0.2.4"
2959
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2960
-
checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60"
2961
-
dependencies = [
2962
-
"proc-macro2",
2963
-
"quote",
2964
-
"syn 2.0.101",
2965
-
]
2966
-
2967
-
[[package]]
2968
-
name = "io-kit-sys"
2969
-
version = "0.4.1"
2970
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2971
-
checksum = "617ee6cf8e3f66f3b4ea67a4058564628cde41901316e19f559e14c7c72c5e7b"
2972
-
dependencies = [
2973
-
"core-foundation-sys",
2974
-
"mach2",
2975
-
]
2976
-
2977
-
[[package]]
2978
-
name = "itertools"
2979
-
version = "0.12.1"
2980
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2981
-
checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569"
2982
-
dependencies = [
2983
-
"either",
2984
-
]
2985
-
2986
-
[[package]]
2987
-
name = "itertools"
2988
-
version = "0.13.0"
2989
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2990
-
checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186"
2991
-
dependencies = [
2992
-
"either",
2993
-
]
2994
-
2995
-
[[package]]
2996
-
name = "itertools"
2997
-
version = "0.14.0"
2998
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2999
-
checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285"
3000
-
dependencies = [
3001
-
"either",
3002
-
]
3003
-
3004
-
[[package]]
3005
-
name = "itoa"
3006
-
version = "1.0.15"
3007
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3008
-
checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
3009
-
3010
-
[[package]]
3011
-
name = "jni"
3012
-
version = "0.21.1"
3013
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3014
-
checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97"
3015
-
dependencies = [
3016
-
"cesu8",
3017
-
"cfg-if",
3018
-
"combine",
3019
-
"jni-sys",
3020
-
"log",
3021
-
"thiserror 1.0.69",
3022
-
"walkdir",
3023
-
"windows-sys 0.45.0",
3024
-
]
3025
-
3026
-
[[package]]
3027
-
name = "jni-sys"
3028
-
version = "0.3.0"
3029
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3030
-
checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
3031
-
3032
-
[[package]]
3033
-
name = "jobserver"
3034
-
version = "0.1.33"
3035
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3036
-
checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a"
3037
-
dependencies = [
3038
-
"getrandom 0.3.3",
3039
-
"libc",
3040
-
]
3041
-
3042
-
[[package]]
3043
-
name = "jpeg-decoder"
3044
-
version = "0.3.1"
3045
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3046
-
checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0"
3047
-
dependencies = [
3048
-
"rayon",
3049
-
]
3050
-
3051
-
[[package]]
3052
-
name = "js-sys"
3053
-
version = "0.3.77"
3054
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3055
-
checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f"
3056
-
dependencies = [
3057
-
"once_cell",
3058
-
"wasm-bindgen",
3059
-
]
3060
-
3061
-
[[package]]
3062
-
name = "khronos-egl"
3063
-
version = "6.0.0"
3064
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3065
-
checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76"
3066
-
dependencies = [
3067
-
"libc",
3068
-
"libloading",
3069
-
"pkg-config",
3070
-
]
3071
-
3072
-
[[package]]
3073
-
name = "khronos_api"
3074
-
version = "3.1.0"
3075
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3076
-
checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc"
3077
-
3078
-
[[package]]
3079
-
name = "ktx2"
3080
-
version = "0.3.0"
3081
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3082
-
checksum = "87d65e08a9ec02e409d27a0139eaa6b9756b4d81fe7cde71f6941a83730ce838"
3083
-
dependencies = [
3084
-
"bitflags 1.3.2",
3085
-
]
3086
-
3087
-
[[package]]
3088
-
name = "lazy_static"
3089
-
version = "1.5.0"
3090
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3091
-
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
3092
-
3093
-
[[package]]
3094
-
name = "lebe"
3095
-
version = "0.5.2"
3096
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3097
-
checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8"
3098
-
3099
-
[[package]]
3100
-
name = "lewton"
3101
-
version = "0.10.2"
3102
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3103
-
checksum = "777b48df9aaab155475a83a7df3070395ea1ac6902f5cd062b8f2b028075c030"
3104
-
dependencies = [
3105
-
"byteorder",
3106
-
"ogg",
3107
-
"tinyvec",
3108
-
]
3109
-
3110
-
[[package]]
3111
-
name = "libc"
3112
-
version = "0.2.172"
3113
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3114
-
checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa"
3115
-
3116
-
[[package]]
3117
-
name = "libfuzzer-sys"
3118
-
version = "0.4.9"
3119
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3120
-
checksum = "cf78f52d400cf2d84a3a973a78a592b4adc535739e0a5597a0da6f0c357adc75"
3121
-
dependencies = [
3122
-
"arbitrary",
3123
-
"cc",
3124
-
]
3125
-
3126
-
[[package]]
3127
-
name = "libloading"
3128
-
version = "0.8.6"
3129
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3130
-
checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34"
3131
-
dependencies = [
3132
-
"cfg-if",
3133
-
"windows-targets 0.52.6",
3134
-
]
3135
-
3136
-
[[package]]
3137
-
name = "libm"
3138
-
version = "0.2.15"
3139
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3140
-
checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de"
3141
-
3142
-
[[package]]
3143
-
name = "libredox"
3144
-
version = "0.1.3"
3145
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3146
-
checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d"
3147
-
dependencies = [
3148
-
"bitflags 2.9.0",
3149
-
"libc",
3150
-
"redox_syscall 0.5.12",
3151
-
]
3152
-
3153
-
[[package]]
3154
-
name = "libudev-sys"
3155
-
version = "0.1.4"
3156
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3157
-
checksum = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324"
3158
-
dependencies = [
3159
-
"libc",
3160
-
"pkg-config",
3161
-
]
3162
-
3163
-
[[package]]
3164
-
name = "libz-rs-sys"
3165
-
version = "0.5.0"
3166
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3167
-
checksum = "6489ca9bd760fe9642d7644e827b0c9add07df89857b0416ee15c1cc1a3b8c5a"
3168
-
dependencies = [
3169
-
"zlib-rs",
3170
-
]
3171
-
3172
-
[[package]]
3173
-
name = "linux-raw-sys"
3174
-
version = "0.4.15"
3175
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3176
-
checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
3177
-
3178
-
[[package]]
3179
-
name = "litemap"
3180
-
version = "0.8.0"
3181
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3182
-
checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956"
3183
-
3184
-
[[package]]
3185
-
name = "litrs"
3186
-
version = "0.4.1"
3187
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3188
-
checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5"
3189
-
3190
-
[[package]]
3191
-
name = "lock_api"
3192
-
version = "0.4.12"
3193
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3194
-
checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"
3195
-
dependencies = [
3196
-
"autocfg",
3197
-
"scopeguard",
3198
-
]
3199
-
3200
-
[[package]]
3201
-
name = "log"
3202
-
version = "0.4.27"
3203
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3204
-
checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
3205
-
3206
-
[[package]]
3207
-
name = "loop9"
3208
-
version = "0.1.5"
3209
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3210
-
checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062"
3211
-
dependencies = [
3212
-
"imgref",
3213
-
]
3214
-
3215
-
[[package]]
3216
-
name = "mach2"
3217
-
version = "0.4.2"
3218
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3219
-
checksum = "19b955cdeb2a02b9117f121ce63aa52d08ade45de53e48fe6a38b39c10f6f709"
3220
-
dependencies = [
3221
-
"libc",
3222
-
]
3223
-
3224
-
[[package]]
3225
-
name = "malloc_buf"
3226
-
version = "0.0.6"
3227
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3228
-
checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
3229
-
dependencies = [
3230
-
"libc",
3231
-
]
3232
-
3233
-
[[package]]
3234
-
name = "matchers"
3235
-
version = "0.1.0"
3236
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3237
-
checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
3238
-
dependencies = [
3239
-
"regex-automata 0.1.10",
3240
-
]
3241
-
3242
-
[[package]]
3243
-
name = "matrixmultiply"
3244
-
version = "0.3.9"
3245
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3246
-
checksum = "9380b911e3e96d10c1f415da0876389aaf1b56759054eeb0de7df940c456ba1a"
3247
-
dependencies = [
3248
-
"autocfg",
3249
-
"rawpointer",
3250
-
]
3251
-
3252
-
[[package]]
3253
-
name = "maybe-rayon"
3254
-
version = "0.1.1"
3255
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3256
-
checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519"
3257
-
dependencies = [
3258
-
"cfg-if",
3259
-
"rayon",
3260
-
]
3261
-
3262
-
[[package]]
3263
-
name = "memchr"
3264
-
version = "2.7.4"
3265
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3266
-
checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
3267
-
3268
-
[[package]]
3269
-
name = "memmap2"
3270
-
version = "0.9.5"
3271
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3272
-
checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f"
3273
-
dependencies = [
3274
-
"libc",
3275
-
]
3276
-
3277
-
[[package]]
3278
-
name = "mesh-tools"
3279
-
version = "0.1.0"
3280
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3281
-
checksum = "9b07c5e96a6080555d650321a81c7e3cd68b08261f63ee5db2b069a50f5ce7db"
3282
-
dependencies = [
3283
-
"base64 0.13.1",
3284
-
"byteorder",
3285
-
"image 0.24.9",
3286
-
"nalgebra",
3287
-
"serde",
3288
-
"serde_json",
3289
-
"thiserror 1.0.69",
3290
-
"uuid",
3291
-
]
3292
-
3293
-
[[package]]
3294
-
name = "metal"
3295
-
version = "0.31.0"
3296
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3297
-
checksum = "f569fb946490b5743ad69813cb19629130ce9374034abe31614a36402d18f99e"
3298
-
dependencies = [
3299
-
"bitflags 2.9.0",
3300
-
"block",
3301
-
"core-graphics-types",
3302
-
"foreign-types",
3303
-
"log",
3304
-
"objc",
3305
-
"paste",
3306
-
]
3307
-
3308
-
[[package]]
3309
-
name = "minimal-lexical"
3310
-
version = "0.2.1"
3311
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3312
-
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
3313
-
3314
-
[[package]]
3315
-
name = "miniz_oxide"
3316
-
version = "0.8.8"
3317
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3318
-
checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a"
3319
-
dependencies = [
3320
-
"adler2",
3321
-
"simd-adler32",
3322
-
]
3323
-
3324
-
[[package]]
3325
-
name = "naga"
3326
-
version = "24.0.0"
3327
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3328
-
checksum = "e380993072e52eef724eddfcde0ed013b0c023c3f0417336ed041aa9f076994e"
3329
-
dependencies = [
3330
-
"arrayvec",
3331
-
"bit-set 0.8.0",
3332
-
"bitflags 2.9.0",
3333
-
"cfg_aliases",
3334
-
"codespan-reporting",
3335
-
"hexf-parse",
3336
-
"indexmap",
3337
-
"log",
3338
-
"pp-rs",
3339
-
"rustc-hash",
3340
-
"spirv",
3341
-
"strum",
3342
-
"termcolor",
3343
-
"thiserror 2.0.12",
3344
-
"unicode-xid",
3345
-
]
3346
-
3347
-
[[package]]
3348
-
name = "naga_oil"
3349
-
version = "0.17.0"
3350
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3351
-
checksum = "0ca507a365f886f95f74420361b75442a3709c747a8a6e8b6c45b8667f45a82c"
3352
-
dependencies = [
3353
-
"bit-set 0.5.3",
3354
-
"codespan-reporting",
3355
-
"data-encoding",
3356
-
"indexmap",
3357
-
"naga",
3358
-
"once_cell",
3359
-
"regex",
3360
-
"regex-syntax 0.8.5",
3361
-
"rustc-hash",
3362
-
"thiserror 1.0.69",
3363
-
"tracing",
3364
-
"unicode-ident",
3365
-
]
3366
-
3367
-
[[package]]
3368
-
name = "nalgebra"
3369
-
version = "0.31.4"
3370
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3371
-
checksum = "20bd243ab3dbb395b39ee730402d2e5405e448c75133ec49cc977762c4cba3d1"
3372
-
dependencies = [
3373
-
"approx",
3374
-
"matrixmultiply",
3375
-
"nalgebra-macros",
3376
-
"num-complex",
3377
-
"num-rational",
3378
-
"num-traits",
3379
-
"simba",
3380
-
"typenum",
3381
-
]
3382
-
3383
-
[[package]]
3384
-
name = "nalgebra-macros"
3385
-
version = "0.1.0"
3386
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3387
-
checksum = "01fcc0b8149b4632adc89ac3b7b31a12fb6099a0317a4eb2ebff574ef7de7218"
3388
-
dependencies = [
3389
-
"proc-macro2",
3390
-
"quote",
3391
-
"syn 1.0.109",
3392
-
]
3393
-
3394
-
[[package]]
3395
-
name = "ndk"
3396
-
version = "0.8.0"
3397
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3398
-
checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7"
3399
-
dependencies = [
3400
-
"bitflags 2.9.0",
3401
-
"jni-sys",
3402
-
"log",
3403
-
"ndk-sys 0.5.0+25.2.9519653",
3404
-
"num_enum",
3405
-
"thiserror 1.0.69",
3406
-
]
3407
-
3408
-
[[package]]
3409
-
name = "ndk"
3410
-
version = "0.9.0"
3411
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3412
-
checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4"
3413
-
dependencies = [
3414
-
"bitflags 2.9.0",
3415
-
"jni-sys",
3416
-
"log",
3417
-
"ndk-sys 0.6.0+11769913",
3418
-
"num_enum",
3419
-
"raw-window-handle",
3420
-
"thiserror 1.0.69",
3421
-
]
3422
-
3423
-
[[package]]
3424
-
name = "ndk-context"
3425
-
version = "0.1.1"
3426
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3427
-
checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
3428
-
3429
-
[[package]]
3430
-
name = "ndk-sys"
3431
-
version = "0.5.0+25.2.9519653"
3432
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3433
-
checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691"
3434
-
dependencies = [
3435
-
"jni-sys",
3436
-
]
3437
-
3438
-
[[package]]
3439
-
name = "ndk-sys"
3440
-
version = "0.6.0+11769913"
3441
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3442
-
checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873"
3443
-
dependencies = [
3444
-
"jni-sys",
3445
-
]
3446
-
3447
-
[[package]]
3448
-
name = "new_debug_unreachable"
3449
-
version = "1.0.6"
3450
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3451
-
checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086"
3452
-
3453
-
[[package]]
3454
-
name = "nix"
3455
-
version = "0.29.0"
3456
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3457
-
checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46"
3458
-
dependencies = [
3459
-
"bitflags 2.9.0",
3460
-
"cfg-if",
3461
-
"cfg_aliases",
3462
-
"libc",
3463
-
]
3464
-
3465
-
[[package]]
3466
-
name = "nohash-hasher"
3467
-
version = "0.2.0"
3468
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3469
-
checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451"
3470
-
3471
-
[[package]]
3472
-
name = "nom"
3473
-
version = "7.1.3"
3474
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3475
-
checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
3476
-
dependencies = [
3477
-
"memchr",
3478
-
"minimal-lexical",
3479
-
]
3480
-
3481
-
[[package]]
3482
-
name = "nonmax"
3483
-
version = "0.5.5"
3484
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3485
-
checksum = "610a5acd306ec67f907abe5567859a3c693fb9886eb1f012ab8f2a47bef3db51"
3486
-
3487
-
[[package]]
3488
-
name = "noop_proc_macro"
3489
-
version = "0.3.0"
3490
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3491
-
checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8"
3492
-
3493
-
[[package]]
3494
-
name = "ntapi"
3495
-
version = "0.4.1"
3496
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3497
-
checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4"
3498
-
dependencies = [
3499
-
"winapi",
3500
-
]
3501
-
3502
-
[[package]]
3503
-
name = "nu-ansi-term"
3504
-
version = "0.46.0"
3505
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3506
-
checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
3507
-
dependencies = [
3508
-
"overload",
3509
-
"winapi",
3510
-
]
3511
-
3512
-
[[package]]
3513
-
name = "num-bigint"
3514
-
version = "0.4.6"
3515
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3516
-
checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
3517
-
dependencies = [
3518
-
"num-integer",
3519
-
"num-traits",
3520
-
]
3521
-
3522
-
[[package]]
3523
-
name = "num-complex"
3524
-
version = "0.4.6"
3525
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3526
-
checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495"
3527
-
dependencies = [
3528
-
"num-traits",
3529
-
]
3530
-
3531
-
[[package]]
3532
-
name = "num-derive"
3533
-
version = "0.4.2"
3534
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3535
-
checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202"
3536
-
dependencies = [
3537
-
"proc-macro2",
3538
-
"quote",
3539
-
"syn 2.0.101",
3540
-
]
3541
-
3542
-
[[package]]
3543
-
name = "num-integer"
3544
-
version = "0.1.46"
3545
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3546
-
checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
3547
-
dependencies = [
3548
-
"num-traits",
3549
-
]
3550
-
3551
-
[[package]]
3552
-
name = "num-rational"
3553
-
version = "0.4.2"
3554
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3555
-
checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824"
3556
-
dependencies = [
3557
-
"num-bigint",
3558
-
"num-integer",
3559
-
"num-traits",
3560
-
]
3561
-
3562
-
[[package]]
3563
-
name = "num-traits"
3564
-
version = "0.2.19"
3565
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3566
-
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
3567
-
dependencies = [
3568
-
"autocfg",
3569
-
"libm",
3570
-
]
3571
-
3572
-
[[package]]
3573
-
name = "num_enum"
3574
-
version = "0.7.3"
3575
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3576
-
checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179"
3577
-
dependencies = [
3578
-
"num_enum_derive",
3579
-
]
3580
-
3581
-
[[package]]
3582
-
name = "num_enum_derive"
3583
-
version = "0.7.3"
3584
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3585
-
checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56"
3586
-
dependencies = [
3587
-
"proc-macro-crate",
3588
-
"proc-macro2",
3589
-
"quote",
3590
-
"syn 2.0.101",
3591
-
]
3592
-
3593
-
[[package]]
3594
-
name = "objc"
3595
-
version = "0.2.7"
3596
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3597
-
checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
3598
-
dependencies = [
3599
-
"malloc_buf",
3600
-
]
3601
-
3602
-
[[package]]
3603
-
name = "objc-sys"
3604
-
version = "0.3.5"
3605
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3606
-
checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310"
3607
-
3608
-
[[package]]
3609
-
name = "objc2"
3610
-
version = "0.5.2"
3611
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3612
-
checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804"
3613
-
dependencies = [
3614
-
"objc-sys",
3615
-
"objc2-encode",
3616
-
]
3617
-
3618
-
[[package]]
3619
-
name = "objc2"
3620
-
version = "0.6.1"
3621
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3622
-
checksum = "88c6597e14493ab2e44ce58f2fdecf095a51f12ca57bec060a11c57332520551"
3623
-
dependencies = [
3624
-
"objc2-encode",
3625
-
]
3626
-
3627
-
[[package]]
3628
-
name = "objc2-app-kit"
3629
-
version = "0.2.2"
3630
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3631
-
checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff"
3632
-
dependencies = [
3633
-
"bitflags 2.9.0",
3634
-
"block2",
3635
-
"libc",
3636
-
"objc2 0.5.2",
3637
-
"objc2-core-data",
3638
-
"objc2-core-image",
3639
-
"objc2-foundation 0.2.2",
3640
-
"objc2-quartz-core",
3641
-
]
3642
-
3643
-
[[package]]
3644
-
name = "objc2-app-kit"
3645
-
version = "0.3.1"
3646
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3647
-
checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc"
3648
-
dependencies = [
3649
-
"bitflags 2.9.0",
3650
-
"objc2 0.6.1",
3651
-
"objc2-core-graphics",
3652
-
"objc2-foundation 0.3.1",
3653
-
]
3654
-
3655
-
[[package]]
3656
-
name = "objc2-cloud-kit"
3657
-
version = "0.2.2"
3658
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3659
-
checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009"
3660
-
dependencies = [
3661
-
"bitflags 2.9.0",
3662
-
"block2",
3663
-
"objc2 0.5.2",
3664
-
"objc2-core-location",
3665
-
"objc2-foundation 0.2.2",
3666
-
]
3667
-
3668
-
[[package]]
3669
-
name = "objc2-contacts"
3670
-
version = "0.2.2"
3671
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3672
-
checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889"
3673
-
dependencies = [
3674
-
"block2",
3675
-
"objc2 0.5.2",
3676
-
"objc2-foundation 0.2.2",
3677
-
]
3678
-
3679
-
[[package]]
3680
-
name = "objc2-core-data"
3681
-
version = "0.2.2"
3682
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3683
-
checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef"
3684
-
dependencies = [
3685
-
"bitflags 2.9.0",
3686
-
"block2",
3687
-
"objc2 0.5.2",
3688
-
"objc2-foundation 0.2.2",
3689
-
]
3690
-
3691
-
[[package]]
3692
-
name = "objc2-core-foundation"
3693
-
version = "0.3.1"
3694
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3695
-
checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166"
3696
-
dependencies = [
3697
-
"bitflags 2.9.0",
3698
-
"dispatch2",
3699
-
"objc2 0.6.1",
3700
-
]
3701
-
3702
-
[[package]]
3703
-
name = "objc2-core-graphics"
3704
-
version = "0.3.1"
3705
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3706
-
checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4"
3707
-
dependencies = [
3708
-
"bitflags 2.9.0",
3709
-
"dispatch2",
3710
-
"objc2 0.6.1",
3711
-
"objc2-core-foundation",
3712
-
"objc2-io-surface",
3713
-
]
3714
-
3715
-
[[package]]
3716
-
name = "objc2-core-image"
3717
-
version = "0.2.2"
3718
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3719
-
checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80"
3720
-
dependencies = [
3721
-
"block2",
3722
-
"objc2 0.5.2",
3723
-
"objc2-foundation 0.2.2",
3724
-
"objc2-metal",
3725
-
]
3726
-
3727
-
[[package]]
3728
-
name = "objc2-core-location"
3729
-
version = "0.2.2"
3730
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3731
-
checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781"
3732
-
dependencies = [
3733
-
"block2",
3734
-
"objc2 0.5.2",
3735
-
"objc2-contacts",
3736
-
"objc2-foundation 0.2.2",
3737
-
]
3738
-
3739
-
[[package]]
3740
-
name = "objc2-encode"
3741
-
version = "4.1.0"
3742
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3743
-
checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33"
3744
-
3745
-
[[package]]
3746
-
name = "objc2-foundation"
3747
-
version = "0.2.2"
3748
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3749
-
checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8"
3750
-
dependencies = [
3751
-
"bitflags 2.9.0",
3752
-
"block2",
3753
-
"dispatch",
3754
-
"libc",
3755
-
"objc2 0.5.2",
3756
-
]
3757
-
3758
-
[[package]]
3759
-
name = "objc2-foundation"
3760
-
version = "0.3.1"
3761
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3762
-
checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c"
3763
-
dependencies = [
3764
-
"bitflags 2.9.0",
3765
-
"objc2 0.6.1",
3766
-
"objc2-core-foundation",
3767
-
]
3768
-
3769
-
[[package]]
3770
-
name = "objc2-io-surface"
3771
-
version = "0.3.1"
3772
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3773
-
checksum = "7282e9ac92529fa3457ce90ebb15f4ecbc383e8338060960760fa2cf75420c3c"
3774
-
dependencies = [
3775
-
"bitflags 2.9.0",
3776
-
"objc2 0.6.1",
3777
-
"objc2-core-foundation",
3778
-
]
3779
-
3780
-
[[package]]
3781
-
name = "objc2-link-presentation"
3782
-
version = "0.2.2"
3783
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3784
-
checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398"
3785
-
dependencies = [
3786
-
"block2",
3787
-
"objc2 0.5.2",
3788
-
"objc2-app-kit 0.2.2",
3789
-
"objc2-foundation 0.2.2",
3790
-
]
3791
-
3792
-
[[package]]
3793
-
name = "objc2-metal"
3794
-
version = "0.2.2"
3795
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3796
-
checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6"
3797
-
dependencies = [
3798
-
"bitflags 2.9.0",
3799
-
"block2",
3800
-
"objc2 0.5.2",
3801
-
"objc2-foundation 0.2.2",
3802
-
]
3803
-
3804
-
[[package]]
3805
-
name = "objc2-quartz-core"
3806
-
version = "0.2.2"
3807
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3808
-
checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a"
3809
-
dependencies = [
3810
-
"bitflags 2.9.0",
3811
-
"block2",
3812
-
"objc2 0.5.2",
3813
-
"objc2-foundation 0.2.2",
3814
-
"objc2-metal",
3815
-
]
3816
-
3817
-
[[package]]
3818
-
name = "objc2-symbols"
3819
-
version = "0.2.2"
3820
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3821
-
checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc"
3822
-
dependencies = [
3823
-
"objc2 0.5.2",
3824
-
"objc2-foundation 0.2.2",
3825
-
]
3826
-
3827
-
[[package]]
3828
-
name = "objc2-ui-kit"
3829
-
version = "0.2.2"
3830
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3831
-
checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f"
3832
-
dependencies = [
3833
-
"bitflags 2.9.0",
3834
-
"block2",
3835
-
"objc2 0.5.2",
3836
-
"objc2-cloud-kit",
3837
-
"objc2-core-data",
3838
-
"objc2-core-image",
3839
-
"objc2-core-location",
3840
-
"objc2-foundation 0.2.2",
3841
-
"objc2-link-presentation",
3842
-
"objc2-quartz-core",
3843
-
"objc2-symbols",
3844
-
"objc2-uniform-type-identifiers",
3845
-
"objc2-user-notifications",
3846
-
]
3847
-
3848
-
[[package]]
3849
-
name = "objc2-uniform-type-identifiers"
3850
-
version = "0.2.2"
3851
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3852
-
checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe"
3853
-
dependencies = [
3854
-
"block2",
3855
-
"objc2 0.5.2",
3856
-
"objc2-foundation 0.2.2",
3857
-
]
3858
-
3859
-
[[package]]
3860
-
name = "objc2-user-notifications"
3861
-
version = "0.2.2"
3862
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3863
-
checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3"
3864
-
dependencies = [
3865
-
"bitflags 2.9.0",
3866
-
"block2",
3867
-
"objc2 0.5.2",
3868
-
"objc2-core-location",
3869
-
"objc2-foundation 0.2.2",
3870
-
]
3871
-
3872
-
[[package]]
3873
-
name = "oboe"
3874
-
version = "0.6.1"
3875
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3876
-
checksum = "e8b61bebd49e5d43f5f8cc7ee2891c16e0f41ec7954d36bcb6c14c5e0de867fb"
3877
-
dependencies = [
3878
-
"jni",
3879
-
"ndk 0.8.0",
3880
-
"ndk-context",
3881
-
"num-derive",
3882
-
"num-traits",
3883
-
"oboe-sys",
3884
-
]
3885
-
3886
-
[[package]]
3887
-
name = "oboe-sys"
3888
-
version = "0.6.1"
3889
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3890
-
checksum = "6c8bb09a4a2b1d668170cfe0a7d5bc103f8999fb316c98099b6a9939c9f2e79d"
3891
-
dependencies = [
3892
-
"cc",
3893
-
]
3894
-
3895
-
[[package]]
3896
-
name = "offset-allocator"
3897
-
version = "0.2.0"
3898
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3899
-
checksum = "e234d535da3521eb95106f40f0b73483d80bfb3aacf27c40d7e2b72f1a3e00a2"
3900
-
dependencies = [
3901
-
"log",
3902
-
"nonmax",
3903
-
]
3904
-
3905
-
[[package]]
3906
-
name = "ogg"
3907
-
version = "0.8.0"
3908
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3909
-
checksum = "6951b4e8bf21c8193da321bcce9c9dd2e13c858fe078bf9054a288b419ae5d6e"
3910
-
dependencies = [
3911
-
"byteorder",
3912
-
]
3913
-
3914
-
[[package]]
3915
-
name = "once_cell"
3916
-
version = "1.21.3"
3917
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3918
-
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
3919
-
3920
-
[[package]]
3921
-
name = "orbclient"
3922
-
version = "0.3.48"
3923
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3924
-
checksum = "ba0b26cec2e24f08ed8bb31519a9333140a6599b867dac464bb150bdb796fd43"
3925
-
dependencies = [
3926
-
"libredox",
3927
-
]
3928
-
3929
-
[[package]]
3930
-
name = "ordered-float"
3931
-
version = "4.6.0"
3932
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3933
-
checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951"
3934
-
dependencies = [
3935
-
"num-traits",
3936
-
]
3937
-
3938
-
[[package]]
3939
-
name = "overload"
3940
-
version = "0.1.1"
3941
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3942
-
checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
3943
-
3944
-
[[package]]
3945
-
name = "owned_ttf_parser"
3946
-
version = "0.25.0"
3947
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3948
-
checksum = "22ec719bbf3b2a81c109a4e20b1f129b5566b7dce654bc3872f6a05abf82b2c4"
3949
-
dependencies = [
3950
-
"ttf-parser 0.25.1",
3951
-
]
3952
-
3953
-
[[package]]
3954
-
name = "owo-colors"
3955
-
version = "4.2.0"
3956
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3957
-
checksum = "1036865bb9422d3300cf723f657c2851d0e9ab12567854b1f4eba3d77decf564"
3958
-
3959
-
[[package]]
3960
-
name = "parking"
3961
-
version = "2.2.1"
3962
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3963
-
checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba"
3964
-
3965
-
[[package]]
3966
-
name = "parking_lot"
3967
-
version = "0.12.3"
3968
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3969
-
checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"
3970
-
dependencies = [
3971
-
"lock_api",
3972
-
"parking_lot_core",
3973
-
]
3974
-
3975
-
[[package]]
3976
-
name = "parking_lot_core"
3977
-
version = "0.9.10"
3978
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3979
-
checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
3980
-
dependencies = [
3981
-
"cfg-if",
3982
-
"libc",
3983
-
"redox_syscall 0.5.12",
3984
-
"smallvec",
3985
-
"windows-targets 0.52.6",
3986
-
]
3987
-
3988
-
[[package]]
3989
-
name = "paste"
3990
-
version = "1.0.15"
3991
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3992
-
checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
3993
-
3994
-
[[package]]
3995
-
name = "percent-encoding"
3996
-
version = "2.3.1"
3997
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3998
-
checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
3999
-
4000
-
[[package]]
4001
-
name = "petgraph"
4002
-
version = "0.7.1"
4003
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4004
-
checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772"
4005
-
dependencies = [
4006
-
"fixedbitset",
4007
-
"indexmap",
4008
-
"serde",
4009
-
"serde_derive",
4010
-
]
4011
-
4012
-
[[package]]
4013
-
name = "pin-project"
4014
-
version = "1.1.10"
4015
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4016
-
checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a"
4017
-
dependencies = [
4018
-
"pin-project-internal",
4019
-
]
4020
-
4021
-
[[package]]
4022
-
name = "pin-project-internal"
4023
-
version = "1.1.10"
4024
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4025
-
checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861"
4026
-
dependencies = [
4027
-
"proc-macro2",
4028
-
"quote",
4029
-
"syn 2.0.101",
4030
-
]
4031
-
4032
-
[[package]]
4033
-
name = "pin-project-lite"
4034
-
version = "0.2.16"
4035
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4036
-
checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
4037
-
4038
-
[[package]]
4039
-
name = "piper"
4040
-
version = "0.2.4"
4041
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4042
-
checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066"
4043
-
dependencies = [
4044
-
"atomic-waker",
4045
-
"fastrand",
4046
-
"futures-io",
4047
-
]
4048
-
4049
-
[[package]]
4050
-
name = "pkg-config"
4051
-
version = "0.3.32"
4052
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4053
-
checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
4054
-
4055
-
[[package]]
4056
-
name = "png"
4057
-
version = "0.17.16"
4058
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4059
-
checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526"
4060
-
dependencies = [
4061
-
"bitflags 1.3.2",
4062
-
"crc32fast",
4063
-
"fdeflate",
4064
-
"flate2",
4065
-
"miniz_oxide",
4066
-
]
4067
-
4068
-
[[package]]
4069
-
name = "polling"
4070
-
version = "3.7.4"
4071
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4072
-
checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f"
4073
-
dependencies = [
4074
-
"cfg-if",
4075
-
"concurrent-queue",
4076
-
"hermit-abi",
4077
-
"pin-project-lite",
4078
-
"rustix",
4079
-
"tracing",
4080
-
"windows-sys 0.59.0",
4081
-
]
4082
-
4083
-
[[package]]
4084
-
name = "portable-atomic"
4085
-
version = "1.11.0"
4086
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4087
-
checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e"
4088
-
4089
-
[[package]]
4090
-
name = "portable-atomic-util"
4091
-
version = "0.2.4"
4092
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4093
-
checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507"
4094
-
dependencies = [
4095
-
"portable-atomic",
4096
-
]
4097
-
4098
-
[[package]]
4099
-
name = "potential_utf"
4100
-
version = "0.1.2"
4101
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4102
-
checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585"
4103
-
dependencies = [
4104
-
"zerovec",
4105
-
]
4106
-
4107
-
[[package]]
4108
-
name = "pp-rs"
4109
-
version = "0.2.1"
4110
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4111
-
checksum = "bb458bb7f6e250e6eb79d5026badc10a3ebb8f9a15d1fff0f13d17c71f4d6dee"
4112
-
dependencies = [
4113
-
"unicode-xid",
4114
-
]
4115
-
4116
-
[[package]]
4117
-
name = "ppv-lite86"
4118
-
version = "0.2.21"
4119
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4120
-
checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
4121
-
dependencies = [
4122
-
"zerocopy",
4123
-
]
4124
-
4125
-
[[package]]
4126
-
name = "presser"
4127
-
version = "0.3.1"
4128
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4129
-
checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa"
4130
-
4131
-
[[package]]
4132
-
name = "prettyplease"
4133
-
version = "0.2.32"
4134
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4135
-
checksum = "664ec5419c51e34154eec046ebcba56312d5a2fc3b09a06da188e1ad21afadf6"
4136
-
dependencies = [
4137
-
"proc-macro2",
4138
-
"syn 2.0.101",
4139
-
]
4140
-
4141
-
[[package]]
4142
-
name = "proc-macro-crate"
4143
-
version = "3.3.0"
4144
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4145
-
checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35"
4146
-
dependencies = [
4147
-
"toml_edit",
4148
-
]
4149
-
4150
-
[[package]]
4151
-
name = "proc-macro2"
4152
-
version = "1.0.95"
4153
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4154
-
checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778"
4155
-
dependencies = [
4156
-
"unicode-ident",
4157
-
]
4158
-
4159
-
[[package]]
4160
-
name = "profiling"
4161
-
version = "1.0.16"
4162
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4163
-
checksum = "afbdc74edc00b6f6a218ca6a5364d6226a259d4b8ea1af4a0ea063f27e179f4d"
4164
-
dependencies = [
4165
-
"profiling-procmacros",
4166
-
]
4167
-
4168
-
[[package]]
4169
-
name = "profiling-procmacros"
4170
-
version = "1.0.16"
4171
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4172
-
checksum = "a65f2e60fbf1063868558d69c6beacf412dc755f9fc020f514b7955fc914fe30"
4173
-
dependencies = [
4174
-
"quote",
4175
-
"syn 2.0.101",
4176
-
]
4177
-
4178
-
[[package]]
4179
-
name = "qoi"
4180
-
version = "0.4.1"
4181
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4182
-
checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001"
4183
-
dependencies = [
4184
-
"bytemuck",
4185
-
]
4186
-
4187
-
[[package]]
4188
-
name = "quick-error"
4189
-
version = "2.0.1"
4190
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4191
-
checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3"
4192
-
4193
-
[[package]]
4194
-
name = "quick-xml"
4195
-
version = "0.37.5"
4196
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4197
-
checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb"
4198
-
dependencies = [
4199
-
"memchr",
4200
-
]
4201
-
4202
-
[[package]]
4203
-
name = "quote"
4204
-
version = "1.0.40"
4205
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4206
-
checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
4207
-
dependencies = [
4208
-
"proc-macro2",
4209
-
]
4210
-
4211
-
[[package]]
4212
-
name = "r-efi"
4213
-
version = "5.2.0"
4214
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4215
-
checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5"
4216
-
4217
-
[[package]]
4218
-
name = "radsort"
4219
-
version = "0.1.1"
4220
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4221
-
checksum = "019b4b213425016d7d84a153c4c73afb0946fbb4840e4eece7ba8848b9d6da22"
4222
-
4223
-
[[package]]
4224
-
name = "rand"
4225
-
version = "0.8.5"
4226
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4227
-
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
4228
-
dependencies = [
4229
-
"libc",
4230
-
"rand_chacha",
4231
-
"rand_core",
4232
-
]
4233
-
4234
-
[[package]]
4235
-
name = "rand_chacha"
4236
-
version = "0.3.1"
4237
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4238
-
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
4239
-
dependencies = [
4240
-
"ppv-lite86",
4241
-
"rand_core",
4242
-
]
4243
-
4244
-
[[package]]
4245
-
name = "rand_core"
4246
-
version = "0.6.4"
4247
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4248
-
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
4249
-
dependencies = [
4250
-
"getrandom 0.2.16",
4251
-
]
4252
-
4253
-
[[package]]
4254
-
name = "rand_distr"
4255
-
version = "0.4.3"
4256
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4257
-
checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31"
4258
-
dependencies = [
4259
-
"num-traits",
4260
-
"rand",
4261
-
]
4262
-
4263
-
[[package]]
4264
-
name = "range-alloc"
4265
-
version = "0.1.4"
4266
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4267
-
checksum = "c3d6831663a5098ea164f89cff59c6284e95f4e3c76ce9848d4529f5ccca9bde"
4268
-
4269
-
[[package]]
4270
-
name = "rangemap"
4271
-
version = "1.5.1"
4272
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4273
-
checksum = "f60fcc7d6849342eff22c4350c8b9a989ee8ceabc4b481253e8946b9fe83d684"
4274
-
4275
-
[[package]]
4276
-
name = "rav1e"
4277
-
version = "0.7.1"
4278
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4279
-
checksum = "cd87ce80a7665b1cce111f8a16c1f3929f6547ce91ade6addf4ec86a8dda5ce9"
4280
-
dependencies = [
4281
-
"arbitrary",
4282
-
"arg_enum_proc_macro",
4283
-
"arrayvec",
4284
-
"av1-grain",
4285
-
"bitstream-io",
4286
-
"built",
4287
-
"cfg-if",
4288
-
"interpolate_name",
4289
-
"itertools 0.12.1",
4290
-
"libc",
4291
-
"libfuzzer-sys",
4292
-
"log",
4293
-
"maybe-rayon",
4294
-
"new_debug_unreachable",
4295
-
"noop_proc_macro",
4296
-
"num-derive",
4297
-
"num-traits",
4298
-
"once_cell",
4299
-
"paste",
4300
-
"profiling",
4301
-
"rand",
4302
-
"rand_chacha",
4303
-
"simd_helpers",
4304
-
"system-deps",
4305
-
"thiserror 1.0.69",
4306
-
"v_frame",
4307
-
"wasm-bindgen",
4308
-
]
4309
-
4310
-
[[package]]
4311
-
name = "ravif"
4312
-
version = "0.11.12"
4313
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4314
-
checksum = "d6a5f31fcf7500f9401fea858ea4ab5525c99f2322cfcee732c0e6c74208c0c6"
4315
-
dependencies = [
4316
-
"avif-serialize",
4317
-
"imgref",
4318
-
"loop9",
4319
-
"quick-error",
4320
-
"rav1e",
4321
-
"rayon",
4322
-
"rgb",
4323
-
]
4324
-
4325
-
[[package]]
4326
-
name = "raw-window-handle"
4327
-
version = "0.6.2"
4328
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4329
-
checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539"
4330
-
4331
-
[[package]]
4332
-
name = "rawpointer"
4333
-
version = "0.2.1"
4334
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4335
-
checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3"
4336
-
4337
-
[[package]]
4338
-
name = "rayon"
4339
-
version = "1.10.0"
4340
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4341
-
checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa"
4342
-
dependencies = [
4343
-
"either",
4344
-
"rayon-core",
4345
-
]
4346
-
4347
-
[[package]]
4348
-
name = "rayon-core"
4349
-
version = "1.12.1"
4350
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4351
-
checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2"
4352
-
dependencies = [
4353
-
"crossbeam-deque",
4354
-
"crossbeam-utils",
4355
-
]
4356
-
4357
-
[[package]]
4358
-
name = "read-fonts"
4359
-
version = "0.29.0"
4360
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4361
-
checksum = "5ce8e2ca6b24313587a03ca61bb74c384e2a815bd90cf2866cfc9f5fb7a11fa0"
4362
-
dependencies = [
4363
-
"bytemuck",
4364
-
"font-types",
4365
-
]
4366
-
4367
-
[[package]]
4368
-
name = "rectangle-pack"
4369
-
version = "0.4.2"
4370
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4371
-
checksum = "a0d463f2884048e7153449a55166f91028d5b0ea53c79377099ce4e8cf0cf9bb"
4372
-
4373
-
[[package]]
4374
-
name = "redox_syscall"
4375
-
version = "0.4.1"
4376
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4377
-
checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
4378
-
dependencies = [
4379
-
"bitflags 1.3.2",
4380
-
]
4381
-
4382
-
[[package]]
4383
-
name = "redox_syscall"
4384
-
version = "0.5.12"
4385
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4386
-
checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af"
4387
-
dependencies = [
4388
-
"bitflags 2.9.0",
4389
-
]
4390
-
4391
-
[[package]]
4392
-
name = "regex"
4393
-
version = "1.11.1"
4394
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4395
-
checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
4396
-
dependencies = [
4397
-
"aho-corasick",
4398
-
"memchr",
4399
-
"regex-automata 0.4.9",
4400
-
"regex-syntax 0.8.5",
4401
-
]
4402
-
4403
-
[[package]]
4404
-
name = "regex-automata"
4405
-
version = "0.1.10"
4406
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4407
-
checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
4408
-
dependencies = [
4409
-
"regex-syntax 0.6.29",
4410
-
]
4411
-
4412
-
[[package]]
4413
-
name = "regex-automata"
4414
-
version = "0.4.9"
4415
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4416
-
checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
4417
-
dependencies = [
4418
-
"aho-corasick",
4419
-
"memchr",
4420
-
"regex-syntax 0.8.5",
4421
-
]
4422
-
4423
-
[[package]]
4424
-
name = "regex-syntax"
4425
-
version = "0.6.29"
4426
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4427
-
checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
4428
-
4429
-
[[package]]
4430
-
name = "regex-syntax"
4431
-
version = "0.8.5"
4432
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4433
-
checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
4434
-
4435
-
[[package]]
4436
-
name = "renderdoc-sys"
4437
-
version = "1.1.0"
4438
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4439
-
checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832"
4440
-
4441
-
[[package]]
4442
-
name = "rgb"
4443
-
version = "0.8.50"
4444
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4445
-
checksum = "57397d16646700483b67d2dd6511d79318f9d057fdbd21a4066aeac8b41d310a"
4446
-
4447
-
[[package]]
4448
-
name = "rodio"
4449
-
version = "0.20.1"
4450
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4451
-
checksum = "e7ceb6607dd738c99bc8cb28eff249b7cd5c8ec88b9db96c0608c1480d140fb1"
4452
-
dependencies = [
4453
-
"cpal",
4454
-
"lewton",
4455
-
]
4456
-
4457
-
[[package]]
4458
-
name = "ron"
4459
-
version = "0.8.1"
4460
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4461
-
checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94"
4462
-
dependencies = [
4463
-
"base64 0.21.7",
4464
-
"bitflags 2.9.0",
4465
-
"serde",
4466
-
"serde_derive",
4467
-
]
4468
-
4469
-
[[package]]
4470
-
name = "roxmltree"
4471
-
version = "0.20.0"
4472
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4473
-
checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97"
4474
-
4475
-
[[package]]
4476
-
name = "rustc-hash"
4477
-
version = "1.1.0"
4478
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4479
-
checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
4480
-
4481
-
[[package]]
4482
-
name = "rustix"
4483
-
version = "0.38.44"
4484
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4485
-
checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154"
4486
-
dependencies = [
4487
-
"bitflags 2.9.0",
4488
-
"errno",
4489
-
"libc",
4490
-
"linux-raw-sys",
4491
-
"windows-sys 0.59.0",
4492
-
]
4493
-
4494
-
[[package]]
4495
-
name = "rustversion"
4496
-
version = "1.0.20"
4497
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4498
-
checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2"
4499
-
4500
-
[[package]]
4501
-
name = "rustybuzz"
4502
-
version = "0.14.1"
4503
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4504
-
checksum = "cfb9cf8877777222e4a3bc7eb247e398b56baba500c38c1c46842431adc8b55c"
4505
-
dependencies = [
4506
-
"bitflags 2.9.0",
4507
-
"bytemuck",
4508
-
"libm",
4509
-
"smallvec",
4510
-
"ttf-parser 0.21.1",
4511
-
"unicode-bidi-mirroring",
4512
-
"unicode-ccc",
4513
-
"unicode-properties",
4514
-
"unicode-script",
4515
-
]
4516
-
4517
-
[[package]]
4518
-
name = "ruzstd"
4519
-
version = "0.8.1"
4520
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4521
-
checksum = "3640bec8aad418d7d03c72ea2de10d5c646a598f9883c7babc160d91e3c1b26c"
4522
-
dependencies = [
4523
-
"twox-hash",
4524
-
]
4525
-
4526
-
[[package]]
4527
-
name = "ryu"
4528
-
version = "1.0.20"
4529
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4530
-
checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
4531
-
4532
-
[[package]]
4533
-
name = "safe_arch"
4534
-
version = "0.7.4"
4535
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4536
-
checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323"
4537
-
dependencies = [
4538
-
"bytemuck",
4539
-
]
4540
-
4541
-
[[package]]
4542
-
name = "same-file"
4543
-
version = "1.0.6"
4544
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4545
-
checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
4546
-
dependencies = [
4547
-
"winapi-util",
4548
-
]
4549
-
4550
-
[[package]]
4551
-
name = "scoped-tls"
4552
-
version = "1.0.1"
4553
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4554
-
checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
4555
-
4556
-
[[package]]
4557
-
name = "scopeguard"
4558
-
version = "1.2.0"
4559
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4560
-
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
4561
-
4562
-
[[package]]
4563
-
name = "sctk-adwaita"
4564
-
version = "0.10.1"
4565
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4566
-
checksum = "b6277f0217056f77f1d8f49f2950ac6c278c0d607c45f5ee99328d792ede24ec"
4567
-
dependencies = [
4568
-
"ab_glyph",
4569
-
"log",
4570
-
"memmap2",
4571
-
"smithay-client-toolkit",
4572
-
"tiny-skia",
4573
-
]
4574
-
4575
-
[[package]]
4576
-
name = "self_cell"
4577
-
version = "1.2.0"
4578
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4579
-
checksum = "0f7d95a54511e0c7be3f51e8867aa8cf35148d7b9445d44de2f943e2b206e749"
4580
-
4581
-
[[package]]
4582
-
name = "send_wrapper"
4583
-
version = "0.6.0"
4584
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4585
-
checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73"
4586
-
4587
-
[[package]]
4588
-
name = "serde"
4589
-
version = "1.0.219"
4590
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4591
-
checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
4592
-
dependencies = [
4593
-
"serde_derive",
4594
-
]
4595
-
4596
-
[[package]]
4597
-
name = "serde_derive"
4598
-
version = "1.0.219"
4599
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4600
-
checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
4601
-
dependencies = [
4602
-
"proc-macro2",
4603
-
"quote",
4604
-
"syn 2.0.101",
4605
-
]
4606
-
4607
-
[[package]]
4608
-
name = "serde_json"
4609
-
version = "1.0.140"
4610
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4611
-
checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373"
4612
-
dependencies = [
4613
-
"itoa",
4614
-
"memchr",
4615
-
"ryu",
4616
-
"serde",
4617
-
]
4618
-
4619
-
[[package]]
4620
-
name = "serde_spanned"
4621
-
version = "0.6.8"
4622
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4623
-
checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1"
4624
-
dependencies = [
4625
-
"serde",
4626
-
]
4627
-
4628
-
[[package]]
4629
-
name = "sharded-slab"
4630
-
version = "0.1.7"
4631
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4632
-
checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
4633
-
dependencies = [
4634
-
"lazy_static",
4635
-
]
4636
-
4637
-
[[package]]
4638
-
name = "shlex"
4639
-
version = "1.3.0"
4640
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4641
-
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
4642
-
4643
-
[[package]]
4644
-
name = "simba"
4645
-
version = "0.7.3"
4646
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4647
-
checksum = "2f3fd720c48c53cace224ae62bef1bbff363a70c68c4802a78b5cc6159618176"
4648
-
dependencies = [
4649
-
"approx",
4650
-
"num-complex",
4651
-
"num-traits",
4652
-
"paste",
4653
-
"wide",
4654
-
]
4655
-
4656
-
[[package]]
4657
-
name = "simd-adler32"
4658
-
version = "0.3.7"
4659
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4660
-
checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
4661
-
4662
-
[[package]]
4663
-
name = "simd_helpers"
4664
-
version = "0.1.0"
4665
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4666
-
checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6"
4667
-
dependencies = [
4668
-
"quote",
4669
-
]
4670
-
4671
-
[[package]]
4672
-
name = "skrifa"
4673
-
version = "0.31.0"
4674
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4675
-
checksum = "bbe6666ab11018ab91ff7b03f1a3b9fdbecfb610848436fefa5ce50343d3d913"
4676
-
dependencies = [
4677
-
"bytemuck",
4678
-
"read-fonts",
4679
-
]
4680
-
4681
-
[[package]]
4682
-
name = "slab"
4683
-
version = "0.4.9"
4684
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4685
-
checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
4686
-
dependencies = [
4687
-
"autocfg",
4688
-
]
4689
-
4690
-
[[package]]
4691
-
name = "slotmap"
4692
-
version = "1.0.7"
4693
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4694
-
checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a"
4695
-
dependencies = [
4696
-
"version_check",
4697
-
]
4698
-
4699
-
[[package]]
4700
-
name = "smallvec"
4701
-
version = "1.15.0"
4702
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4703
-
checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9"
4704
-
4705
-
[[package]]
4706
-
name = "smithay-client-toolkit"
4707
-
version = "0.19.2"
4708
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4709
-
checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016"
4710
-
dependencies = [
4711
-
"bitflags 2.9.0",
4712
-
"calloop",
4713
-
"calloop-wayland-source",
4714
-
"cursor-icon",
4715
-
"libc",
4716
-
"log",
4717
-
"memmap2",
4718
-
"rustix",
4719
-
"thiserror 1.0.69",
4720
-
"wayland-backend",
4721
-
"wayland-client",
4722
-
"wayland-csd-frame",
4723
-
"wayland-cursor",
4724
-
"wayland-protocols",
4725
-
"wayland-protocols-wlr",
4726
-
"wayland-scanner",
4727
-
"xkeysym",
4728
-
]
4729
-
4730
-
[[package]]
4731
-
name = "smol_str"
4732
-
version = "0.2.2"
4733
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4734
-
checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead"
4735
-
dependencies = [
4736
-
"serde",
4737
-
]
4738
-
4739
-
[[package]]
4740
-
name = "spin"
4741
-
version = "0.9.8"
4742
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4743
-
checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
4744
-
dependencies = [
4745
-
"portable-atomic",
4746
-
]
4747
-
4748
-
[[package]]
4749
-
name = "spirv"
4750
-
version = "0.3.0+sdk-1.3.268.0"
4751
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4752
-
checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844"
4753
-
dependencies = [
4754
-
"bitflags 2.9.0",
4755
-
]
4756
-
4757
-
[[package]]
4758
-
name = "stable_deref_trait"
4759
-
version = "1.2.0"
4760
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4761
-
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
4762
-
4763
-
[[package]]
4764
-
name = "stackfuture"
4765
-
version = "0.3.0"
4766
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4767
-
checksum = "6eae92052b72ef70dafa16eddbabffc77e5ca3574be2f7bc1127b36f0a7ad7f2"
4768
-
4769
-
[[package]]
4770
-
name = "static_assertions"
4771
-
version = "1.1.0"
4772
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4773
-
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
4774
-
4775
-
[[package]]
4776
-
name = "strict-num"
4777
-
version = "0.1.1"
4778
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4779
-
checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731"
4780
-
4781
-
[[package]]
4782
-
name = "strum"
4783
-
version = "0.26.3"
4784
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4785
-
checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06"
4786
-
dependencies = [
4787
-
"strum_macros",
4788
-
]
4789
-
4790
-
[[package]]
4791
-
name = "strum_macros"
4792
-
version = "0.26.4"
4793
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4794
-
checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be"
4795
-
dependencies = [
4796
-
"heck",
4797
-
"proc-macro2",
4798
-
"quote",
4799
-
"rustversion",
4800
-
"syn 2.0.101",
4801
-
]
4802
-
4803
-
[[package]]
4804
-
name = "svg_fmt"
4805
-
version = "0.4.5"
4806
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4807
-
checksum = "0193cc4331cfd2f3d2011ef287590868599a2f33c3e69bc22c1a3d3acf9e02fb"
4808
-
4809
-
[[package]]
4810
-
name = "swash"
4811
-
version = "0.2.4"
4812
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4813
-
checksum = "5dce3f0af95643c855cdc449fbaa17d8c2cd08e0b00a49a6babcbe6e71667f3d"
4814
-
dependencies = [
4815
-
"skrifa",
4816
-
"yazi",
4817
-
"zeno",
4818
-
]
4819
-
4820
-
[[package]]
4821
-
name = "syn"
4822
-
version = "1.0.109"
4823
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4824
-
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
4825
-
dependencies = [
4826
-
"proc-macro2",
4827
-
"quote",
4828
-
"unicode-ident",
4829
-
]
4830
-
4831
-
[[package]]
4832
-
name = "syn"
4833
-
version = "2.0.101"
4834
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4835
-
checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf"
4836
-
dependencies = [
4837
-
"proc-macro2",
4838
-
"quote",
4839
-
"unicode-ident",
4840
-
]
4841
-
4842
-
[[package]]
4843
-
name = "synstructure"
4844
-
version = "0.13.2"
4845
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4846
-
checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
4847
-
dependencies = [
4848
-
"proc-macro2",
4849
-
"quote",
4850
-
"syn 2.0.101",
4851
-
]
4852
-
4853
-
[[package]]
4854
-
name = "sys-locale"
4855
-
version = "0.3.2"
4856
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4857
-
checksum = "8eab9a99a024a169fe8a903cf9d4a3b3601109bcc13bd9e3c6fff259138626c4"
4858
-
dependencies = [
4859
-
"libc",
4860
-
]
4861
-
4862
-
[[package]]
4863
-
name = "sysinfo"
4864
-
version = "0.34.2"
4865
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4866
-
checksum = "a4b93974b3d3aeaa036504b8eefd4c039dced109171c1ae973f1dc63b2c7e4b2"
4867
-
dependencies = [
4868
-
"libc",
4869
-
"memchr",
4870
-
"ntapi",
4871
-
"objc2-core-foundation",
4872
-
"windows 0.57.0",
4873
-
]
4874
-
4875
-
[[package]]
4876
-
name = "system-deps"
4877
-
version = "6.2.2"
4878
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4879
-
checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349"
4880
-
dependencies = [
4881
-
"cfg-expr",
4882
-
"heck",
4883
-
"pkg-config",
4884
-
"toml",
4885
-
"version-compare",
4886
-
]
4887
-
4888
-
[[package]]
4889
-
name = "taffy"
4890
-
version = "0.7.7"
4891
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4892
-
checksum = "ab4f4d046dd956a47a7e1a2947083d7ac3e6aa3cfaaead36173ceaa5ab11878c"
4893
-
dependencies = [
4894
-
"arrayvec",
4895
-
"grid",
4896
-
"serde",
4897
-
"slotmap",
4898
-
]
4899
-
4900
-
[[package]]
4901
-
name = "target-lexicon"
4902
-
version = "0.12.16"
4903
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4904
-
checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
4905
-
4906
-
[[package]]
4907
-
name = "termcolor"
4908
-
version = "1.4.1"
4909
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4910
-
checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
4911
-
dependencies = [
4912
-
"winapi-util",
4913
-
]
4914
-
4915
-
[[package]]
4916
-
name = "thiserror"
4917
-
version = "1.0.69"
4918
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4919
-
checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
4920
-
dependencies = [
4921
-
"thiserror-impl 1.0.69",
4922
-
]
4923
-
4924
-
[[package]]
4925
-
name = "thiserror"
4926
-
version = "2.0.12"
4927
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4928
-
checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708"
4929
-
dependencies = [
4930
-
"thiserror-impl 2.0.12",
4931
-
]
4932
-
4933
-
[[package]]
4934
-
name = "thiserror-impl"
4935
-
version = "1.0.69"
4936
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4937
-
checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
4938
-
dependencies = [
4939
-
"proc-macro2",
4940
-
"quote",
4941
-
"syn 2.0.101",
4942
-
]
4943
-
4944
-
[[package]]
4945
-
name = "thiserror-impl"
4946
-
version = "2.0.12"
4947
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4948
-
checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
4949
-
dependencies = [
4950
-
"proc-macro2",
4951
-
"quote",
4952
-
"syn 2.0.101",
4953
-
]
4954
-
4955
-
[[package]]
4956
-
name = "thread_local"
4957
-
version = "1.1.8"
4958
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4959
-
checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c"
4960
-
dependencies = [
4961
-
"cfg-if",
4962
-
"once_cell",
4963
-
]
4964
-
4965
-
[[package]]
4966
-
name = "tiff"
4967
-
version = "0.9.1"
4968
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4969
-
checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e"
4970
-
dependencies = [
4971
-
"flate2",
4972
-
"jpeg-decoder",
4973
-
"weezl",
4974
-
]
4975
-
4976
-
[[package]]
4977
-
name = "tiny-skia"
4978
-
version = "0.11.4"
4979
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4980
-
checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab"
4981
-
dependencies = [
4982
-
"arrayref",
4983
-
"arrayvec",
4984
-
"bytemuck",
4985
-
"cfg-if",
4986
-
"log",
4987
-
"tiny-skia-path",
4988
-
]
4989
-
4990
-
[[package]]
4991
-
name = "tiny-skia-path"
4992
-
version = "0.11.4"
4993
-
source = "registry+https://github.com/rust-lang/crates.io-index"
4994
-
checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93"
4995
-
dependencies = [
4996
-
"arrayref",
4997
-
"bytemuck",
4998
-
"strict-num",
4999
-
]
5000
-
5001
-
[[package]]
5002
-
name = "tinystr"
5003
-
version = "0.8.1"
5004
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5005
-
checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b"
5006
-
dependencies = [
5007
-
"displaydoc",
5008
-
"zerovec",
5009
-
]
5010
-
5011
-
[[package]]
5012
-
name = "tinyvec"
5013
-
version = "1.9.0"
5014
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5015
-
checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71"
5016
-
dependencies = [
5017
-
"tinyvec_macros",
5018
-
]
5019
-
5020
-
[[package]]
5021
-
name = "tinyvec_macros"
5022
-
version = "0.1.1"
5023
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5024
-
checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
5025
-
5026
-
[[package]]
5027
-
name = "toml"
5028
-
version = "0.8.22"
5029
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5030
-
checksum = "05ae329d1f08c4d17a59bed7ff5b5a769d062e64a62d34a3261b219e62cd5aae"
5031
-
dependencies = [
5032
-
"serde",
5033
-
"serde_spanned",
5034
-
"toml_datetime",
5035
-
"toml_edit",
5036
-
]
5037
-
5038
-
[[package]]
5039
-
name = "toml_datetime"
5040
-
version = "0.6.9"
5041
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5042
-
checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3"
5043
-
dependencies = [
5044
-
"serde",
5045
-
]
5046
-
5047
-
[[package]]
5048
-
name = "toml_edit"
5049
-
version = "0.22.26"
5050
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5051
-
checksum = "310068873db2c5b3e7659d2cc35d21855dbafa50d1ce336397c666e3cb08137e"
5052
-
dependencies = [
5053
-
"indexmap",
5054
-
"serde",
5055
-
"serde_spanned",
5056
-
"toml_datetime",
5057
-
"winnow",
5058
-
]
5059
-
5060
-
[[package]]
5061
-
name = "tracing"
5062
-
version = "0.1.41"
5063
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5064
-
checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0"
5065
-
dependencies = [
5066
-
"pin-project-lite",
5067
-
"tracing-attributes",
5068
-
"tracing-core",
5069
-
]
5070
-
5071
-
[[package]]
5072
-
name = "tracing-attributes"
5073
-
version = "0.1.28"
5074
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5075
-
checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d"
5076
-
dependencies = [
5077
-
"proc-macro2",
5078
-
"quote",
5079
-
"syn 2.0.101",
5080
-
]
5081
-
5082
-
[[package]]
5083
-
name = "tracing-core"
5084
-
version = "0.1.33"
5085
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5086
-
checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c"
5087
-
dependencies = [
5088
-
"once_cell",
5089
-
"valuable",
5090
-
]
5091
-
5092
-
[[package]]
5093
-
name = "tracing-log"
5094
-
version = "0.2.0"
5095
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5096
-
checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
5097
-
dependencies = [
5098
-
"log",
5099
-
"once_cell",
5100
-
"tracing-core",
5101
-
]
5102
-
5103
-
[[package]]
5104
-
name = "tracing-oslog"
5105
-
version = "0.2.0"
5106
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5107
-
checksum = "528bdd1f0e27b5dd9a4ededf154e824b0532731e4af73bb531de46276e0aab1e"
5108
-
dependencies = [
5109
-
"bindgen",
5110
-
"cc",
5111
-
"cfg-if",
5112
-
"once_cell",
5113
-
"parking_lot",
5114
-
"tracing-core",
5115
-
"tracing-subscriber",
5116
-
]
5117
-
5118
-
[[package]]
5119
-
name = "tracing-subscriber"
5120
-
version = "0.3.19"
5121
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5122
-
checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008"
5123
-
dependencies = [
5124
-
"matchers",
5125
-
"nu-ansi-term",
5126
-
"once_cell",
5127
-
"regex",
5128
-
"sharded-slab",
5129
-
"smallvec",
5130
-
"thread_local",
5131
-
"tracing",
5132
-
"tracing-core",
5133
-
"tracing-log",
5134
-
]
5135
-
5136
-
[[package]]
5137
-
name = "tracing-wasm"
5138
-
version = "0.2.1"
5139
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5140
-
checksum = "4575c663a174420fa2d78f4108ff68f65bf2fbb7dd89f33749b6e826b3626e07"
5141
-
dependencies = [
5142
-
"tracing",
5143
-
"tracing-subscriber",
5144
-
"wasm-bindgen",
5145
-
]
5146
-
5147
-
[[package]]
5148
-
name = "ttf-parser"
5149
-
version = "0.20.0"
5150
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5151
-
checksum = "17f77d76d837a7830fe1d4f12b7b4ba4192c1888001c7164257e4bc6d21d96b4"
5152
-
5153
-
[[package]]
5154
-
name = "ttf-parser"
5155
-
version = "0.21.1"
5156
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5157
-
checksum = "2c591d83f69777866b9126b24c6dd9a18351f177e49d625920d19f989fd31cf8"
5158
-
5159
-
[[package]]
5160
-
name = "ttf-parser"
5161
-
version = "0.25.1"
5162
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5163
-
checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31"
5164
-
5165
-
[[package]]
5166
-
name = "twox-hash"
5167
-
version = "2.1.0"
5168
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5169
-
checksum = "e7b17f197b3050ba473acf9181f7b1d3b66d1cf7356c6cc57886662276e65908"
5170
-
5171
-
[[package]]
5172
-
name = "typeid"
5173
-
version = "1.0.3"
5174
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5175
-
checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c"
5176
-
5177
-
[[package]]
5178
-
name = "typenum"
5179
-
version = "1.18.0"
5180
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5181
-
checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
5182
-
5183
-
[[package]]
5184
-
name = "unicode-bidi"
5185
-
version = "0.3.18"
5186
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5187
-
checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5"
5188
-
5189
-
[[package]]
5190
-
name = "unicode-bidi-mirroring"
5191
-
version = "0.2.0"
5192
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5193
-
checksum = "23cb788ffebc92c5948d0e997106233eeb1d8b9512f93f41651f52b6c5f5af86"
5194
-
5195
-
[[package]]
5196
-
name = "unicode-ccc"
5197
-
version = "0.2.0"
5198
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5199
-
checksum = "1df77b101bcc4ea3d78dafc5ad7e4f58ceffe0b2b16bf446aeb50b6cb4157656"
5200
-
5201
-
[[package]]
5202
-
name = "unicode-ident"
5203
-
version = "1.0.18"
5204
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5205
-
checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
5206
-
5207
-
[[package]]
5208
-
name = "unicode-linebreak"
5209
-
version = "0.1.5"
5210
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5211
-
checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f"
5212
-
5213
-
[[package]]
5214
-
name = "unicode-properties"
5215
-
version = "0.1.3"
5216
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5217
-
checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0"
5218
-
5219
-
[[package]]
5220
-
name = "unicode-script"
5221
-
version = "0.5.7"
5222
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5223
-
checksum = "9fb421b350c9aff471779e262955939f565ec18b86c15364e6bdf0d662ca7c1f"
5224
-
5225
-
[[package]]
5226
-
name = "unicode-segmentation"
5227
-
version = "1.12.0"
5228
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5229
-
checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493"
5230
-
5231
-
[[package]]
5232
-
name = "unicode-width"
5233
-
version = "0.1.14"
5234
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5235
-
checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af"
5236
-
5237
-
[[package]]
5238
-
name = "unicode-xid"
5239
-
version = "0.2.6"
5240
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5241
-
checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
5242
-
5243
-
[[package]]
5244
-
name = "url"
5245
-
version = "2.5.4"
5246
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5247
-
checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60"
5248
-
dependencies = [
5249
-
"form_urlencoded",
5250
-
"idna",
5251
-
"percent-encoding",
5252
-
]
5253
-
5254
-
[[package]]
5255
-
name = "utf8_iter"
5256
-
version = "1.0.4"
5257
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5258
-
checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
5259
-
5260
-
[[package]]
5261
-
name = "uuid"
5262
-
version = "1.16.0"
5263
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5264
-
checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9"
5265
-
dependencies = [
5266
-
"getrandom 0.3.3",
5267
-
"js-sys",
5268
-
"serde",
5269
-
"wasm-bindgen",
5270
-
]
5271
-
5272
-
[[package]]
5273
-
name = "v_frame"
5274
-
version = "0.3.8"
5275
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5276
-
checksum = "d6f32aaa24bacd11e488aa9ba66369c7cd514885742c9fe08cfe85884db3e92b"
5277
-
dependencies = [
5278
-
"aligned-vec",
5279
-
"num-traits",
5280
-
"wasm-bindgen",
5281
-
]
5282
-
5283
-
[[package]]
5284
-
name = "valuable"
5285
-
version = "0.1.1"
5286
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5287
-
checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65"
5288
-
5289
-
[[package]]
5290
-
name = "variadics_please"
5291
-
version = "1.1.0"
5292
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5293
-
checksum = "41b6d82be61465f97d42bd1d15bf20f3b0a3a0905018f38f9d6f6962055b0b5c"
5294
-
dependencies = [
5295
-
"proc-macro2",
5296
-
"quote",
5297
-
"syn 2.0.101",
5298
-
]
5299
-
5300
-
[[package]]
5301
-
name = "vec_map"
5302
-
version = "0.8.2"
5303
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5304
-
checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
5305
-
5306
-
[[package]]
5307
-
name = "vee"
5308
-
version = "0.1.0"
5309
-
dependencies = [
5310
-
"bevy",
5311
-
"bevy_egui",
5312
-
"binrw",
5313
-
"flate2",
5314
-
"glam 0.30.3",
5315
-
"half",
5316
-
"mesh-tools",
5317
-
]
5318
-
5319
-
[[package]]
5320
-
name = "version-compare"
5321
-
version = "0.2.0"
5322
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5323
-
checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b"
5324
-
5325
-
[[package]]
5326
-
name = "version_check"
5327
-
version = "0.9.5"
5328
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5329
-
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
5330
-
5331
-
[[package]]
5332
-
name = "walkdir"
5333
-
version = "2.5.0"
5334
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5335
-
checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
5336
-
dependencies = [
5337
-
"same-file",
5338
-
"winapi-util",
5339
-
]
5340
-
5341
-
[[package]]
5342
-
name = "wasi"
5343
-
version = "0.11.0+wasi-snapshot-preview1"
5344
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5345
-
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
5346
-
5347
-
[[package]]
5348
-
name = "wasi"
5349
-
version = "0.14.2+wasi-0.2.4"
5350
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5351
-
checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3"
5352
-
dependencies = [
5353
-
"wit-bindgen-rt",
5354
-
]
5355
-
5356
-
[[package]]
5357
-
name = "wasm-bindgen"
5358
-
version = "0.2.100"
5359
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5360
-
checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5"
5361
-
dependencies = [
5362
-
"cfg-if",
5363
-
"once_cell",
5364
-
"rustversion",
5365
-
"wasm-bindgen-macro",
5366
-
]
5367
-
5368
-
[[package]]
5369
-
name = "wasm-bindgen-backend"
5370
-
version = "0.2.100"
5371
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5372
-
checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6"
5373
-
dependencies = [
5374
-
"bumpalo",
5375
-
"log",
5376
-
"proc-macro2",
5377
-
"quote",
5378
-
"syn 2.0.101",
5379
-
"wasm-bindgen-shared",
5380
-
]
5381
-
5382
-
[[package]]
5383
-
name = "wasm-bindgen-futures"
5384
-
version = "0.4.50"
5385
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5386
-
checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61"
5387
-
dependencies = [
5388
-
"cfg-if",
5389
-
"js-sys",
5390
-
"once_cell",
5391
-
"wasm-bindgen",
5392
-
"web-sys",
5393
-
]
5394
-
5395
-
[[package]]
5396
-
name = "wasm-bindgen-macro"
5397
-
version = "0.2.100"
5398
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5399
-
checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407"
5400
-
dependencies = [
5401
-
"quote",
5402
-
"wasm-bindgen-macro-support",
5403
-
]
5404
-
5405
-
[[package]]
5406
-
name = "wasm-bindgen-macro-support"
5407
-
version = "0.2.100"
5408
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5409
-
checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
5410
-
dependencies = [
5411
-
"proc-macro2",
5412
-
"quote",
5413
-
"syn 2.0.101",
5414
-
"wasm-bindgen-backend",
5415
-
"wasm-bindgen-shared",
5416
-
]
5417
-
5418
-
[[package]]
5419
-
name = "wasm-bindgen-shared"
5420
-
version = "0.2.100"
5421
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5422
-
checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d"
5423
-
dependencies = [
5424
-
"unicode-ident",
5425
-
]
5426
-
5427
-
[[package]]
5428
-
name = "wayland-backend"
5429
-
version = "0.3.10"
5430
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5431
-
checksum = "fe770181423e5fc79d3e2a7f4410b7799d5aab1de4372853de3c6aa13ca24121"
5432
-
dependencies = [
5433
-
"cc",
5434
-
"downcast-rs 1.2.1",
5435
-
"rustix",
5436
-
"scoped-tls",
5437
-
"smallvec",
5438
-
"wayland-sys",
5439
-
]
5440
-
5441
-
[[package]]
5442
-
name = "wayland-client"
5443
-
version = "0.31.10"
5444
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5445
-
checksum = "978fa7c67b0847dbd6a9f350ca2569174974cd4082737054dbb7fbb79d7d9a61"
5446
-
dependencies = [
5447
-
"bitflags 2.9.0",
5448
-
"rustix",
5449
-
"wayland-backend",
5450
-
"wayland-scanner",
5451
-
]
5452
-
5453
-
[[package]]
5454
-
name = "wayland-csd-frame"
5455
-
version = "0.3.0"
5456
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5457
-
checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e"
5458
-
dependencies = [
5459
-
"bitflags 2.9.0",
5460
-
"cursor-icon",
5461
-
"wayland-backend",
5462
-
]
5463
-
5464
-
[[package]]
5465
-
name = "wayland-cursor"
5466
-
version = "0.31.10"
5467
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5468
-
checksum = "a65317158dec28d00416cb16705934070aef4f8393353d41126c54264ae0f182"
5469
-
dependencies = [
5470
-
"rustix",
5471
-
"wayland-client",
5472
-
"xcursor",
5473
-
]
5474
-
5475
-
[[package]]
5476
-
name = "wayland-protocols"
5477
-
version = "0.32.8"
5478
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5479
-
checksum = "779075454e1e9a521794fed15886323ea0feda3f8b0fc1390f5398141310422a"
5480
-
dependencies = [
5481
-
"bitflags 2.9.0",
5482
-
"wayland-backend",
5483
-
"wayland-client",
5484
-
"wayland-scanner",
5485
-
]
5486
-
5487
-
[[package]]
5488
-
name = "wayland-protocols-plasma"
5489
-
version = "0.3.8"
5490
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5491
-
checksum = "4fd38cdad69b56ace413c6bcc1fbf5acc5e2ef4af9d5f8f1f9570c0c83eae175"
5492
-
dependencies = [
5493
-
"bitflags 2.9.0",
5494
-
"wayland-backend",
5495
-
"wayland-client",
5496
-
"wayland-protocols",
5497
-
"wayland-scanner",
5498
-
]
5499
-
5500
-
[[package]]
5501
-
name = "wayland-protocols-wlr"
5502
-
version = "0.3.8"
5503
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5504
-
checksum = "1cb6cdc73399c0e06504c437fe3cf886f25568dd5454473d565085b36d6a8bbf"
5505
-
dependencies = [
5506
-
"bitflags 2.9.0",
5507
-
"wayland-backend",
5508
-
"wayland-client",
5509
-
"wayland-protocols",
5510
-
"wayland-scanner",
5511
-
]
5512
-
5513
-
[[package]]
5514
-
name = "wayland-scanner"
5515
-
version = "0.31.6"
5516
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5517
-
checksum = "896fdafd5d28145fce7958917d69f2fd44469b1d4e861cb5961bcbeebc6d1484"
5518
-
dependencies = [
5519
-
"proc-macro2",
5520
-
"quick-xml",
5521
-
"quote",
5522
-
]
5523
-
5524
-
[[package]]
5525
-
name = "wayland-sys"
5526
-
version = "0.31.6"
5527
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5528
-
checksum = "dbcebb399c77d5aa9fa5db874806ee7b4eba4e73650948e8f93963f128896615"
5529
-
dependencies = [
5530
-
"dlib",
5531
-
"log",
5532
-
"once_cell",
5533
-
"pkg-config",
5534
-
]
5535
-
5536
-
[[package]]
5537
-
name = "web-sys"
5538
-
version = "0.3.77"
5539
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5540
-
checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2"
5541
-
dependencies = [
5542
-
"js-sys",
5543
-
"wasm-bindgen",
5544
-
]
5545
-
5546
-
[[package]]
5547
-
name = "web-time"
5548
-
version = "1.1.0"
5549
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5550
-
checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb"
5551
-
dependencies = [
5552
-
"js-sys",
5553
-
"wasm-bindgen",
5554
-
]
5555
-
5556
-
[[package]]
5557
-
name = "webbrowser"
5558
-
version = "1.0.4"
5559
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5560
-
checksum = "d5df295f8451142f1856b1bd86a606dfe9587d439bc036e319c827700dbd555e"
5561
-
dependencies = [
5562
-
"core-foundation 0.10.0",
5563
-
"home",
5564
-
"jni",
5565
-
"log",
5566
-
"ndk-context",
5567
-
"objc2 0.6.1",
5568
-
"objc2-foundation 0.3.1",
5569
-
"url",
5570
-
"web-sys",
5571
-
]
5572
-
5573
-
[[package]]
5574
-
name = "weezl"
5575
-
version = "0.1.8"
5576
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5577
-
checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082"
5578
-
5579
-
[[package]]
5580
-
name = "wgpu"
5581
-
version = "24.0.3"
5582
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5583
-
checksum = "35904fb00ba2d2e0a4d002fcbbb6e1b89b574d272a50e5fc95f6e81cf281c245"
5584
-
dependencies = [
5585
-
"arrayvec",
5586
-
"bitflags 2.9.0",
5587
-
"cfg_aliases",
5588
-
"document-features",
5589
-
"js-sys",
5590
-
"log",
5591
-
"naga",
5592
-
"parking_lot",
5593
-
"profiling",
5594
-
"raw-window-handle",
5595
-
"smallvec",
5596
-
"static_assertions",
5597
-
"wasm-bindgen",
5598
-
"wasm-bindgen-futures",
5599
-
"web-sys",
5600
-
"wgpu-core",
5601
-
"wgpu-hal",
5602
-
"wgpu-types",
5603
-
]
5604
-
5605
-
[[package]]
5606
-
name = "wgpu-core"
5607
-
version = "24.0.2"
5608
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5609
-
checksum = "671c25545d479b47d3f0a8e373aceb2060b67c6eb841b24ac8c32348151c7a0c"
5610
-
dependencies = [
5611
-
"arrayvec",
5612
-
"bit-vec 0.8.0",
5613
-
"bitflags 2.9.0",
5614
-
"cfg_aliases",
5615
-
"document-features",
5616
-
"indexmap",
5617
-
"log",
5618
-
"naga",
5619
-
"once_cell",
5620
-
"parking_lot",
5621
-
"profiling",
5622
-
"raw-window-handle",
5623
-
"rustc-hash",
5624
-
"smallvec",
5625
-
"thiserror 2.0.12",
5626
-
"wgpu-hal",
5627
-
"wgpu-types",
5628
-
]
5629
-
5630
-
[[package]]
5631
-
name = "wgpu-hal"
5632
-
version = "24.0.4"
5633
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5634
-
checksum = "f112f464674ca69f3533248508ee30cb84c67cf06c25ff6800685f5e0294e259"
5635
-
dependencies = [
5636
-
"android_system_properties",
5637
-
"arrayvec",
5638
-
"ash",
5639
-
"bit-set 0.8.0",
5640
-
"bitflags 2.9.0",
5641
-
"block",
5642
-
"bytemuck",
5643
-
"cfg_aliases",
5644
-
"core-graphics-types",
5645
-
"glow",
5646
-
"glutin_wgl_sys",
5647
-
"gpu-alloc",
5648
-
"gpu-allocator",
5649
-
"gpu-descriptor",
5650
-
"js-sys",
5651
-
"khronos-egl",
5652
-
"libc",
5653
-
"libloading",
5654
-
"log",
5655
-
"metal",
5656
-
"naga",
5657
-
"ndk-sys 0.5.0+25.2.9519653",
5658
-
"objc",
5659
-
"once_cell",
5660
-
"ordered-float",
5661
-
"parking_lot",
5662
-
"profiling",
5663
-
"range-alloc",
5664
-
"raw-window-handle",
5665
-
"renderdoc-sys",
5666
-
"rustc-hash",
5667
-
"smallvec",
5668
-
"thiserror 2.0.12",
5669
-
"wasm-bindgen",
5670
-
"web-sys",
5671
-
"wgpu-types",
5672
-
"windows 0.58.0",
5673
-
"windows-core 0.58.0",
5674
-
]
5675
-
5676
-
[[package]]
5677
-
name = "wgpu-types"
5678
-
version = "24.0.0"
5679
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5680
-
checksum = "50ac044c0e76c03a0378e7786ac505d010a873665e2d51383dcff8dd227dc69c"
5681
-
dependencies = [
5682
-
"bitflags 2.9.0",
5683
-
"js-sys",
5684
-
"log",
5685
-
"serde",
5686
-
"web-sys",
5687
-
]
5688
-
5689
-
[[package]]
5690
-
name = "wide"
5691
-
version = "0.7.32"
5692
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5693
-
checksum = "41b5576b9a81633f3e8df296ce0063042a73507636cbe956c61133dd7034ab22"
5694
-
dependencies = [
5695
-
"bytemuck",
5696
-
"safe_arch",
5697
-
]
5698
-
5699
-
[[package]]
5700
-
name = "winapi"
5701
-
version = "0.3.9"
5702
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5703
-
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
5704
-
dependencies = [
5705
-
"winapi-i686-pc-windows-gnu",
5706
-
"winapi-x86_64-pc-windows-gnu",
5707
-
]
5708
-
5709
-
[[package]]
5710
-
name = "winapi-i686-pc-windows-gnu"
5711
-
version = "0.4.0"
5712
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5713
-
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
5714
-
5715
-
[[package]]
5716
-
name = "winapi-util"
5717
-
version = "0.1.9"
5718
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5719
-
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
5720
-
dependencies = [
5721
-
"windows-sys 0.59.0",
5722
-
]
5723
-
5724
-
[[package]]
5725
-
name = "winapi-x86_64-pc-windows-gnu"
5726
-
version = "0.4.0"
5727
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5728
-
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
5729
-
5730
-
[[package]]
5731
-
name = "windows"
5732
-
version = "0.54.0"
5733
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5734
-
checksum = "9252e5725dbed82865af151df558e754e4a3c2c30818359eb17465f1346a1b49"
5735
-
dependencies = [
5736
-
"windows-core 0.54.0",
5737
-
"windows-targets 0.52.6",
5738
-
]
5739
-
5740
-
[[package]]
5741
-
name = "windows"
5742
-
version = "0.57.0"
5743
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5744
-
checksum = "12342cb4d8e3b046f3d80effd474a7a02447231330ef77d71daa6fbc40681143"
5745
-
dependencies = [
5746
-
"windows-core 0.57.0",
5747
-
"windows-targets 0.52.6",
5748
-
]
5749
-
5750
-
[[package]]
5751
-
name = "windows"
5752
-
version = "0.58.0"
5753
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5754
-
checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6"
5755
-
dependencies = [
5756
-
"windows-core 0.58.0",
5757
-
"windows-targets 0.52.6",
5758
-
]
5759
-
5760
-
[[package]]
5761
-
name = "windows"
5762
-
version = "0.61.1"
5763
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5764
-
checksum = "c5ee8f3d025738cb02bad7868bbb5f8a6327501e870bf51f1b455b0a2454a419"
5765
-
dependencies = [
5766
-
"windows-collections",
5767
-
"windows-core 0.61.0",
5768
-
"windows-future",
5769
-
"windows-link",
5770
-
"windows-numerics",
5771
-
]
5772
-
5773
-
[[package]]
5774
-
name = "windows-collections"
5775
-
version = "0.2.0"
5776
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5777
-
checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8"
5778
-
dependencies = [
5779
-
"windows-core 0.61.0",
5780
-
]
5781
-
5782
-
[[package]]
5783
-
name = "windows-core"
5784
-
version = "0.54.0"
5785
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5786
-
checksum = "12661b9c89351d684a50a8a643ce5f608e20243b9fb84687800163429f161d65"
5787
-
dependencies = [
5788
-
"windows-result 0.1.2",
5789
-
"windows-targets 0.52.6",
5790
-
]
5791
-
5792
-
[[package]]
5793
-
name = "windows-core"
5794
-
version = "0.57.0"
5795
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5796
-
checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d"
5797
-
dependencies = [
5798
-
"windows-implement 0.57.0",
5799
-
"windows-interface 0.57.0",
5800
-
"windows-result 0.1.2",
5801
-
"windows-targets 0.52.6",
5802
-
]
5803
-
5804
-
[[package]]
5805
-
name = "windows-core"
5806
-
version = "0.58.0"
5807
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5808
-
checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99"
5809
-
dependencies = [
5810
-
"windows-implement 0.58.0",
5811
-
"windows-interface 0.58.0",
5812
-
"windows-result 0.2.0",
5813
-
"windows-strings 0.1.0",
5814
-
"windows-targets 0.52.6",
5815
-
]
5816
-
5817
-
[[package]]
5818
-
name = "windows-core"
5819
-
version = "0.61.0"
5820
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5821
-
checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980"
5822
-
dependencies = [
5823
-
"windows-implement 0.60.0",
5824
-
"windows-interface 0.59.1",
5825
-
"windows-link",
5826
-
"windows-result 0.3.2",
5827
-
"windows-strings 0.4.0",
5828
-
]
5829
-
5830
-
[[package]]
5831
-
name = "windows-future"
5832
-
version = "0.2.0"
5833
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5834
-
checksum = "7a1d6bbefcb7b60acd19828e1bc965da6fcf18a7e39490c5f8be71e54a19ba32"
5835
-
dependencies = [
5836
-
"windows-core 0.61.0",
5837
-
"windows-link",
5838
-
]
5839
-
5840
-
[[package]]
5841
-
name = "windows-implement"
5842
-
version = "0.57.0"
5843
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5844
-
checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7"
5845
-
dependencies = [
5846
-
"proc-macro2",
5847
-
"quote",
5848
-
"syn 2.0.101",
5849
-
]
5850
-
5851
-
[[package]]
5852
-
name = "windows-implement"
5853
-
version = "0.58.0"
5854
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5855
-
checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b"
5856
-
dependencies = [
5857
-
"proc-macro2",
5858
-
"quote",
5859
-
"syn 2.0.101",
5860
-
]
5861
-
5862
-
[[package]]
5863
-
name = "windows-implement"
5864
-
version = "0.60.0"
5865
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5866
-
checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836"
5867
-
dependencies = [
5868
-
"proc-macro2",
5869
-
"quote",
5870
-
"syn 2.0.101",
5871
-
]
5872
-
5873
-
[[package]]
5874
-
name = "windows-interface"
5875
-
version = "0.57.0"
5876
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5877
-
checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7"
5878
-
dependencies = [
5879
-
"proc-macro2",
5880
-
"quote",
5881
-
"syn 2.0.101",
5882
-
]
5883
-
5884
-
[[package]]
5885
-
name = "windows-interface"
5886
-
version = "0.58.0"
5887
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5888
-
checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515"
5889
-
dependencies = [
5890
-
"proc-macro2",
5891
-
"quote",
5892
-
"syn 2.0.101",
5893
-
]
5894
-
5895
-
[[package]]
5896
-
name = "windows-interface"
5897
-
version = "0.59.1"
5898
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5899
-
checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8"
5900
-
dependencies = [
5901
-
"proc-macro2",
5902
-
"quote",
5903
-
"syn 2.0.101",
5904
-
]
5905
-
5906
-
[[package]]
5907
-
name = "windows-link"
5908
-
version = "0.1.1"
5909
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5910
-
checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38"
5911
-
5912
-
[[package]]
5913
-
name = "windows-numerics"
5914
-
version = "0.2.0"
5915
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5916
-
checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1"
5917
-
dependencies = [
5918
-
"windows-core 0.61.0",
5919
-
"windows-link",
5920
-
]
5921
-
5922
-
[[package]]
5923
-
name = "windows-result"
5924
-
version = "0.1.2"
5925
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5926
-
checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8"
5927
-
dependencies = [
5928
-
"windows-targets 0.52.6",
5929
-
]
5930
-
5931
-
[[package]]
5932
-
name = "windows-result"
5933
-
version = "0.2.0"
5934
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5935
-
checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e"
5936
-
dependencies = [
5937
-
"windows-targets 0.52.6",
5938
-
]
5939
-
5940
-
[[package]]
5941
-
name = "windows-result"
5942
-
version = "0.3.2"
5943
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5944
-
checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252"
5945
-
dependencies = [
5946
-
"windows-link",
5947
-
]
5948
-
5949
-
[[package]]
5950
-
name = "windows-strings"
5951
-
version = "0.1.0"
5952
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5953
-
checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10"
5954
-
dependencies = [
5955
-
"windows-result 0.2.0",
5956
-
"windows-targets 0.52.6",
5957
-
]
5958
-
5959
-
[[package]]
5960
-
name = "windows-strings"
5961
-
version = "0.4.0"
5962
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5963
-
checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97"
5964
-
dependencies = [
5965
-
"windows-link",
5966
-
]
5967
-
5968
-
[[package]]
5969
-
name = "windows-sys"
5970
-
version = "0.45.0"
5971
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5972
-
checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
5973
-
dependencies = [
5974
-
"windows-targets 0.42.2",
5975
-
]
5976
-
5977
-
[[package]]
5978
-
name = "windows-sys"
5979
-
version = "0.52.0"
5980
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5981
-
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
5982
-
dependencies = [
5983
-
"windows-targets 0.52.6",
5984
-
]
5985
-
5986
-
[[package]]
5987
-
name = "windows-sys"
5988
-
version = "0.59.0"
5989
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5990
-
checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
5991
-
dependencies = [
5992
-
"windows-targets 0.52.6",
5993
-
]
5994
-
5995
-
[[package]]
5996
-
name = "windows-targets"
5997
-
version = "0.42.2"
5998
-
source = "registry+https://github.com/rust-lang/crates.io-index"
5999
-
checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
6000
-
dependencies = [
6001
-
"windows_aarch64_gnullvm 0.42.2",
6002
-
"windows_aarch64_msvc 0.42.2",
6003
-
"windows_i686_gnu 0.42.2",
6004
-
"windows_i686_msvc 0.42.2",
6005
-
"windows_x86_64_gnu 0.42.2",
6006
-
"windows_x86_64_gnullvm 0.42.2",
6007
-
"windows_x86_64_msvc 0.42.2",
6008
-
]
6009
-
6010
-
[[package]]
6011
-
name = "windows-targets"
6012
-
version = "0.48.5"
6013
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6014
-
checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
6015
-
dependencies = [
6016
-
"windows_aarch64_gnullvm 0.48.5",
6017
-
"windows_aarch64_msvc 0.48.5",
6018
-
"windows_i686_gnu 0.48.5",
6019
-
"windows_i686_msvc 0.48.5",
6020
-
"windows_x86_64_gnu 0.48.5",
6021
-
"windows_x86_64_gnullvm 0.48.5",
6022
-
"windows_x86_64_msvc 0.48.5",
6023
-
]
6024
-
6025
-
[[package]]
6026
-
name = "windows-targets"
6027
-
version = "0.52.6"
6028
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6029
-
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
6030
-
dependencies = [
6031
-
"windows_aarch64_gnullvm 0.52.6",
6032
-
"windows_aarch64_msvc 0.52.6",
6033
-
"windows_i686_gnu 0.52.6",
6034
-
"windows_i686_gnullvm",
6035
-
"windows_i686_msvc 0.52.6",
6036
-
"windows_x86_64_gnu 0.52.6",
6037
-
"windows_x86_64_gnullvm 0.52.6",
6038
-
"windows_x86_64_msvc 0.52.6",
6039
-
]
6040
-
6041
-
[[package]]
6042
-
name = "windows_aarch64_gnullvm"
6043
-
version = "0.42.2"
6044
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6045
-
checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
6046
-
6047
-
[[package]]
6048
-
name = "windows_aarch64_gnullvm"
6049
-
version = "0.48.5"
6050
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6051
-
checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
6052
-
6053
-
[[package]]
6054
-
name = "windows_aarch64_gnullvm"
6055
-
version = "0.52.6"
6056
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6057
-
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
6058
-
6059
-
[[package]]
6060
-
name = "windows_aarch64_msvc"
6061
-
version = "0.42.2"
6062
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6063
-
checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
6064
-
6065
-
[[package]]
6066
-
name = "windows_aarch64_msvc"
6067
-
version = "0.48.5"
6068
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6069
-
checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
6070
-
6071
-
[[package]]
6072
-
name = "windows_aarch64_msvc"
6073
-
version = "0.52.6"
6074
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6075
-
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
6076
-
6077
-
[[package]]
6078
-
name = "windows_i686_gnu"
6079
-
version = "0.42.2"
6080
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6081
-
checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
6082
-
6083
-
[[package]]
6084
-
name = "windows_i686_gnu"
6085
-
version = "0.48.5"
6086
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6087
-
checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
6088
-
6089
-
[[package]]
6090
-
name = "windows_i686_gnu"
6091
-
version = "0.52.6"
6092
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6093
-
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
6094
-
6095
-
[[package]]
6096
-
name = "windows_i686_gnullvm"
6097
-
version = "0.52.6"
6098
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6099
-
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
6100
-
6101
-
[[package]]
6102
-
name = "windows_i686_msvc"
6103
-
version = "0.42.2"
6104
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6105
-
checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
6106
-
6107
-
[[package]]
6108
-
name = "windows_i686_msvc"
6109
-
version = "0.48.5"
6110
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6111
-
checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
6112
-
6113
-
[[package]]
6114
-
name = "windows_i686_msvc"
6115
-
version = "0.52.6"
6116
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6117
-
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
6118
-
6119
-
[[package]]
6120
-
name = "windows_x86_64_gnu"
6121
-
version = "0.42.2"
6122
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6123
-
checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
6124
-
6125
-
[[package]]
6126
-
name = "windows_x86_64_gnu"
6127
-
version = "0.48.5"
6128
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6129
-
checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
6130
-
6131
-
[[package]]
6132
-
name = "windows_x86_64_gnu"
6133
-
version = "0.52.6"
6134
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6135
-
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
6136
-
6137
-
[[package]]
6138
-
name = "windows_x86_64_gnullvm"
6139
-
version = "0.42.2"
6140
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6141
-
checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
6142
-
6143
-
[[package]]
6144
-
name = "windows_x86_64_gnullvm"
6145
-
version = "0.48.5"
6146
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6147
-
checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
6148
-
6149
-
[[package]]
6150
-
name = "windows_x86_64_gnullvm"
6151
-
version = "0.52.6"
6152
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6153
-
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
6154
-
6155
-
[[package]]
6156
-
name = "windows_x86_64_msvc"
6157
-
version = "0.42.2"
6158
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6159
-
checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
6160
-
6161
-
[[package]]
6162
-
name = "windows_x86_64_msvc"
6163
-
version = "0.48.5"
6164
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6165
-
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
6166
-
6167
-
[[package]]
6168
-
name = "windows_x86_64_msvc"
6169
-
version = "0.52.6"
6170
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6171
-
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
6172
-
6173
-
[[package]]
6174
-
name = "winit"
6175
-
version = "0.30.10"
6176
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6177
-
checksum = "b0d05bd8908e14618c9609471db04007e644fd9cce6529756046cfc577f9155e"
6178
-
dependencies = [
6179
-
"ahash",
6180
-
"android-activity",
6181
-
"atomic-waker",
6182
-
"bitflags 2.9.0",
6183
-
"block2",
6184
-
"bytemuck",
6185
-
"calloop",
6186
-
"cfg_aliases",
6187
-
"concurrent-queue",
6188
-
"core-foundation 0.9.4",
6189
-
"core-graphics",
6190
-
"cursor-icon",
6191
-
"dpi",
6192
-
"js-sys",
6193
-
"libc",
6194
-
"memmap2",
6195
-
"ndk 0.9.0",
6196
-
"objc2 0.5.2",
6197
-
"objc2-app-kit 0.2.2",
6198
-
"objc2-foundation 0.2.2",
6199
-
"objc2-ui-kit",
6200
-
"orbclient",
6201
-
"percent-encoding",
6202
-
"pin-project",
6203
-
"raw-window-handle",
6204
-
"redox_syscall 0.4.1",
6205
-
"rustix",
6206
-
"sctk-adwaita",
6207
-
"smithay-client-toolkit",
6208
-
"smol_str",
6209
-
"tracing",
6210
-
"unicode-segmentation",
6211
-
"wasm-bindgen",
6212
-
"wasm-bindgen-futures",
6213
-
"wayland-backend",
6214
-
"wayland-client",
6215
-
"wayland-protocols",
6216
-
"wayland-protocols-plasma",
6217
-
"web-sys",
6218
-
"web-time",
6219
-
"windows-sys 0.52.0",
6220
-
"x11-dl",
6221
-
"x11rb",
6222
-
"xkbcommon-dl",
6223
-
]
6224
-
6225
-
[[package]]
6226
-
name = "winnow"
6227
-
version = "0.7.10"
6228
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6229
-
checksum = "c06928c8748d81b05c9be96aad92e1b6ff01833332f281e8cfca3be4b35fc9ec"
6230
-
dependencies = [
6231
-
"memchr",
6232
-
]
6233
-
6234
-
[[package]]
6235
-
name = "wit-bindgen-rt"
6236
-
version = "0.39.0"
6237
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6238
-
checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1"
6239
-
dependencies = [
6240
-
"bitflags 2.9.0",
6241
-
]
6242
-
6243
-
[[package]]
6244
-
name = "writeable"
6245
-
version = "0.6.1"
6246
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6247
-
checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb"
6248
-
6249
-
[[package]]
6250
-
name = "x11-dl"
6251
-
version = "2.21.0"
6252
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6253
-
checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f"
6254
-
dependencies = [
6255
-
"libc",
6256
-
"once_cell",
6257
-
"pkg-config",
6258
-
]
6259
-
6260
-
[[package]]
6261
-
name = "x11rb"
6262
-
version = "0.13.1"
6263
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6264
-
checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12"
6265
-
dependencies = [
6266
-
"as-raw-xcb-connection",
6267
-
"gethostname",
6268
-
"libc",
6269
-
"libloading",
6270
-
"once_cell",
6271
-
"rustix",
6272
-
"x11rb-protocol",
6273
-
]
6274
-
6275
-
[[package]]
6276
-
name = "x11rb-protocol"
6277
-
version = "0.13.1"
6278
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6279
-
checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d"
6280
-
6281
-
[[package]]
6282
-
name = "xcursor"
6283
-
version = "0.3.8"
6284
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6285
-
checksum = "0ef33da6b1660b4ddbfb3aef0ade110c8b8a781a3b6382fa5f2b5b040fd55f61"
6286
-
6287
-
[[package]]
6288
-
name = "xkbcommon-dl"
6289
-
version = "0.4.2"
6290
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6291
-
checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5"
6292
-
dependencies = [
6293
-
"bitflags 2.9.0",
6294
-
"dlib",
6295
-
"log",
6296
-
"once_cell",
6297
-
"xkeysym",
6298
-
]
6299
-
6300
-
[[package]]
6301
-
name = "xkeysym"
6302
-
version = "0.2.1"
6303
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6304
-
checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56"
6305
-
6306
-
[[package]]
6307
-
name = "xml-rs"
6308
-
version = "0.8.26"
6309
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6310
-
checksum = "a62ce76d9b56901b19a74f19431b0d8b3bc7ca4ad685a746dfd78ca8f4fc6bda"
6311
-
6312
-
[[package]]
6313
-
name = "yazi"
6314
-
version = "0.2.1"
6315
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6316
-
checksum = "e01738255b5a16e78bbb83e7fbba0a1e7dd506905cfc53f4622d89015a03fbb5"
6317
-
6318
-
[[package]]
6319
-
name = "yoke"
6320
-
version = "0.8.0"
6321
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6322
-
checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc"
6323
-
dependencies = [
6324
-
"serde",
6325
-
"stable_deref_trait",
6326
-
"yoke-derive",
6327
-
"zerofrom",
6328
-
]
6329
-
6330
-
[[package]]
6331
-
name = "yoke-derive"
6332
-
version = "0.8.0"
6333
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6334
-
checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6"
6335
-
dependencies = [
6336
-
"proc-macro2",
6337
-
"quote",
6338
-
"syn 2.0.101",
6339
-
"synstructure",
6340
-
]
6341
-
6342
-
[[package]]
6343
-
name = "zeno"
6344
-
version = "0.3.3"
6345
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6346
-
checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524"
6347
-
6348
-
[[package]]
6349
-
name = "zerocopy"
6350
-
version = "0.8.25"
6351
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6352
-
checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb"
6353
-
dependencies = [
6354
-
"zerocopy-derive",
6355
-
]
6356
-
6357
-
[[package]]
6358
-
name = "zerocopy-derive"
6359
-
version = "0.8.25"
6360
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6361
-
checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef"
6362
-
dependencies = [
6363
-
"proc-macro2",
6364
-
"quote",
6365
-
"syn 2.0.101",
6366
-
]
6367
-
6368
-
[[package]]
6369
-
name = "zerofrom"
6370
-
version = "0.1.6"
6371
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6372
-
checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5"
6373
-
dependencies = [
6374
-
"zerofrom-derive",
6375
-
]
6376
-
6377
-
[[package]]
6378
-
name = "zerofrom-derive"
6379
-
version = "0.1.6"
6380
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6381
-
checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
6382
-
dependencies = [
6383
-
"proc-macro2",
6384
-
"quote",
6385
-
"syn 2.0.101",
6386
-
"synstructure",
6387
-
]
6388
-
6389
-
[[package]]
6390
-
name = "zerotrie"
6391
-
version = "0.2.2"
6392
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6393
-
checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595"
6394
-
dependencies = [
6395
-
"displaydoc",
6396
-
"yoke",
6397
-
"zerofrom",
6398
-
]
6399
-
6400
-
[[package]]
6401
-
name = "zerovec"
6402
-
version = "0.11.2"
6403
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6404
-
checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428"
6405
-
dependencies = [
6406
-
"yoke",
6407
-
"zerofrom",
6408
-
"zerovec-derive",
6409
-
]
6410
-
6411
-
[[package]]
6412
-
name = "zerovec-derive"
6413
-
version = "0.11.1"
6414
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6415
-
checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f"
6416
-
dependencies = [
6417
-
"proc-macro2",
6418
-
"quote",
6419
-
"syn 2.0.101",
6420
-
]
6421
-
6422
-
[[package]]
6423
-
name = "zlib-rs"
6424
-
version = "0.5.0"
6425
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6426
-
checksum = "868b928d7949e09af2f6086dfc1e01936064cc7a819253bce650d4e2a2d63ba8"
6427
-
6428
-
[[package]]
6429
-
name = "zune-core"
6430
-
version = "0.4.12"
6431
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6432
-
checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a"
6433
-
6434
-
[[package]]
6435
-
name = "zune-inflate"
6436
-
version = "0.2.54"
6437
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6438
-
checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02"
6439
-
dependencies = [
6440
-
"simd-adler32",
6441
-
]
6442
-
6443
-
[[package]]
6444
-
name = "zune-jpeg"
6445
-
version = "0.4.14"
6446
-
source = "registry+https://github.com/rust-lang/crates.io-index"
6447
-
checksum = "99a5bab8d7dedf81405c4bb1f2b83ea057643d9cb28778cea9eecddeedd2e028"
6448
-
dependencies = [
6449
-
"zune-core",
6450
-
]
-26
vee/Cargo.toml
-26
vee/Cargo.toml
···
1
-
[package]
2
-
name = "vee"
3
-
version = "0.1.0"
4
-
edition = "2024"
5
-
6
-
[dependencies]
7
-
binrw = "0.15.0"
8
-
bytemuck = "1.23.0"
9
-
flate2 = { version = "1.1.1", features = ["rust_backend"] }
10
-
futures-intrusive = "0.5.0"
11
-
glam = { version = "0.30.3", features = ["mint"] }
12
-
half = "2.6.0"
13
-
image = "0.25.6"
14
-
itertools = "0.14.0"
15
-
mesh-tools = { version = "0.1.0", optional = true }
16
-
mint = "0.5.9"
17
-
nalgebra = { version = "0.33.2", features = ["mint"] }
18
-
pollster = "0.4.0"
19
-
strum = { version = "0.27.1", features = ["strum_macros"] }
20
-
strum_macros = "0.27.1"
21
-
tegra_swizzle = "0.4.0"
22
-
texture2ddecoder = "0.1.2"
23
-
wgpu = "25.0.0"
24
-
25
-
[features]
26
-
gltf = ["mesh-tools"]
-1
vee/src/charinfo/mod.rs
-1
vee/src/charinfo/mod.rs
···
1
-
pub mod nx;
-87
vee/src/charinfo/nx.rs
-87
vee/src/charinfo/nx.rs
···
1
-
use binrw::{NullWideString, binrw};
2
-
3
-
#[derive(Debug)]
4
-
#[binrw]
5
-
#[brw(little)]
6
-
pub struct UuidVer4 {
7
-
idc: [u8; 16],
8
-
}
9
-
#[derive(Debug)]
10
-
#[binrw]
11
-
#[brw(little, assert(nickname.len() <= 22))]
12
-
pub struct NxCharInfo {
13
-
create_info: UuidVer4,
14
-
#[brw(pad_size_to = 0x16)]
15
-
pub nickname: NullWideString,
16
-
pub font_region: u8,
17
-
pub favorite_color: u8,
18
-
pub gender: u8,
19
-
pub height: u8,
20
-
pub build: u8,
21
-
pub is_special: u8,
22
-
pub region_move: u8,
23
-
pub faceline_type: u8,
24
-
pub faceline_color: u8,
25
-
pub faceline_wrinkle: u8,
26
-
pub faceline_make: u8,
27
-
pub hair_type: u8,
28
-
pub hair_color: u8,
29
-
pub hair_flip: u8,
30
-
pub eye_type: u8,
31
-
pub eye_color: u8,
32
-
pub eye_scale: u8,
33
-
pub eye_aspect: u8,
34
-
pub eye_rotate: u8,
35
-
pub eye_x: u8,
36
-
pub eye_y: u8,
37
-
pub eyebrow_type: u8,
38
-
pub eyebrow_color: u8,
39
-
pub eyebrow_scale: u8,
40
-
pub eyebrow_aspect: u8,
41
-
pub eyebrow_rotate: u8,
42
-
pub eyebrow_x: u8,
43
-
pub eyebrow_y: u8,
44
-
pub nose_type: u8,
45
-
pub nose_scale: u8,
46
-
pub nose_y: u8,
47
-
pub mouth_type: u8,
48
-
pub mouth_color: u8,
49
-
pub mouth_scale: u8,
50
-
pub mouth_aspect: u8,
51
-
pub mouth_y: u8,
52
-
pub beard_color: u8,
53
-
pub beard_type: u8,
54
-
pub mustache_type: u8,
55
-
pub mustache_scale: u8,
56
-
pub mustache_y: u8,
57
-
pub glass_type: u8,
58
-
pub glass_color: u8,
59
-
pub glass_scale: u8,
60
-
pub glass_y: u8,
61
-
pub mole_type: u8,
62
-
pub mole_scale: u8,
63
-
pub mole_x: u8,
64
-
pub mole_y: u8,
65
-
reserved: u8, /* always zero */
66
-
}
67
-
68
-
#[cfg(test)]
69
-
mod tests {
70
-
use super::*;
71
-
use binrw::BinRead;
72
-
use std::{error::Error, fs::File};
73
-
74
-
type R = Result<(), Box<dyn Error>>;
75
-
76
-
#[test]
77
-
fn mii_deser() -> R {
78
-
let mut mii = File::open(concat!(env!("CARGO_MANIFEST_DIR"), "/../j0.charinfo"))?;
79
-
80
-
let mii = NxCharInfo::read(&mut mii)?;
81
-
82
-
assert_eq!(mii.glass_color, 17);
83
-
assert_eq!(mii.reserved, 0);
84
-
85
-
Ok(())
86
-
}
87
-
}
-12
vee/src/color.rs
-12
vee/src/color.rs
···
1
-
pub mod cafe {
2
-
pub const HAIR_COLOR: [[f32; 4]; 8] = [
3
-
[0.118, 0.102, 0.094, 1.000],
4
-
[0.251, 0.125, 0.063, 1.000],
5
-
[0.361, 0.094, 0.039, 1.000],
6
-
[0.486, 0.227, 0.078, 1.000],
7
-
[0.471, 0.471, 0.502, 1.000],
8
-
[0.306, 0.243, 0.063, 1.000],
9
-
[0.533, 0.345, 0.094, 1.000],
10
-
[0.816, 0.627, 0.290, 1.000],
11
-
];
12
-
}
-8
vee/src/lib.rs
-8
vee/src/lib.rs
-372
vee/src/mask/mod.rs
-372
vee/src/mask/mod.rs
···
1
-
use crate::{
2
-
charinfo::{self, nx::NxCharInfo},
3
-
shape_load::nx::{ResourceShape, SHAPE_MID_DAT},
4
-
tex_load::nx::{ResourceTexture, TEXTURE_MID_SRGB_DAT},
5
-
};
6
-
use binrw::BinRead;
7
-
use image::RgbaImage;
8
-
use nalgebra::{Matrix3x4, Matrix4, Rotation3, Scale2, Vector2, Vector3, matrix, stack};
9
-
use std::{fs::File, io::BufReader};
10
-
11
-
pub mod wgpu_render;
12
-
13
-
const fn tex_scale2dim(scale: f32) -> f32 {
14
-
1.0 + 0.4 * scale
15
-
}
16
-
17
-
// i16 to not lose precision
18
-
const fn tex_rotate2ang(rotate: i16) -> f32 {
19
-
(360.0 / 32.0) * (rotate % 32) as f32
20
-
}
21
-
22
-
const fn tex_unit(x: f32) -> f32 {
23
-
x / 64.0
24
-
}
25
-
const TEX_SCALE_X: f32 = 0.889_614_64;
26
-
const TEX_SCALE_Y: f32 = 0.927_667_5;
27
-
28
-
const TEX_EYE_BASE_X: f32 = tex_unit(0.0);
29
-
const TEX_EYE_BASE_Y: f32 = 18.451_525;
30
-
const TEX_EYE_BASE_W: f32 = tex_unit(342.0);
31
-
const TEX_EYE_BASE_H: f32 = tex_unit(288.0);
32
-
33
-
const TEX_EYEBROW_BASE_X: f32 = tex_unit(0.0);
34
-
const TEX_EYEBROW_BASE_Y: f32 = 16.549_807;
35
-
const TEX_EYEBROW_BASE_W: f32 = tex_unit(324.0);
36
-
const TEX_EYEBROW_BASE_H: f32 = tex_unit(288.0);
37
-
38
-
const TEX_MOUTH_BASE_Y: f32 = 29.25885;
39
-
const TEX_MOUTH_BASE_W: f32 = tex_unit(396.0);
40
-
const TEX_MOUTH_BASE_H: f32 = tex_unit(288.0);
41
-
42
-
const TEX_MUSTACHE_BASE_Y: f32 = 31.763_554;
43
-
const TEX_MUSTACHE_BASE_W: f32 = tex_unit(288.0);
44
-
const TEX_MUSTACHE_BASE_H: f32 = tex_unit(576.0);
45
-
46
-
const TEX_MOLE_BASE_X: f32 = 17.766_165;
47
-
const TEX_MOLE_BASE_Y: f32 = 17.95986;
48
-
const TEX_MOLE_BASE_W: f32 = tex_unit(0.0);
49
-
const TEX_MOLE_BASE_H: f32 = tex_unit(0.0);
50
-
51
-
const EYE_ROT_OFFSET: [u8; 50] = [
52
-
29, 28, 28, 28, 29, 28, 28, 28, 29, 28, 28, 28, 28, 29, 29, 28, 28, 28, 29, 29, 28, 29, 28, 29,
53
-
29, 28, 29, 28, 28, 29, 28, 28, 28, 29, 29, 29, 28, 28, 29, 29, 29, 28, 28, 29, 29, 29, 29, 29,
54
-
28, 28,
55
-
];
56
-
57
-
// Found in RFL, no idea what it is
58
-
const RFL_MAGIC_Y_OFFSET: f32 = 1.160_000_1;
59
-
60
-
// pub struct Masks {
61
-
// eye: [RawMaskPartsDesc; 2],
62
-
// eyebrow: [RawMaskPartsDesc; 2],
63
-
// mouth: RawMaskPartsDesc,
64
-
// moustache: [RawMaskPartsDesc; 2],
65
-
// mole: RawMaskPartsDesc,
66
-
// }
67
-
// impl Masks {
68
-
// fn calc(
69
-
// &self,
70
-
// char_info: NxCharInfo,
71
-
// resolution: i32,
72
-
// left_eye_index: i32,
73
-
// right_eye_index: i32,
74
-
// ) {
75
-
// unimplemented!();
76
-
// }
77
-
// }
78
-
79
-
// pub struct RawMaskPartsDesc {
80
-
// scale: Vector2<f32>,
81
-
// pos: Vector2<f32>,
82
-
// rotation_rads: f32,
83
-
// }
84
-
85
-
// impl RawMaskPartsDesc {}
86
-
87
-
// struct FFLiRawMaskPartsDrawParam {}
88
-
// struct FFLiRawMaskDrawParam {
89
-
// eye: [FFLiRawMaskPartsDrawParam; 2],
90
-
// eyebrow: [FFLiRawMaskPartsDrawParam; 2],
91
-
// mouth: FFLiRawMaskPartsDrawParam,
92
-
// moustache: [FFLiRawMaskPartsDrawParam; 2],
93
-
// mole: FFLiRawMaskPartsDrawParam,
94
-
// fill: FFLiRawMaskPartsDrawParam,
95
-
// }
96
-
97
-
// struct GX2Texture {}
98
-
// struct FFLiRawMaskTextureDesc {
99
-
// eye: [GX2Texture; 2],
100
-
// eyebrow: [GX2Texture; 2],
101
-
// mouth: GX2Texture,
102
-
// moustache: [GX2Texture; 2],
103
-
// mole: GX2Texture,
104
-
// }
105
-
106
-
// //void FFLiInitDrawParamRawMask(FFLiRawMaskDrawParam* pDrawParam, const FFLiCharInfo* pCharInfo, s32 resolution, s32 leftEyeIndex, s32 rightEyeIndex, const FFLiRawMaskTextureDesc* pDesc, FFLiBufferAllocator* pAllocator);
107
-
// fn init_draw_param_raw_mask(
108
-
// draw_parameters: (),
109
-
// char_info: NxCharInfo,
110
-
// resolution: i32,
111
-
// left_eye_index: i32,
112
-
// right_eye_index: i32,
113
-
// texture_desc: (),
114
-
// allocator: (),
115
-
// ) {
116
-
// unimplemented!()
117
-
// }
118
-
119
-
// //void FFLiInvalidateRawMask(FFLiRawMaskDrawParam* pDrawParam);
120
-
// fn invalidate_raw_mask(draw_parameters: ()) {
121
-
// unimplemented!()
122
-
// }
123
-
124
-
// //void FFLiDrawRawMask(const FFLiRawMaskDrawParam* pDrawParam, const FFLiShaderCallback* pCallback);
125
-
// fn draw_raw_mask(draw_parameters: (), shader_callback: ()) {
126
-
// unimplemented!()
127
-
// }
128
-
129
-
// type Mat34 = Matrix3x4<f32>;
130
-
131
-
// pub fn transformation_matrix(
132
-
// scale: Vector2<f32>,
133
-
// translation: Vector2<f32>,
134
-
// rotation_rads: f32,
135
-
// ) -> Matrix4<f32> {
136
-
// let rotation = Rotation3::from_axis_angle(&Vector3::z_axis(), rotation_rads);
137
-
// let rotation = rotation.matrix();
138
-
139
-
// let scale = Scale2::new(scale.x, scale.y).to_homogeneous();
140
-
141
-
// let rot_and_scale = rotation * scale;
142
-
143
-
// let translation = matrix![translation.x; translation.y; 1.0];
144
-
145
-
// let one = matrix![1.0];
146
-
// let mtx = stack![rot_and_scale, translation; 0, one];
147
-
148
-
// mtx
149
-
// }
150
-
151
-
// /// CalcMVMatrix
152
-
// pub fn calc_mv_matrix(p_mv_matrix: &mut Mat34, p_desc: &RawMaskPartsDesc) {
153
-
// // Mat34 m;
154
-
155
-
// // MAT34Scale(pMVMatrix, pDesc->scale.x, pDesc->scale.y, 1.0f);
156
-
// p_mv_matrix.row_mut(0).scale_mut(p_desc.scale.x);
157
-
// p_mv_matrix.row_mut(1).scale_mut(p_desc.scale.y);
158
-
159
-
// let transform_matrix = transformation_matrix(
160
-
// Vector2::<f32>::new(0.889_614_64, 0.927_667_5),
161
-
// p_desc.pos,
162
-
// p_desc.rotation_rads,
163
-
// );
164
-
165
-
// *p_mv_matrix *= transform_matrix;
166
-
// }
167
-
168
-
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
169
-
pub enum ImageOrigin {
170
-
Center,
171
-
Left,
172
-
Right,
173
-
}
174
-
175
-
#[derive(Clone, Copy, Debug)]
176
-
pub struct FacePart {
177
-
pub x: f32,
178
-
pub y: f32,
179
-
pub width: f32,
180
-
pub height: f32,
181
-
pub angle_deg: f32,
182
-
pub origin: ImageOrigin,
183
-
}
184
-
185
-
#[derive(Clone, Copy, Debug)]
186
-
pub struct FaceParts {
187
-
pub eye: [FacePart; 2],
188
-
pub eyebrow: [FacePart; 2],
189
-
pub mouth: FacePart,
190
-
pub mustache: [FacePart; 2],
191
-
pub mole: FacePart,
192
-
}
193
-
194
-
impl FaceParts {
195
-
pub fn init_glasses(info: &NxCharInfo, resolution: f32) -> [FacePart; 2] {
196
-
let resolution = resolution / 64.0;
197
-
198
-
let glass_y = TEX_EYE_BASE_Y + RFL_MAGIC_Y_OFFSET * TEX_SCALE_Y * f32::from(info.glass_y);
199
-
let glass_w = TEX_EYE_BASE_W * tex_scale2dim(info.glass_scale.into());
200
-
let glass_h = TEX_EYE_BASE_H * tex_scale2dim(info.glass_scale.into());
201
-
// let eye_a =
202
-
// tex_rotate2ang((info + EYE_ROT_OFFSET[info.glass_type as usize]).into());
203
-
204
-
let eye_l = FacePart {
205
-
x: resolution * (32.0),
206
-
y: glass_y * resolution,
207
-
width: glass_w * resolution,
208
-
height: glass_h * resolution,
209
-
angle_deg: 360.0 - 0.0,
210
-
origin: ImageOrigin::Left,
211
-
};
212
-
let eye_r = FacePart {
213
-
x: resolution * (32.0),
214
-
y: glass_y * resolution,
215
-
width: glass_w * resolution,
216
-
height: glass_h * resolution,
217
-
angle_deg: 0.0,
218
-
origin: ImageOrigin::Right,
219
-
};
220
-
221
-
[eye_l, eye_r]
222
-
}
223
-
pub fn init(info: &NxCharInfo, resolution: f32) -> FaceParts {
224
-
// RFLi_TEX_UNIT
225
-
let resolution = resolution / 64.0;
226
-
227
-
let eye_spacing_x = TEX_EYE_BASE_X + TEX_SCALE_X * f32::from(info.eye_x);
228
-
let eye_y = TEX_EYE_BASE_Y + RFL_MAGIC_Y_OFFSET * TEX_SCALE_Y * f32::from(info.eye_y);
229
-
let eye_w = TEX_EYE_BASE_W * tex_scale2dim(info.eye_scale.into());
230
-
let eye_h = TEX_EYE_BASE_H * tex_scale2dim(info.eye_scale.into());
231
-
let eye_a =
232
-
tex_rotate2ang((info.eye_rotate + EYE_ROT_OFFSET[info.eye_type as usize]).into());
233
-
234
-
let eye_l = FacePart {
235
-
x: resolution * (32.0 + eye_spacing_x),
236
-
y: eye_y * resolution,
237
-
width: eye_w * resolution,
238
-
height: eye_h * resolution,
239
-
angle_deg: 360.0 - eye_a,
240
-
origin: ImageOrigin::Left,
241
-
};
242
-
let eye_r = FacePart {
243
-
x: resolution * (32.0 - eye_spacing_x),
244
-
y: eye_y * resolution,
245
-
width: eye_w * resolution,
246
-
height: eye_h * resolution,
247
-
angle_deg: eye_a,
248
-
origin: ImageOrigin::Right,
249
-
};
250
-
251
-
let eb_spacing_x = TEX_EYEBROW_BASE_X + TEX_SCALE_X * f32::from(info.eyebrow_x);
252
-
let eb_y =
253
-
TEX_EYEBROW_BASE_Y + RFL_MAGIC_Y_OFFSET * TEX_SCALE_Y * f32::from(info.eyebrow_y);
254
-
let eb_w = TEX_EYEBROW_BASE_W * tex_scale2dim(info.eyebrow_scale.into());
255
-
let eb_h = TEX_EYEBROW_BASE_H * tex_scale2dim(info.eyebrow_scale.into());
256
-
let eb_a = tex_rotate2ang(
257
-
(info.eyebrow_rotate + EYE_ROT_OFFSET[info.eyebrow_type as usize]).into(),
258
-
);
259
-
let eb_l = FacePart {
260
-
x: resolution * (32.0 + eb_spacing_x),
261
-
y: eb_y * resolution,
262
-
width: eb_w * resolution,
263
-
height: eb_h * resolution,
264
-
angle_deg: 360.0 - eb_a,
265
-
origin: ImageOrigin::Left,
266
-
};
267
-
let eb_r = FacePart {
268
-
x: resolution * (32.0 - eb_spacing_x),
269
-
y: eb_y * resolution,
270
-
width: eb_w * resolution,
271
-
height: eb_h * resolution,
272
-
angle_deg: eb_a,
273
-
origin: ImageOrigin::Right,
274
-
};
275
-
276
-
let mouth_y = TEX_MOUTH_BASE_Y + RFL_MAGIC_Y_OFFSET * TEX_SCALE_Y * f32::from(info.mouth_y);
277
-
let mouth_w = TEX_MOUTH_BASE_W * tex_scale2dim(info.mouth_scale.into());
278
-
let mouth_h = TEX_MOUTH_BASE_H * tex_scale2dim(info.mouth_scale.into());
279
-
280
-
let mouth = FacePart {
281
-
x: resolution * 32.0,
282
-
y: mouth_y * resolution,
283
-
width: mouth_w * resolution,
284
-
height: mouth_h * resolution,
285
-
angle_deg: 0.0,
286
-
origin: ImageOrigin::Center,
287
-
};
288
-
289
-
let mus_y =
290
-
TEX_MUSTACHE_BASE_Y + RFL_MAGIC_Y_OFFSET * TEX_SCALE_Y * f32::from(info.mustache_y);
291
-
let mus_w = TEX_MUSTACHE_BASE_W * tex_scale2dim(info.mustache_scale.into());
292
-
let mus_h = TEX_MUSTACHE_BASE_H * tex_scale2dim(info.mustache_scale.into());
293
-
294
-
let mus_l = FacePart {
295
-
x: resolution * 32.0,
296
-
y: mus_y * resolution,
297
-
width: mus_w * resolution,
298
-
height: mus_h * resolution,
299
-
angle_deg: 0.0,
300
-
origin: ImageOrigin::Left,
301
-
};
302
-
let mus_r = FacePart {
303
-
x: resolution * 32.0,
304
-
y: mus_y * resolution,
305
-
width: mus_w * resolution,
306
-
height: mus_h * resolution,
307
-
angle_deg: 0.0,
308
-
origin: ImageOrigin::Right,
309
-
};
310
-
311
-
let mole_x = TEX_MOLE_BASE_X + 2.0 * TEX_SCALE_X * f32::from(info.mole_x);
312
-
let mole_y = TEX_MOLE_BASE_Y + RFL_MAGIC_Y_OFFSET * TEX_SCALE_Y * f32::from(info.mole_y);
313
-
let mole_w = TEX_MOLE_BASE_W * tex_scale2dim(info.mole_scale.into());
314
-
let mole_h = TEX_MOLE_BASE_H * tex_scale2dim(info.mole_scale.into());
315
-
316
-
let mole = FacePart {
317
-
x: mole_x * resolution,
318
-
y: mole_y * resolution,
319
-
width: mole_w * resolution,
320
-
height: mole_h * resolution,
321
-
angle_deg: 0.0,
322
-
origin: ImageOrigin::Center,
323
-
};
324
-
325
-
FaceParts {
326
-
eye: [eye_l, eye_r],
327
-
eyebrow: [eb_l, eb_r],
328
-
mouth,
329
-
mustache: [mus_l, mus_r],
330
-
mole,
331
-
}
332
-
}
333
-
}
334
-
335
-
#[cfg(test)]
336
-
mod tests {
337
-
use super::*;
338
-
use std::{error::Error, f32::consts::PI};
339
-
340
-
type R = Result<(), Box<dyn Error>>;
341
-
342
-
// #[test]
343
-
// fn scale_test() {
344
-
// let mut mtx = Matrix3x4::identity();
345
-
346
-
// calc_mv_matrix(
347
-
// &mut mtx,
348
-
// &RawMaskPartsDesc {
349
-
// scale: Vector2::<f32>::new(1.0, 1.0),
350
-
// pos: Vector2::zeros(),
351
-
// rotation_rads: PI,
352
-
// },
353
-
// );
354
-
// }
355
-
//
356
-
#[test]
357
-
fn mask_shape() -> R {
358
-
let mut bin = BufReader::new(File::open(SHAPE_MID_DAT)?);
359
-
360
-
let res = ResourceShape::read(&mut bin)?;
361
-
362
-
let mut shape = res.mask[1];
363
-
let mut shape = shape.shape_data(&mut bin)?;
364
-
365
-
// let mut file = File::open(SHAPE_MID_DAT)?;
366
-
367
-
// let gltf = shape.gltf(&mut file)?;
368
-
// gltf.export_glb("jas.glb")?;
369
-
//
370
-
Ok(())
371
-
}
372
-
}
-739
vee/src/mask/wgpu_render.rs
-739
vee/src/mask/wgpu_render.rs
···
1
-
use super::{FacePart, FaceParts, ImageOrigin, TEX_SCALE_X, TEX_SCALE_Y};
2
-
use crate::{
3
-
charinfo::nx::NxCharInfo,
4
-
shape_load::nx::{ResourceShape, ShapeData},
5
-
tex_load::nx::ResourceTexture,
6
-
};
7
-
use binrw::BinRead;
8
-
use glam::{UVec2, Vec2, Vec3, uvec2, vec3};
9
-
use image::{DynamicImage, GenericImageView, RgbaImage};
10
-
use nalgebra::{Matrix3, Matrix4, Vector3};
11
-
use std::{error::Error, fs::File, io::BufReader, mem};
12
-
use wgpu::{DeviceDescriptor, TexelCopyTextureInfo, util::DeviceExt};
13
-
14
-
const SHADER: &str = r"
15
-
16
-
struct MvpUniform {
17
-
mtx: mat4x4<f32>,
18
-
};
19
-
@group(1) @binding(0) // 1.
20
-
var<uniform> mvp: MvpUniform;
21
-
22
-
23
-
struct VertexOutput {
24
-
@builtin(position) clip_position: vec4<f32>,
25
-
@location(0) tex_coords: vec2<f32>,
26
-
}
27
-
28
-
@vertex
29
-
fn vs_main(
30
-
@location(0) position: vec3<f32>,
31
-
@location(1) tex_coords: vec2<f32>
32
-
) -> VertexOutput {
33
-
var out: VertexOutput;
34
-
out.tex_coords = tex_coords;
35
-
out.clip_position = mvp.mtx * vec4<f32>(position, 1.0);
36
-
return out;
37
-
}
38
-
39
-
@group(0) @binding(0)
40
-
var t_diffuse: texture_2d<f32>;
41
-
@group(0) @binding(1)
42
-
var s_diffuse: sampler;
43
-
44
-
@fragment
45
-
fn fs_main(in: VertexOutput) -> @location(0) vec4<f32> {
46
-
let color = textureSample(t_diffuse, s_diffuse, in.tex_coords);
47
-
48
-
if (color.a == 0.0) {
49
-
discard;
50
-
}
51
-
52
-
return color;
53
-
}
54
-
";
55
-
56
-
#[repr(C)]
57
-
#[derive(Debug, Copy, Clone, bytemuck::Pod, bytemuck::Zeroable)]
58
-
struct MvpMatrixUniform {
59
-
mvp_matrix: [[f32; 4]; 4],
60
-
}
61
-
62
-
pub struct RenderContext {
63
-
size: UVec2,
64
-
shape: Vec<RenderShape>,
65
-
}
66
-
67
-
impl RenderContext {
68
-
pub fn new(
69
-
char: &NxCharInfo,
70
-
(file_shape, file_texture): (&mut BufReader<File>, &mut BufReader<File>),
71
-
) -> Result<Self, Box<dyn Error>> {
72
-
let res_shape = ResourceShape::read(file_shape)?;
73
-
let res_texture = ResourceTexture::read(file_texture)?;
74
-
75
-
let mask = FaceParts::init(&char, 256.0);
76
-
let part = mask.eye[0];
77
-
let tex = res_texture.eye[char.eye_type as usize];
78
-
79
-
let (vertices, indices, mtx) = quad(
80
-
part.x,
81
-
part.y,
82
-
part.width,
83
-
part.height,
84
-
part.angle_deg,
85
-
part.origin,
86
-
256.0,
87
-
);
88
-
89
-
let tex = tex.get_image(file_texture)?.unwrap();
90
-
91
-
let eye_render_shape = RenderShape {
92
-
vertices,
93
-
indices,
94
-
tex: image::DynamicImage::ImageRgba8(tex),
95
-
mvp_matrix: mtx,
96
-
};
97
-
98
-
let part = mask.eye[1];
99
-
let tex = res_texture.eye[char.eye_type as usize];
100
-
101
-
let (vertices, indices, mtx) = quad(
102
-
part.x,
103
-
part.y,
104
-
part.width,
105
-
part.height,
106
-
part.angle_deg,
107
-
part.origin,
108
-
256.0,
109
-
);
110
-
111
-
let tex = tex.get_image(file_texture)?.unwrap();
112
-
113
-
let eye_1_render_shape = RenderShape {
114
-
vertices,
115
-
indices,
116
-
tex: image::DynamicImage::ImageRgba8(tex),
117
-
mvp_matrix: mtx,
118
-
};
119
-
120
-
// brows
121
-
122
-
let part = mask.eyebrow[0];
123
-
let tex = res_texture.eyebrow[char.eyebrow_type as usize];
124
-
125
-
let (vertices, indices, mtx) = quad(
126
-
part.x,
127
-
part.y,
128
-
part.width,
129
-
part.height,
130
-
part.angle_deg,
131
-
part.origin,
132
-
256.0,
133
-
);
134
-
135
-
let tex = tex.get_image(file_texture)?.unwrap();
136
-
137
-
let eyebrow_render_shape = RenderShape {
138
-
vertices,
139
-
indices,
140
-
tex: image::DynamicImage::ImageRgba8(tex),
141
-
mvp_matrix: mtx,
142
-
};
143
-
144
-
let part = mask.eyebrow[1];
145
-
let tex = res_texture.eyebrow[char.eyebrow_type as usize];
146
-
147
-
let (vertices, indices, mtx) = quad(
148
-
part.x,
149
-
part.y,
150
-
part.width,
151
-
part.height,
152
-
part.angle_deg,
153
-
part.origin,
154
-
256.0,
155
-
);
156
-
157
-
let tex = tex.get_image(file_texture)?.unwrap();
158
-
159
-
let eyebrow_1_render_shape = RenderShape {
160
-
vertices,
161
-
indices,
162
-
tex: image::DynamicImage::ImageRgba8(tex),
163
-
mvp_matrix: mtx,
164
-
};
165
-
166
-
// mouth
167
-
let part = mask.mouth;
168
-
let tex = res_texture.mouth[char.mouth_type as usize];
169
-
170
-
let (vertices, indices, mtx) = quad(
171
-
part.x,
172
-
part.y,
173
-
part.width,
174
-
part.height,
175
-
part.angle_deg,
176
-
part.origin,
177
-
256.0,
178
-
);
179
-
180
-
let tex = tex.get_image(file_texture)?.unwrap();
181
-
182
-
let mouth_render_shape = RenderShape {
183
-
vertices,
184
-
indices,
185
-
tex: image::DynamicImage::ImageRgba8(tex),
186
-
mvp_matrix: mtx,
187
-
};
188
-
189
-
Ok(RenderContext {
190
-
size: uvec2(256, 256),
191
-
shape: vec![
192
-
eye_render_shape,
193
-
eye_1_render_shape,
194
-
eyebrow_render_shape,
195
-
eyebrow_1_render_shape,
196
-
mouth_render_shape,
197
-
],
198
-
})
199
-
}
200
-
201
-
pub fn new_glasses(
202
-
char: &NxCharInfo,
203
-
(file_shape, file_texture): (&mut BufReader<File>, &mut BufReader<File>),
204
-
) -> Result<Self, Box<dyn Error>> {
205
-
let res_shape = ResourceShape::read(file_shape)?;
206
-
let res_texture = ResourceTexture::read(file_texture)?;
207
-
208
-
let glasses = FaceParts::init_glasses(char, 256.0);
209
-
210
-
// let mask = FaceParts::init(&char, 256.0);
211
-
// let part = mask[0];
212
-
let tex = res_texture.glass[char.glass_type as usize];
213
-
let glass_l = glasses[0];
214
-
215
-
let (vertices, indices, mtx) = quad(
216
-
glass_l.x,
217
-
glass_l.y,
218
-
glass_l.width,
219
-
glass_l.height,
220
-
glass_l.angle_deg,
221
-
glass_l.origin,
222
-
256.0,
223
-
);
224
-
225
-
let tex = tex.get_image(file_texture)?.unwrap();
226
-
227
-
let glass_l_render_shape = RenderShape {
228
-
vertices,
229
-
indices,
230
-
tex: image::DynamicImage::ImageRgba8(tex.clone()),
231
-
mvp_matrix: mtx,
232
-
};
233
-
234
-
let glass_r = glasses[1];
235
-
236
-
let (vertices, indices, mtx) = quad(
237
-
glass_r.x,
238
-
glass_r.y,
239
-
glass_r.width,
240
-
glass_r.height,
241
-
glass_r.angle_deg,
242
-
glass_r.origin,
243
-
256.0,
244
-
);
245
-
246
-
let glass_r_render_shape = RenderShape {
247
-
vertices,
248
-
indices,
249
-
tex: image::DynamicImage::ImageRgba8(tex),
250
-
mvp_matrix: mtx,
251
-
};
252
-
253
-
Ok(RenderContext {
254
-
size: uvec2(512, 256),
255
-
shape: vec![glass_l_render_shape, glass_r_render_shape],
256
-
})
257
-
}
258
-
}
259
-
260
-
struct RenderShape {
261
-
vertices: Vec<Vertex>,
262
-
indices: Vec<u32>,
263
-
tex: DynamicImage,
264
-
mvp_matrix: Matrix4<f32>,
265
-
}
266
-
267
-
#[repr(C)]
268
-
#[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)]
269
-
struct Vertex {
270
-
position: [f32; 3],
271
-
tex_coords: [f32; 2],
272
-
}
273
-
274
-
impl Vertex {
275
-
const ATTRIBS: [wgpu::VertexAttribute; 2] =
276
-
wgpu::vertex_attr_array![0 => Float32x3, 1 => Float32x2];
277
-
278
-
fn desc() -> wgpu::VertexBufferLayout<'static> {
279
-
use std::mem;
280
-
wgpu::VertexBufferLayout {
281
-
array_stride: mem::size_of::<Vertex>() as wgpu::BufferAddress,
282
-
step_mode: wgpu::VertexStepMode::Vertex,
283
-
attributes: &Self::ATTRIBS,
284
-
}
285
-
}
286
-
}
287
-
288
-
fn model_view_matrix(
289
-
translation: mint::Vector3<f32>,
290
-
scale: mint::Vector3<f32>,
291
-
rot_z: f32,
292
-
) -> nalgebra::Matrix4<f32> {
293
-
let mut scale = nalgebra::Vector3::<f32>::from(scale);
294
-
let translation = nalgebra::Vector3::<f32>::from(translation);
295
-
296
-
let mut mtx = nalgebra::Matrix4::identity();
297
-
mtx.append_nonuniform_scaling_mut(&scale);
298
-
mtx *= nalgebra::Rotation3::from_euler_angles(0.0, 0.0, rot_z.to_radians()).to_homogeneous();
299
-
mtx.append_nonuniform_scaling_mut(&nalgebra::Vector3::new(TEX_SCALE_X, TEX_SCALE_Y, 1.0));
300
-
mtx.append_translation_mut(&translation);
301
-
302
-
mtx
303
-
}
304
-
305
-
fn v2(x: f32, y: f32) -> [f32; 3] {
306
-
[x, y, 0.0]
307
-
}
308
-
309
-
// https://github.com/SMGCommunity/Petari/blob/6e9ae741a99bb32e6ffbb230a88c976f539dde70/src/RVLFaceLib/RFL_MakeTex.c#L817
310
-
fn quad(
311
-
x: f32,
312
-
y: f32,
313
-
width: f32,
314
-
height: f32,
315
-
rot_z: f32,
316
-
origin: ImageOrigin,
317
-
resolution: f32,
318
-
) -> (Vec<Vertex>, Vec<u32>, nalgebra::Matrix4<f32>) {
319
-
// Mtx rot;
320
-
// Mtx pos;
321
-
// f32 baseX;
322
-
// s16 s0;
323
-
// s16 s1;
324
-
let base_x: f32;
325
-
let s0: f32;
326
-
let s1: f32;
327
-
328
-
let mv_mtx = model_view_matrix(
329
-
vec3(x, y, 0.0).into(),
330
-
vec3(width, height, 1.0).into(),
331
-
rot_z,
332
-
);
333
-
334
-
let p_mtx = Matrix4::new_orthographic(0.0, resolution, 0.0, resolution, -200.0, 200.0);
335
-
let mvp_mtx = p_mtx * mv_mtx;
336
-
337
-
match origin {
338
-
ImageOrigin::Center => {
339
-
base_x = -0.5;
340
-
s0 = 1.0;
341
-
s1 = 0.0;
342
-
}
343
-
ImageOrigin::Right => {
344
-
base_x = -1.0;
345
-
s0 = 1.0;
346
-
s1 = 0.0;
347
-
}
348
-
ImageOrigin::Left => {
349
-
base_x = 0.0;
350
-
s0 = 0.0;
351
-
s1 = 1.0;
352
-
}
353
-
}
354
-
355
-
(
356
-
vec![
357
-
Vertex {
358
-
position: v2(1.0 + base_x, -0.5),
359
-
tex_coords: [s0, 0.0],
360
-
},
361
-
Vertex {
362
-
position: v2(1.0 + base_x, 0.5),
363
-
tex_coords: [s0, 1.0],
364
-
},
365
-
Vertex {
366
-
position: v2(base_x, 0.5),
367
-
tex_coords: [s1, 1.0],
368
-
},
369
-
Vertex {
370
-
position: v2(base_x, -0.5),
371
-
tex_coords: [s1, 0.0],
372
-
},
373
-
],
374
-
vec![0, 1, 2, 0, 2, 3],
375
-
mvp_mtx,
376
-
)
377
-
}
378
-
379
-
#[allow(clippy::too_many_lines)]
380
-
pub async fn render_context_wgpu(render_context: RenderContext) -> DynamicImage {
381
-
let instance = wgpu::Instance::new(&wgpu::InstanceDescriptor {
382
-
backends: wgpu::Backends::all(),
383
-
..Default::default()
384
-
});
385
-
let adapter = instance
386
-
.request_adapter(&wgpu::RequestAdapterOptions {
387
-
power_preference: wgpu::PowerPreference::default(),
388
-
compatible_surface: None,
389
-
force_fallback_adapter: false,
390
-
})
391
-
.await
392
-
.unwrap();
393
-
let (device, queue) = adapter
394
-
.request_device(&DeviceDescriptor::default())
395
-
.await
396
-
.unwrap();
397
-
398
-
let texture_desc = wgpu::TextureDescriptor {
399
-
size: wgpu::Extent3d {
400
-
width: render_context.size.x,
401
-
height: render_context.size.y,
402
-
depth_or_array_layers: 1,
403
-
},
404
-
mip_level_count: 1,
405
-
sample_count: 1,
406
-
dimension: wgpu::TextureDimension::D2,
407
-
format: wgpu::TextureFormat::Rgba8UnormSrgb,
408
-
usage: wgpu::TextureUsages::COPY_SRC | wgpu::TextureUsages::RENDER_ATTACHMENT,
409
-
label: None,
410
-
view_formats: &[wgpu::TextureFormat::Rgba8UnormSrgb],
411
-
};
412
-
let texture = device.create_texture(&texture_desc);
413
-
let texture_view = texture.create_view(&Default::default());
414
-
let u32_size = std::mem::size_of::<u32>() as u32;
415
-
let output_buffer_size =
416
-
wgpu::BufferAddress::from(u32_size * render_context.size.x * render_context.size.y);
417
-
let output_buffer_desc = wgpu::BufferDescriptor {
418
-
size: output_buffer_size,
419
-
usage: wgpu::BufferUsages::COPY_DST
420
-
// this tells wpgu that we want to read this buffer from the cpu
421
-
| wgpu::BufferUsages::MAP_READ,
422
-
label: None,
423
-
mapped_at_creation: false,
424
-
};
425
-
let output_buffer = device.create_buffer(&output_buffer_desc);
426
-
427
-
let mut encoder =
428
-
device.create_command_encoder(&wgpu::CommandEncoderDescriptor { label: None });
429
-
430
-
for shape in render_context.shape {
431
-
let vertex_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor {
432
-
label: Some("Vertex Buffer"),
433
-
contents: bytemuck::cast_slice(&shape.vertices),
434
-
usage: wgpu::BufferUsages::VERTEX,
435
-
});
436
-
437
-
let index_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor {
438
-
label: Some("Index Buffer"),
439
-
contents: bytemuck::cast_slice(&shape.indices),
440
-
usage: wgpu::BufferUsages::INDEX,
441
-
});
442
-
443
-
let shape_texture_rgba = shape.tex.to_rgba8();
444
-
let shape_texture_dimensions = shape_texture_rgba.dimensions();
445
-
let shape_texture_size = wgpu::Extent3d {
446
-
width: shape_texture_dimensions.0,
447
-
height: shape_texture_dimensions.1,
448
-
// All textures are stored as 3D, we represent our 2D texture
449
-
// by setting depth to 1.
450
-
depth_or_array_layers: 1,
451
-
};
452
-
let shape_diffuse_texture = device.create_texture(&wgpu::TextureDescriptor {
453
-
size: shape_texture_size,
454
-
mip_level_count: 1, // We'll talk about this a little later
455
-
sample_count: 1,
456
-
dimension: wgpu::TextureDimension::D2,
457
-
// Most images are stored using sRGB, so we need to reflect that here.
458
-
format: wgpu::TextureFormat::Rgba8UnormSrgb,
459
-
// TEXTURE_BINDING tells wgpu that we want to use this texture in shaders
460
-
// COPY_DST means that we want to copy data to this texture
461
-
usage: wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::COPY_DST,
462
-
label: Some("diffuse_texture"),
463
-
// This is the same as with the SurfaceConfig. It
464
-
// specifies what texture formats can be used to
465
-
// create TextureViews for this texture. The base
466
-
// texture format (Rgba8UnormSrgb in this case) is
467
-
// always supported. Note that using a different
468
-
// texture format is not supported on the WebGL2
469
-
// backend.
470
-
view_formats: &[],
471
-
});
472
-
473
-
queue.write_texture(
474
-
TexelCopyTextureInfo {
475
-
texture: &shape_diffuse_texture,
476
-
mip_level: 0,
477
-
origin: wgpu::Origin3d::ZERO,
478
-
aspect: wgpu::TextureAspect::All,
479
-
},
480
-
&shape_texture_rgba,
481
-
wgpu::TexelCopyBufferLayout {
482
-
offset: 0,
483
-
bytes_per_row: Some(4 * shape_texture_dimensions.0),
484
-
rows_per_image: Some(shape_texture_dimensions.1),
485
-
},
486
-
shape_texture_size,
487
-
);
488
-
489
-
let shape_diffuse_texture_view =
490
-
shape_diffuse_texture.create_view(&wgpu::TextureViewDescriptor::default());
491
-
let shape_diffuse_sampler = device.create_sampler(&wgpu::SamplerDescriptor {
492
-
address_mode_u: wgpu::AddressMode::ClampToEdge,
493
-
address_mode_v: wgpu::AddressMode::ClampToEdge,
494
-
address_mode_w: wgpu::AddressMode::ClampToEdge,
495
-
mag_filter: wgpu::FilterMode::Linear,
496
-
min_filter: wgpu::FilterMode::Nearest,
497
-
mipmap_filter: wgpu::FilterMode::Nearest,
498
-
..Default::default()
499
-
});
500
-
501
-
let texture_bind_group_layout =
502
-
device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor {
503
-
entries: &[
504
-
wgpu::BindGroupLayoutEntry {
505
-
binding: 0,
506
-
visibility: wgpu::ShaderStages::FRAGMENT,
507
-
ty: wgpu::BindingType::Texture {
508
-
multisampled: false,
509
-
view_dimension: wgpu::TextureViewDimension::D2,
510
-
sample_type: wgpu::TextureSampleType::Float { filterable: true },
511
-
},
512
-
count: None,
513
-
},
514
-
wgpu::BindGroupLayoutEntry {
515
-
binding: 1,
516
-
visibility: wgpu::ShaderStages::FRAGMENT,
517
-
// This should match the filterable field of the
518
-
// corresponding Texture entry above.
519
-
ty: wgpu::BindingType::Sampler(wgpu::SamplerBindingType::Filtering),
520
-
count: None,
521
-
},
522
-
],
523
-
label: Some("texture_bind_group_layout"),
524
-
});
525
-
526
-
let shape_diffuse_bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor {
527
-
layout: &texture_bind_group_layout,
528
-
entries: &[
529
-
wgpu::BindGroupEntry {
530
-
binding: 0,
531
-
resource: wgpu::BindingResource::TextureView(&shape_diffuse_texture_view),
532
-
},
533
-
wgpu::BindGroupEntry {
534
-
binding: 1,
535
-
resource: wgpu::BindingResource::Sampler(&shape_diffuse_sampler),
536
-
},
537
-
],
538
-
label: Some("diffuse_bind_group"),
539
-
});
540
-
541
-
let mvp_matrix = shape.mvp_matrix.into();
542
-
let mvp_uniform = MvpMatrixUniform { mvp_matrix };
543
-
544
-
let mvp_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor {
545
-
label: Some("MvpMatrix Buffer"),
546
-
contents: bytemuck::cast_slice(&[mvp_uniform]),
547
-
usage: wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST,
548
-
});
549
-
550
-
let mvp_bind_group_layout =
551
-
device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor {
552
-
entries: &[wgpu::BindGroupLayoutEntry {
553
-
binding: 0,
554
-
visibility: wgpu::ShaderStages::VERTEX,
555
-
ty: wgpu::BindingType::Buffer {
556
-
ty: wgpu::BufferBindingType::Uniform,
557
-
has_dynamic_offset: false,
558
-
min_binding_size: None,
559
-
},
560
-
count: None,
561
-
}],
562
-
label: Some("mvp_bind_group_layout"),
563
-
});
564
-
565
-
let mvp_bind_group = device.create_bind_group(&wgpu::BindGroupDescriptor {
566
-
layout: &mvp_bind_group_layout,
567
-
entries: &[wgpu::BindGroupEntry {
568
-
binding: 0,
569
-
resource: mvp_buffer.as_entire_binding(),
570
-
}],
571
-
label: Some("mvp_bind_group"),
572
-
});
573
-
574
-
let shader = wgpu::ShaderSource::Wgsl(SHADER.into());
575
-
let shader_module = device.create_shader_module(wgpu::ShaderModuleDescriptor {
576
-
label: Some("Shader"),
577
-
source: shader,
578
-
});
579
-
let render_pipeline_layout =
580
-
device.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor {
581
-
label: Some("Render Pipeline Layout"),
582
-
bind_group_layouts: &[&texture_bind_group_layout, &mvp_bind_group_layout],
583
-
push_constant_ranges: &[],
584
-
});
585
-
let render_pipeline = device.create_render_pipeline(&wgpu::RenderPipelineDescriptor {
586
-
label: Some("Render Pipeline"),
587
-
layout: Some(&render_pipeline_layout),
588
-
vertex: wgpu::VertexState {
589
-
module: &shader_module,
590
-
entry_point: Some("vs_main"),
591
-
buffers: &[Vertex::desc()],
592
-
compilation_options: Default::default(),
593
-
},
594
-
fragment: Some(wgpu::FragmentState {
595
-
module: &shader_module,
596
-
entry_point: Some("fs_main"),
597
-
targets: &[Some(wgpu::ColorTargetState {
598
-
format: texture_desc.format,
599
-
blend: Some(wgpu::BlendState::ALPHA_BLENDING),
600
-
write_mask: wgpu::ColorWrites::ALL,
601
-
})],
602
-
compilation_options: Default::default(),
603
-
}),
604
-
primitive: wgpu::PrimitiveState {
605
-
topology: wgpu::PrimitiveTopology::TriangleList,
606
-
strip_index_format: None,
607
-
front_face: wgpu::FrontFace::Ccw,
608
-
cull_mode: Some(wgpu::Face::Back),
609
-
// Setting this to anything other than Fill requires Features::NON_FILL_POLYGON_MODE
610
-
polygon_mode: wgpu::PolygonMode::Fill,
611
-
// Requires Features::DEPTH_CLIP_CONTROL
612
-
unclipped_depth: false,
613
-
// Requires Features::CONSERVATIVE_RASTERIZATION
614
-
conservative: false,
615
-
},
616
-
depth_stencil: None,
617
-
multisample: wgpu::MultisampleState {
618
-
count: 1,
619
-
mask: !0,
620
-
alpha_to_coverage_enabled: false,
621
-
},
622
-
// If the pipeline will be used with a multiview render pass, this
623
-
// indicates how many array layers the attachments will have.
624
-
multiview: None,
625
-
cache: None,
626
-
});
627
-
628
-
{
629
-
let render_pass_desc = wgpu::RenderPassDescriptor {
630
-
label: Some("Render Pass"),
631
-
color_attachments: &[Some(wgpu::RenderPassColorAttachment {
632
-
view: &texture_view,
633
-
resolve_target: None,
634
-
ops: wgpu::Operations {
635
-
load: wgpu::LoadOp::Load,
636
-
store: wgpu::StoreOp::Store,
637
-
},
638
-
})],
639
-
depth_stencil_attachment: None,
640
-
occlusion_query_set: None,
641
-
timestamp_writes: None,
642
-
};
643
-
let mut render_pass = encoder.begin_render_pass(&render_pass_desc);
644
-
645
-
render_pass.set_pipeline(&render_pipeline);
646
-
render_pass.set_bind_group(0, &shape_diffuse_bind_group, &[]);
647
-
render_pass.set_bind_group(1, &mvp_bind_group, &[]);
648
-
render_pass.set_vertex_buffer(0, vertex_buffer.slice(..));
649
-
render_pass.set_index_buffer(index_buffer.slice(..), wgpu::IndexFormat::Uint32);
650
-
651
-
render_pass.draw_indexed(0..shape.indices.len() as u32, 0, 0..1);
652
-
}
653
-
}
654
-
encoder.copy_texture_to_buffer(
655
-
wgpu::TexelCopyTextureInfo {
656
-
aspect: wgpu::TextureAspect::All,
657
-
texture: &texture,
658
-
mip_level: 0,
659
-
origin: wgpu::Origin3d::ZERO,
660
-
},
661
-
wgpu::TexelCopyBufferInfo {
662
-
buffer: &output_buffer,
663
-
layout: wgpu::TexelCopyBufferLayout {
664
-
offset: 0,
665
-
bytes_per_row: Some(u32_size * render_context.size.x),
666
-
rows_per_image: Some(render_context.size.x),
667
-
},
668
-
},
669
-
texture_desc.size,
670
-
);
671
-
672
-
queue.submit(Some(encoder.finish()));
673
-
674
-
let mut image = None;
675
-
// We need to scope the mapping variables so that we can
676
-
// unmap the buffer
677
-
{
678
-
let buffer_slice = output_buffer.slice(..);
679
-
680
-
// NOTE: We have to create the mapping THEN device.poll() before await
681
-
// the future. Otherwise the application will freeze.
682
-
let (tx, rx) = futures_intrusive::channel::shared::oneshot_channel();
683
-
buffer_slice.map_async(wgpu::MapMode::Read, move |result| {
684
-
tx.send(result).unwrap();
685
-
});
686
-
device.poll(wgpu::PollType::Wait).unwrap();
687
-
rx.receive().await.unwrap().unwrap();
688
-
689
-
let data = &buffer_slice.get_mapped_range()[..];
690
-
691
-
use image::{ImageBuffer, Rgba};
692
-
let buffer: RgbaImage = ImageBuffer::<Rgba<u8>, _>::from_raw(
693
-
render_context.size.x,
694
-
render_context.size.y,
695
-
data.to_owned(),
696
-
)
697
-
.unwrap();
698
-
// buffer.save("image.png").unwrap();
699
-
image = Some(DynamicImage::ImageRgba8(buffer));
700
-
}
701
-
output_buffer.unmap();
702
-
703
-
image.unwrap()
704
-
}
705
-
706
-
#[cfg(test)]
707
-
mod tests {
708
-
use crate::mask::{FaceParts, NxCharInfo};
709
-
use crate::shape_load::nx::{ResourceShape, SHAPE_MID_DAT};
710
-
use crate::tex_load::nx::{ResourceTexture, TEXTURE_MID_SRGB_DAT};
711
-
use binrw::BinRead;
712
-
use glam::uvec2;
713
-
714
-
use super::*;
715
-
use std::{error::Error, fs::File, io::BufReader};
716
-
717
-
type R = Result<(), Box<dyn Error>>;
718
-
719
-
#[test]
720
-
#[allow(clippy::too_many_lines)]
721
-
fn test_render() -> R {
722
-
let mut tex_file = BufReader::new(File::open(TEXTURE_MID_SRGB_DAT)?);
723
-
let mut tex_shape = BufReader::new(File::open(SHAPE_MID_DAT)?);
724
-
725
-
let mut char =
726
-
File::open(concat!(env!("CARGO_MANIFEST_DIR"), "/../Jasmine.charinfo")).unwrap();
727
-
let char = NxCharInfo::read(&mut char).unwrap();
728
-
729
-
let image = pollster::block_on(render_context_wgpu(RenderContext::new(
730
-
// &FaceParts::init(&char, 256.0),
731
-
&char,
732
-
(&mut tex_shape, &mut tex_file),
733
-
)?));
734
-
735
-
image.save("image.png")?;
736
-
737
-
Ok(())
738
-
}
739
-
}
-1
vee/src/shape_load/mod.rs
-1
vee/src/shape_load/mod.rs
···
1
-
pub mod nx;
-387
vee/src/shape_load/nx.rs
-387
vee/src/shape_load/nx.rs
···
1
-
use crate::utils::{ReadSeek, Vec3PackedSnorm, inflate_bytes, read_byte_slice, u16_to_f32};
2
-
use binrw::{BinRead, Endian};
3
-
use std::fs::File;
4
-
use std::{
5
-
error::Error,
6
-
io::{Cursor, Read, Seek, SeekFrom},
7
-
};
8
-
9
-
pub const SHAPE_MID_DAT: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/ShapeMid.dat");
10
-
#[cfg(target_family = "wasm")]
11
-
pub const SHAPE_MID_DAT_LOADED: &[u8] = include_bytes!("../../../ShapeMid.dat");
12
-
13
-
#[cfg(feature = "gltf")]
14
-
use mesh_tools::GltfBuilder;
15
-
16
-
enum AttributeType {
17
-
/// Vertex positions. Format: `AttributeFormat_16_16_16_16_Float`
18
-
Position = 0, // `AttributeFormat_16_16_16_16_Float`
19
-
Normal = 1, // `AttributeFormat_10_10_10_2_Snorm`
20
-
Uv = 2, // `AttributeFormat_16_16_Float`
21
-
Tangent = 3, // `AttributeFormat_8_8_8_8_Snorm`
22
-
Param = 4, // `AttributeFormat_8_8_8_8_Unorm`
23
-
}
24
-
25
-
#[derive(Debug, Clone)]
26
-
pub struct ShapeData {
27
-
pub positions: Vec<[f32; 3]>,
28
-
pub indices: Vec<u16>,
29
-
pub normals: Option<Vec<[f32; 3]>>,
30
-
pub uvs: Option<Vec<[f32; 2]>>,
31
-
pub color_params: Option<Vec<u8>>,
32
-
}
33
-
impl ShapeData {
34
-
#[cfg(feature = "gltf")]
35
-
fn gltf(&self, _bounding_box: [[f32; 3]; 2]) -> GltfBuilder {
36
-
let mut builder = GltfBuilder::new();
37
-
38
-
let ShapeData {
39
-
positions,
40
-
indices,
41
-
normals: _,
42
-
uvs: _,
43
-
color_params: _,
44
-
} = self;
45
-
46
-
let material = builder.create_basic_material(
47
-
Some("Hair texture".to_string()),
48
-
[0.118, 0.102, 0.094, 1.000],
49
-
);
50
-
51
-
let mesh = builder.create_simple_mesh(
52
-
Some("Mii Shape".to_string()),
53
-
positions.as_flattened(),
54
-
indices,
55
-
// normals.clone().map(|v| v.into_flattened()).as_deref(),
56
-
// uvs.clone().map(|v| v.into_flattened()).as_deref(),
57
-
None,
58
-
None,
59
-
Some(material),
60
-
);
61
-
62
-
let mii_shape_node = builder.add_node(
63
-
Some("Mii Node".to_string()),
64
-
Some(mesh),
65
-
Some([0.0, 0.0, 0.0]),
66
-
None,
67
-
None,
68
-
);
69
-
70
-
builder.add_scene(Some("Mii Scene".to_string()), Some(vec![mii_shape_node]));
71
-
72
-
builder
73
-
}
74
-
}
75
-
76
-
impl BinRead for ShapeData {
77
-
type Args<'a> = ResourceShapeAttribute;
78
-
79
-
fn read_options<R: Read + Seek>(
80
-
reader: &mut R,
81
-
endian: binrw::Endian,
82
-
args: Self::Args<'_>,
83
-
) -> binrw::BinResult<Self> {
84
-
const PER_VERTEX_SIZE: u32 = 8;
85
-
const PER_INDEX_SIZE: u32 = 2;
86
-
87
-
// let offset = u32::read_options(reader, endian, ())?;
88
-
// let saved_position = reader.stream_position()?;
89
-
90
-
// Read positions
91
-
reader.seek(SeekFrom::Start(u64::from(
92
-
args.attr_offset[AttributeType::Position as usize],
93
-
)))?;
94
-
95
-
let vertex_count = args.attr_size[AttributeType::Position as usize] / PER_VERTEX_SIZE;
96
-
97
-
let mut positions = vec![];
98
-
for _vertex in 0..vertex_count {
99
-
positions.push({
100
-
let positions = <[u16; 3]>::read_options(reader, endian, ())?;
101
-
let _ = <u16>::read_options(reader, endian, ())?;
102
-
103
-
// Skip 2 bytes for padding
104
-
// let _ = reader.take(2);
105
-
106
-
positions.map(u16_to_f32)
107
-
});
108
-
}
109
-
110
-
// Read indices
111
-
reader.seek(SeekFrom::Start(u64::from(args.index_offset)))?;
112
-
113
-
let index_count = args.index_size / PER_INDEX_SIZE;
114
-
115
-
let mut indices = vec![];
116
-
for _index in 0..index_count {
117
-
let value = <u16>::read_options(reader, endian, ())?;
118
-
indices.push(value);
119
-
}
120
-
121
-
// Read normals
122
-
let normals = if args.is_valid_attribute(AttributeType::Normal) {
123
-
reader.seek(SeekFrom::Start(u64::from(
124
-
args.attr_offset[AttributeType::Normal as usize],
125
-
)))?;
126
-
127
-
let mut normals = vec![];
128
-
for _vertex in 0..vertex_count {
129
-
let packed = <u32>::read_options(reader, endian, ())?;
130
-
normals.push(Vec3PackedSnorm(packed).unpack());
131
-
}
132
-
133
-
Some(normals)
134
-
} else {
135
-
None
136
-
};
137
-
138
-
// Read UVs
139
-
let uvs = if args.is_valid_attribute(AttributeType::Uv) {
140
-
reader.seek(SeekFrom::Start(u64::from(
141
-
args.attr_offset[AttributeType::Uv as usize],
142
-
)))?;
143
-
144
-
let mut uvs = vec![];
145
-
for _vertex in 0..vertex_count {
146
-
uvs.push(<[u16; 2]>::read_options(reader, endian, ())?.map(u16_to_f32));
147
-
}
148
-
149
-
Some(uvs)
150
-
} else {
151
-
None
152
-
};
153
-
154
-
// Read Params (Colors)
155
-
let color_params = if args.is_valid_attribute(AttributeType::Param) {
156
-
reader.seek(SeekFrom::Start(u64::from(
157
-
args.attr_offset[AttributeType::Param as usize],
158
-
)))?;
159
-
160
-
let color_count = args.attr_size[AttributeType::Param as usize] / PER_VERTEX_SIZE;
161
-
162
-
let mut color_params = vec![];
163
-
for _color in 0..color_count {
164
-
color_params.push(<u8>::read_options(reader, endian, ())?);
165
-
}
166
-
167
-
Some(color_params)
168
-
} else {
169
-
None
170
-
};
171
-
172
-
// // Read from an offset with a provided base offset.
173
-
// reader.seek(SeekFrom::Start(args + offset as u64))?;
174
-
// let value = u16::read_options(reader, endian, ())?;
175
-
176
-
// reader.seek(SeekFrom::Start(saved_position))?;
177
-
178
-
Ok(ShapeData {
179
-
positions,
180
-
indices,
181
-
normals,
182
-
uvs,
183
-
color_params,
184
-
})
185
-
}
186
-
}
187
-
#[derive(BinRead, Debug, Clone, Copy)]
188
-
pub struct ResourceCommonAttribute {
189
-
pub(crate) offset: u32,
190
-
pub(crate) size: u32,
191
-
pub(crate) size_compressed: u32,
192
-
pub(crate) compression_level: u8,
193
-
pub(crate) memory_level: u8,
194
-
pad: u16,
195
-
}
196
-
#[derive(BinRead, Default, Debug, Clone, Copy)]
197
-
pub struct ResourceShapeAttribute {
198
-
pub attr_offset: [u32; 5],
199
-
pub attr_size: [u32; 5],
200
-
pub index_offset: u32,
201
-
pub index_size: u32,
202
-
pub bounding_box: [[f32; 3]; 2],
203
-
}
204
-
impl ResourceShapeAttribute {
205
-
fn is_valid_attribute(&self, attr_type: AttributeType) -> bool {
206
-
// assert!(attr_type as usize < AttributeType::End as usize);
207
-
self.attr_size[attr_type as usize] != 0
208
-
}
209
-
}
210
-
211
-
#[derive(BinRead, Debug, Clone, Copy)]
212
-
pub struct ShapeElement {
213
-
pub common: ResourceCommonAttribute,
214
-
pub shape: ResourceShapeAttribute,
215
-
}
216
-
217
-
impl ShapeElement {
218
-
/// # Errors
219
-
/// Can error if:
220
-
/// - Shape data is in a malformed zlib format
221
-
/// - Writing out shape data file errors
222
-
/// - Parsing vertices and etc from data fails
223
-
pub fn shape_data(&mut self, file: &mut dyn ReadSeek) -> Result<ShapeData, Box<dyn Error>> {
224
-
// exporter set boundingbox
225
-
226
-
let shape_data = read_byte_slice(
227
-
file,
228
-
self.common.offset.into(),
229
-
self.common.size.try_into()?,
230
-
)?;
231
-
232
-
let shape_data = inflate_bytes(&shape_data)?;
233
-
234
-
if !cfg!(target_family = "wasm") {
235
-
std::fs::write("./shape.dat", shape_data.clone())?;
236
-
}
237
-
238
-
let data =
239
-
ShapeData::read_options(&mut Cursor::new(shape_data), Endian::Little, self.shape)?;
240
-
241
-
Ok(data)
242
-
}
243
-
244
-
/// # Errors
245
-
/// Can error if:
246
-
/// - Shape data cannot be parsed
247
-
#[cfg(feature = "gltf")]
248
-
pub fn gltf(&mut self, file: &mut File) -> Result<GltfBuilder, Box<dyn Error>> {
249
-
let data = self.shape_data(file)?;
250
-
251
-
Ok(data.gltf(self.shape.bounding_box))
252
-
}
253
-
}
254
-
255
-
#[derive(BinRead, Debug, Clone, Copy)]
256
-
pub struct ResourceShapeHairTransform {
257
-
front_translate: [f32; 3],
258
-
front_rotate: [f32; 3],
259
-
side_translate: [f32; 3],
260
-
side_rotate: [f32; 3],
261
-
top_translate: [f32; 3],
262
-
top_rotate: [f32; 3],
263
-
}
264
-
265
-
#[derive(BinRead, Debug, Clone, Copy)]
266
-
pub struct ResourceShapeFacelineTransform {
267
-
hair_translate: [f32; 3],
268
-
nose_translate: [f32; 3],
269
-
beard_translate: [f32; 3],
270
-
}
271
-
272
-
#[derive(Clone, Copy, Debug)]
273
-
pub enum Shape {
274
-
Beard,
275
-
FaceLine,
276
-
Mask,
277
-
HatNormal,
278
-
HatCap,
279
-
ForeheadNormal,
280
-
ForeheadCap,
281
-
HairNormal,
282
-
HairCap,
283
-
Glasses,
284
-
Nose,
285
-
NoseLine,
286
-
HairTransform,
287
-
FaceLineTransform,
288
-
}
289
-
#[derive(Clone, Copy)]
290
-
pub enum GenericResourceShape {
291
-
Element(ShapeElement),
292
-
HairTransform(ResourceShapeHairTransform),
293
-
FaceLineTransform(ResourceShapeFacelineTransform),
294
-
}
295
-
296
-
#[derive(BinRead, Debug, Clone, Copy)]
297
-
#[br(little, magic = b"NFSR")]
298
-
pub struct ResourceShape {
299
-
ver: u32,
300
-
file_size: u32,
301
-
max_size: [u32; 12],
302
-
max_alignment: [u32; 12],
303
-
pub beard: [ShapeElement; 4],
304
-
pub face_line: [ShapeElement; 12],
305
-
pub mask: [ShapeElement; 12],
306
-
pub hat_normal: [ShapeElement; 132],
307
-
pub hat_cap: [ShapeElement; 132],
308
-
pub forehead_normal: [ShapeElement; 132],
309
-
pub forehead_cap: [ShapeElement; 132],
310
-
pub hair_normal: [ShapeElement; 132],
311
-
pub hair_cap: [ShapeElement; 132],
312
-
313
-
pub glasses: [ShapeElement; 1],
314
-
315
-
pub nose: [ShapeElement; 18],
316
-
pub nose_line: [ShapeElement; 18],
317
-
318
-
pub hair_transform: [ResourceShapeHairTransform; 132],
319
-
pub face_line_transform: [ResourceShapeFacelineTransform; 12],
320
-
}
321
-
322
-
impl ResourceShape {
323
-
#[allow(clippy::must_use_candidate)]
324
-
pub fn fetch_shape(&self, shape: Shape, index: usize) -> Option<GenericResourceShape> {
325
-
let shape_el = |x: &ShapeElement| GenericResourceShape::Element(*x);
326
-
let hair_t = |x: &ResourceShapeHairTransform| GenericResourceShape::HairTransform(*x);
327
-
let fl_t = |x: &ResourceShapeFacelineTransform| GenericResourceShape::FaceLineTransform(*x);
328
-
329
-
match shape {
330
-
Shape::Beard => self.beard.get(index).map(shape_el),
331
-
Shape::FaceLine => self.face_line.get(index).map(shape_el),
332
-
Shape::Mask => self.mask.get(index).map(shape_el),
333
-
Shape::HatNormal => self.hat_normal.get(index).map(shape_el),
334
-
Shape::HatCap => self.hat_cap.get(index).map(shape_el),
335
-
Shape::ForeheadNormal => self.forehead_normal.get(index).map(shape_el),
336
-
Shape::ForeheadCap => self.forehead_cap.get(index).map(shape_el),
337
-
Shape::HairNormal => self.hair_normal.get(index).map(shape_el),
338
-
Shape::HairCap => self.hair_cap.get(index).map(shape_el),
339
-
Shape::Glasses => self.glasses.get(index).map(shape_el),
340
-
Shape::Nose => self.nose.get(index).map(shape_el),
341
-
Shape::NoseLine => self.nose_line.get(index).map(shape_el),
342
-
Shape::HairTransform => self.hair_transform.get(index).map(hair_t),
343
-
Shape::FaceLineTransform => self.face_line_transform.get(index).map(fl_t),
344
-
}
345
-
}
346
-
}
347
-
348
-
#[cfg(test)]
349
-
mod tests {
350
-
use super::*;
351
-
use half::f16;
352
-
use std::{error::Error, fs::File, io::BufReader};
353
-
354
-
type R = Result<(), Box<dyn Error>>;
355
-
356
-
#[test]
357
-
fn read() -> R {
358
-
let mut bin = BufReader::new(File::open(SHAPE_MID_DAT)?);
359
-
360
-
let _ = ResourceShape::read(&mut bin)?;
361
-
362
-
Ok(())
363
-
}
364
-
365
-
#[test]
366
-
#[cfg(feature = "gltf")]
367
-
fn jas() -> R {
368
-
let mut bin = BufReader::new(File::open(SHAPE_MID_DAT)?);
369
-
370
-
let res = ResourceShape::read(&mut bin)?;
371
-
372
-
let mut shape = res.hair_normal[123];
373
-
374
-
let mut file = File::open(SHAPE_MID_DAT)?;
375
-
376
-
let gltf = shape.gltf(&mut file)?;
377
-
gltf.export_glb("jas.glb")?;
378
-
379
-
Ok(())
380
-
}
381
-
382
-
#[test]
383
-
fn u16_to_f16_to_f32() {
384
-
let within_tolerance = (1.0 - f16::from_bits(15360).to_f32()).abs() < 1.0;
385
-
assert!(within_tolerance);
386
-
}
387
-
}
-1
vee/src/tex_load/mod.rs
-1
vee/src/tex_load/mod.rs
···
1
-
pub mod nx;
-251
vee/src/tex_load/nx.rs
-251
vee/src/tex_load/nx.rs
···
1
-
use std::error::Error;
2
-
3
-
use crate::{
4
-
shape_load::nx::ResourceCommonAttribute,
5
-
utils::{ReadSeek, inflate_bytes, read_byte_slice},
6
-
};
7
-
use binrw::BinRead;
8
-
use image::{ImageBuffer, Rgba, RgbaImage};
9
-
10
-
pub const TEXTURE_MID_SRGB_DAT: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/NXTextureMidSRGB.dat");
11
-
12
-
#[derive(BinRead, Debug, Clone, Copy)]
13
-
pub struct ResourceTextureAttribute {
14
-
alignment: u32,
15
-
pub width: u16,
16
-
pub height: u16,
17
-
format: u8,
18
-
mip_count: u8,
19
-
tile_mode: u8,
20
-
pad: [u8; 1],
21
-
}
22
-
23
-
#[derive(BinRead, Debug, Clone, Copy)]
24
-
pub struct TextureElement {
25
-
pub common: ResourceCommonAttribute,
26
-
pub texture: ResourceTextureAttribute,
27
-
}
28
-
use strum_macros::FromRepr;
29
-
use tegra_swizzle::{block_height_mip0, div_round_up, swizzle::deswizzle_block_linear};
30
-
31
-
// Format rundown:
32
-
// https://www.reedbeta.com/blog/understanding-bcn-texture-compression-formats/#comparison-table
33
-
#[derive(FromRepr, Debug)]
34
-
enum ResourceTextureFormat {
35
-
R = 0, // R8Unorm (Ffl Name)
36
-
Rb = 1, // R8B8Unorm
37
-
Rgba = 2, // R8B8G8A8Unorm
38
-
Bc4 = 3, // Bc4Unorm (Compressed R)
39
-
Bc5 = 4, // Bc5Unorm (Compressed Rb)
40
-
Bc7 = 5, // Bc7Unorm (Compressed Rgba)
41
-
Astc4x4 = 6, // Astc4x4Unorm (Compressed Rgba)
42
-
}
43
-
44
-
impl TextureElement {
45
-
pub fn get_texture_bytes(&self, file: &mut dyn ReadSeek) -> Result<Vec<u8>, Box<dyn Error>> {
46
-
let tex_data = read_byte_slice(
47
-
file,
48
-
self.common.offset.into(),
49
-
self.common.size_compressed.try_into()?,
50
-
)?;
51
-
52
-
let tex_data = inflate_bytes(&tex_data)?;
53
-
54
-
let needs_swizzling = self.texture.tile_mode == 0;
55
-
56
-
let tex_data = if needs_swizzling {
57
-
let block_size =
58
-
match ResourceTextureFormat::from_repr(self.texture.format as usize).unwrap() {
59
-
ResourceTextureFormat::R
60
-
| ResourceTextureFormat::Rb
61
-
| ResourceTextureFormat::Rgba => 1,
62
-
ResourceTextureFormat::Bc4
63
-
| ResourceTextureFormat::Bc5
64
-
| ResourceTextureFormat::Bc7
65
-
| ResourceTextureFormat::Astc4x4 => 4,
66
-
};
67
-
68
-
let bytes_per_pixel =
69
-
match ResourceTextureFormat::from_repr(self.texture.format as usize).unwrap() {
70
-
ResourceTextureFormat::R
71
-
| ResourceTextureFormat::Rb
72
-
| ResourceTextureFormat::Rgba => 1,
73
-
ResourceTextureFormat::Bc4 => 8,
74
-
ResourceTextureFormat::Bc5
75
-
| ResourceTextureFormat::Bc7
76
-
| ResourceTextureFormat::Astc4x4 => 16,
77
-
};
78
-
79
-
let height = self.texture.height.into();
80
-
let block_height = block_height_mip0(div_round_up(height, block_size));
81
-
82
-
// panic!("{}", tex_data.len());
83
-
deswizzle_block_linear(
84
-
div_round_up(self.texture.width.into(), block_size),
85
-
div_round_up(self.texture.height.into(), block_size),
86
-
1,
87
-
&tex_data,
88
-
block_height,
89
-
bytes_per_pixel,
90
-
)?
91
-
} else {
92
-
tex_data
93
-
};
94
-
95
-
Ok(tex_data)
96
-
}
97
-
98
-
pub fn get_uncompressed_bytes(
99
-
&self,
100
-
file: &mut dyn ReadSeek,
101
-
) -> Result<Option<Vec<u8>>, Box<dyn Error>> {
102
-
if self.texture.width == 0 || self.texture.height == 0 {
103
-
return Ok(None);
104
-
}
105
-
106
-
let tex_data = self.get_texture_bytes(file)?;
107
-
assert!(!tex_data.is_empty());
108
-
109
-
let mut tex_data_decoded =
110
-
vec![0; (u32::from(self.texture.width) * u32::from(self.texture.height)) as usize];
111
-
match ResourceTextureFormat::from_repr(self.texture.format as usize).unwrap() {
112
-
ResourceTextureFormat::Bc7 => {
113
-
texture2ddecoder::decode_bc7(
114
-
&tex_data,
115
-
self.texture.width.into(),
116
-
self.texture.height.into(),
117
-
&mut tex_data_decoded,
118
-
)?;
119
-
}
120
-
ResourceTextureFormat::Bc4 => {
121
-
texture2ddecoder::decode_bc4(
122
-
&tex_data,
123
-
self.texture.width.into(),
124
-
self.texture.height.into(),
125
-
&mut tex_data_decoded,
126
-
)?;
127
-
128
-
// Convert R to Rgba
129
-
tex_data_decoded = tex_data_decoded
130
-
.iter()
131
-
.map(|x| {
132
-
let [_, _, w, _] = x.to_le_bytes();
133
-
u32::from_le_bytes([w, w, w, w])
134
-
})
135
-
.collect();
136
-
}
137
-
ResourceTextureFormat::Bc5 => {
138
-
texture2ddecoder::decode_bc5(
139
-
&tex_data,
140
-
self.texture.width.into(),
141
-
self.texture.height.into(),
142
-
&mut tex_data_decoded,
143
-
)?;
144
-
145
-
// Convert Rb to Rgba
146
-
tex_data_decoded = tex_data_decoded
147
-
.iter()
148
-
.map(|x| {
149
-
let [w, a, _, _] = x.to_le_bytes();
150
-
u32::from_le_bytes([w, w, w, a])
151
-
})
152
-
.collect();
153
-
}
154
-
ResourceTextureFormat::R => {
155
-
tex_data_decoded = tex_data
156
-
.iter()
157
-
.map(|x| u32::from_le_bytes([*x, *x, *x, 255]))
158
-
.collect();
159
-
}
160
-
ResourceTextureFormat::Astc4x4 => {
161
-
texture2ddecoder::decode_astc_4_4(
162
-
&tex_data,
163
-
self.texture.width.into(),
164
-
self.texture.height.into(),
165
-
&mut tex_data_decoded,
166
-
)?;
167
-
}
168
-
e => unimplemented!("{e:?} is not decoded yet"),
169
-
}
170
-
171
-
// U32 to 4x U8
172
-
let tex_data_decoded: Vec<u8> = tex_data_decoded
173
-
.iter()
174
-
.flat_map(|x| {
175
-
let [b, g, r, a] = x.to_le_bytes();
176
-
[r, g, b, a]
177
-
})
178
-
.collect();
179
-
180
-
Ok(Some(tex_data_decoded))
181
-
}
182
-
pub fn get_image(&self, file: &mut dyn ReadSeek) -> Result<Option<RgbaImage>, Box<dyn Error>> {
183
-
let bytes = match self.get_uncompressed_bytes(file) {
184
-
Ok(Some(bytes)) => bytes,
185
-
Ok(None) => return Ok(None),
186
-
Err(e) => return Err(e),
187
-
};
188
-
189
-
let img: ImageBuffer<Rgba<u8>, Vec<u8>> = image::RgbaImage::from_raw(
190
-
self.texture.width.into(),
191
-
self.texture.height.into(),
192
-
bytes,
193
-
)
194
-
.unwrap();
195
-
196
-
Ok(Some(img))
197
-
}
198
-
}
199
-
200
-
#[derive(BinRead, Clone, Copy)]
201
-
#[br(little, magic = b"NFTR")]
202
-
pub struct ResourceTexture {
203
-
ver: u32,
204
-
file_size: u32,
205
-
max_size: [u32; 11],
206
-
max_alignment: [u32; 11],
207
-
pub hat: [TextureElement; 132],
208
-
pub eye: [TextureElement; 62],
209
-
pub eyebrow: [TextureElement; 24],
210
-
pub beard: [TextureElement; 2],
211
-
pub wrinkle: [TextureElement; 12],
212
-
pub makeup: [TextureElement; 12],
213
-
pub glass: [TextureElement; 20],
214
-
pub mole: [TextureElement; 2],
215
-
pub mouth: [TextureElement; 37],
216
-
pub mustache: [TextureElement; 6],
217
-
pub noseline: [TextureElement; 18],
218
-
}
219
-
220
-
#[cfg(test)]
221
-
mod tests {
222
-
use super::*;
223
-
use std::{error::Error, fs::File, io::BufReader};
224
-
225
-
type R = Result<(), Box<dyn Error>>;
226
-
227
-
#[test]
228
-
fn read() -> R {
229
-
let mut bin = BufReader::new(File::open(TEXTURE_MID_SRGB_DAT)?);
230
-
231
-
let _ = ResourceTexture::read(&mut bin)?;
232
-
233
-
Ok(())
234
-
}
235
-
236
-
#[test]
237
-
fn eye_tex() -> R {
238
-
let mut bin = BufReader::new(File::open(TEXTURE_MID_SRGB_DAT)?);
239
-
240
-
let res = ResourceTexture::read(&mut bin)?;
241
-
242
-
let res = res.eye[0];
243
-
244
-
let tex = res.get_image(&mut BufReader::new(File::open(TEXTURE_MID_SRGB_DAT)?))?;
245
-
246
-
if let Some(tex) = tex {
247
-
tex.save("./tex.png")?;
248
-
}
249
-
Ok(())
250
-
}
251
-
}
-65
vee/src/utils.rs
-65
vee/src/utils.rs
···
1
-
use flate2::read::ZlibDecoder;
2
-
use std::{
3
-
error::Error,
4
-
io::{self, Read, SeekFrom},
5
-
};
6
-
7
-
pub fn u16_to_f32(num: u16) -> f32 {
8
-
half::f16::from_bits(num).to_f32()
9
-
}
10
-
11
-
/// Signed, normalized Vec3 + w component packed in a u32.
12
-
/// [x: 10; y: 10; z: 10; w: 2]
13
-
pub struct Vec3PackedSnorm(pub u32);
14
-
15
-
impl Vec3PackedSnorm {
16
-
/// The w component is discarded.
17
-
#[allow(clippy::cast_precision_loss, clippy::cast_possible_wrap)]
18
-
pub fn unpack(self) -> [f32; 3] {
19
-
let packed = self.0;
20
-
21
-
let nx = (packed << 22) as i32 >> 22;
22
-
let ny = (packed << 12) as i32 >> 22;
23
-
let nz = (packed << 2) as i32 >> 22;
24
-
25
-
[nx as f32 / 511.0, ny as f32 / 511.0, nz as f32 / 511.0]
26
-
}
27
-
}
28
-
29
-
/// Abstraction over anything that can be read as Seek or Read
30
-
pub trait ReadSeek: std::io::Seek + std::io::Read {}
31
-
impl<T: ?Sized> ReadSeek for T where T: std::io::Seek + std::io::Read {}
32
-
33
-
pub(crate) fn read_byte_slice(
34
-
file: &mut dyn ReadSeek, // Dynamic param: Anything that impl's Read + Seek
35
-
start: u64,
36
-
count: usize,
37
-
) -> Result<Vec<u8>, Box<dyn Error>> {
38
-
file.seek(SeekFrom::Start(start))?;
39
-
let mut buf = vec![0; count];
40
-
file.read_exact(&mut buf)?;
41
-
42
-
Ok(buf)
43
-
}
44
-
45
-
pub(crate) fn inflate_bytes(bytes: &[u8]) -> io::Result<Vec<u8>> {
46
-
let mut z = ZlibDecoder::new(bytes);
47
-
// z.read_to_string(&mut s)?;
48
-
let mut vec = Vec::new();
49
-
z.read_to_end(&mut vec)?;
50
-
Ok(vec)
51
-
}
52
-
53
-
#[cfg(test)]
54
-
mod tests {
55
-
use super::Vec3PackedSnorm;
56
-
57
-
#[test]
58
-
fn vec3_packed_snorm_test() {
59
-
for test in [0x567a_67ca, 0x567_a6436, 0x5675_9fca, 0x5675_9c36] {
60
-
for x in Vec3PackedSnorm(test).unpack() {
61
-
assert!(x.abs() <= 1.0, "Not normalised!");
62
-
}
63
-
}
64
-
}
65
-
}
vee/tex.png
vee/tex.png
This is a binary file and will not be displayed.
+6450
vfl/Cargo.lock
+6450
vfl/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.29"
8
+
source = "registry+https://github.com/rust-lang/crates.io-index"
9
+
checksum = "ec3672c180e71eeaaac3a541fbbc5f5ad4def8b747c595ad30d674e43049f7b0"
10
+
dependencies = [
11
+
"ab_glyph_rasterizer",
12
+
"owned_ttf_parser",
13
+
]
14
+
15
+
[[package]]
16
+
name = "ab_glyph_rasterizer"
17
+
version = "0.1.8"
18
+
source = "registry+https://github.com/rust-lang/crates.io-index"
19
+
checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046"
20
+
21
+
[[package]]
22
+
name = "accesskit"
23
+
version = "0.18.0"
24
+
source = "registry+https://github.com/rust-lang/crates.io-index"
25
+
checksum = "becf0eb5215b6ecb0a739c31c21bd83c4f326524c9b46b7e882d77559b60a529"
26
+
27
+
[[package]]
28
+
name = "accesskit_consumer"
29
+
version = "0.27.0"
30
+
source = "registry+https://github.com/rust-lang/crates.io-index"
31
+
checksum = "d0bf66a7bf0b7ea4fd7742d50b64782a88f99217cf246b3f93b4162528dde520"
32
+
dependencies = [
33
+
"accesskit",
34
+
"hashbrown",
35
+
"immutable-chunkmap",
36
+
]
37
+
38
+
[[package]]
39
+
name = "accesskit_macos"
40
+
version = "0.19.0"
41
+
source = "registry+https://github.com/rust-lang/crates.io-index"
42
+
checksum = "09e230718177753b4e4ad9e1d9f6cfc2f4921212d4c1c480b253f526babb258d"
43
+
dependencies = [
44
+
"accesskit",
45
+
"accesskit_consumer",
46
+
"hashbrown",
47
+
"objc2 0.5.2",
48
+
"objc2-app-kit 0.2.2",
49
+
"objc2-foundation 0.2.2",
50
+
]
51
+
52
+
[[package]]
53
+
name = "accesskit_windows"
54
+
version = "0.25.0"
55
+
source = "registry+https://github.com/rust-lang/crates.io-index"
56
+
checksum = "65178f3df98a51e4238e584fcb255cb1a4f9111820848eeddd37663be40a625f"
57
+
dependencies = [
58
+
"accesskit",
59
+
"accesskit_consumer",
60
+
"hashbrown",
61
+
"paste",
62
+
"static_assertions",
63
+
"windows 0.58.0",
64
+
"windows-core 0.58.0",
65
+
]
66
+
67
+
[[package]]
68
+
name = "accesskit_winit"
69
+
version = "0.25.0"
70
+
source = "registry+https://github.com/rust-lang/crates.io-index"
71
+
checksum = "34d941bb8c414caba6e206de669c7dc0dbeb305640ea890772ee422a40e6b89f"
72
+
dependencies = [
73
+
"accesskit",
74
+
"accesskit_macos",
75
+
"accesskit_windows",
76
+
"raw-window-handle",
77
+
"winit",
78
+
]
79
+
80
+
[[package]]
81
+
name = "adler2"
82
+
version = "2.0.0"
83
+
source = "registry+https://github.com/rust-lang/crates.io-index"
84
+
checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627"
85
+
86
+
[[package]]
87
+
name = "ahash"
88
+
version = "0.8.12"
89
+
source = "registry+https://github.com/rust-lang/crates.io-index"
90
+
checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75"
91
+
dependencies = [
92
+
"cfg-if",
93
+
"getrandom 0.3.3",
94
+
"once_cell",
95
+
"version_check",
96
+
"zerocopy",
97
+
]
98
+
99
+
[[package]]
100
+
name = "aho-corasick"
101
+
version = "1.1.3"
102
+
source = "registry+https://github.com/rust-lang/crates.io-index"
103
+
checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
104
+
dependencies = [
105
+
"memchr",
106
+
]
107
+
108
+
[[package]]
109
+
name = "aligned-vec"
110
+
version = "0.5.0"
111
+
source = "registry+https://github.com/rust-lang/crates.io-index"
112
+
checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1"
113
+
114
+
[[package]]
115
+
name = "alsa"
116
+
version = "0.9.1"
117
+
source = "registry+https://github.com/rust-lang/crates.io-index"
118
+
checksum = "ed7572b7ba83a31e20d1b48970ee402d2e3e0537dcfe0a3ff4d6eb7508617d43"
119
+
dependencies = [
120
+
"alsa-sys",
121
+
"bitflags 2.9.0",
122
+
"cfg-if",
123
+
"libc",
124
+
]
125
+
126
+
[[package]]
127
+
name = "alsa-sys"
128
+
version = "0.3.1"
129
+
source = "registry+https://github.com/rust-lang/crates.io-index"
130
+
checksum = "db8fee663d06c4e303404ef5f40488a53e062f89ba8bfed81f42325aafad1527"
131
+
dependencies = [
132
+
"libc",
133
+
"pkg-config",
134
+
]
135
+
136
+
[[package]]
137
+
name = "android-activity"
138
+
version = "0.6.0"
139
+
source = "registry+https://github.com/rust-lang/crates.io-index"
140
+
checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046"
141
+
dependencies = [
142
+
"android-properties",
143
+
"bitflags 2.9.0",
144
+
"cc",
145
+
"cesu8",
146
+
"jni",
147
+
"jni-sys",
148
+
"libc",
149
+
"log",
150
+
"ndk 0.9.0",
151
+
"ndk-context",
152
+
"ndk-sys 0.6.0+11769913",
153
+
"num_enum",
154
+
"thiserror 1.0.69",
155
+
]
156
+
157
+
[[package]]
158
+
name = "android-properties"
159
+
version = "0.2.2"
160
+
source = "registry+https://github.com/rust-lang/crates.io-index"
161
+
checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04"
162
+
163
+
[[package]]
164
+
name = "android_log-sys"
165
+
version = "0.3.2"
166
+
source = "registry+https://github.com/rust-lang/crates.io-index"
167
+
checksum = "84521a3cf562bc62942e294181d9eef17eb38ceb8c68677bc49f144e4c3d4f8d"
168
+
169
+
[[package]]
170
+
name = "android_system_properties"
171
+
version = "0.1.5"
172
+
source = "registry+https://github.com/rust-lang/crates.io-index"
173
+
checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
174
+
dependencies = [
175
+
"libc",
176
+
]
177
+
178
+
[[package]]
179
+
name = "anyhow"
180
+
version = "1.0.98"
181
+
source = "registry+https://github.com/rust-lang/crates.io-index"
182
+
checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487"
183
+
184
+
[[package]]
185
+
name = "approx"
186
+
version = "0.5.1"
187
+
source = "registry+https://github.com/rust-lang/crates.io-index"
188
+
checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6"
189
+
dependencies = [
190
+
"num-traits",
191
+
]
192
+
193
+
[[package]]
194
+
name = "arbitrary"
195
+
version = "1.4.1"
196
+
source = "registry+https://github.com/rust-lang/crates.io-index"
197
+
checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223"
198
+
199
+
[[package]]
200
+
name = "arboard"
201
+
version = "3.5.0"
202
+
source = "registry+https://github.com/rust-lang/crates.io-index"
203
+
checksum = "c1df21f715862ede32a0c525ce2ca4d52626bb0007f8c18b87a384503ac33e70"
204
+
dependencies = [
205
+
"clipboard-win",
206
+
"image 0.25.6",
207
+
"log",
208
+
"objc2 0.6.1",
209
+
"objc2-app-kit 0.3.1",
210
+
"objc2-core-foundation",
211
+
"objc2-core-graphics",
212
+
"objc2-foundation 0.3.1",
213
+
"parking_lot",
214
+
"percent-encoding",
215
+
"windows-sys 0.59.0",
216
+
"x11rb",
217
+
]
218
+
219
+
[[package]]
220
+
name = "arg_enum_proc_macro"
221
+
version = "0.3.4"
222
+
source = "registry+https://github.com/rust-lang/crates.io-index"
223
+
checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea"
224
+
dependencies = [
225
+
"proc-macro2",
226
+
"quote",
227
+
"syn 2.0.101",
228
+
]
229
+
230
+
[[package]]
231
+
name = "array-init"
232
+
version = "2.1.0"
233
+
source = "registry+https://github.com/rust-lang/crates.io-index"
234
+
checksum = "3d62b7694a562cdf5a74227903507c56ab2cc8bdd1f781ed5cb4cf9c9f810bfc"
235
+
236
+
[[package]]
237
+
name = "arrayref"
238
+
version = "0.3.9"
239
+
source = "registry+https://github.com/rust-lang/crates.io-index"
240
+
checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb"
241
+
242
+
[[package]]
243
+
name = "arrayvec"
244
+
version = "0.7.6"
245
+
source = "registry+https://github.com/rust-lang/crates.io-index"
246
+
checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
247
+
248
+
[[package]]
249
+
name = "as-raw-xcb-connection"
250
+
version = "1.0.1"
251
+
source = "registry+https://github.com/rust-lang/crates.io-index"
252
+
checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b"
253
+
254
+
[[package]]
255
+
name = "ash"
256
+
version = "0.38.0+1.3.281"
257
+
source = "registry+https://github.com/rust-lang/crates.io-index"
258
+
checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f"
259
+
dependencies = [
260
+
"libloading",
261
+
]
262
+
263
+
[[package]]
264
+
name = "assert_type_match"
265
+
version = "0.1.1"
266
+
source = "registry+https://github.com/rust-lang/crates.io-index"
267
+
checksum = "f548ad2c4031f2902e3edc1f29c29e835829437de49562d8eb5dc5584d3a1043"
268
+
dependencies = [
269
+
"proc-macro2",
270
+
"quote",
271
+
"syn 2.0.101",
272
+
]
273
+
274
+
[[package]]
275
+
name = "async-broadcast"
276
+
version = "0.7.2"
277
+
source = "registry+https://github.com/rust-lang/crates.io-index"
278
+
checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532"
279
+
dependencies = [
280
+
"event-listener",
281
+
"event-listener-strategy",
282
+
"futures-core",
283
+
"pin-project-lite",
284
+
]
285
+
286
+
[[package]]
287
+
name = "async-channel"
288
+
version = "2.3.1"
289
+
source = "registry+https://github.com/rust-lang/crates.io-index"
290
+
checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a"
291
+
dependencies = [
292
+
"concurrent-queue",
293
+
"event-listener-strategy",
294
+
"futures-core",
295
+
"pin-project-lite",
296
+
]
297
+
298
+
[[package]]
299
+
name = "async-executor"
300
+
version = "1.13.2"
301
+
source = "registry+https://github.com/rust-lang/crates.io-index"
302
+
checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa"
303
+
dependencies = [
304
+
"async-task",
305
+
"concurrent-queue",
306
+
"fastrand",
307
+
"futures-lite",
308
+
"pin-project-lite",
309
+
"slab",
310
+
]
311
+
312
+
[[package]]
313
+
name = "async-fs"
314
+
version = "2.1.2"
315
+
source = "registry+https://github.com/rust-lang/crates.io-index"
316
+
checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a"
317
+
dependencies = [
318
+
"async-lock",
319
+
"blocking",
320
+
"futures-lite",
321
+
]
322
+
323
+
[[package]]
324
+
name = "async-lock"
325
+
version = "3.4.0"
326
+
source = "registry+https://github.com/rust-lang/crates.io-index"
327
+
checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18"
328
+
dependencies = [
329
+
"event-listener",
330
+
"event-listener-strategy",
331
+
"pin-project-lite",
332
+
]
333
+
334
+
[[package]]
335
+
name = "async-task"
336
+
version = "4.7.1"
337
+
source = "registry+https://github.com/rust-lang/crates.io-index"
338
+
checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de"
339
+
dependencies = [
340
+
"portable-atomic",
341
+
]
342
+
343
+
[[package]]
344
+
name = "atomic-waker"
345
+
version = "1.1.2"
346
+
source = "registry+https://github.com/rust-lang/crates.io-index"
347
+
checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
348
+
dependencies = [
349
+
"portable-atomic",
350
+
]
351
+
352
+
[[package]]
353
+
name = "atomicow"
354
+
version = "1.1.0"
355
+
source = "registry+https://github.com/rust-lang/crates.io-index"
356
+
checksum = "f52e8890bb9844440d0c412fa74b67fd2f14e85248b6e00708059b6da9e5f8bf"
357
+
dependencies = [
358
+
"portable-atomic",
359
+
"portable-atomic-util",
360
+
]
361
+
362
+
[[package]]
363
+
name = "autocfg"
364
+
version = "1.4.0"
365
+
source = "registry+https://github.com/rust-lang/crates.io-index"
366
+
checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
367
+
368
+
[[package]]
369
+
name = "av1-grain"
370
+
version = "0.2.3"
371
+
source = "registry+https://github.com/rust-lang/crates.io-index"
372
+
checksum = "6678909d8c5d46a42abcf571271e15fdbc0a225e3646cf23762cd415046c78bf"
373
+
dependencies = [
374
+
"anyhow",
375
+
"arrayvec",
376
+
"log",
377
+
"nom",
378
+
"num-rational",
379
+
"v_frame",
380
+
]
381
+
382
+
[[package]]
383
+
name = "avif-serialize"
384
+
version = "0.8.3"
385
+
source = "registry+https://github.com/rust-lang/crates.io-index"
386
+
checksum = "98922d6a4cfbcb08820c69d8eeccc05bb1f29bfa06b4f5b1dbfe9a868bd7608e"
387
+
dependencies = [
388
+
"arrayvec",
389
+
]
390
+
391
+
[[package]]
392
+
name = "base64"
393
+
version = "0.13.1"
394
+
source = "registry+https://github.com/rust-lang/crates.io-index"
395
+
checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
396
+
397
+
[[package]]
398
+
name = "base64"
399
+
version = "0.21.7"
400
+
source = "registry+https://github.com/rust-lang/crates.io-index"
401
+
checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
402
+
403
+
[[package]]
404
+
name = "base64"
405
+
version = "0.22.1"
406
+
source = "registry+https://github.com/rust-lang/crates.io-index"
407
+
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
408
+
409
+
[[package]]
410
+
name = "bevy"
411
+
version = "0.16.0"
412
+
source = "registry+https://github.com/rust-lang/crates.io-index"
413
+
checksum = "2a5cd3b24a5adb7c7378da7b3eea47639877643d11b6b087fc8a8094f2528615"
414
+
dependencies = [
415
+
"bevy_internal",
416
+
]
417
+
418
+
[[package]]
419
+
name = "bevy_a11y"
420
+
version = "0.16.0"
421
+
source = "registry+https://github.com/rust-lang/crates.io-index"
422
+
checksum = "91ed969a58fbe449ef35ebec58ab19578302537f34ee8a35d04e5a038b3c40f5"
423
+
dependencies = [
424
+
"accesskit",
425
+
"bevy_app",
426
+
"bevy_derive",
427
+
"bevy_ecs",
428
+
"bevy_reflect",
429
+
]
430
+
431
+
[[package]]
432
+
name = "bevy_animation"
433
+
version = "0.16.0"
434
+
source = "registry+https://github.com/rust-lang/crates.io-index"
435
+
checksum = "3647b67c6bfd456922b2720ccef980dec01742d155d0eb454dc3d8fdc65e7aff"
436
+
dependencies = [
437
+
"bevy_app",
438
+
"bevy_asset",
439
+
"bevy_color",
440
+
"bevy_derive",
441
+
"bevy_ecs",
442
+
"bevy_log",
443
+
"bevy_math",
444
+
"bevy_mesh",
445
+
"bevy_platform",
446
+
"bevy_reflect",
447
+
"bevy_render",
448
+
"bevy_time",
449
+
"bevy_transform",
450
+
"bevy_utils",
451
+
"blake3",
452
+
"derive_more",
453
+
"downcast-rs 2.0.1",
454
+
"either",
455
+
"petgraph",
456
+
"ron",
457
+
"serde",
458
+
"smallvec",
459
+
"thiserror 2.0.12",
460
+
"thread_local",
461
+
"tracing",
462
+
"uuid",
463
+
]
464
+
465
+
[[package]]
466
+
name = "bevy_app"
467
+
version = "0.16.0"
468
+
source = "registry+https://github.com/rust-lang/crates.io-index"
469
+
checksum = "a2b6267ac23a9947d5b2725ff047a1e1add70076d85fa9fb73d044ab9bea1f3c"
470
+
dependencies = [
471
+
"bevy_derive",
472
+
"bevy_ecs",
473
+
"bevy_platform",
474
+
"bevy_reflect",
475
+
"bevy_tasks",
476
+
"bevy_utils",
477
+
"cfg-if",
478
+
"console_error_panic_hook",
479
+
"ctrlc",
480
+
"downcast-rs 2.0.1",
481
+
"log",
482
+
"thiserror 2.0.12",
483
+
"variadics_please",
484
+
"wasm-bindgen",
485
+
"web-sys",
486
+
]
487
+
488
+
[[package]]
489
+
name = "bevy_asset"
490
+
version = "0.16.0"
491
+
source = "registry+https://github.com/rust-lang/crates.io-index"
492
+
checksum = "0698040d63199391ea77fd02e039630748e3e335c3070c6d932fd96cbf80f5d6"
493
+
dependencies = [
494
+
"async-broadcast",
495
+
"async-fs",
496
+
"async-lock",
497
+
"atomicow",
498
+
"bevy_app",
499
+
"bevy_asset_macros",
500
+
"bevy_ecs",
501
+
"bevy_platform",
502
+
"bevy_reflect",
503
+
"bevy_tasks",
504
+
"bevy_utils",
505
+
"bevy_window",
506
+
"bitflags 2.9.0",
507
+
"blake3",
508
+
"crossbeam-channel",
509
+
"derive_more",
510
+
"disqualified",
511
+
"downcast-rs 2.0.1",
512
+
"either",
513
+
"futures-io",
514
+
"futures-lite",
515
+
"js-sys",
516
+
"parking_lot",
517
+
"ron",
518
+
"serde",
519
+
"stackfuture",
520
+
"thiserror 2.0.12",
521
+
"tracing",
522
+
"uuid",
523
+
"wasm-bindgen",
524
+
"wasm-bindgen-futures",
525
+
"web-sys",
526
+
]
527
+
528
+
[[package]]
529
+
name = "bevy_asset_macros"
530
+
version = "0.16.0"
531
+
source = "registry+https://github.com/rust-lang/crates.io-index"
532
+
checksum = "0bf8c00b5d532f8e5ac7b49af10602f9f7774a2d522cf0638323b5dfeee7b31c"
533
+
dependencies = [
534
+
"bevy_macro_utils",
535
+
"proc-macro2",
536
+
"quote",
537
+
"syn 2.0.101",
538
+
]
539
+
540
+
[[package]]
541
+
name = "bevy_audio"
542
+
version = "0.16.0"
543
+
source = "registry+https://github.com/rust-lang/crates.io-index"
544
+
checksum = "74e54154e6369abdbaf5098e20424d59197c9b701d4f79fe8d0d2bde03d25f12"
545
+
dependencies = [
546
+
"bevy_app",
547
+
"bevy_asset",
548
+
"bevy_derive",
549
+
"bevy_ecs",
550
+
"bevy_math",
551
+
"bevy_reflect",
552
+
"bevy_transform",
553
+
"cpal",
554
+
"rodio",
555
+
"tracing",
556
+
]
557
+
558
+
[[package]]
559
+
name = "bevy_color"
560
+
version = "0.16.1"
561
+
source = "registry+https://github.com/rust-lang/crates.io-index"
562
+
checksum = "ddf6a5ad35496bbc41713efbcf06ab72b9a310fabcab0f9db1debb56e8488c6e"
563
+
dependencies = [
564
+
"bevy_math",
565
+
"bevy_reflect",
566
+
"bytemuck",
567
+
"derive_more",
568
+
"encase",
569
+
"serde",
570
+
"thiserror 2.0.12",
571
+
"wgpu-types",
572
+
]
573
+
574
+
[[package]]
575
+
name = "bevy_core_pipeline"
576
+
version = "0.16.0"
577
+
source = "registry+https://github.com/rust-lang/crates.io-index"
578
+
checksum = "55c2310717b9794e4a45513ee5946a7be0838852a4c1e185884195e1a8688ff3"
579
+
dependencies = [
580
+
"bevy_app",
581
+
"bevy_asset",
582
+
"bevy_color",
583
+
"bevy_derive",
584
+
"bevy_diagnostic",
585
+
"bevy_ecs",
586
+
"bevy_image",
587
+
"bevy_math",
588
+
"bevy_platform",
589
+
"bevy_reflect",
590
+
"bevy_render",
591
+
"bevy_transform",
592
+
"bevy_utils",
593
+
"bevy_window",
594
+
"bitflags 2.9.0",
595
+
"bytemuck",
596
+
"nonmax",
597
+
"radsort",
598
+
"serde",
599
+
"smallvec",
600
+
"thiserror 2.0.12",
601
+
"tracing",
602
+
]
603
+
604
+
[[package]]
605
+
name = "bevy_derive"
606
+
version = "0.16.0"
607
+
source = "registry+https://github.com/rust-lang/crates.io-index"
608
+
checksum = "f626531b9c05c25a758ede228727bd11c2c2c8498ecbed9925044386d525a2a3"
609
+
dependencies = [
610
+
"bevy_macro_utils",
611
+
"quote",
612
+
"syn 2.0.101",
613
+
]
614
+
615
+
[[package]]
616
+
name = "bevy_diagnostic"
617
+
version = "0.16.0"
618
+
source = "registry+https://github.com/rust-lang/crates.io-index"
619
+
checksum = "048a1ff3944a534b8472516866284181eef0a75b6dd4d39b6e5925715e350766"
620
+
dependencies = [
621
+
"bevy_app",
622
+
"bevy_ecs",
623
+
"bevy_platform",
624
+
"bevy_tasks",
625
+
"bevy_time",
626
+
"bevy_utils",
627
+
"const-fnv1a-hash",
628
+
"log",
629
+
"serde",
630
+
"sysinfo",
631
+
]
632
+
633
+
[[package]]
634
+
name = "bevy_ecs"
635
+
version = "0.16.0"
636
+
source = "registry+https://github.com/rust-lang/crates.io-index"
637
+
checksum = "d9e807b5d9aab3bb8dfe47e7a44c9ff088bad2ceefe299b80ac77609a87fe9d4"
638
+
dependencies = [
639
+
"arrayvec",
640
+
"bevy_ecs_macros",
641
+
"bevy_platform",
642
+
"bevy_ptr",
643
+
"bevy_reflect",
644
+
"bevy_tasks",
645
+
"bevy_utils",
646
+
"bitflags 2.9.0",
647
+
"bumpalo",
648
+
"concurrent-queue",
649
+
"derive_more",
650
+
"disqualified",
651
+
"fixedbitset",
652
+
"indexmap",
653
+
"log",
654
+
"nonmax",
655
+
"serde",
656
+
"smallvec",
657
+
"thiserror 2.0.12",
658
+
"variadics_please",
659
+
]
660
+
661
+
[[package]]
662
+
name = "bevy_ecs_macros"
663
+
version = "0.16.0"
664
+
source = "registry+https://github.com/rust-lang/crates.io-index"
665
+
checksum = "467d7bb98aeb8dd30f36e6a773000c12a891d4f1bee2adc3841ec89cc8eaf54e"
666
+
dependencies = [
667
+
"bevy_macro_utils",
668
+
"proc-macro2",
669
+
"quote",
670
+
"syn 2.0.101",
671
+
]
672
+
673
+
[[package]]
674
+
name = "bevy_egui"
675
+
version = "0.34.1"
676
+
source = "registry+https://github.com/rust-lang/crates.io-index"
677
+
checksum = "3a3d58a8afdb6100bca50251043a85320391742cae125d559f6cca3a16b84cdd"
678
+
dependencies = [
679
+
"arboard",
680
+
"bevy_app",
681
+
"bevy_asset",
682
+
"bevy_derive",
683
+
"bevy_ecs",
684
+
"bevy_image",
685
+
"bevy_input",
686
+
"bevy_log",
687
+
"bevy_math",
688
+
"bevy_picking",
689
+
"bevy_platform",
690
+
"bevy_reflect",
691
+
"bevy_render",
692
+
"bevy_time",
693
+
"bevy_window",
694
+
"bevy_winit",
695
+
"bytemuck",
696
+
"crossbeam-channel",
697
+
"egui",
698
+
"encase",
699
+
"image 0.25.6",
700
+
"js-sys",
701
+
"thread_local",
702
+
"wasm-bindgen",
703
+
"wasm-bindgen-futures",
704
+
"web-sys",
705
+
"webbrowser",
706
+
"wgpu-types",
707
+
"winit",
708
+
]
709
+
710
+
[[package]]
711
+
name = "bevy_encase_derive"
712
+
version = "0.16.0"
713
+
source = "registry+https://github.com/rust-lang/crates.io-index"
714
+
checksum = "b8bb31dc1090c6f8fabbf6b21994d19a12766e786885ee48ffc547f0f1fa7863"
715
+
dependencies = [
716
+
"bevy_macro_utils",
717
+
"encase_derive_impl",
718
+
]
719
+
720
+
[[package]]
721
+
name = "bevy_gilrs"
722
+
version = "0.16.0"
723
+
source = "registry+https://github.com/rust-lang/crates.io-index"
724
+
checksum = "950c84596dbff8a9691a050c37bb610ef9398af56369c2c2dd6dc41ef7b717a5"
725
+
dependencies = [
726
+
"bevy_app",
727
+
"bevy_ecs",
728
+
"bevy_input",
729
+
"bevy_platform",
730
+
"bevy_time",
731
+
"bevy_utils",
732
+
"gilrs",
733
+
"thiserror 2.0.12",
734
+
"tracing",
735
+
]
736
+
737
+
[[package]]
738
+
name = "bevy_gizmos"
739
+
version = "0.16.0"
740
+
source = "registry+https://github.com/rust-lang/crates.io-index"
741
+
checksum = "54af8145b35ab2a830a6dd1058e23c1e1ddc4b893db79d295259ef82f51c7520"
742
+
dependencies = [
743
+
"bevy_app",
744
+
"bevy_asset",
745
+
"bevy_color",
746
+
"bevy_core_pipeline",
747
+
"bevy_ecs",
748
+
"bevy_gizmos_macros",
749
+
"bevy_image",
750
+
"bevy_math",
751
+
"bevy_pbr",
752
+
"bevy_reflect",
753
+
"bevy_render",
754
+
"bevy_sprite",
755
+
"bevy_time",
756
+
"bevy_transform",
757
+
"bevy_utils",
758
+
"bytemuck",
759
+
"tracing",
760
+
]
761
+
762
+
[[package]]
763
+
name = "bevy_gizmos_macros"
764
+
version = "0.16.0"
765
+
source = "registry+https://github.com/rust-lang/crates.io-index"
766
+
checksum = "40137ace61f092b7a09eba41d7d1e6aef941f53a7818b06ef86dcce7b6a1fd3f"
767
+
dependencies = [
768
+
"bevy_macro_utils",
769
+
"proc-macro2",
770
+
"quote",
771
+
"syn 2.0.101",
772
+
]
773
+
774
+
[[package]]
775
+
name = "bevy_gltf"
776
+
version = "0.16.0"
777
+
source = "registry+https://github.com/rust-lang/crates.io-index"
778
+
checksum = "aa25b809ee024ef2682bafc1ca22ca8275552edb549dc6f69a030fdffd976c63"
779
+
dependencies = [
780
+
"base64 0.22.1",
781
+
"bevy_animation",
782
+
"bevy_app",
783
+
"bevy_asset",
784
+
"bevy_color",
785
+
"bevy_core_pipeline",
786
+
"bevy_ecs",
787
+
"bevy_image",
788
+
"bevy_math",
789
+
"bevy_mesh",
790
+
"bevy_pbr",
791
+
"bevy_platform",
792
+
"bevy_reflect",
793
+
"bevy_render",
794
+
"bevy_scene",
795
+
"bevy_tasks",
796
+
"bevy_transform",
797
+
"bevy_utils",
798
+
"fixedbitset",
799
+
"gltf",
800
+
"itertools 0.14.0",
801
+
"percent-encoding",
802
+
"serde",
803
+
"serde_json",
804
+
"smallvec",
805
+
"thiserror 2.0.12",
806
+
"tracing",
807
+
]
808
+
809
+
[[package]]
810
+
name = "bevy_image"
811
+
version = "0.16.0"
812
+
source = "registry+https://github.com/rust-lang/crates.io-index"
813
+
checksum = "840b25f7f58894c641739f756959028a04f519c448db7e2cd3e2e29fc5fd188d"
814
+
dependencies = [
815
+
"bevy_app",
816
+
"bevy_asset",
817
+
"bevy_color",
818
+
"bevy_math",
819
+
"bevy_platform",
820
+
"bevy_reflect",
821
+
"bevy_utils",
822
+
"bitflags 2.9.0",
823
+
"bytemuck",
824
+
"futures-lite",
825
+
"guillotiere",
826
+
"half",
827
+
"image 0.25.6",
828
+
"ktx2",
829
+
"rectangle-pack",
830
+
"ruzstd",
831
+
"serde",
832
+
"thiserror 2.0.12",
833
+
"tracing",
834
+
"wgpu-types",
835
+
]
836
+
837
+
[[package]]
838
+
name = "bevy_input"
839
+
version = "0.16.0"
840
+
source = "registry+https://github.com/rust-lang/crates.io-index"
841
+
checksum = "763410715714f3d4d2dcdf077af276e2e4ea93fd8081b183d446d060ea95baaa"
842
+
dependencies = [
843
+
"bevy_app",
844
+
"bevy_ecs",
845
+
"bevy_math",
846
+
"bevy_platform",
847
+
"bevy_reflect",
848
+
"bevy_utils",
849
+
"derive_more",
850
+
"log",
851
+
"smol_str",
852
+
"thiserror 2.0.12",
853
+
]
854
+
855
+
[[package]]
856
+
name = "bevy_input_focus"
857
+
version = "0.16.0"
858
+
source = "registry+https://github.com/rust-lang/crates.io-index"
859
+
checksum = "d7e7b4ed65e10927a39a987cf85ef98727dd319aafb6e6835f2cb05b883c6d66"
860
+
dependencies = [
861
+
"bevy_app",
862
+
"bevy_ecs",
863
+
"bevy_input",
864
+
"bevy_math",
865
+
"bevy_reflect",
866
+
"bevy_window",
867
+
"log",
868
+
"thiserror 2.0.12",
869
+
]
870
+
871
+
[[package]]
872
+
name = "bevy_internal"
873
+
version = "0.16.0"
874
+
source = "registry+https://github.com/rust-lang/crates.io-index"
875
+
checksum = "526ffd64c58004cb97308826e896c07d0e23dc056c243b97492e31cdf72e2830"
876
+
dependencies = [
877
+
"bevy_a11y",
878
+
"bevy_animation",
879
+
"bevy_app",
880
+
"bevy_asset",
881
+
"bevy_audio",
882
+
"bevy_color",
883
+
"bevy_core_pipeline",
884
+
"bevy_derive",
885
+
"bevy_diagnostic",
886
+
"bevy_ecs",
887
+
"bevy_gilrs",
888
+
"bevy_gizmos",
889
+
"bevy_gltf",
890
+
"bevy_image",
891
+
"bevy_input",
892
+
"bevy_input_focus",
893
+
"bevy_log",
894
+
"bevy_math",
895
+
"bevy_pbr",
896
+
"bevy_picking",
897
+
"bevy_platform",
898
+
"bevy_ptr",
899
+
"bevy_reflect",
900
+
"bevy_render",
901
+
"bevy_scene",
902
+
"bevy_sprite",
903
+
"bevy_state",
904
+
"bevy_tasks",
905
+
"bevy_text",
906
+
"bevy_time",
907
+
"bevy_transform",
908
+
"bevy_ui",
909
+
"bevy_utils",
910
+
"bevy_window",
911
+
"bevy_winit",
912
+
]
913
+
914
+
[[package]]
915
+
name = "bevy_log"
916
+
version = "0.16.0"
917
+
source = "registry+https://github.com/rust-lang/crates.io-index"
918
+
checksum = "7156df8d2f11135cf71c03eb4c11132b65201fd4f51648571e59e39c9c9ee2f6"
919
+
dependencies = [
920
+
"android_log-sys",
921
+
"bevy_app",
922
+
"bevy_ecs",
923
+
"bevy_utils",
924
+
"tracing",
925
+
"tracing-log",
926
+
"tracing-oslog",
927
+
"tracing-subscriber",
928
+
"tracing-wasm",
929
+
]
930
+
931
+
[[package]]
932
+
name = "bevy_macro_utils"
933
+
version = "0.16.0"
934
+
source = "registry+https://github.com/rust-lang/crates.io-index"
935
+
checksum = "7a2473db70d8785b5c75d6dd951a2e51e9be2c2311122db9692c79c9d887517b"
936
+
dependencies = [
937
+
"parking_lot",
938
+
"proc-macro2",
939
+
"quote",
940
+
"syn 2.0.101",
941
+
"toml_edit",
942
+
]
943
+
944
+
[[package]]
945
+
name = "bevy_math"
946
+
version = "0.16.0"
947
+
source = "registry+https://github.com/rust-lang/crates.io-index"
948
+
checksum = "f1a3a926d02dc501c6156a047510bdb538dcb1fa744eeba13c824b73ba88de55"
949
+
dependencies = [
950
+
"approx",
951
+
"bevy_reflect",
952
+
"derive_more",
953
+
"glam 0.29.3",
954
+
"itertools 0.14.0",
955
+
"libm",
956
+
"rand",
957
+
"rand_distr",
958
+
"serde",
959
+
"smallvec",
960
+
"thiserror 2.0.12",
961
+
"variadics_please",
962
+
]
963
+
964
+
[[package]]
965
+
name = "bevy_mesh"
966
+
version = "0.16.0"
967
+
source = "registry+https://github.com/rust-lang/crates.io-index"
968
+
checksum = "12af58280c7453e32e2f083d86eaa4c9b9d03ea8683977108ded8f1930c539f2"
969
+
dependencies = [
970
+
"bevy_asset",
971
+
"bevy_derive",
972
+
"bevy_ecs",
973
+
"bevy_image",
974
+
"bevy_math",
975
+
"bevy_mikktspace",
976
+
"bevy_platform",
977
+
"bevy_reflect",
978
+
"bevy_transform",
979
+
"bevy_utils",
980
+
"bitflags 2.9.0",
981
+
"bytemuck",
982
+
"hexasphere",
983
+
"serde",
984
+
"thiserror 2.0.12",
985
+
"tracing",
986
+
"wgpu-types",
987
+
]
988
+
989
+
[[package]]
990
+
name = "bevy_mikktspace"
991
+
version = "0.16.0"
992
+
source = "registry+https://github.com/rust-lang/crates.io-index"
993
+
checksum = "75e0258423c689f764556e36b5d9eebdbf624b29a1fd5b33cd9f6c42dcc4d5f3"
994
+
dependencies = [
995
+
"glam 0.29.3",
996
+
]
997
+
998
+
[[package]]
999
+
name = "bevy_pbr"
1000
+
version = "0.16.0"
1001
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1002
+
checksum = "d9fe0de43b68bf9e5090a33efc963f125e9d3f9d97be9ebece7bcfdde1b6da80"
1003
+
dependencies = [
1004
+
"bevy_app",
1005
+
"bevy_asset",
1006
+
"bevy_color",
1007
+
"bevy_core_pipeline",
1008
+
"bevy_derive",
1009
+
"bevy_diagnostic",
1010
+
"bevy_ecs",
1011
+
"bevy_image",
1012
+
"bevy_math",
1013
+
"bevy_platform",
1014
+
"bevy_reflect",
1015
+
"bevy_render",
1016
+
"bevy_transform",
1017
+
"bevy_utils",
1018
+
"bevy_window",
1019
+
"bitflags 2.9.0",
1020
+
"bytemuck",
1021
+
"derive_more",
1022
+
"fixedbitset",
1023
+
"nonmax",
1024
+
"offset-allocator",
1025
+
"radsort",
1026
+
"smallvec",
1027
+
"static_assertions",
1028
+
"thiserror 2.0.12",
1029
+
"tracing",
1030
+
]
1031
+
1032
+
[[package]]
1033
+
name = "bevy_picking"
1034
+
version = "0.16.0"
1035
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1036
+
checksum = "f73674f62b1033006bd75c89033f5d3516386cfd7d43bb9f7665012c0ab14d22"
1037
+
dependencies = [
1038
+
"bevy_app",
1039
+
"bevy_asset",
1040
+
"bevy_derive",
1041
+
"bevy_ecs",
1042
+
"bevy_input",
1043
+
"bevy_math",
1044
+
"bevy_mesh",
1045
+
"bevy_platform",
1046
+
"bevy_reflect",
1047
+
"bevy_render",
1048
+
"bevy_time",
1049
+
"bevy_transform",
1050
+
"bevy_utils",
1051
+
"bevy_window",
1052
+
"crossbeam-channel",
1053
+
"tracing",
1054
+
"uuid",
1055
+
]
1056
+
1057
+
[[package]]
1058
+
name = "bevy_platform"
1059
+
version = "0.16.0"
1060
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1061
+
checksum = "704db2c11b7bc31093df4fbbdd3769f9606a6a5287149f4b51f2680f25834ebc"
1062
+
dependencies = [
1063
+
"cfg-if",
1064
+
"critical-section",
1065
+
"foldhash",
1066
+
"getrandom 0.2.16",
1067
+
"hashbrown",
1068
+
"portable-atomic",
1069
+
"portable-atomic-util",
1070
+
"serde",
1071
+
"spin",
1072
+
"web-time",
1073
+
]
1074
+
1075
+
[[package]]
1076
+
name = "bevy_ptr"
1077
+
version = "0.16.0"
1078
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1079
+
checksum = "86f1275dfb4cfef4ffc90c3fa75408964864facf833acc932413d52aa5364ba4"
1080
+
1081
+
[[package]]
1082
+
name = "bevy_reflect"
1083
+
version = "0.16.0"
1084
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1085
+
checksum = "607ebacc31029cf2f39ac330eabf1d4bc411b159528ec08dbe6b0593eaccfd41"
1086
+
dependencies = [
1087
+
"assert_type_match",
1088
+
"bevy_platform",
1089
+
"bevy_ptr",
1090
+
"bevy_reflect_derive",
1091
+
"bevy_utils",
1092
+
"derive_more",
1093
+
"disqualified",
1094
+
"downcast-rs 2.0.1",
1095
+
"erased-serde",
1096
+
"foldhash",
1097
+
"glam 0.29.3",
1098
+
"petgraph",
1099
+
"serde",
1100
+
"smallvec",
1101
+
"smol_str",
1102
+
"thiserror 2.0.12",
1103
+
"uuid",
1104
+
"variadics_please",
1105
+
"wgpu-types",
1106
+
]
1107
+
1108
+
[[package]]
1109
+
name = "bevy_reflect_derive"
1110
+
version = "0.16.0"
1111
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1112
+
checksum = "cf35e45e4eb239018369f63f2adc2107a54c329f9276d020e01eee1625b0238b"
1113
+
dependencies = [
1114
+
"bevy_macro_utils",
1115
+
"proc-macro2",
1116
+
"quote",
1117
+
"syn 2.0.101",
1118
+
"uuid",
1119
+
]
1120
+
1121
+
[[package]]
1122
+
name = "bevy_render"
1123
+
version = "0.16.0"
1124
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1125
+
checksum = "85a7306235b3343b032801504f3e884b93abfb7ba58179fc555c479df509f349"
1126
+
dependencies = [
1127
+
"async-channel",
1128
+
"bevy_app",
1129
+
"bevy_asset",
1130
+
"bevy_color",
1131
+
"bevy_derive",
1132
+
"bevy_diagnostic",
1133
+
"bevy_ecs",
1134
+
"bevy_encase_derive",
1135
+
"bevy_image",
1136
+
"bevy_math",
1137
+
"bevy_mesh",
1138
+
"bevy_platform",
1139
+
"bevy_reflect",
1140
+
"bevy_render_macros",
1141
+
"bevy_tasks",
1142
+
"bevy_time",
1143
+
"bevy_transform",
1144
+
"bevy_utils",
1145
+
"bevy_window",
1146
+
"bitflags 2.9.0",
1147
+
"bytemuck",
1148
+
"codespan-reporting",
1149
+
"derive_more",
1150
+
"downcast-rs 2.0.1",
1151
+
"encase",
1152
+
"fixedbitset",
1153
+
"futures-lite",
1154
+
"image 0.25.6",
1155
+
"indexmap",
1156
+
"js-sys",
1157
+
"ktx2",
1158
+
"naga",
1159
+
"naga_oil",
1160
+
"nonmax",
1161
+
"offset-allocator",
1162
+
"send_wrapper",
1163
+
"serde",
1164
+
"smallvec",
1165
+
"thiserror 2.0.12",
1166
+
"tracing",
1167
+
"variadics_please",
1168
+
"wasm-bindgen",
1169
+
"web-sys",
1170
+
"wgpu",
1171
+
]
1172
+
1173
+
[[package]]
1174
+
name = "bevy_render_macros"
1175
+
version = "0.16.0"
1176
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1177
+
checksum = "b85c4fb26b66d3a257b655485d11b9b6df9d3c85026493ba8092767a5edfc1b2"
1178
+
dependencies = [
1179
+
"bevy_macro_utils",
1180
+
"proc-macro2",
1181
+
"quote",
1182
+
"syn 2.0.101",
1183
+
]
1184
+
1185
+
[[package]]
1186
+
name = "bevy_scene"
1187
+
version = "0.16.0"
1188
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1189
+
checksum = "e7b628f560f2d2fe9f35ecd4526627ba3992f082de03fd745536e4053a0266fe"
1190
+
dependencies = [
1191
+
"bevy_app",
1192
+
"bevy_asset",
1193
+
"bevy_derive",
1194
+
"bevy_ecs",
1195
+
"bevy_platform",
1196
+
"bevy_reflect",
1197
+
"bevy_render",
1198
+
"bevy_transform",
1199
+
"bevy_utils",
1200
+
"derive_more",
1201
+
"serde",
1202
+
"thiserror 2.0.12",
1203
+
"uuid",
1204
+
]
1205
+
1206
+
[[package]]
1207
+
name = "bevy_sprite"
1208
+
version = "0.16.0"
1209
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1210
+
checksum = "01f97bf54fb1c37a1077139b59bb32bc77f7ca53149cfcaa512adbb69a2d492c"
1211
+
dependencies = [
1212
+
"bevy_app",
1213
+
"bevy_asset",
1214
+
"bevy_color",
1215
+
"bevy_core_pipeline",
1216
+
"bevy_derive",
1217
+
"bevy_ecs",
1218
+
"bevy_image",
1219
+
"bevy_math",
1220
+
"bevy_picking",
1221
+
"bevy_platform",
1222
+
"bevy_reflect",
1223
+
"bevy_render",
1224
+
"bevy_transform",
1225
+
"bevy_utils",
1226
+
"bevy_window",
1227
+
"bitflags 2.9.0",
1228
+
"bytemuck",
1229
+
"derive_more",
1230
+
"fixedbitset",
1231
+
"nonmax",
1232
+
"radsort",
1233
+
"tracing",
1234
+
]
1235
+
1236
+
[[package]]
1237
+
name = "bevy_state"
1238
+
version = "0.16.0"
1239
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1240
+
checksum = "682c343c354b191fe6669823bce3b0695ee1ae4ac36f582e29c436a72b67cdd5"
1241
+
dependencies = [
1242
+
"bevy_app",
1243
+
"bevy_ecs",
1244
+
"bevy_platform",
1245
+
"bevy_reflect",
1246
+
"bevy_state_macros",
1247
+
"bevy_utils",
1248
+
"log",
1249
+
"variadics_please",
1250
+
]
1251
+
1252
+
[[package]]
1253
+
name = "bevy_state_macros"
1254
+
version = "0.16.0"
1255
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1256
+
checksum = "55b4bf3970c4f0e60572901df4641656722172c222d71a80c430d36b0e31426c"
1257
+
dependencies = [
1258
+
"bevy_macro_utils",
1259
+
"proc-macro2",
1260
+
"quote",
1261
+
"syn 2.0.101",
1262
+
]
1263
+
1264
+
[[package]]
1265
+
name = "bevy_tasks"
1266
+
version = "0.16.0"
1267
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1268
+
checksum = "444c450b65e108855f42ecb6db0c041a56ea7d7f10cc6222f0ca95e9536a7d19"
1269
+
dependencies = [
1270
+
"async-channel",
1271
+
"async-executor",
1272
+
"async-task",
1273
+
"atomic-waker",
1274
+
"bevy_platform",
1275
+
"cfg-if",
1276
+
"concurrent-queue",
1277
+
"crossbeam-queue",
1278
+
"derive_more",
1279
+
"futures-channel",
1280
+
"futures-lite",
1281
+
"heapless",
1282
+
"pin-project",
1283
+
"wasm-bindgen-futures",
1284
+
]
1285
+
1286
+
[[package]]
1287
+
name = "bevy_text"
1288
+
version = "0.16.0"
1289
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1290
+
checksum = "8ef071262c5a9afbc39caba4c0b282c7d045fbb5cf33bdab1924bd2343403833"
1291
+
dependencies = [
1292
+
"bevy_app",
1293
+
"bevy_asset",
1294
+
"bevy_color",
1295
+
"bevy_derive",
1296
+
"bevy_ecs",
1297
+
"bevy_image",
1298
+
"bevy_log",
1299
+
"bevy_math",
1300
+
"bevy_platform",
1301
+
"bevy_reflect",
1302
+
"bevy_render",
1303
+
"bevy_sprite",
1304
+
"bevy_transform",
1305
+
"bevy_utils",
1306
+
"bevy_window",
1307
+
"cosmic-text",
1308
+
"serde",
1309
+
"smallvec",
1310
+
"sys-locale",
1311
+
"thiserror 2.0.12",
1312
+
"tracing",
1313
+
"unicode-bidi",
1314
+
]
1315
+
1316
+
[[package]]
1317
+
name = "bevy_time"
1318
+
version = "0.16.0"
1319
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1320
+
checksum = "456369ca10f8e039aaf273332744674844827854833ee29e28f9e161702f2f55"
1321
+
dependencies = [
1322
+
"bevy_app",
1323
+
"bevy_ecs",
1324
+
"bevy_platform",
1325
+
"bevy_reflect",
1326
+
"crossbeam-channel",
1327
+
"log",
1328
+
"serde",
1329
+
]
1330
+
1331
+
[[package]]
1332
+
name = "bevy_transform"
1333
+
version = "0.16.0"
1334
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1335
+
checksum = "8479cdd5461246943956a7c8347e4e5d6ff857e57add889fb50eee0b5c26ab48"
1336
+
dependencies = [
1337
+
"bevy_app",
1338
+
"bevy_ecs",
1339
+
"bevy_log",
1340
+
"bevy_math",
1341
+
"bevy_reflect",
1342
+
"bevy_tasks",
1343
+
"bevy_utils",
1344
+
"derive_more",
1345
+
"serde",
1346
+
"thiserror 2.0.12",
1347
+
]
1348
+
1349
+
[[package]]
1350
+
name = "bevy_ui"
1351
+
version = "0.16.0"
1352
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1353
+
checksum = "110dc5d0059f112263512be8cd7bfe0466dfb7c26b9bf4c74529355249fd23f9"
1354
+
dependencies = [
1355
+
"accesskit",
1356
+
"bevy_a11y",
1357
+
"bevy_app",
1358
+
"bevy_asset",
1359
+
"bevy_color",
1360
+
"bevy_core_pipeline",
1361
+
"bevy_derive",
1362
+
"bevy_ecs",
1363
+
"bevy_image",
1364
+
"bevy_input",
1365
+
"bevy_math",
1366
+
"bevy_picking",
1367
+
"bevy_platform",
1368
+
"bevy_reflect",
1369
+
"bevy_render",
1370
+
"bevy_sprite",
1371
+
"bevy_text",
1372
+
"bevy_transform",
1373
+
"bevy_utils",
1374
+
"bevy_window",
1375
+
"bytemuck",
1376
+
"derive_more",
1377
+
"nonmax",
1378
+
"smallvec",
1379
+
"taffy",
1380
+
"thiserror 2.0.12",
1381
+
"tracing",
1382
+
]
1383
+
1384
+
[[package]]
1385
+
name = "bevy_utils"
1386
+
version = "0.16.0"
1387
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1388
+
checksum = "ac2da3b3c1f94dadefcbe837aaa4aa119fcea37f7bdc5307eb05b4ede1921e24"
1389
+
dependencies = [
1390
+
"bevy_platform",
1391
+
"thread_local",
1392
+
]
1393
+
1394
+
[[package]]
1395
+
name = "bevy_window"
1396
+
version = "0.16.0"
1397
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1398
+
checksum = "0d83327cc5584da463d12b7a88ddb97f9e006828832287e1564531171fffdeb4"
1399
+
dependencies = [
1400
+
"android-activity",
1401
+
"bevy_app",
1402
+
"bevy_ecs",
1403
+
"bevy_input",
1404
+
"bevy_math",
1405
+
"bevy_platform",
1406
+
"bevy_reflect",
1407
+
"bevy_utils",
1408
+
"log",
1409
+
"raw-window-handle",
1410
+
"serde",
1411
+
"smol_str",
1412
+
]
1413
+
1414
+
[[package]]
1415
+
name = "bevy_winit"
1416
+
version = "0.16.0"
1417
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1418
+
checksum = "57b14928923ae4274f4b867dce3d0e7b2c8a31bebcb0f6e65a4261c3e0765064"
1419
+
dependencies = [
1420
+
"accesskit",
1421
+
"accesskit_winit",
1422
+
"approx",
1423
+
"bevy_a11y",
1424
+
"bevy_app",
1425
+
"bevy_asset",
1426
+
"bevy_derive",
1427
+
"bevy_ecs",
1428
+
"bevy_image",
1429
+
"bevy_input",
1430
+
"bevy_input_focus",
1431
+
"bevy_log",
1432
+
"bevy_math",
1433
+
"bevy_platform",
1434
+
"bevy_reflect",
1435
+
"bevy_tasks",
1436
+
"bevy_utils",
1437
+
"bevy_window",
1438
+
"bytemuck",
1439
+
"cfg-if",
1440
+
"crossbeam-channel",
1441
+
"raw-window-handle",
1442
+
"tracing",
1443
+
"wasm-bindgen",
1444
+
"web-sys",
1445
+
"wgpu-types",
1446
+
"winit",
1447
+
]
1448
+
1449
+
[[package]]
1450
+
name = "bindgen"
1451
+
version = "0.70.1"
1452
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1453
+
checksum = "f49d8fed880d473ea71efb9bf597651e77201bdd4893efe54c9e5d65ae04ce6f"
1454
+
dependencies = [
1455
+
"bitflags 2.9.0",
1456
+
"cexpr",
1457
+
"clang-sys",
1458
+
"itertools 0.13.0",
1459
+
"log",
1460
+
"prettyplease",
1461
+
"proc-macro2",
1462
+
"quote",
1463
+
"regex",
1464
+
"rustc-hash",
1465
+
"shlex",
1466
+
"syn 2.0.101",
1467
+
]
1468
+
1469
+
[[package]]
1470
+
name = "binrw"
1471
+
version = "0.15.0"
1472
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1473
+
checksum = "81419ff39e6ed10a92a7f125290859776ced35d9a08a665ae40b23e7ca702f30"
1474
+
dependencies = [
1475
+
"array-init",
1476
+
"binrw_derive",
1477
+
"bytemuck",
1478
+
]
1479
+
1480
+
[[package]]
1481
+
name = "binrw_derive"
1482
+
version = "0.15.0"
1483
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1484
+
checksum = "376404e55ec40d0d6f8b4b7df3f87b87954bd987f0cf9a7207ea3b6ea5c9add4"
1485
+
dependencies = [
1486
+
"either",
1487
+
"owo-colors",
1488
+
"proc-macro2",
1489
+
"quote",
1490
+
"syn 2.0.101",
1491
+
]
1492
+
1493
+
[[package]]
1494
+
name = "bit-set"
1495
+
version = "0.5.3"
1496
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1497
+
checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1"
1498
+
dependencies = [
1499
+
"bit-vec 0.6.3",
1500
+
]
1501
+
1502
+
[[package]]
1503
+
name = "bit-set"
1504
+
version = "0.8.0"
1505
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1506
+
checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3"
1507
+
dependencies = [
1508
+
"bit-vec 0.8.0",
1509
+
]
1510
+
1511
+
[[package]]
1512
+
name = "bit-vec"
1513
+
version = "0.6.3"
1514
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1515
+
checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
1516
+
1517
+
[[package]]
1518
+
name = "bit-vec"
1519
+
version = "0.8.0"
1520
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1521
+
checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7"
1522
+
1523
+
[[package]]
1524
+
name = "bit_field"
1525
+
version = "0.10.2"
1526
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1527
+
checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61"
1528
+
1529
+
[[package]]
1530
+
name = "bitflags"
1531
+
version = "1.3.2"
1532
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1533
+
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
1534
+
1535
+
[[package]]
1536
+
name = "bitflags"
1537
+
version = "2.9.0"
1538
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1539
+
checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd"
1540
+
dependencies = [
1541
+
"serde",
1542
+
]
1543
+
1544
+
[[package]]
1545
+
name = "bitstream-io"
1546
+
version = "2.6.0"
1547
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1548
+
checksum = "6099cdc01846bc367c4e7dd630dc5966dccf36b652fae7a74e17b640411a91b2"
1549
+
1550
+
[[package]]
1551
+
name = "blake3"
1552
+
version = "1.8.2"
1553
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1554
+
checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0"
1555
+
dependencies = [
1556
+
"arrayref",
1557
+
"arrayvec",
1558
+
"cc",
1559
+
"cfg-if",
1560
+
"constant_time_eq",
1561
+
]
1562
+
1563
+
[[package]]
1564
+
name = "block"
1565
+
version = "0.1.6"
1566
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1567
+
checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
1568
+
1569
+
[[package]]
1570
+
name = "block2"
1571
+
version = "0.5.1"
1572
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1573
+
checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f"
1574
+
dependencies = [
1575
+
"objc2 0.5.2",
1576
+
]
1577
+
1578
+
[[package]]
1579
+
name = "blocking"
1580
+
version = "1.6.1"
1581
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1582
+
checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea"
1583
+
dependencies = [
1584
+
"async-channel",
1585
+
"async-task",
1586
+
"futures-io",
1587
+
"futures-lite",
1588
+
"piper",
1589
+
]
1590
+
1591
+
[[package]]
1592
+
name = "built"
1593
+
version = "0.7.7"
1594
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1595
+
checksum = "56ed6191a7e78c36abdb16ab65341eefd73d64d303fffccdbb00d51e4205967b"
1596
+
1597
+
[[package]]
1598
+
name = "bumpalo"
1599
+
version = "3.17.0"
1600
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1601
+
checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf"
1602
+
1603
+
[[package]]
1604
+
name = "bytemuck"
1605
+
version = "1.23.0"
1606
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1607
+
checksum = "9134a6ef01ce4b366b50689c94f82c14bc72bc5d0386829828a2e2752ef7958c"
1608
+
dependencies = [
1609
+
"bytemuck_derive",
1610
+
]
1611
+
1612
+
[[package]]
1613
+
name = "bytemuck_derive"
1614
+
version = "1.9.3"
1615
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1616
+
checksum = "7ecc273b49b3205b83d648f0690daa588925572cc5063745bfe547fe7ec8e1a1"
1617
+
dependencies = [
1618
+
"proc-macro2",
1619
+
"quote",
1620
+
"syn 2.0.101",
1621
+
]
1622
+
1623
+
[[package]]
1624
+
name = "byteorder"
1625
+
version = "1.5.0"
1626
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1627
+
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
1628
+
1629
+
[[package]]
1630
+
name = "byteorder-lite"
1631
+
version = "0.1.0"
1632
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1633
+
checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495"
1634
+
1635
+
[[package]]
1636
+
name = "bytes"
1637
+
version = "1.10.1"
1638
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1639
+
checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
1640
+
1641
+
[[package]]
1642
+
name = "calloop"
1643
+
version = "0.13.0"
1644
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1645
+
checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec"
1646
+
dependencies = [
1647
+
"bitflags 2.9.0",
1648
+
"log",
1649
+
"polling",
1650
+
"rustix",
1651
+
"slab",
1652
+
"thiserror 1.0.69",
1653
+
]
1654
+
1655
+
[[package]]
1656
+
name = "calloop-wayland-source"
1657
+
version = "0.3.0"
1658
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1659
+
checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20"
1660
+
dependencies = [
1661
+
"calloop",
1662
+
"rustix",
1663
+
"wayland-backend",
1664
+
"wayland-client",
1665
+
]
1666
+
1667
+
[[package]]
1668
+
name = "cc"
1669
+
version = "1.2.22"
1670
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1671
+
checksum = "32db95edf998450acc7881c932f94cd9b05c87b4b2599e8bab064753da4acfd1"
1672
+
dependencies = [
1673
+
"jobserver",
1674
+
"libc",
1675
+
"shlex",
1676
+
]
1677
+
1678
+
[[package]]
1679
+
name = "cesu8"
1680
+
version = "1.1.0"
1681
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1682
+
checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
1683
+
1684
+
[[package]]
1685
+
name = "cexpr"
1686
+
version = "0.6.0"
1687
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1688
+
checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
1689
+
dependencies = [
1690
+
"nom",
1691
+
]
1692
+
1693
+
[[package]]
1694
+
name = "cfg-expr"
1695
+
version = "0.15.8"
1696
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1697
+
checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02"
1698
+
dependencies = [
1699
+
"smallvec",
1700
+
"target-lexicon",
1701
+
]
1702
+
1703
+
[[package]]
1704
+
name = "cfg-if"
1705
+
version = "1.0.0"
1706
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1707
+
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
1708
+
1709
+
[[package]]
1710
+
name = "cfg_aliases"
1711
+
version = "0.2.1"
1712
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1713
+
checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
1714
+
1715
+
[[package]]
1716
+
name = "clang-sys"
1717
+
version = "1.8.1"
1718
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1719
+
checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4"
1720
+
dependencies = [
1721
+
"glob",
1722
+
"libc",
1723
+
"libloading",
1724
+
]
1725
+
1726
+
[[package]]
1727
+
name = "clipboard-win"
1728
+
version = "5.4.0"
1729
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1730
+
checksum = "15efe7a882b08f34e38556b14f2fb3daa98769d06c7f0c1b076dfd0d983bc892"
1731
+
dependencies = [
1732
+
"error-code",
1733
+
]
1734
+
1735
+
[[package]]
1736
+
name = "codespan-reporting"
1737
+
version = "0.11.1"
1738
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1739
+
checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
1740
+
dependencies = [
1741
+
"termcolor",
1742
+
"unicode-width",
1743
+
]
1744
+
1745
+
[[package]]
1746
+
name = "color_quant"
1747
+
version = "1.1.0"
1748
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1749
+
checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
1750
+
1751
+
[[package]]
1752
+
name = "combine"
1753
+
version = "4.6.7"
1754
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1755
+
checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd"
1756
+
dependencies = [
1757
+
"bytes",
1758
+
"memchr",
1759
+
]
1760
+
1761
+
[[package]]
1762
+
name = "concurrent-queue"
1763
+
version = "2.5.0"
1764
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1765
+
checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973"
1766
+
dependencies = [
1767
+
"crossbeam-utils",
1768
+
"portable-atomic",
1769
+
]
1770
+
1771
+
[[package]]
1772
+
name = "console_error_panic_hook"
1773
+
version = "0.1.7"
1774
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1775
+
checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc"
1776
+
dependencies = [
1777
+
"cfg-if",
1778
+
"wasm-bindgen",
1779
+
]
1780
+
1781
+
[[package]]
1782
+
name = "const-fnv1a-hash"
1783
+
version = "1.1.0"
1784
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1785
+
checksum = "32b13ea120a812beba79e34316b3942a857c86ec1593cb34f27bb28272ce2cca"
1786
+
1787
+
[[package]]
1788
+
name = "const_panic"
1789
+
version = "0.2.12"
1790
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1791
+
checksum = "2459fc9262a1aa204eb4b5764ad4f189caec88aea9634389c0a25f8be7f6265e"
1792
+
1793
+
[[package]]
1794
+
name = "const_soft_float"
1795
+
version = "0.1.4"
1796
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1797
+
checksum = "87ca1caa64ef4ed453e68bb3db612e51cf1b2f5b871337f0fcab1c8f87cc3dff"
1798
+
1799
+
[[package]]
1800
+
name = "constant_time_eq"
1801
+
version = "0.3.1"
1802
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1803
+
checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6"
1804
+
1805
+
[[package]]
1806
+
name = "constgebra"
1807
+
version = "0.1.4"
1808
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1809
+
checksum = "e1aaf9b65849a68662ac6c0810c8893a765c960b907dd7cfab9c4a50bf764fbc"
1810
+
dependencies = [
1811
+
"const_soft_float",
1812
+
]
1813
+
1814
+
[[package]]
1815
+
name = "core-foundation"
1816
+
version = "0.9.4"
1817
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1818
+
checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
1819
+
dependencies = [
1820
+
"core-foundation-sys",
1821
+
"libc",
1822
+
]
1823
+
1824
+
[[package]]
1825
+
name = "core-foundation"
1826
+
version = "0.10.0"
1827
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1828
+
checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63"
1829
+
dependencies = [
1830
+
"core-foundation-sys",
1831
+
"libc",
1832
+
]
1833
+
1834
+
[[package]]
1835
+
name = "core-foundation-sys"
1836
+
version = "0.8.7"
1837
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1838
+
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
1839
+
1840
+
[[package]]
1841
+
name = "core-graphics"
1842
+
version = "0.23.2"
1843
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1844
+
checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081"
1845
+
dependencies = [
1846
+
"bitflags 1.3.2",
1847
+
"core-foundation 0.9.4",
1848
+
"core-graphics-types",
1849
+
"foreign-types",
1850
+
"libc",
1851
+
]
1852
+
1853
+
[[package]]
1854
+
name = "core-graphics-types"
1855
+
version = "0.1.3"
1856
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1857
+
checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf"
1858
+
dependencies = [
1859
+
"bitflags 1.3.2",
1860
+
"core-foundation 0.9.4",
1861
+
"libc",
1862
+
]
1863
+
1864
+
[[package]]
1865
+
name = "coreaudio-rs"
1866
+
version = "0.11.3"
1867
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1868
+
checksum = "321077172d79c662f64f5071a03120748d5bb652f5231570141be24cfcd2bace"
1869
+
dependencies = [
1870
+
"bitflags 1.3.2",
1871
+
"core-foundation-sys",
1872
+
"coreaudio-sys",
1873
+
]
1874
+
1875
+
[[package]]
1876
+
name = "coreaudio-sys"
1877
+
version = "0.2.16"
1878
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1879
+
checksum = "2ce857aa0b77d77287acc1ac3e37a05a8c95a2af3647d23b15f263bdaeb7562b"
1880
+
dependencies = [
1881
+
"bindgen",
1882
+
]
1883
+
1884
+
[[package]]
1885
+
name = "cosmic-text"
1886
+
version = "0.13.2"
1887
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1888
+
checksum = "e418dd4f5128c3e93eab12246391c54a20c496811131f85754dc8152ee207892"
1889
+
dependencies = [
1890
+
"bitflags 2.9.0",
1891
+
"fontdb",
1892
+
"log",
1893
+
"rangemap",
1894
+
"rustc-hash",
1895
+
"rustybuzz",
1896
+
"self_cell",
1897
+
"smol_str",
1898
+
"swash",
1899
+
"sys-locale",
1900
+
"ttf-parser 0.21.1",
1901
+
"unicode-bidi",
1902
+
"unicode-linebreak",
1903
+
"unicode-script",
1904
+
"unicode-segmentation",
1905
+
]
1906
+
1907
+
[[package]]
1908
+
name = "cpal"
1909
+
version = "0.15.3"
1910
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1911
+
checksum = "873dab07c8f743075e57f524c583985fbaf745602acbe916a01539364369a779"
1912
+
dependencies = [
1913
+
"alsa",
1914
+
"core-foundation-sys",
1915
+
"coreaudio-rs",
1916
+
"dasp_sample",
1917
+
"jni",
1918
+
"js-sys",
1919
+
"libc",
1920
+
"mach2",
1921
+
"ndk 0.8.0",
1922
+
"ndk-context",
1923
+
"oboe",
1924
+
"wasm-bindgen",
1925
+
"wasm-bindgen-futures",
1926
+
"web-sys",
1927
+
"windows 0.54.0",
1928
+
]
1929
+
1930
+
[[package]]
1931
+
name = "crc32fast"
1932
+
version = "1.4.2"
1933
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1934
+
checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3"
1935
+
dependencies = [
1936
+
"cfg-if",
1937
+
]
1938
+
1939
+
[[package]]
1940
+
name = "critical-section"
1941
+
version = "1.2.0"
1942
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1943
+
checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b"
1944
+
1945
+
[[package]]
1946
+
name = "crossbeam-channel"
1947
+
version = "0.5.15"
1948
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1949
+
checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2"
1950
+
dependencies = [
1951
+
"crossbeam-utils",
1952
+
]
1953
+
1954
+
[[package]]
1955
+
name = "crossbeam-deque"
1956
+
version = "0.8.6"
1957
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1958
+
checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51"
1959
+
dependencies = [
1960
+
"crossbeam-epoch",
1961
+
"crossbeam-utils",
1962
+
]
1963
+
1964
+
[[package]]
1965
+
name = "crossbeam-epoch"
1966
+
version = "0.9.18"
1967
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1968
+
checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
1969
+
dependencies = [
1970
+
"crossbeam-utils",
1971
+
]
1972
+
1973
+
[[package]]
1974
+
name = "crossbeam-queue"
1975
+
version = "0.3.12"
1976
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1977
+
checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115"
1978
+
dependencies = [
1979
+
"crossbeam-utils",
1980
+
]
1981
+
1982
+
[[package]]
1983
+
name = "crossbeam-utils"
1984
+
version = "0.8.21"
1985
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1986
+
checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
1987
+
1988
+
[[package]]
1989
+
name = "crunchy"
1990
+
version = "0.2.3"
1991
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1992
+
checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929"
1993
+
1994
+
[[package]]
1995
+
name = "ctrlc"
1996
+
version = "3.4.6"
1997
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1998
+
checksum = "697b5419f348fd5ae2478e8018cb016c00a5881c7f46c717de98ffd135a5651c"
1999
+
dependencies = [
2000
+
"nix",
2001
+
"windows-sys 0.59.0",
2002
+
]
2003
+
2004
+
[[package]]
2005
+
name = "cursor-icon"
2006
+
version = "1.1.0"
2007
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2008
+
checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991"
2009
+
2010
+
[[package]]
2011
+
name = "dasp_sample"
2012
+
version = "0.11.0"
2013
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2014
+
checksum = "0c87e182de0887fd5361989c677c4e8f5000cd9491d6d563161a8f3a5519fc7f"
2015
+
2016
+
[[package]]
2017
+
name = "data-encoding"
2018
+
version = "2.9.0"
2019
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2020
+
checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476"
2021
+
2022
+
[[package]]
2023
+
name = "derive_more"
2024
+
version = "1.0.0"
2025
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2026
+
checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05"
2027
+
dependencies = [
2028
+
"derive_more-impl",
2029
+
]
2030
+
2031
+
[[package]]
2032
+
name = "derive_more-impl"
2033
+
version = "1.0.0"
2034
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2035
+
checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22"
2036
+
dependencies = [
2037
+
"proc-macro2",
2038
+
"quote",
2039
+
"syn 2.0.101",
2040
+
"unicode-xid",
2041
+
]
2042
+
2043
+
[[package]]
2044
+
name = "dispatch"
2045
+
version = "0.2.0"
2046
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2047
+
checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
2048
+
2049
+
[[package]]
2050
+
name = "dispatch2"
2051
+
version = "0.3.0"
2052
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2053
+
checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec"
2054
+
dependencies = [
2055
+
"bitflags 2.9.0",
2056
+
"objc2 0.6.1",
2057
+
]
2058
+
2059
+
[[package]]
2060
+
name = "displaydoc"
2061
+
version = "0.2.5"
2062
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2063
+
checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
2064
+
dependencies = [
2065
+
"proc-macro2",
2066
+
"quote",
2067
+
"syn 2.0.101",
2068
+
]
2069
+
2070
+
[[package]]
2071
+
name = "disqualified"
2072
+
version = "1.0.0"
2073
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2074
+
checksum = "c9c272297e804878a2a4b707cfcfc6d2328b5bb936944613b4fdf2b9269afdfd"
2075
+
2076
+
[[package]]
2077
+
name = "dlib"
2078
+
version = "0.5.2"
2079
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2080
+
checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412"
2081
+
dependencies = [
2082
+
"libloading",
2083
+
]
2084
+
2085
+
[[package]]
2086
+
name = "document-features"
2087
+
version = "0.2.11"
2088
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2089
+
checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d"
2090
+
dependencies = [
2091
+
"litrs",
2092
+
]
2093
+
2094
+
[[package]]
2095
+
name = "downcast-rs"
2096
+
version = "1.2.1"
2097
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2098
+
checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2"
2099
+
2100
+
[[package]]
2101
+
name = "downcast-rs"
2102
+
version = "2.0.1"
2103
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2104
+
checksum = "ea8a8b81cacc08888170eef4d13b775126db426d0b348bee9d18c2c1eaf123cf"
2105
+
2106
+
[[package]]
2107
+
name = "dpi"
2108
+
version = "0.1.2"
2109
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2110
+
checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76"
2111
+
2112
+
[[package]]
2113
+
name = "ecolor"
2114
+
version = "0.31.1"
2115
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2116
+
checksum = "bc4feb366740ded31a004a0e4452fbf84e80ef432ecf8314c485210229672fd1"
2117
+
dependencies = [
2118
+
"bytemuck",
2119
+
"emath",
2120
+
]
2121
+
2122
+
[[package]]
2123
+
name = "egui"
2124
+
version = "0.31.1"
2125
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2126
+
checksum = "25dd34cec49ab55d85ebf70139cb1ccd29c977ef6b6ba4fe85489d6877ee9ef3"
2127
+
dependencies = [
2128
+
"ahash",
2129
+
"bitflags 2.9.0",
2130
+
"emath",
2131
+
"epaint",
2132
+
"nohash-hasher",
2133
+
"profiling",
2134
+
]
2135
+
2136
+
[[package]]
2137
+
name = "either"
2138
+
version = "1.15.0"
2139
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2140
+
checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
2141
+
2142
+
[[package]]
2143
+
name = "emath"
2144
+
version = "0.31.1"
2145
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2146
+
checksum = "9e4cadcff7a5353ba72b7fea76bf2122b5ebdbc68e8155aa56dfdea90083fe1b"
2147
+
dependencies = [
2148
+
"bytemuck",
2149
+
]
2150
+
2151
+
[[package]]
2152
+
name = "encase"
2153
+
version = "0.10.0"
2154
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2155
+
checksum = "b0a05902cf601ed11d564128448097b98ebe3c6574bd7b6a653a3d56d54aa020"
2156
+
dependencies = [
2157
+
"const_panic",
2158
+
"encase_derive",
2159
+
"glam 0.29.3",
2160
+
"thiserror 1.0.69",
2161
+
]
2162
+
2163
+
[[package]]
2164
+
name = "encase_derive"
2165
+
version = "0.10.0"
2166
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2167
+
checksum = "181d475b694e2dd56ae919ce7699d344d1fd259292d590c723a50d1189a2ea85"
2168
+
dependencies = [
2169
+
"encase_derive_impl",
2170
+
]
2171
+
2172
+
[[package]]
2173
+
name = "encase_derive_impl"
2174
+
version = "0.10.0"
2175
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2176
+
checksum = "f97b51c5cc57ef7c5f7a0c57c250251c49ee4c28f819f87ac32f4aceabc36792"
2177
+
dependencies = [
2178
+
"proc-macro2",
2179
+
"quote",
2180
+
"syn 2.0.101",
2181
+
]
2182
+
2183
+
[[package]]
2184
+
name = "epaint"
2185
+
version = "0.31.1"
2186
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2187
+
checksum = "41fcc0f5a7c613afd2dee5e4b30c3e6acafb8ad6f0edb06068811f708a67c562"
2188
+
dependencies = [
2189
+
"ab_glyph",
2190
+
"ahash",
2191
+
"bytemuck",
2192
+
"ecolor",
2193
+
"emath",
2194
+
"epaint_default_fonts",
2195
+
"nohash-hasher",
2196
+
"parking_lot",
2197
+
"profiling",
2198
+
]
2199
+
2200
+
[[package]]
2201
+
name = "epaint_default_fonts"
2202
+
version = "0.31.1"
2203
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2204
+
checksum = "fc7e7a64c02cf7a5b51e745a9e45f60660a286f151c238b9d397b3e923f5082f"
2205
+
2206
+
[[package]]
2207
+
name = "equivalent"
2208
+
version = "1.0.2"
2209
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2210
+
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
2211
+
2212
+
[[package]]
2213
+
name = "erased-serde"
2214
+
version = "0.4.6"
2215
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2216
+
checksum = "e004d887f51fcb9fef17317a2f3525c887d8aa3f4f50fed920816a688284a5b7"
2217
+
dependencies = [
2218
+
"serde",
2219
+
"typeid",
2220
+
]
2221
+
2222
+
[[package]]
2223
+
name = "errno"
2224
+
version = "0.3.11"
2225
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2226
+
checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e"
2227
+
dependencies = [
2228
+
"libc",
2229
+
"windows-sys 0.59.0",
2230
+
]
2231
+
2232
+
[[package]]
2233
+
name = "error-code"
2234
+
version = "3.3.2"
2235
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2236
+
checksum = "dea2df4cf52843e0452895c455a1a2cfbb842a1e7329671acf418fdc53ed4c59"
2237
+
2238
+
[[package]]
2239
+
name = "euclid"
2240
+
version = "0.22.11"
2241
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2242
+
checksum = "ad9cdb4b747e485a12abb0e6566612956c7a1bafa3bdb8d682c5b6d403589e48"
2243
+
dependencies = [
2244
+
"num-traits",
2245
+
]
2246
+
2247
+
[[package]]
2248
+
name = "event-listener"
2249
+
version = "5.4.0"
2250
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2251
+
checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae"
2252
+
dependencies = [
2253
+
"concurrent-queue",
2254
+
"parking",
2255
+
"pin-project-lite",
2256
+
]
2257
+
2258
+
[[package]]
2259
+
name = "event-listener-strategy"
2260
+
version = "0.5.4"
2261
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2262
+
checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93"
2263
+
dependencies = [
2264
+
"event-listener",
2265
+
"pin-project-lite",
2266
+
]
2267
+
2268
+
[[package]]
2269
+
name = "exr"
2270
+
version = "1.73.0"
2271
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2272
+
checksum = "f83197f59927b46c04a183a619b7c29df34e63e63c7869320862268c0ef687e0"
2273
+
dependencies = [
2274
+
"bit_field",
2275
+
"half",
2276
+
"lebe",
2277
+
"miniz_oxide",
2278
+
"rayon-core",
2279
+
"smallvec",
2280
+
"zune-inflate",
2281
+
]
2282
+
2283
+
[[package]]
2284
+
name = "fastrand"
2285
+
version = "2.3.0"
2286
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2287
+
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
2288
+
2289
+
[[package]]
2290
+
name = "fdeflate"
2291
+
version = "0.3.7"
2292
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2293
+
checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c"
2294
+
dependencies = [
2295
+
"simd-adler32",
2296
+
]
2297
+
2298
+
[[package]]
2299
+
name = "fixedbitset"
2300
+
version = "0.5.7"
2301
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2302
+
checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99"
2303
+
2304
+
[[package]]
2305
+
name = "flate2"
2306
+
version = "1.1.1"
2307
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2308
+
checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece"
2309
+
dependencies = [
2310
+
"crc32fast",
2311
+
"libz-rs-sys",
2312
+
"miniz_oxide",
2313
+
]
2314
+
2315
+
[[package]]
2316
+
name = "fnv"
2317
+
version = "1.0.7"
2318
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2319
+
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
2320
+
2321
+
[[package]]
2322
+
name = "foldhash"
2323
+
version = "0.1.5"
2324
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2325
+
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
2326
+
2327
+
[[package]]
2328
+
name = "font-types"
2329
+
version = "0.9.0"
2330
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2331
+
checksum = "02a596f5713680923a2080d86de50fe472fb290693cf0f701187a1c8b36996b7"
2332
+
dependencies = [
2333
+
"bytemuck",
2334
+
]
2335
+
2336
+
[[package]]
2337
+
name = "fontconfig-parser"
2338
+
version = "0.5.7"
2339
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2340
+
checksum = "c1fcfcd44ca6e90c921fee9fa665d530b21ef1327a4c1a6c5250ea44b776ada7"
2341
+
dependencies = [
2342
+
"roxmltree",
2343
+
]
2344
+
2345
+
[[package]]
2346
+
name = "fontdb"
2347
+
version = "0.16.2"
2348
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2349
+
checksum = "b0299020c3ef3f60f526a4f64ab4a3d4ce116b1acbf24cdd22da0068e5d81dc3"
2350
+
dependencies = [
2351
+
"fontconfig-parser",
2352
+
"log",
2353
+
"memmap2",
2354
+
"slotmap",
2355
+
"tinyvec",
2356
+
"ttf-parser 0.20.0",
2357
+
]
2358
+
2359
+
[[package]]
2360
+
name = "foreign-types"
2361
+
version = "0.5.0"
2362
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2363
+
checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965"
2364
+
dependencies = [
2365
+
"foreign-types-macros",
2366
+
"foreign-types-shared",
2367
+
]
2368
+
2369
+
[[package]]
2370
+
name = "foreign-types-macros"
2371
+
version = "0.2.3"
2372
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2373
+
checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
2374
+
dependencies = [
2375
+
"proc-macro2",
2376
+
"quote",
2377
+
"syn 2.0.101",
2378
+
]
2379
+
2380
+
[[package]]
2381
+
name = "foreign-types-shared"
2382
+
version = "0.3.1"
2383
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2384
+
checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b"
2385
+
2386
+
[[package]]
2387
+
name = "form_urlencoded"
2388
+
version = "1.2.1"
2389
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2390
+
checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
2391
+
dependencies = [
2392
+
"percent-encoding",
2393
+
]
2394
+
2395
+
[[package]]
2396
+
name = "futures-channel"
2397
+
version = "0.3.31"
2398
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2399
+
checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
2400
+
dependencies = [
2401
+
"futures-core",
2402
+
]
2403
+
2404
+
[[package]]
2405
+
name = "futures-core"
2406
+
version = "0.3.31"
2407
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2408
+
checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
2409
+
2410
+
[[package]]
2411
+
name = "futures-io"
2412
+
version = "0.3.31"
2413
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2414
+
checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"
2415
+
2416
+
[[package]]
2417
+
name = "futures-lite"
2418
+
version = "2.6.0"
2419
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2420
+
checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532"
2421
+
dependencies = [
2422
+
"fastrand",
2423
+
"futures-core",
2424
+
"futures-io",
2425
+
"parking",
2426
+
"pin-project-lite",
2427
+
]
2428
+
2429
+
[[package]]
2430
+
name = "gethostname"
2431
+
version = "0.4.3"
2432
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2433
+
checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818"
2434
+
dependencies = [
2435
+
"libc",
2436
+
"windows-targets 0.48.5",
2437
+
]
2438
+
2439
+
[[package]]
2440
+
name = "getrandom"
2441
+
version = "0.2.16"
2442
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2443
+
checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592"
2444
+
dependencies = [
2445
+
"cfg-if",
2446
+
"js-sys",
2447
+
"libc",
2448
+
"wasi 0.11.0+wasi-snapshot-preview1",
2449
+
"wasm-bindgen",
2450
+
]
2451
+
2452
+
[[package]]
2453
+
name = "getrandom"
2454
+
version = "0.3.3"
2455
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2456
+
checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4"
2457
+
dependencies = [
2458
+
"cfg-if",
2459
+
"libc",
2460
+
"r-efi",
2461
+
"wasi 0.14.2+wasi-0.2.4",
2462
+
]
2463
+
2464
+
[[package]]
2465
+
name = "gif"
2466
+
version = "0.13.1"
2467
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2468
+
checksum = "3fb2d69b19215e18bb912fa30f7ce15846e301408695e44e0ef719f1da9e19f2"
2469
+
dependencies = [
2470
+
"color_quant",
2471
+
"weezl",
2472
+
]
2473
+
2474
+
[[package]]
2475
+
name = "gilrs"
2476
+
version = "0.11.0"
2477
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2478
+
checksum = "bbb2c998745a3c1ac90f64f4f7b3a54219fd3612d7705e7798212935641ed18f"
2479
+
dependencies = [
2480
+
"fnv",
2481
+
"gilrs-core",
2482
+
"log",
2483
+
"uuid",
2484
+
"vec_map",
2485
+
]
2486
+
2487
+
[[package]]
2488
+
name = "gilrs-core"
2489
+
version = "0.6.4"
2490
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2491
+
checksum = "a6d95ae10ce5aa99543a28cf74e41c11f3b9e3c14f0452bbde46024753cd683e"
2492
+
dependencies = [
2493
+
"core-foundation 0.10.0",
2494
+
"inotify",
2495
+
"io-kit-sys",
2496
+
"js-sys",
2497
+
"libc",
2498
+
"libudev-sys",
2499
+
"log",
2500
+
"nix",
2501
+
"uuid",
2502
+
"vec_map",
2503
+
"wasm-bindgen",
2504
+
"web-sys",
2505
+
"windows 0.61.1",
2506
+
]
2507
+
2508
+
[[package]]
2509
+
name = "gl_generator"
2510
+
version = "0.14.0"
2511
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2512
+
checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d"
2513
+
dependencies = [
2514
+
"khronos_api",
2515
+
"log",
2516
+
"xml-rs",
2517
+
]
2518
+
2519
+
[[package]]
2520
+
name = "glam"
2521
+
version = "0.29.3"
2522
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2523
+
checksum = "8babf46d4c1c9d92deac9f7be466f76dfc4482b6452fc5024b5e8daf6ffeb3ee"
2524
+
dependencies = [
2525
+
"bytemuck",
2526
+
"libm",
2527
+
"rand",
2528
+
"serde",
2529
+
]
2530
+
2531
+
[[package]]
2532
+
name = "glam"
2533
+
version = "0.30.3"
2534
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2535
+
checksum = "6b46b9ca4690308844c644e7c634d68792467260e051c8543e0c7871662b3ba7"
2536
+
2537
+
[[package]]
2538
+
name = "glob"
2539
+
version = "0.3.2"
2540
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2541
+
checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2"
2542
+
2543
+
[[package]]
2544
+
name = "glow"
2545
+
version = "0.16.0"
2546
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2547
+
checksum = "c5e5ea60d70410161c8bf5da3fdfeaa1c72ed2c15f8bbb9d19fe3a4fad085f08"
2548
+
dependencies = [
2549
+
"js-sys",
2550
+
"slotmap",
2551
+
"wasm-bindgen",
2552
+
"web-sys",
2553
+
]
2554
+
2555
+
[[package]]
2556
+
name = "gltf"
2557
+
version = "1.4.1"
2558
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2559
+
checksum = "e3ce1918195723ce6ac74e80542c5a96a40c2b26162c1957a5cd70799b8cacf7"
2560
+
dependencies = [
2561
+
"byteorder",
2562
+
"gltf-json",
2563
+
"lazy_static",
2564
+
"serde_json",
2565
+
]
2566
+
2567
+
[[package]]
2568
+
name = "gltf-derive"
2569
+
version = "1.4.1"
2570
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2571
+
checksum = "14070e711538afba5d6c807edb74bcb84e5dbb9211a3bf5dea0dfab5b24f4c51"
2572
+
dependencies = [
2573
+
"inflections",
2574
+
"proc-macro2",
2575
+
"quote",
2576
+
"syn 2.0.101",
2577
+
]
2578
+
2579
+
[[package]]
2580
+
name = "gltf-json"
2581
+
version = "1.4.1"
2582
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2583
+
checksum = "e6176f9d60a7eab0a877e8e96548605dedbde9190a7ae1e80bbcc1c9af03ab14"
2584
+
dependencies = [
2585
+
"gltf-derive",
2586
+
"serde",
2587
+
"serde_derive",
2588
+
"serde_json",
2589
+
]
2590
+
2591
+
[[package]]
2592
+
name = "glutin_wgl_sys"
2593
+
version = "0.6.1"
2594
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2595
+
checksum = "2c4ee00b289aba7a9e5306d57c2d05499b2e5dc427f84ac708bd2c090212cf3e"
2596
+
dependencies = [
2597
+
"gl_generator",
2598
+
]
2599
+
2600
+
[[package]]
2601
+
name = "gpu-alloc"
2602
+
version = "0.6.0"
2603
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2604
+
checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171"
2605
+
dependencies = [
2606
+
"bitflags 2.9.0",
2607
+
"gpu-alloc-types",
2608
+
]
2609
+
2610
+
[[package]]
2611
+
name = "gpu-alloc-types"
2612
+
version = "0.3.0"
2613
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2614
+
checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4"
2615
+
dependencies = [
2616
+
"bitflags 2.9.0",
2617
+
]
2618
+
2619
+
[[package]]
2620
+
name = "gpu-allocator"
2621
+
version = "0.27.0"
2622
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2623
+
checksum = "c151a2a5ef800297b4e79efa4f4bec035c5f51d5ae587287c9b952bdf734cacd"
2624
+
dependencies = [
2625
+
"log",
2626
+
"presser",
2627
+
"thiserror 1.0.69",
2628
+
"windows 0.58.0",
2629
+
]
2630
+
2631
+
[[package]]
2632
+
name = "gpu-descriptor"
2633
+
version = "0.3.1"
2634
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2635
+
checksum = "dcf29e94d6d243368b7a56caa16bc213e4f9f8ed38c4d9557069527b5d5281ca"
2636
+
dependencies = [
2637
+
"bitflags 2.9.0",
2638
+
"gpu-descriptor-types",
2639
+
"hashbrown",
2640
+
]
2641
+
2642
+
[[package]]
2643
+
name = "gpu-descriptor-types"
2644
+
version = "0.2.0"
2645
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2646
+
checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91"
2647
+
dependencies = [
2648
+
"bitflags 2.9.0",
2649
+
]
2650
+
2651
+
[[package]]
2652
+
name = "grid"
2653
+
version = "0.15.0"
2654
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2655
+
checksum = "36119f3a540b086b4e436bb2b588cf98a68863470e0e880f4d0842f112a3183a"
2656
+
2657
+
[[package]]
2658
+
name = "guillotiere"
2659
+
version = "0.6.2"
2660
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2661
+
checksum = "b62d5865c036cb1393e23c50693df631d3f5d7bcca4c04fe4cc0fd592e74a782"
2662
+
dependencies = [
2663
+
"euclid",
2664
+
"svg_fmt",
2665
+
]
2666
+
2667
+
[[package]]
2668
+
name = "half"
2669
+
version = "2.6.0"
2670
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2671
+
checksum = "459196ed295495a68f7d7fe1d84f6c4b7ff0e21fe3017b2f283c6fac3ad803c9"
2672
+
dependencies = [
2673
+
"cfg-if",
2674
+
"crunchy",
2675
+
]
2676
+
2677
+
[[package]]
2678
+
name = "hash32"
2679
+
version = "0.3.1"
2680
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2681
+
checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606"
2682
+
dependencies = [
2683
+
"byteorder",
2684
+
]
2685
+
2686
+
[[package]]
2687
+
name = "hashbrown"
2688
+
version = "0.15.3"
2689
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2690
+
checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3"
2691
+
dependencies = [
2692
+
"equivalent",
2693
+
"foldhash",
2694
+
"serde",
2695
+
]
2696
+
2697
+
[[package]]
2698
+
name = "heapless"
2699
+
version = "0.8.0"
2700
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2701
+
checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad"
2702
+
dependencies = [
2703
+
"hash32",
2704
+
"portable-atomic",
2705
+
"stable_deref_trait",
2706
+
]
2707
+
2708
+
[[package]]
2709
+
name = "heck"
2710
+
version = "0.5.0"
2711
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2712
+
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
2713
+
2714
+
[[package]]
2715
+
name = "hermit-abi"
2716
+
version = "0.4.0"
2717
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2718
+
checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc"
2719
+
2720
+
[[package]]
2721
+
name = "hexasphere"
2722
+
version = "15.1.0"
2723
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2724
+
checksum = "d9c9e718d32b6e6b2b32354e1b0367025efdd0b11d6a740b905ddf5db1074679"
2725
+
dependencies = [
2726
+
"constgebra",
2727
+
"glam 0.29.3",
2728
+
"tinyvec",
2729
+
]
2730
+
2731
+
[[package]]
2732
+
name = "hexf-parse"
2733
+
version = "0.2.1"
2734
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2735
+
checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df"
2736
+
2737
+
[[package]]
2738
+
name = "home"
2739
+
version = "0.5.11"
2740
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2741
+
checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf"
2742
+
dependencies = [
2743
+
"windows-sys 0.59.0",
2744
+
]
2745
+
2746
+
[[package]]
2747
+
name = "icu_collections"
2748
+
version = "2.0.0"
2749
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2750
+
checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47"
2751
+
dependencies = [
2752
+
"displaydoc",
2753
+
"potential_utf",
2754
+
"yoke",
2755
+
"zerofrom",
2756
+
"zerovec",
2757
+
]
2758
+
2759
+
[[package]]
2760
+
name = "icu_locale_core"
2761
+
version = "2.0.0"
2762
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2763
+
checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a"
2764
+
dependencies = [
2765
+
"displaydoc",
2766
+
"litemap",
2767
+
"tinystr",
2768
+
"writeable",
2769
+
"zerovec",
2770
+
]
2771
+
2772
+
[[package]]
2773
+
name = "icu_normalizer"
2774
+
version = "2.0.0"
2775
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2776
+
checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979"
2777
+
dependencies = [
2778
+
"displaydoc",
2779
+
"icu_collections",
2780
+
"icu_normalizer_data",
2781
+
"icu_properties",
2782
+
"icu_provider",
2783
+
"smallvec",
2784
+
"zerovec",
2785
+
]
2786
+
2787
+
[[package]]
2788
+
name = "icu_normalizer_data"
2789
+
version = "2.0.0"
2790
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2791
+
checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3"
2792
+
2793
+
[[package]]
2794
+
name = "icu_properties"
2795
+
version = "2.0.0"
2796
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2797
+
checksum = "2549ca8c7241c82f59c80ba2a6f415d931c5b58d24fb8412caa1a1f02c49139a"
2798
+
dependencies = [
2799
+
"displaydoc",
2800
+
"icu_collections",
2801
+
"icu_locale_core",
2802
+
"icu_properties_data",
2803
+
"icu_provider",
2804
+
"potential_utf",
2805
+
"zerotrie",
2806
+
"zerovec",
2807
+
]
2808
+
2809
+
[[package]]
2810
+
name = "icu_properties_data"
2811
+
version = "2.0.0"
2812
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2813
+
checksum = "8197e866e47b68f8f7d95249e172903bec06004b18b2937f1095d40a0c57de04"
2814
+
2815
+
[[package]]
2816
+
name = "icu_provider"
2817
+
version = "2.0.0"
2818
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2819
+
checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af"
2820
+
dependencies = [
2821
+
"displaydoc",
2822
+
"icu_locale_core",
2823
+
"stable_deref_trait",
2824
+
"tinystr",
2825
+
"writeable",
2826
+
"yoke",
2827
+
"zerofrom",
2828
+
"zerotrie",
2829
+
"zerovec",
2830
+
]
2831
+
2832
+
[[package]]
2833
+
name = "idna"
2834
+
version = "1.0.3"
2835
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2836
+
checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e"
2837
+
dependencies = [
2838
+
"idna_adapter",
2839
+
"smallvec",
2840
+
"utf8_iter",
2841
+
]
2842
+
2843
+
[[package]]
2844
+
name = "idna_adapter"
2845
+
version = "1.2.1"
2846
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2847
+
checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344"
2848
+
dependencies = [
2849
+
"icu_normalizer",
2850
+
"icu_properties",
2851
+
]
2852
+
2853
+
[[package]]
2854
+
name = "image"
2855
+
version = "0.24.9"
2856
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2857
+
checksum = "5690139d2f55868e080017335e4b94cb7414274c74f1669c84fb5feba2c9f69d"
2858
+
dependencies = [
2859
+
"bytemuck",
2860
+
"byteorder",
2861
+
"color_quant",
2862
+
"exr",
2863
+
"gif",
2864
+
"jpeg-decoder",
2865
+
"num-traits",
2866
+
"png",
2867
+
"qoi",
2868
+
"tiff",
2869
+
]
2870
+
2871
+
[[package]]
2872
+
name = "image"
2873
+
version = "0.25.6"
2874
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2875
+
checksum = "db35664ce6b9810857a38a906215e75a9c879f0696556a39f59c62829710251a"
2876
+
dependencies = [
2877
+
"bytemuck",
2878
+
"byteorder-lite",
2879
+
"color_quant",
2880
+
"exr",
2881
+
"gif",
2882
+
"image-webp",
2883
+
"num-traits",
2884
+
"png",
2885
+
"qoi",
2886
+
"ravif",
2887
+
"rayon",
2888
+
"rgb",
2889
+
"tiff",
2890
+
"zune-core",
2891
+
"zune-jpeg",
2892
+
]
2893
+
2894
+
[[package]]
2895
+
name = "image-webp"
2896
+
version = "0.2.1"
2897
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2898
+
checksum = "b77d01e822461baa8409e156015a1d91735549f0f2c17691bd2d996bef238f7f"
2899
+
dependencies = [
2900
+
"byteorder-lite",
2901
+
"quick-error",
2902
+
]
2903
+
2904
+
[[package]]
2905
+
name = "imgref"
2906
+
version = "1.11.0"
2907
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2908
+
checksum = "d0263a3d970d5c054ed9312c0057b4f3bde9c0b33836d3637361d4a9e6e7a408"
2909
+
2910
+
[[package]]
2911
+
name = "immutable-chunkmap"
2912
+
version = "2.0.6"
2913
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2914
+
checksum = "12f97096f508d54f8f8ab8957862eee2ccd628847b6217af1a335e1c44dee578"
2915
+
dependencies = [
2916
+
"arrayvec",
2917
+
]
2918
+
2919
+
[[package]]
2920
+
name = "indexmap"
2921
+
version = "2.9.0"
2922
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2923
+
checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e"
2924
+
dependencies = [
2925
+
"equivalent",
2926
+
"hashbrown",
2927
+
"serde",
2928
+
]
2929
+
2930
+
[[package]]
2931
+
name = "inflections"
2932
+
version = "1.1.1"
2933
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2934
+
checksum = "a257582fdcde896fd96463bf2d40eefea0580021c0712a0e2b028b60b47a837a"
2935
+
2936
+
[[package]]
2937
+
name = "inotify"
2938
+
version = "0.11.0"
2939
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2940
+
checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3"
2941
+
dependencies = [
2942
+
"bitflags 2.9.0",
2943
+
"inotify-sys",
2944
+
"libc",
2945
+
]
2946
+
2947
+
[[package]]
2948
+
name = "inotify-sys"
2949
+
version = "0.1.5"
2950
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2951
+
checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb"
2952
+
dependencies = [
2953
+
"libc",
2954
+
]
2955
+
2956
+
[[package]]
2957
+
name = "interpolate_name"
2958
+
version = "0.2.4"
2959
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2960
+
checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60"
2961
+
dependencies = [
2962
+
"proc-macro2",
2963
+
"quote",
2964
+
"syn 2.0.101",
2965
+
]
2966
+
2967
+
[[package]]
2968
+
name = "io-kit-sys"
2969
+
version = "0.4.1"
2970
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2971
+
checksum = "617ee6cf8e3f66f3b4ea67a4058564628cde41901316e19f559e14c7c72c5e7b"
2972
+
dependencies = [
2973
+
"core-foundation-sys",
2974
+
"mach2",
2975
+
]
2976
+
2977
+
[[package]]
2978
+
name = "itertools"
2979
+
version = "0.12.1"
2980
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2981
+
checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569"
2982
+
dependencies = [
2983
+
"either",
2984
+
]
2985
+
2986
+
[[package]]
2987
+
name = "itertools"
2988
+
version = "0.13.0"
2989
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2990
+
checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186"
2991
+
dependencies = [
2992
+
"either",
2993
+
]
2994
+
2995
+
[[package]]
2996
+
name = "itertools"
2997
+
version = "0.14.0"
2998
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2999
+
checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285"
3000
+
dependencies = [
3001
+
"either",
3002
+
]
3003
+
3004
+
[[package]]
3005
+
name = "itoa"
3006
+
version = "1.0.15"
3007
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3008
+
checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
3009
+
3010
+
[[package]]
3011
+
name = "jni"
3012
+
version = "0.21.1"
3013
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3014
+
checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97"
3015
+
dependencies = [
3016
+
"cesu8",
3017
+
"cfg-if",
3018
+
"combine",
3019
+
"jni-sys",
3020
+
"log",
3021
+
"thiserror 1.0.69",
3022
+
"walkdir",
3023
+
"windows-sys 0.45.0",
3024
+
]
3025
+
3026
+
[[package]]
3027
+
name = "jni-sys"
3028
+
version = "0.3.0"
3029
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3030
+
checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
3031
+
3032
+
[[package]]
3033
+
name = "jobserver"
3034
+
version = "0.1.33"
3035
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3036
+
checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a"
3037
+
dependencies = [
3038
+
"getrandom 0.3.3",
3039
+
"libc",
3040
+
]
3041
+
3042
+
[[package]]
3043
+
name = "jpeg-decoder"
3044
+
version = "0.3.1"
3045
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3046
+
checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0"
3047
+
dependencies = [
3048
+
"rayon",
3049
+
]
3050
+
3051
+
[[package]]
3052
+
name = "js-sys"
3053
+
version = "0.3.77"
3054
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3055
+
checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f"
3056
+
dependencies = [
3057
+
"once_cell",
3058
+
"wasm-bindgen",
3059
+
]
3060
+
3061
+
[[package]]
3062
+
name = "khronos-egl"
3063
+
version = "6.0.0"
3064
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3065
+
checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76"
3066
+
dependencies = [
3067
+
"libc",
3068
+
"libloading",
3069
+
"pkg-config",
3070
+
]
3071
+
3072
+
[[package]]
3073
+
name = "khronos_api"
3074
+
version = "3.1.0"
3075
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3076
+
checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc"
3077
+
3078
+
[[package]]
3079
+
name = "ktx2"
3080
+
version = "0.3.0"
3081
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3082
+
checksum = "87d65e08a9ec02e409d27a0139eaa6b9756b4d81fe7cde71f6941a83730ce838"
3083
+
dependencies = [
3084
+
"bitflags 1.3.2",
3085
+
]
3086
+
3087
+
[[package]]
3088
+
name = "lazy_static"
3089
+
version = "1.5.0"
3090
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3091
+
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
3092
+
3093
+
[[package]]
3094
+
name = "lebe"
3095
+
version = "0.5.2"
3096
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3097
+
checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8"
3098
+
3099
+
[[package]]
3100
+
name = "lewton"
3101
+
version = "0.10.2"
3102
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3103
+
checksum = "777b48df9aaab155475a83a7df3070395ea1ac6902f5cd062b8f2b028075c030"
3104
+
dependencies = [
3105
+
"byteorder",
3106
+
"ogg",
3107
+
"tinyvec",
3108
+
]
3109
+
3110
+
[[package]]
3111
+
name = "libc"
3112
+
version = "0.2.172"
3113
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3114
+
checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa"
3115
+
3116
+
[[package]]
3117
+
name = "libfuzzer-sys"
3118
+
version = "0.4.9"
3119
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3120
+
checksum = "cf78f52d400cf2d84a3a973a78a592b4adc535739e0a5597a0da6f0c357adc75"
3121
+
dependencies = [
3122
+
"arbitrary",
3123
+
"cc",
3124
+
]
3125
+
3126
+
[[package]]
3127
+
name = "libloading"
3128
+
version = "0.8.6"
3129
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3130
+
checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34"
3131
+
dependencies = [
3132
+
"cfg-if",
3133
+
"windows-targets 0.52.6",
3134
+
]
3135
+
3136
+
[[package]]
3137
+
name = "libm"
3138
+
version = "0.2.15"
3139
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3140
+
checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de"
3141
+
3142
+
[[package]]
3143
+
name = "libredox"
3144
+
version = "0.1.3"
3145
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3146
+
checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d"
3147
+
dependencies = [
3148
+
"bitflags 2.9.0",
3149
+
"libc",
3150
+
"redox_syscall 0.5.12",
3151
+
]
3152
+
3153
+
[[package]]
3154
+
name = "libudev-sys"
3155
+
version = "0.1.4"
3156
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3157
+
checksum = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324"
3158
+
dependencies = [
3159
+
"libc",
3160
+
"pkg-config",
3161
+
]
3162
+
3163
+
[[package]]
3164
+
name = "libz-rs-sys"
3165
+
version = "0.5.0"
3166
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3167
+
checksum = "6489ca9bd760fe9642d7644e827b0c9add07df89857b0416ee15c1cc1a3b8c5a"
3168
+
dependencies = [
3169
+
"zlib-rs",
3170
+
]
3171
+
3172
+
[[package]]
3173
+
name = "linux-raw-sys"
3174
+
version = "0.4.15"
3175
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3176
+
checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
3177
+
3178
+
[[package]]
3179
+
name = "litemap"
3180
+
version = "0.8.0"
3181
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3182
+
checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956"
3183
+
3184
+
[[package]]
3185
+
name = "litrs"
3186
+
version = "0.4.1"
3187
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3188
+
checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5"
3189
+
3190
+
[[package]]
3191
+
name = "lock_api"
3192
+
version = "0.4.12"
3193
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3194
+
checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"
3195
+
dependencies = [
3196
+
"autocfg",
3197
+
"scopeguard",
3198
+
]
3199
+
3200
+
[[package]]
3201
+
name = "log"
3202
+
version = "0.4.27"
3203
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3204
+
checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
3205
+
3206
+
[[package]]
3207
+
name = "loop9"
3208
+
version = "0.1.5"
3209
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3210
+
checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062"
3211
+
dependencies = [
3212
+
"imgref",
3213
+
]
3214
+
3215
+
[[package]]
3216
+
name = "mach2"
3217
+
version = "0.4.2"
3218
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3219
+
checksum = "19b955cdeb2a02b9117f121ce63aa52d08ade45de53e48fe6a38b39c10f6f709"
3220
+
dependencies = [
3221
+
"libc",
3222
+
]
3223
+
3224
+
[[package]]
3225
+
name = "malloc_buf"
3226
+
version = "0.0.6"
3227
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3228
+
checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
3229
+
dependencies = [
3230
+
"libc",
3231
+
]
3232
+
3233
+
[[package]]
3234
+
name = "matchers"
3235
+
version = "0.1.0"
3236
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3237
+
checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
3238
+
dependencies = [
3239
+
"regex-automata 0.1.10",
3240
+
]
3241
+
3242
+
[[package]]
3243
+
name = "matrixmultiply"
3244
+
version = "0.3.9"
3245
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3246
+
checksum = "9380b911e3e96d10c1f415da0876389aaf1b56759054eeb0de7df940c456ba1a"
3247
+
dependencies = [
3248
+
"autocfg",
3249
+
"rawpointer",
3250
+
]
3251
+
3252
+
[[package]]
3253
+
name = "maybe-rayon"
3254
+
version = "0.1.1"
3255
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3256
+
checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519"
3257
+
dependencies = [
3258
+
"cfg-if",
3259
+
"rayon",
3260
+
]
3261
+
3262
+
[[package]]
3263
+
name = "memchr"
3264
+
version = "2.7.4"
3265
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3266
+
checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
3267
+
3268
+
[[package]]
3269
+
name = "memmap2"
3270
+
version = "0.9.5"
3271
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3272
+
checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f"
3273
+
dependencies = [
3274
+
"libc",
3275
+
]
3276
+
3277
+
[[package]]
3278
+
name = "mesh-tools"
3279
+
version = "0.1.0"
3280
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3281
+
checksum = "9b07c5e96a6080555d650321a81c7e3cd68b08261f63ee5db2b069a50f5ce7db"
3282
+
dependencies = [
3283
+
"base64 0.13.1",
3284
+
"byteorder",
3285
+
"image 0.24.9",
3286
+
"nalgebra",
3287
+
"serde",
3288
+
"serde_json",
3289
+
"thiserror 1.0.69",
3290
+
"uuid",
3291
+
]
3292
+
3293
+
[[package]]
3294
+
name = "metal"
3295
+
version = "0.31.0"
3296
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3297
+
checksum = "f569fb946490b5743ad69813cb19629130ce9374034abe31614a36402d18f99e"
3298
+
dependencies = [
3299
+
"bitflags 2.9.0",
3300
+
"block",
3301
+
"core-graphics-types",
3302
+
"foreign-types",
3303
+
"log",
3304
+
"objc",
3305
+
"paste",
3306
+
]
3307
+
3308
+
[[package]]
3309
+
name = "minimal-lexical"
3310
+
version = "0.2.1"
3311
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3312
+
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
3313
+
3314
+
[[package]]
3315
+
name = "miniz_oxide"
3316
+
version = "0.8.8"
3317
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3318
+
checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a"
3319
+
dependencies = [
3320
+
"adler2",
3321
+
"simd-adler32",
3322
+
]
3323
+
3324
+
[[package]]
3325
+
name = "naga"
3326
+
version = "24.0.0"
3327
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3328
+
checksum = "e380993072e52eef724eddfcde0ed013b0c023c3f0417336ed041aa9f076994e"
3329
+
dependencies = [
3330
+
"arrayvec",
3331
+
"bit-set 0.8.0",
3332
+
"bitflags 2.9.0",
3333
+
"cfg_aliases",
3334
+
"codespan-reporting",
3335
+
"hexf-parse",
3336
+
"indexmap",
3337
+
"log",
3338
+
"pp-rs",
3339
+
"rustc-hash",
3340
+
"spirv",
3341
+
"strum",
3342
+
"termcolor",
3343
+
"thiserror 2.0.12",
3344
+
"unicode-xid",
3345
+
]
3346
+
3347
+
[[package]]
3348
+
name = "naga_oil"
3349
+
version = "0.17.0"
3350
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3351
+
checksum = "0ca507a365f886f95f74420361b75442a3709c747a8a6e8b6c45b8667f45a82c"
3352
+
dependencies = [
3353
+
"bit-set 0.5.3",
3354
+
"codespan-reporting",
3355
+
"data-encoding",
3356
+
"indexmap",
3357
+
"naga",
3358
+
"once_cell",
3359
+
"regex",
3360
+
"regex-syntax 0.8.5",
3361
+
"rustc-hash",
3362
+
"thiserror 1.0.69",
3363
+
"tracing",
3364
+
"unicode-ident",
3365
+
]
3366
+
3367
+
[[package]]
3368
+
name = "nalgebra"
3369
+
version = "0.31.4"
3370
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3371
+
checksum = "20bd243ab3dbb395b39ee730402d2e5405e448c75133ec49cc977762c4cba3d1"
3372
+
dependencies = [
3373
+
"approx",
3374
+
"matrixmultiply",
3375
+
"nalgebra-macros",
3376
+
"num-complex",
3377
+
"num-rational",
3378
+
"num-traits",
3379
+
"simba",
3380
+
"typenum",
3381
+
]
3382
+
3383
+
[[package]]
3384
+
name = "nalgebra-macros"
3385
+
version = "0.1.0"
3386
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3387
+
checksum = "01fcc0b8149b4632adc89ac3b7b31a12fb6099a0317a4eb2ebff574ef7de7218"
3388
+
dependencies = [
3389
+
"proc-macro2",
3390
+
"quote",
3391
+
"syn 1.0.109",
3392
+
]
3393
+
3394
+
[[package]]
3395
+
name = "ndk"
3396
+
version = "0.8.0"
3397
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3398
+
checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7"
3399
+
dependencies = [
3400
+
"bitflags 2.9.0",
3401
+
"jni-sys",
3402
+
"log",
3403
+
"ndk-sys 0.5.0+25.2.9519653",
3404
+
"num_enum",
3405
+
"thiserror 1.0.69",
3406
+
]
3407
+
3408
+
[[package]]
3409
+
name = "ndk"
3410
+
version = "0.9.0"
3411
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3412
+
checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4"
3413
+
dependencies = [
3414
+
"bitflags 2.9.0",
3415
+
"jni-sys",
3416
+
"log",
3417
+
"ndk-sys 0.6.0+11769913",
3418
+
"num_enum",
3419
+
"raw-window-handle",
3420
+
"thiserror 1.0.69",
3421
+
]
3422
+
3423
+
[[package]]
3424
+
name = "ndk-context"
3425
+
version = "0.1.1"
3426
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3427
+
checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
3428
+
3429
+
[[package]]
3430
+
name = "ndk-sys"
3431
+
version = "0.5.0+25.2.9519653"
3432
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3433
+
checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691"
3434
+
dependencies = [
3435
+
"jni-sys",
3436
+
]
3437
+
3438
+
[[package]]
3439
+
name = "ndk-sys"
3440
+
version = "0.6.0+11769913"
3441
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3442
+
checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873"
3443
+
dependencies = [
3444
+
"jni-sys",
3445
+
]
3446
+
3447
+
[[package]]
3448
+
name = "new_debug_unreachable"
3449
+
version = "1.0.6"
3450
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3451
+
checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086"
3452
+
3453
+
[[package]]
3454
+
name = "nix"
3455
+
version = "0.29.0"
3456
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3457
+
checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46"
3458
+
dependencies = [
3459
+
"bitflags 2.9.0",
3460
+
"cfg-if",
3461
+
"cfg_aliases",
3462
+
"libc",
3463
+
]
3464
+
3465
+
[[package]]
3466
+
name = "nohash-hasher"
3467
+
version = "0.2.0"
3468
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3469
+
checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451"
3470
+
3471
+
[[package]]
3472
+
name = "nom"
3473
+
version = "7.1.3"
3474
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3475
+
checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
3476
+
dependencies = [
3477
+
"memchr",
3478
+
"minimal-lexical",
3479
+
]
3480
+
3481
+
[[package]]
3482
+
name = "nonmax"
3483
+
version = "0.5.5"
3484
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3485
+
checksum = "610a5acd306ec67f907abe5567859a3c693fb9886eb1f012ab8f2a47bef3db51"
3486
+
3487
+
[[package]]
3488
+
name = "noop_proc_macro"
3489
+
version = "0.3.0"
3490
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3491
+
checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8"
3492
+
3493
+
[[package]]
3494
+
name = "ntapi"
3495
+
version = "0.4.1"
3496
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3497
+
checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4"
3498
+
dependencies = [
3499
+
"winapi",
3500
+
]
3501
+
3502
+
[[package]]
3503
+
name = "nu-ansi-term"
3504
+
version = "0.46.0"
3505
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3506
+
checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
3507
+
dependencies = [
3508
+
"overload",
3509
+
"winapi",
3510
+
]
3511
+
3512
+
[[package]]
3513
+
name = "num-bigint"
3514
+
version = "0.4.6"
3515
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3516
+
checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
3517
+
dependencies = [
3518
+
"num-integer",
3519
+
"num-traits",
3520
+
]
3521
+
3522
+
[[package]]
3523
+
name = "num-complex"
3524
+
version = "0.4.6"
3525
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3526
+
checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495"
3527
+
dependencies = [
3528
+
"num-traits",
3529
+
]
3530
+
3531
+
[[package]]
3532
+
name = "num-derive"
3533
+
version = "0.4.2"
3534
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3535
+
checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202"
3536
+
dependencies = [
3537
+
"proc-macro2",
3538
+
"quote",
3539
+
"syn 2.0.101",
3540
+
]
3541
+
3542
+
[[package]]
3543
+
name = "num-integer"
3544
+
version = "0.1.46"
3545
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3546
+
checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
3547
+
dependencies = [
3548
+
"num-traits",
3549
+
]
3550
+
3551
+
[[package]]
3552
+
name = "num-rational"
3553
+
version = "0.4.2"
3554
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3555
+
checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824"
3556
+
dependencies = [
3557
+
"num-bigint",
3558
+
"num-integer",
3559
+
"num-traits",
3560
+
]
3561
+
3562
+
[[package]]
3563
+
name = "num-traits"
3564
+
version = "0.2.19"
3565
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3566
+
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
3567
+
dependencies = [
3568
+
"autocfg",
3569
+
"libm",
3570
+
]
3571
+
3572
+
[[package]]
3573
+
name = "num_enum"
3574
+
version = "0.7.3"
3575
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3576
+
checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179"
3577
+
dependencies = [
3578
+
"num_enum_derive",
3579
+
]
3580
+
3581
+
[[package]]
3582
+
name = "num_enum_derive"
3583
+
version = "0.7.3"
3584
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3585
+
checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56"
3586
+
dependencies = [
3587
+
"proc-macro-crate",
3588
+
"proc-macro2",
3589
+
"quote",
3590
+
"syn 2.0.101",
3591
+
]
3592
+
3593
+
[[package]]
3594
+
name = "objc"
3595
+
version = "0.2.7"
3596
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3597
+
checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
3598
+
dependencies = [
3599
+
"malloc_buf",
3600
+
]
3601
+
3602
+
[[package]]
3603
+
name = "objc-sys"
3604
+
version = "0.3.5"
3605
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3606
+
checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310"
3607
+
3608
+
[[package]]
3609
+
name = "objc2"
3610
+
version = "0.5.2"
3611
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3612
+
checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804"
3613
+
dependencies = [
3614
+
"objc-sys",
3615
+
"objc2-encode",
3616
+
]
3617
+
3618
+
[[package]]
3619
+
name = "objc2"
3620
+
version = "0.6.1"
3621
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3622
+
checksum = "88c6597e14493ab2e44ce58f2fdecf095a51f12ca57bec060a11c57332520551"
3623
+
dependencies = [
3624
+
"objc2-encode",
3625
+
]
3626
+
3627
+
[[package]]
3628
+
name = "objc2-app-kit"
3629
+
version = "0.2.2"
3630
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3631
+
checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff"
3632
+
dependencies = [
3633
+
"bitflags 2.9.0",
3634
+
"block2",
3635
+
"libc",
3636
+
"objc2 0.5.2",
3637
+
"objc2-core-data",
3638
+
"objc2-core-image",
3639
+
"objc2-foundation 0.2.2",
3640
+
"objc2-quartz-core",
3641
+
]
3642
+
3643
+
[[package]]
3644
+
name = "objc2-app-kit"
3645
+
version = "0.3.1"
3646
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3647
+
checksum = "e6f29f568bec459b0ddff777cec4fe3fd8666d82d5a40ebd0ff7e66134f89bcc"
3648
+
dependencies = [
3649
+
"bitflags 2.9.0",
3650
+
"objc2 0.6.1",
3651
+
"objc2-core-graphics",
3652
+
"objc2-foundation 0.3.1",
3653
+
]
3654
+
3655
+
[[package]]
3656
+
name = "objc2-cloud-kit"
3657
+
version = "0.2.2"
3658
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3659
+
checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009"
3660
+
dependencies = [
3661
+
"bitflags 2.9.0",
3662
+
"block2",
3663
+
"objc2 0.5.2",
3664
+
"objc2-core-location",
3665
+
"objc2-foundation 0.2.2",
3666
+
]
3667
+
3668
+
[[package]]
3669
+
name = "objc2-contacts"
3670
+
version = "0.2.2"
3671
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3672
+
checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889"
3673
+
dependencies = [
3674
+
"block2",
3675
+
"objc2 0.5.2",
3676
+
"objc2-foundation 0.2.2",
3677
+
]
3678
+
3679
+
[[package]]
3680
+
name = "objc2-core-data"
3681
+
version = "0.2.2"
3682
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3683
+
checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef"
3684
+
dependencies = [
3685
+
"bitflags 2.9.0",
3686
+
"block2",
3687
+
"objc2 0.5.2",
3688
+
"objc2-foundation 0.2.2",
3689
+
]
3690
+
3691
+
[[package]]
3692
+
name = "objc2-core-foundation"
3693
+
version = "0.3.1"
3694
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3695
+
checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166"
3696
+
dependencies = [
3697
+
"bitflags 2.9.0",
3698
+
"dispatch2",
3699
+
"objc2 0.6.1",
3700
+
]
3701
+
3702
+
[[package]]
3703
+
name = "objc2-core-graphics"
3704
+
version = "0.3.1"
3705
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3706
+
checksum = "989c6c68c13021b5c2d6b71456ebb0f9dc78d752e86a98da7c716f4f9470f5a4"
3707
+
dependencies = [
3708
+
"bitflags 2.9.0",
3709
+
"dispatch2",
3710
+
"objc2 0.6.1",
3711
+
"objc2-core-foundation",
3712
+
"objc2-io-surface",
3713
+
]
3714
+
3715
+
[[package]]
3716
+
name = "objc2-core-image"
3717
+
version = "0.2.2"
3718
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3719
+
checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80"
3720
+
dependencies = [
3721
+
"block2",
3722
+
"objc2 0.5.2",
3723
+
"objc2-foundation 0.2.2",
3724
+
"objc2-metal",
3725
+
]
3726
+
3727
+
[[package]]
3728
+
name = "objc2-core-location"
3729
+
version = "0.2.2"
3730
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3731
+
checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781"
3732
+
dependencies = [
3733
+
"block2",
3734
+
"objc2 0.5.2",
3735
+
"objc2-contacts",
3736
+
"objc2-foundation 0.2.2",
3737
+
]
3738
+
3739
+
[[package]]
3740
+
name = "objc2-encode"
3741
+
version = "4.1.0"
3742
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3743
+
checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33"
3744
+
3745
+
[[package]]
3746
+
name = "objc2-foundation"
3747
+
version = "0.2.2"
3748
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3749
+
checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8"
3750
+
dependencies = [
3751
+
"bitflags 2.9.0",
3752
+
"block2",
3753
+
"dispatch",
3754
+
"libc",
3755
+
"objc2 0.5.2",
3756
+
]
3757
+
3758
+
[[package]]
3759
+
name = "objc2-foundation"
3760
+
version = "0.3.1"
3761
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3762
+
checksum = "900831247d2fe1a09a683278e5384cfb8c80c79fe6b166f9d14bfdde0ea1b03c"
3763
+
dependencies = [
3764
+
"bitflags 2.9.0",
3765
+
"objc2 0.6.1",
3766
+
"objc2-core-foundation",
3767
+
]
3768
+
3769
+
[[package]]
3770
+
name = "objc2-io-surface"
3771
+
version = "0.3.1"
3772
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3773
+
checksum = "7282e9ac92529fa3457ce90ebb15f4ecbc383e8338060960760fa2cf75420c3c"
3774
+
dependencies = [
3775
+
"bitflags 2.9.0",
3776
+
"objc2 0.6.1",
3777
+
"objc2-core-foundation",
3778
+
]
3779
+
3780
+
[[package]]
3781
+
name = "objc2-link-presentation"
3782
+
version = "0.2.2"
3783
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3784
+
checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398"
3785
+
dependencies = [
3786
+
"block2",
3787
+
"objc2 0.5.2",
3788
+
"objc2-app-kit 0.2.2",
3789
+
"objc2-foundation 0.2.2",
3790
+
]
3791
+
3792
+
[[package]]
3793
+
name = "objc2-metal"
3794
+
version = "0.2.2"
3795
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3796
+
checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6"
3797
+
dependencies = [
3798
+
"bitflags 2.9.0",
3799
+
"block2",
3800
+
"objc2 0.5.2",
3801
+
"objc2-foundation 0.2.2",
3802
+
]
3803
+
3804
+
[[package]]
3805
+
name = "objc2-quartz-core"
3806
+
version = "0.2.2"
3807
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3808
+
checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a"
3809
+
dependencies = [
3810
+
"bitflags 2.9.0",
3811
+
"block2",
3812
+
"objc2 0.5.2",
3813
+
"objc2-foundation 0.2.2",
3814
+
"objc2-metal",
3815
+
]
3816
+
3817
+
[[package]]
3818
+
name = "objc2-symbols"
3819
+
version = "0.2.2"
3820
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3821
+
checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc"
3822
+
dependencies = [
3823
+
"objc2 0.5.2",
3824
+
"objc2-foundation 0.2.2",
3825
+
]
3826
+
3827
+
[[package]]
3828
+
name = "objc2-ui-kit"
3829
+
version = "0.2.2"
3830
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3831
+
checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f"
3832
+
dependencies = [
3833
+
"bitflags 2.9.0",
3834
+
"block2",
3835
+
"objc2 0.5.2",
3836
+
"objc2-cloud-kit",
3837
+
"objc2-core-data",
3838
+
"objc2-core-image",
3839
+
"objc2-core-location",
3840
+
"objc2-foundation 0.2.2",
3841
+
"objc2-link-presentation",
3842
+
"objc2-quartz-core",
3843
+
"objc2-symbols",
3844
+
"objc2-uniform-type-identifiers",
3845
+
"objc2-user-notifications",
3846
+
]
3847
+
3848
+
[[package]]
3849
+
name = "objc2-uniform-type-identifiers"
3850
+
version = "0.2.2"
3851
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3852
+
checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe"
3853
+
dependencies = [
3854
+
"block2",
3855
+
"objc2 0.5.2",
3856
+
"objc2-foundation 0.2.2",
3857
+
]
3858
+
3859
+
[[package]]
3860
+
name = "objc2-user-notifications"
3861
+
version = "0.2.2"
3862
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3863
+
checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3"
3864
+
dependencies = [
3865
+
"bitflags 2.9.0",
3866
+
"block2",
3867
+
"objc2 0.5.2",
3868
+
"objc2-core-location",
3869
+
"objc2-foundation 0.2.2",
3870
+
]
3871
+
3872
+
[[package]]
3873
+
name = "oboe"
3874
+
version = "0.6.1"
3875
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3876
+
checksum = "e8b61bebd49e5d43f5f8cc7ee2891c16e0f41ec7954d36bcb6c14c5e0de867fb"
3877
+
dependencies = [
3878
+
"jni",
3879
+
"ndk 0.8.0",
3880
+
"ndk-context",
3881
+
"num-derive",
3882
+
"num-traits",
3883
+
"oboe-sys",
3884
+
]
3885
+
3886
+
[[package]]
3887
+
name = "oboe-sys"
3888
+
version = "0.6.1"
3889
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3890
+
checksum = "6c8bb09a4a2b1d668170cfe0a7d5bc103f8999fb316c98099b6a9939c9f2e79d"
3891
+
dependencies = [
3892
+
"cc",
3893
+
]
3894
+
3895
+
[[package]]
3896
+
name = "offset-allocator"
3897
+
version = "0.2.0"
3898
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3899
+
checksum = "e234d535da3521eb95106f40f0b73483d80bfb3aacf27c40d7e2b72f1a3e00a2"
3900
+
dependencies = [
3901
+
"log",
3902
+
"nonmax",
3903
+
]
3904
+
3905
+
[[package]]
3906
+
name = "ogg"
3907
+
version = "0.8.0"
3908
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3909
+
checksum = "6951b4e8bf21c8193da321bcce9c9dd2e13c858fe078bf9054a288b419ae5d6e"
3910
+
dependencies = [
3911
+
"byteorder",
3912
+
]
3913
+
3914
+
[[package]]
3915
+
name = "once_cell"
3916
+
version = "1.21.3"
3917
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3918
+
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
3919
+
3920
+
[[package]]
3921
+
name = "orbclient"
3922
+
version = "0.3.48"
3923
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3924
+
checksum = "ba0b26cec2e24f08ed8bb31519a9333140a6599b867dac464bb150bdb796fd43"
3925
+
dependencies = [
3926
+
"libredox",
3927
+
]
3928
+
3929
+
[[package]]
3930
+
name = "ordered-float"
3931
+
version = "4.6.0"
3932
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3933
+
checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951"
3934
+
dependencies = [
3935
+
"num-traits",
3936
+
]
3937
+
3938
+
[[package]]
3939
+
name = "overload"
3940
+
version = "0.1.1"
3941
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3942
+
checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
3943
+
3944
+
[[package]]
3945
+
name = "owned_ttf_parser"
3946
+
version = "0.25.0"
3947
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3948
+
checksum = "22ec719bbf3b2a81c109a4e20b1f129b5566b7dce654bc3872f6a05abf82b2c4"
3949
+
dependencies = [
3950
+
"ttf-parser 0.25.1",
3951
+
]
3952
+
3953
+
[[package]]
3954
+
name = "owo-colors"
3955
+
version = "4.2.0"
3956
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3957
+
checksum = "1036865bb9422d3300cf723f657c2851d0e9ab12567854b1f4eba3d77decf564"
3958
+
3959
+
[[package]]
3960
+
name = "parking"
3961
+
version = "2.2.1"
3962
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3963
+
checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba"
3964
+
3965
+
[[package]]
3966
+
name = "parking_lot"
3967
+
version = "0.12.3"
3968
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3969
+
checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"
3970
+
dependencies = [
3971
+
"lock_api",
3972
+
"parking_lot_core",
3973
+
]
3974
+
3975
+
[[package]]
3976
+
name = "parking_lot_core"
3977
+
version = "0.9.10"
3978
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3979
+
checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
3980
+
dependencies = [
3981
+
"cfg-if",
3982
+
"libc",
3983
+
"redox_syscall 0.5.12",
3984
+
"smallvec",
3985
+
"windows-targets 0.52.6",
3986
+
]
3987
+
3988
+
[[package]]
3989
+
name = "paste"
3990
+
version = "1.0.15"
3991
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3992
+
checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
3993
+
3994
+
[[package]]
3995
+
name = "percent-encoding"
3996
+
version = "2.3.1"
3997
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3998
+
checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
3999
+
4000
+
[[package]]
4001
+
name = "petgraph"
4002
+
version = "0.7.1"
4003
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4004
+
checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772"
4005
+
dependencies = [
4006
+
"fixedbitset",
4007
+
"indexmap",
4008
+
"serde",
4009
+
"serde_derive",
4010
+
]
4011
+
4012
+
[[package]]
4013
+
name = "pin-project"
4014
+
version = "1.1.10"
4015
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4016
+
checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a"
4017
+
dependencies = [
4018
+
"pin-project-internal",
4019
+
]
4020
+
4021
+
[[package]]
4022
+
name = "pin-project-internal"
4023
+
version = "1.1.10"
4024
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4025
+
checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861"
4026
+
dependencies = [
4027
+
"proc-macro2",
4028
+
"quote",
4029
+
"syn 2.0.101",
4030
+
]
4031
+
4032
+
[[package]]
4033
+
name = "pin-project-lite"
4034
+
version = "0.2.16"
4035
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4036
+
checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
4037
+
4038
+
[[package]]
4039
+
name = "piper"
4040
+
version = "0.2.4"
4041
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4042
+
checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066"
4043
+
dependencies = [
4044
+
"atomic-waker",
4045
+
"fastrand",
4046
+
"futures-io",
4047
+
]
4048
+
4049
+
[[package]]
4050
+
name = "pkg-config"
4051
+
version = "0.3.32"
4052
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4053
+
checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
4054
+
4055
+
[[package]]
4056
+
name = "png"
4057
+
version = "0.17.16"
4058
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4059
+
checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526"
4060
+
dependencies = [
4061
+
"bitflags 1.3.2",
4062
+
"crc32fast",
4063
+
"fdeflate",
4064
+
"flate2",
4065
+
"miniz_oxide",
4066
+
]
4067
+
4068
+
[[package]]
4069
+
name = "polling"
4070
+
version = "3.7.4"
4071
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4072
+
checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f"
4073
+
dependencies = [
4074
+
"cfg-if",
4075
+
"concurrent-queue",
4076
+
"hermit-abi",
4077
+
"pin-project-lite",
4078
+
"rustix",
4079
+
"tracing",
4080
+
"windows-sys 0.59.0",
4081
+
]
4082
+
4083
+
[[package]]
4084
+
name = "portable-atomic"
4085
+
version = "1.11.0"
4086
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4087
+
checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e"
4088
+
4089
+
[[package]]
4090
+
name = "portable-atomic-util"
4091
+
version = "0.2.4"
4092
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4093
+
checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507"
4094
+
dependencies = [
4095
+
"portable-atomic",
4096
+
]
4097
+
4098
+
[[package]]
4099
+
name = "potential_utf"
4100
+
version = "0.1.2"
4101
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4102
+
checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585"
4103
+
dependencies = [
4104
+
"zerovec",
4105
+
]
4106
+
4107
+
[[package]]
4108
+
name = "pp-rs"
4109
+
version = "0.2.1"
4110
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4111
+
checksum = "bb458bb7f6e250e6eb79d5026badc10a3ebb8f9a15d1fff0f13d17c71f4d6dee"
4112
+
dependencies = [
4113
+
"unicode-xid",
4114
+
]
4115
+
4116
+
[[package]]
4117
+
name = "ppv-lite86"
4118
+
version = "0.2.21"
4119
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4120
+
checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
4121
+
dependencies = [
4122
+
"zerocopy",
4123
+
]
4124
+
4125
+
[[package]]
4126
+
name = "presser"
4127
+
version = "0.3.1"
4128
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4129
+
checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa"
4130
+
4131
+
[[package]]
4132
+
name = "prettyplease"
4133
+
version = "0.2.32"
4134
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4135
+
checksum = "664ec5419c51e34154eec046ebcba56312d5a2fc3b09a06da188e1ad21afadf6"
4136
+
dependencies = [
4137
+
"proc-macro2",
4138
+
"syn 2.0.101",
4139
+
]
4140
+
4141
+
[[package]]
4142
+
name = "proc-macro-crate"
4143
+
version = "3.3.0"
4144
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4145
+
checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35"
4146
+
dependencies = [
4147
+
"toml_edit",
4148
+
]
4149
+
4150
+
[[package]]
4151
+
name = "proc-macro2"
4152
+
version = "1.0.95"
4153
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4154
+
checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778"
4155
+
dependencies = [
4156
+
"unicode-ident",
4157
+
]
4158
+
4159
+
[[package]]
4160
+
name = "profiling"
4161
+
version = "1.0.16"
4162
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4163
+
checksum = "afbdc74edc00b6f6a218ca6a5364d6226a259d4b8ea1af4a0ea063f27e179f4d"
4164
+
dependencies = [
4165
+
"profiling-procmacros",
4166
+
]
4167
+
4168
+
[[package]]
4169
+
name = "profiling-procmacros"
4170
+
version = "1.0.16"
4171
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4172
+
checksum = "a65f2e60fbf1063868558d69c6beacf412dc755f9fc020f514b7955fc914fe30"
4173
+
dependencies = [
4174
+
"quote",
4175
+
"syn 2.0.101",
4176
+
]
4177
+
4178
+
[[package]]
4179
+
name = "qoi"
4180
+
version = "0.4.1"
4181
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4182
+
checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001"
4183
+
dependencies = [
4184
+
"bytemuck",
4185
+
]
4186
+
4187
+
[[package]]
4188
+
name = "quick-error"
4189
+
version = "2.0.1"
4190
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4191
+
checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3"
4192
+
4193
+
[[package]]
4194
+
name = "quick-xml"
4195
+
version = "0.37.5"
4196
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4197
+
checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb"
4198
+
dependencies = [
4199
+
"memchr",
4200
+
]
4201
+
4202
+
[[package]]
4203
+
name = "quote"
4204
+
version = "1.0.40"
4205
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4206
+
checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
4207
+
dependencies = [
4208
+
"proc-macro2",
4209
+
]
4210
+
4211
+
[[package]]
4212
+
name = "r-efi"
4213
+
version = "5.2.0"
4214
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4215
+
checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5"
4216
+
4217
+
[[package]]
4218
+
name = "radsort"
4219
+
version = "0.1.1"
4220
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4221
+
checksum = "019b4b213425016d7d84a153c4c73afb0946fbb4840e4eece7ba8848b9d6da22"
4222
+
4223
+
[[package]]
4224
+
name = "rand"
4225
+
version = "0.8.5"
4226
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4227
+
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
4228
+
dependencies = [
4229
+
"libc",
4230
+
"rand_chacha",
4231
+
"rand_core",
4232
+
]
4233
+
4234
+
[[package]]
4235
+
name = "rand_chacha"
4236
+
version = "0.3.1"
4237
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4238
+
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
4239
+
dependencies = [
4240
+
"ppv-lite86",
4241
+
"rand_core",
4242
+
]
4243
+
4244
+
[[package]]
4245
+
name = "rand_core"
4246
+
version = "0.6.4"
4247
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4248
+
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
4249
+
dependencies = [
4250
+
"getrandom 0.2.16",
4251
+
]
4252
+
4253
+
[[package]]
4254
+
name = "rand_distr"
4255
+
version = "0.4.3"
4256
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4257
+
checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31"
4258
+
dependencies = [
4259
+
"num-traits",
4260
+
"rand",
4261
+
]
4262
+
4263
+
[[package]]
4264
+
name = "range-alloc"
4265
+
version = "0.1.4"
4266
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4267
+
checksum = "c3d6831663a5098ea164f89cff59c6284e95f4e3c76ce9848d4529f5ccca9bde"
4268
+
4269
+
[[package]]
4270
+
name = "rangemap"
4271
+
version = "1.5.1"
4272
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4273
+
checksum = "f60fcc7d6849342eff22c4350c8b9a989ee8ceabc4b481253e8946b9fe83d684"
4274
+
4275
+
[[package]]
4276
+
name = "rav1e"
4277
+
version = "0.7.1"
4278
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4279
+
checksum = "cd87ce80a7665b1cce111f8a16c1f3929f6547ce91ade6addf4ec86a8dda5ce9"
4280
+
dependencies = [
4281
+
"arbitrary",
4282
+
"arg_enum_proc_macro",
4283
+
"arrayvec",
4284
+
"av1-grain",
4285
+
"bitstream-io",
4286
+
"built",
4287
+
"cfg-if",
4288
+
"interpolate_name",
4289
+
"itertools 0.12.1",
4290
+
"libc",
4291
+
"libfuzzer-sys",
4292
+
"log",
4293
+
"maybe-rayon",
4294
+
"new_debug_unreachable",
4295
+
"noop_proc_macro",
4296
+
"num-derive",
4297
+
"num-traits",
4298
+
"once_cell",
4299
+
"paste",
4300
+
"profiling",
4301
+
"rand",
4302
+
"rand_chacha",
4303
+
"simd_helpers",
4304
+
"system-deps",
4305
+
"thiserror 1.0.69",
4306
+
"v_frame",
4307
+
"wasm-bindgen",
4308
+
]
4309
+
4310
+
[[package]]
4311
+
name = "ravif"
4312
+
version = "0.11.12"
4313
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4314
+
checksum = "d6a5f31fcf7500f9401fea858ea4ab5525c99f2322cfcee732c0e6c74208c0c6"
4315
+
dependencies = [
4316
+
"avif-serialize",
4317
+
"imgref",
4318
+
"loop9",
4319
+
"quick-error",
4320
+
"rav1e",
4321
+
"rayon",
4322
+
"rgb",
4323
+
]
4324
+
4325
+
[[package]]
4326
+
name = "raw-window-handle"
4327
+
version = "0.6.2"
4328
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4329
+
checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539"
4330
+
4331
+
[[package]]
4332
+
name = "rawpointer"
4333
+
version = "0.2.1"
4334
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4335
+
checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3"
4336
+
4337
+
[[package]]
4338
+
name = "rayon"
4339
+
version = "1.10.0"
4340
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4341
+
checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa"
4342
+
dependencies = [
4343
+
"either",
4344
+
"rayon-core",
4345
+
]
4346
+
4347
+
[[package]]
4348
+
name = "rayon-core"
4349
+
version = "1.12.1"
4350
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4351
+
checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2"
4352
+
dependencies = [
4353
+
"crossbeam-deque",
4354
+
"crossbeam-utils",
4355
+
]
4356
+
4357
+
[[package]]
4358
+
name = "read-fonts"
4359
+
version = "0.29.0"
4360
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4361
+
checksum = "5ce8e2ca6b24313587a03ca61bb74c384e2a815bd90cf2866cfc9f5fb7a11fa0"
4362
+
dependencies = [
4363
+
"bytemuck",
4364
+
"font-types",
4365
+
]
4366
+
4367
+
[[package]]
4368
+
name = "rectangle-pack"
4369
+
version = "0.4.2"
4370
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4371
+
checksum = "a0d463f2884048e7153449a55166f91028d5b0ea53c79377099ce4e8cf0cf9bb"
4372
+
4373
+
[[package]]
4374
+
name = "redox_syscall"
4375
+
version = "0.4.1"
4376
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4377
+
checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
4378
+
dependencies = [
4379
+
"bitflags 1.3.2",
4380
+
]
4381
+
4382
+
[[package]]
4383
+
name = "redox_syscall"
4384
+
version = "0.5.12"
4385
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4386
+
checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af"
4387
+
dependencies = [
4388
+
"bitflags 2.9.0",
4389
+
]
4390
+
4391
+
[[package]]
4392
+
name = "regex"
4393
+
version = "1.11.1"
4394
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4395
+
checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
4396
+
dependencies = [
4397
+
"aho-corasick",
4398
+
"memchr",
4399
+
"regex-automata 0.4.9",
4400
+
"regex-syntax 0.8.5",
4401
+
]
4402
+
4403
+
[[package]]
4404
+
name = "regex-automata"
4405
+
version = "0.1.10"
4406
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4407
+
checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
4408
+
dependencies = [
4409
+
"regex-syntax 0.6.29",
4410
+
]
4411
+
4412
+
[[package]]
4413
+
name = "regex-automata"
4414
+
version = "0.4.9"
4415
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4416
+
checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
4417
+
dependencies = [
4418
+
"aho-corasick",
4419
+
"memchr",
4420
+
"regex-syntax 0.8.5",
4421
+
]
4422
+
4423
+
[[package]]
4424
+
name = "regex-syntax"
4425
+
version = "0.6.29"
4426
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4427
+
checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
4428
+
4429
+
[[package]]
4430
+
name = "regex-syntax"
4431
+
version = "0.8.5"
4432
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4433
+
checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
4434
+
4435
+
[[package]]
4436
+
name = "renderdoc-sys"
4437
+
version = "1.1.0"
4438
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4439
+
checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832"
4440
+
4441
+
[[package]]
4442
+
name = "rgb"
4443
+
version = "0.8.50"
4444
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4445
+
checksum = "57397d16646700483b67d2dd6511d79318f9d057fdbd21a4066aeac8b41d310a"
4446
+
4447
+
[[package]]
4448
+
name = "rodio"
4449
+
version = "0.20.1"
4450
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4451
+
checksum = "e7ceb6607dd738c99bc8cb28eff249b7cd5c8ec88b9db96c0608c1480d140fb1"
4452
+
dependencies = [
4453
+
"cpal",
4454
+
"lewton",
4455
+
]
4456
+
4457
+
[[package]]
4458
+
name = "ron"
4459
+
version = "0.8.1"
4460
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4461
+
checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94"
4462
+
dependencies = [
4463
+
"base64 0.21.7",
4464
+
"bitflags 2.9.0",
4465
+
"serde",
4466
+
"serde_derive",
4467
+
]
4468
+
4469
+
[[package]]
4470
+
name = "roxmltree"
4471
+
version = "0.20.0"
4472
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4473
+
checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97"
4474
+
4475
+
[[package]]
4476
+
name = "rustc-hash"
4477
+
version = "1.1.0"
4478
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4479
+
checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
4480
+
4481
+
[[package]]
4482
+
name = "rustix"
4483
+
version = "0.38.44"
4484
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4485
+
checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154"
4486
+
dependencies = [
4487
+
"bitflags 2.9.0",
4488
+
"errno",
4489
+
"libc",
4490
+
"linux-raw-sys",
4491
+
"windows-sys 0.59.0",
4492
+
]
4493
+
4494
+
[[package]]
4495
+
name = "rustversion"
4496
+
version = "1.0.20"
4497
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4498
+
checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2"
4499
+
4500
+
[[package]]
4501
+
name = "rustybuzz"
4502
+
version = "0.14.1"
4503
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4504
+
checksum = "cfb9cf8877777222e4a3bc7eb247e398b56baba500c38c1c46842431adc8b55c"
4505
+
dependencies = [
4506
+
"bitflags 2.9.0",
4507
+
"bytemuck",
4508
+
"libm",
4509
+
"smallvec",
4510
+
"ttf-parser 0.21.1",
4511
+
"unicode-bidi-mirroring",
4512
+
"unicode-ccc",
4513
+
"unicode-properties",
4514
+
"unicode-script",
4515
+
]
4516
+
4517
+
[[package]]
4518
+
name = "ruzstd"
4519
+
version = "0.8.1"
4520
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4521
+
checksum = "3640bec8aad418d7d03c72ea2de10d5c646a598f9883c7babc160d91e3c1b26c"
4522
+
dependencies = [
4523
+
"twox-hash",
4524
+
]
4525
+
4526
+
[[package]]
4527
+
name = "ryu"
4528
+
version = "1.0.20"
4529
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4530
+
checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
4531
+
4532
+
[[package]]
4533
+
name = "safe_arch"
4534
+
version = "0.7.4"
4535
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4536
+
checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323"
4537
+
dependencies = [
4538
+
"bytemuck",
4539
+
]
4540
+
4541
+
[[package]]
4542
+
name = "same-file"
4543
+
version = "1.0.6"
4544
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4545
+
checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
4546
+
dependencies = [
4547
+
"winapi-util",
4548
+
]
4549
+
4550
+
[[package]]
4551
+
name = "scoped-tls"
4552
+
version = "1.0.1"
4553
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4554
+
checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
4555
+
4556
+
[[package]]
4557
+
name = "scopeguard"
4558
+
version = "1.2.0"
4559
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4560
+
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
4561
+
4562
+
[[package]]
4563
+
name = "sctk-adwaita"
4564
+
version = "0.10.1"
4565
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4566
+
checksum = "b6277f0217056f77f1d8f49f2950ac6c278c0d607c45f5ee99328d792ede24ec"
4567
+
dependencies = [
4568
+
"ab_glyph",
4569
+
"log",
4570
+
"memmap2",
4571
+
"smithay-client-toolkit",
4572
+
"tiny-skia",
4573
+
]
4574
+
4575
+
[[package]]
4576
+
name = "self_cell"
4577
+
version = "1.2.0"
4578
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4579
+
checksum = "0f7d95a54511e0c7be3f51e8867aa8cf35148d7b9445d44de2f943e2b206e749"
4580
+
4581
+
[[package]]
4582
+
name = "send_wrapper"
4583
+
version = "0.6.0"
4584
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4585
+
checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73"
4586
+
4587
+
[[package]]
4588
+
name = "serde"
4589
+
version = "1.0.219"
4590
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4591
+
checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
4592
+
dependencies = [
4593
+
"serde_derive",
4594
+
]
4595
+
4596
+
[[package]]
4597
+
name = "serde_derive"
4598
+
version = "1.0.219"
4599
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4600
+
checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
4601
+
dependencies = [
4602
+
"proc-macro2",
4603
+
"quote",
4604
+
"syn 2.0.101",
4605
+
]
4606
+
4607
+
[[package]]
4608
+
name = "serde_json"
4609
+
version = "1.0.140"
4610
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4611
+
checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373"
4612
+
dependencies = [
4613
+
"itoa",
4614
+
"memchr",
4615
+
"ryu",
4616
+
"serde",
4617
+
]
4618
+
4619
+
[[package]]
4620
+
name = "serde_spanned"
4621
+
version = "0.6.8"
4622
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4623
+
checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1"
4624
+
dependencies = [
4625
+
"serde",
4626
+
]
4627
+
4628
+
[[package]]
4629
+
name = "sharded-slab"
4630
+
version = "0.1.7"
4631
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4632
+
checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
4633
+
dependencies = [
4634
+
"lazy_static",
4635
+
]
4636
+
4637
+
[[package]]
4638
+
name = "shlex"
4639
+
version = "1.3.0"
4640
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4641
+
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
4642
+
4643
+
[[package]]
4644
+
name = "simba"
4645
+
version = "0.7.3"
4646
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4647
+
checksum = "2f3fd720c48c53cace224ae62bef1bbff363a70c68c4802a78b5cc6159618176"
4648
+
dependencies = [
4649
+
"approx",
4650
+
"num-complex",
4651
+
"num-traits",
4652
+
"paste",
4653
+
"wide",
4654
+
]
4655
+
4656
+
[[package]]
4657
+
name = "simd-adler32"
4658
+
version = "0.3.7"
4659
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4660
+
checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
4661
+
4662
+
[[package]]
4663
+
name = "simd_helpers"
4664
+
version = "0.1.0"
4665
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4666
+
checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6"
4667
+
dependencies = [
4668
+
"quote",
4669
+
]
4670
+
4671
+
[[package]]
4672
+
name = "skrifa"
4673
+
version = "0.31.0"
4674
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4675
+
checksum = "bbe6666ab11018ab91ff7b03f1a3b9fdbecfb610848436fefa5ce50343d3d913"
4676
+
dependencies = [
4677
+
"bytemuck",
4678
+
"read-fonts",
4679
+
]
4680
+
4681
+
[[package]]
4682
+
name = "slab"
4683
+
version = "0.4.9"
4684
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4685
+
checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
4686
+
dependencies = [
4687
+
"autocfg",
4688
+
]
4689
+
4690
+
[[package]]
4691
+
name = "slotmap"
4692
+
version = "1.0.7"
4693
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4694
+
checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a"
4695
+
dependencies = [
4696
+
"version_check",
4697
+
]
4698
+
4699
+
[[package]]
4700
+
name = "smallvec"
4701
+
version = "1.15.0"
4702
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4703
+
checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9"
4704
+
4705
+
[[package]]
4706
+
name = "smithay-client-toolkit"
4707
+
version = "0.19.2"
4708
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4709
+
checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016"
4710
+
dependencies = [
4711
+
"bitflags 2.9.0",
4712
+
"calloop",
4713
+
"calloop-wayland-source",
4714
+
"cursor-icon",
4715
+
"libc",
4716
+
"log",
4717
+
"memmap2",
4718
+
"rustix",
4719
+
"thiserror 1.0.69",
4720
+
"wayland-backend",
4721
+
"wayland-client",
4722
+
"wayland-csd-frame",
4723
+
"wayland-cursor",
4724
+
"wayland-protocols",
4725
+
"wayland-protocols-wlr",
4726
+
"wayland-scanner",
4727
+
"xkeysym",
4728
+
]
4729
+
4730
+
[[package]]
4731
+
name = "smol_str"
4732
+
version = "0.2.2"
4733
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4734
+
checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead"
4735
+
dependencies = [
4736
+
"serde",
4737
+
]
4738
+
4739
+
[[package]]
4740
+
name = "spin"
4741
+
version = "0.9.8"
4742
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4743
+
checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
4744
+
dependencies = [
4745
+
"portable-atomic",
4746
+
]
4747
+
4748
+
[[package]]
4749
+
name = "spirv"
4750
+
version = "0.3.0+sdk-1.3.268.0"
4751
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4752
+
checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844"
4753
+
dependencies = [
4754
+
"bitflags 2.9.0",
4755
+
]
4756
+
4757
+
[[package]]
4758
+
name = "stable_deref_trait"
4759
+
version = "1.2.0"
4760
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4761
+
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
4762
+
4763
+
[[package]]
4764
+
name = "stackfuture"
4765
+
version = "0.3.0"
4766
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4767
+
checksum = "6eae92052b72ef70dafa16eddbabffc77e5ca3574be2f7bc1127b36f0a7ad7f2"
4768
+
4769
+
[[package]]
4770
+
name = "static_assertions"
4771
+
version = "1.1.0"
4772
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4773
+
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
4774
+
4775
+
[[package]]
4776
+
name = "strict-num"
4777
+
version = "0.1.1"
4778
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4779
+
checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731"
4780
+
4781
+
[[package]]
4782
+
name = "strum"
4783
+
version = "0.26.3"
4784
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4785
+
checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06"
4786
+
dependencies = [
4787
+
"strum_macros",
4788
+
]
4789
+
4790
+
[[package]]
4791
+
name = "strum_macros"
4792
+
version = "0.26.4"
4793
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4794
+
checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be"
4795
+
dependencies = [
4796
+
"heck",
4797
+
"proc-macro2",
4798
+
"quote",
4799
+
"rustversion",
4800
+
"syn 2.0.101",
4801
+
]
4802
+
4803
+
[[package]]
4804
+
name = "svg_fmt"
4805
+
version = "0.4.5"
4806
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4807
+
checksum = "0193cc4331cfd2f3d2011ef287590868599a2f33c3e69bc22c1a3d3acf9e02fb"
4808
+
4809
+
[[package]]
4810
+
name = "swash"
4811
+
version = "0.2.4"
4812
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4813
+
checksum = "5dce3f0af95643c855cdc449fbaa17d8c2cd08e0b00a49a6babcbe6e71667f3d"
4814
+
dependencies = [
4815
+
"skrifa",
4816
+
"yazi",
4817
+
"zeno",
4818
+
]
4819
+
4820
+
[[package]]
4821
+
name = "syn"
4822
+
version = "1.0.109"
4823
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4824
+
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
4825
+
dependencies = [
4826
+
"proc-macro2",
4827
+
"quote",
4828
+
"unicode-ident",
4829
+
]
4830
+
4831
+
[[package]]
4832
+
name = "syn"
4833
+
version = "2.0.101"
4834
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4835
+
checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf"
4836
+
dependencies = [
4837
+
"proc-macro2",
4838
+
"quote",
4839
+
"unicode-ident",
4840
+
]
4841
+
4842
+
[[package]]
4843
+
name = "synstructure"
4844
+
version = "0.13.2"
4845
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4846
+
checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
4847
+
dependencies = [
4848
+
"proc-macro2",
4849
+
"quote",
4850
+
"syn 2.0.101",
4851
+
]
4852
+
4853
+
[[package]]
4854
+
name = "sys-locale"
4855
+
version = "0.3.2"
4856
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4857
+
checksum = "8eab9a99a024a169fe8a903cf9d4a3b3601109bcc13bd9e3c6fff259138626c4"
4858
+
dependencies = [
4859
+
"libc",
4860
+
]
4861
+
4862
+
[[package]]
4863
+
name = "sysinfo"
4864
+
version = "0.34.2"
4865
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4866
+
checksum = "a4b93974b3d3aeaa036504b8eefd4c039dced109171c1ae973f1dc63b2c7e4b2"
4867
+
dependencies = [
4868
+
"libc",
4869
+
"memchr",
4870
+
"ntapi",
4871
+
"objc2-core-foundation",
4872
+
"windows 0.57.0",
4873
+
]
4874
+
4875
+
[[package]]
4876
+
name = "system-deps"
4877
+
version = "6.2.2"
4878
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4879
+
checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349"
4880
+
dependencies = [
4881
+
"cfg-expr",
4882
+
"heck",
4883
+
"pkg-config",
4884
+
"toml",
4885
+
"version-compare",
4886
+
]
4887
+
4888
+
[[package]]
4889
+
name = "taffy"
4890
+
version = "0.7.7"
4891
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4892
+
checksum = "ab4f4d046dd956a47a7e1a2947083d7ac3e6aa3cfaaead36173ceaa5ab11878c"
4893
+
dependencies = [
4894
+
"arrayvec",
4895
+
"grid",
4896
+
"serde",
4897
+
"slotmap",
4898
+
]
4899
+
4900
+
[[package]]
4901
+
name = "target-lexicon"
4902
+
version = "0.12.16"
4903
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4904
+
checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
4905
+
4906
+
[[package]]
4907
+
name = "termcolor"
4908
+
version = "1.4.1"
4909
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4910
+
checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
4911
+
dependencies = [
4912
+
"winapi-util",
4913
+
]
4914
+
4915
+
[[package]]
4916
+
name = "thiserror"
4917
+
version = "1.0.69"
4918
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4919
+
checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
4920
+
dependencies = [
4921
+
"thiserror-impl 1.0.69",
4922
+
]
4923
+
4924
+
[[package]]
4925
+
name = "thiserror"
4926
+
version = "2.0.12"
4927
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4928
+
checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708"
4929
+
dependencies = [
4930
+
"thiserror-impl 2.0.12",
4931
+
]
4932
+
4933
+
[[package]]
4934
+
name = "thiserror-impl"
4935
+
version = "1.0.69"
4936
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4937
+
checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
4938
+
dependencies = [
4939
+
"proc-macro2",
4940
+
"quote",
4941
+
"syn 2.0.101",
4942
+
]
4943
+
4944
+
[[package]]
4945
+
name = "thiserror-impl"
4946
+
version = "2.0.12"
4947
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4948
+
checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
4949
+
dependencies = [
4950
+
"proc-macro2",
4951
+
"quote",
4952
+
"syn 2.0.101",
4953
+
]
4954
+
4955
+
[[package]]
4956
+
name = "thread_local"
4957
+
version = "1.1.8"
4958
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4959
+
checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c"
4960
+
dependencies = [
4961
+
"cfg-if",
4962
+
"once_cell",
4963
+
]
4964
+
4965
+
[[package]]
4966
+
name = "tiff"
4967
+
version = "0.9.1"
4968
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4969
+
checksum = "ba1310fcea54c6a9a4fd1aad794ecc02c31682f6bfbecdf460bf19533eed1e3e"
4970
+
dependencies = [
4971
+
"flate2",
4972
+
"jpeg-decoder",
4973
+
"weezl",
4974
+
]
4975
+
4976
+
[[package]]
4977
+
name = "tiny-skia"
4978
+
version = "0.11.4"
4979
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4980
+
checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab"
4981
+
dependencies = [
4982
+
"arrayref",
4983
+
"arrayvec",
4984
+
"bytemuck",
4985
+
"cfg-if",
4986
+
"log",
4987
+
"tiny-skia-path",
4988
+
]
4989
+
4990
+
[[package]]
4991
+
name = "tiny-skia-path"
4992
+
version = "0.11.4"
4993
+
source = "registry+https://github.com/rust-lang/crates.io-index"
4994
+
checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93"
4995
+
dependencies = [
4996
+
"arrayref",
4997
+
"bytemuck",
4998
+
"strict-num",
4999
+
]
5000
+
5001
+
[[package]]
5002
+
name = "tinystr"
5003
+
version = "0.8.1"
5004
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5005
+
checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b"
5006
+
dependencies = [
5007
+
"displaydoc",
5008
+
"zerovec",
5009
+
]
5010
+
5011
+
[[package]]
5012
+
name = "tinyvec"
5013
+
version = "1.9.0"
5014
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5015
+
checksum = "09b3661f17e86524eccd4371ab0429194e0d7c008abb45f7a7495b1719463c71"
5016
+
dependencies = [
5017
+
"tinyvec_macros",
5018
+
]
5019
+
5020
+
[[package]]
5021
+
name = "tinyvec_macros"
5022
+
version = "0.1.1"
5023
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5024
+
checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
5025
+
5026
+
[[package]]
5027
+
name = "toml"
5028
+
version = "0.8.22"
5029
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5030
+
checksum = "05ae329d1f08c4d17a59bed7ff5b5a769d062e64a62d34a3261b219e62cd5aae"
5031
+
dependencies = [
5032
+
"serde",
5033
+
"serde_spanned",
5034
+
"toml_datetime",
5035
+
"toml_edit",
5036
+
]
5037
+
5038
+
[[package]]
5039
+
name = "toml_datetime"
5040
+
version = "0.6.9"
5041
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5042
+
checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3"
5043
+
dependencies = [
5044
+
"serde",
5045
+
]
5046
+
5047
+
[[package]]
5048
+
name = "toml_edit"
5049
+
version = "0.22.26"
5050
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5051
+
checksum = "310068873db2c5b3e7659d2cc35d21855dbafa50d1ce336397c666e3cb08137e"
5052
+
dependencies = [
5053
+
"indexmap",
5054
+
"serde",
5055
+
"serde_spanned",
5056
+
"toml_datetime",
5057
+
"winnow",
5058
+
]
5059
+
5060
+
[[package]]
5061
+
name = "tracing"
5062
+
version = "0.1.41"
5063
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5064
+
checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0"
5065
+
dependencies = [
5066
+
"pin-project-lite",
5067
+
"tracing-attributes",
5068
+
"tracing-core",
5069
+
]
5070
+
5071
+
[[package]]
5072
+
name = "tracing-attributes"
5073
+
version = "0.1.28"
5074
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5075
+
checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d"
5076
+
dependencies = [
5077
+
"proc-macro2",
5078
+
"quote",
5079
+
"syn 2.0.101",
5080
+
]
5081
+
5082
+
[[package]]
5083
+
name = "tracing-core"
5084
+
version = "0.1.33"
5085
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5086
+
checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c"
5087
+
dependencies = [
5088
+
"once_cell",
5089
+
"valuable",
5090
+
]
5091
+
5092
+
[[package]]
5093
+
name = "tracing-log"
5094
+
version = "0.2.0"
5095
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5096
+
checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
5097
+
dependencies = [
5098
+
"log",
5099
+
"once_cell",
5100
+
"tracing-core",
5101
+
]
5102
+
5103
+
[[package]]
5104
+
name = "tracing-oslog"
5105
+
version = "0.2.0"
5106
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5107
+
checksum = "528bdd1f0e27b5dd9a4ededf154e824b0532731e4af73bb531de46276e0aab1e"
5108
+
dependencies = [
5109
+
"bindgen",
5110
+
"cc",
5111
+
"cfg-if",
5112
+
"once_cell",
5113
+
"parking_lot",
5114
+
"tracing-core",
5115
+
"tracing-subscriber",
5116
+
]
5117
+
5118
+
[[package]]
5119
+
name = "tracing-subscriber"
5120
+
version = "0.3.19"
5121
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5122
+
checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008"
5123
+
dependencies = [
5124
+
"matchers",
5125
+
"nu-ansi-term",
5126
+
"once_cell",
5127
+
"regex",
5128
+
"sharded-slab",
5129
+
"smallvec",
5130
+
"thread_local",
5131
+
"tracing",
5132
+
"tracing-core",
5133
+
"tracing-log",
5134
+
]
5135
+
5136
+
[[package]]
5137
+
name = "tracing-wasm"
5138
+
version = "0.2.1"
5139
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5140
+
checksum = "4575c663a174420fa2d78f4108ff68f65bf2fbb7dd89f33749b6e826b3626e07"
5141
+
dependencies = [
5142
+
"tracing",
5143
+
"tracing-subscriber",
5144
+
"wasm-bindgen",
5145
+
]
5146
+
5147
+
[[package]]
5148
+
name = "ttf-parser"
5149
+
version = "0.20.0"
5150
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5151
+
checksum = "17f77d76d837a7830fe1d4f12b7b4ba4192c1888001c7164257e4bc6d21d96b4"
5152
+
5153
+
[[package]]
5154
+
name = "ttf-parser"
5155
+
version = "0.21.1"
5156
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5157
+
checksum = "2c591d83f69777866b9126b24c6dd9a18351f177e49d625920d19f989fd31cf8"
5158
+
5159
+
[[package]]
5160
+
name = "ttf-parser"
5161
+
version = "0.25.1"
5162
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5163
+
checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31"
5164
+
5165
+
[[package]]
5166
+
name = "twox-hash"
5167
+
version = "2.1.0"
5168
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5169
+
checksum = "e7b17f197b3050ba473acf9181f7b1d3b66d1cf7356c6cc57886662276e65908"
5170
+
5171
+
[[package]]
5172
+
name = "typeid"
5173
+
version = "1.0.3"
5174
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5175
+
checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c"
5176
+
5177
+
[[package]]
5178
+
name = "typenum"
5179
+
version = "1.18.0"
5180
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5181
+
checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
5182
+
5183
+
[[package]]
5184
+
name = "unicode-bidi"
5185
+
version = "0.3.18"
5186
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5187
+
checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5"
5188
+
5189
+
[[package]]
5190
+
name = "unicode-bidi-mirroring"
5191
+
version = "0.2.0"
5192
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5193
+
checksum = "23cb788ffebc92c5948d0e997106233eeb1d8b9512f93f41651f52b6c5f5af86"
5194
+
5195
+
[[package]]
5196
+
name = "unicode-ccc"
5197
+
version = "0.2.0"
5198
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5199
+
checksum = "1df77b101bcc4ea3d78dafc5ad7e4f58ceffe0b2b16bf446aeb50b6cb4157656"
5200
+
5201
+
[[package]]
5202
+
name = "unicode-ident"
5203
+
version = "1.0.18"
5204
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5205
+
checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
5206
+
5207
+
[[package]]
5208
+
name = "unicode-linebreak"
5209
+
version = "0.1.5"
5210
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5211
+
checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f"
5212
+
5213
+
[[package]]
5214
+
name = "unicode-properties"
5215
+
version = "0.1.3"
5216
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5217
+
checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0"
5218
+
5219
+
[[package]]
5220
+
name = "unicode-script"
5221
+
version = "0.5.7"
5222
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5223
+
checksum = "9fb421b350c9aff471779e262955939f565ec18b86c15364e6bdf0d662ca7c1f"
5224
+
5225
+
[[package]]
5226
+
name = "unicode-segmentation"
5227
+
version = "1.12.0"
5228
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5229
+
checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493"
5230
+
5231
+
[[package]]
5232
+
name = "unicode-width"
5233
+
version = "0.1.14"
5234
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5235
+
checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af"
5236
+
5237
+
[[package]]
5238
+
name = "unicode-xid"
5239
+
version = "0.2.6"
5240
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5241
+
checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
5242
+
5243
+
[[package]]
5244
+
name = "url"
5245
+
version = "2.5.4"
5246
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5247
+
checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60"
5248
+
dependencies = [
5249
+
"form_urlencoded",
5250
+
"idna",
5251
+
"percent-encoding",
5252
+
]
5253
+
5254
+
[[package]]
5255
+
name = "utf8_iter"
5256
+
version = "1.0.4"
5257
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5258
+
checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
5259
+
5260
+
[[package]]
5261
+
name = "uuid"
5262
+
version = "1.16.0"
5263
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5264
+
checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9"
5265
+
dependencies = [
5266
+
"getrandom 0.3.3",
5267
+
"js-sys",
5268
+
"serde",
5269
+
"wasm-bindgen",
5270
+
]
5271
+
5272
+
[[package]]
5273
+
name = "v_frame"
5274
+
version = "0.3.8"
5275
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5276
+
checksum = "d6f32aaa24bacd11e488aa9ba66369c7cd514885742c9fe08cfe85884db3e92b"
5277
+
dependencies = [
5278
+
"aligned-vec",
5279
+
"num-traits",
5280
+
"wasm-bindgen",
5281
+
]
5282
+
5283
+
[[package]]
5284
+
name = "valuable"
5285
+
version = "0.1.1"
5286
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5287
+
checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65"
5288
+
5289
+
[[package]]
5290
+
name = "variadics_please"
5291
+
version = "1.1.0"
5292
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5293
+
checksum = "41b6d82be61465f97d42bd1d15bf20f3b0a3a0905018f38f9d6f6962055b0b5c"
5294
+
dependencies = [
5295
+
"proc-macro2",
5296
+
"quote",
5297
+
"syn 2.0.101",
5298
+
]
5299
+
5300
+
[[package]]
5301
+
name = "vec_map"
5302
+
version = "0.8.2"
5303
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5304
+
checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
5305
+
5306
+
[[package]]
5307
+
name = "vee"
5308
+
version = "0.1.0"
5309
+
dependencies = [
5310
+
"bevy",
5311
+
"bevy_egui",
5312
+
"binrw",
5313
+
"flate2",
5314
+
"glam 0.30.3",
5315
+
"half",
5316
+
"mesh-tools",
5317
+
]
5318
+
5319
+
[[package]]
5320
+
name = "version-compare"
5321
+
version = "0.2.0"
5322
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5323
+
checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b"
5324
+
5325
+
[[package]]
5326
+
name = "version_check"
5327
+
version = "0.9.5"
5328
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5329
+
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
5330
+
5331
+
[[package]]
5332
+
name = "walkdir"
5333
+
version = "2.5.0"
5334
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5335
+
checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
5336
+
dependencies = [
5337
+
"same-file",
5338
+
"winapi-util",
5339
+
]
5340
+
5341
+
[[package]]
5342
+
name = "wasi"
5343
+
version = "0.11.0+wasi-snapshot-preview1"
5344
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5345
+
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
5346
+
5347
+
[[package]]
5348
+
name = "wasi"
5349
+
version = "0.14.2+wasi-0.2.4"
5350
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5351
+
checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3"
5352
+
dependencies = [
5353
+
"wit-bindgen-rt",
5354
+
]
5355
+
5356
+
[[package]]
5357
+
name = "wasm-bindgen"
5358
+
version = "0.2.100"
5359
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5360
+
checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5"
5361
+
dependencies = [
5362
+
"cfg-if",
5363
+
"once_cell",
5364
+
"rustversion",
5365
+
"wasm-bindgen-macro",
5366
+
]
5367
+
5368
+
[[package]]
5369
+
name = "wasm-bindgen-backend"
5370
+
version = "0.2.100"
5371
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5372
+
checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6"
5373
+
dependencies = [
5374
+
"bumpalo",
5375
+
"log",
5376
+
"proc-macro2",
5377
+
"quote",
5378
+
"syn 2.0.101",
5379
+
"wasm-bindgen-shared",
5380
+
]
5381
+
5382
+
[[package]]
5383
+
name = "wasm-bindgen-futures"
5384
+
version = "0.4.50"
5385
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5386
+
checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61"
5387
+
dependencies = [
5388
+
"cfg-if",
5389
+
"js-sys",
5390
+
"once_cell",
5391
+
"wasm-bindgen",
5392
+
"web-sys",
5393
+
]
5394
+
5395
+
[[package]]
5396
+
name = "wasm-bindgen-macro"
5397
+
version = "0.2.100"
5398
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5399
+
checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407"
5400
+
dependencies = [
5401
+
"quote",
5402
+
"wasm-bindgen-macro-support",
5403
+
]
5404
+
5405
+
[[package]]
5406
+
name = "wasm-bindgen-macro-support"
5407
+
version = "0.2.100"
5408
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5409
+
checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
5410
+
dependencies = [
5411
+
"proc-macro2",
5412
+
"quote",
5413
+
"syn 2.0.101",
5414
+
"wasm-bindgen-backend",
5415
+
"wasm-bindgen-shared",
5416
+
]
5417
+
5418
+
[[package]]
5419
+
name = "wasm-bindgen-shared"
5420
+
version = "0.2.100"
5421
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5422
+
checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d"
5423
+
dependencies = [
5424
+
"unicode-ident",
5425
+
]
5426
+
5427
+
[[package]]
5428
+
name = "wayland-backend"
5429
+
version = "0.3.10"
5430
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5431
+
checksum = "fe770181423e5fc79d3e2a7f4410b7799d5aab1de4372853de3c6aa13ca24121"
5432
+
dependencies = [
5433
+
"cc",
5434
+
"downcast-rs 1.2.1",
5435
+
"rustix",
5436
+
"scoped-tls",
5437
+
"smallvec",
5438
+
"wayland-sys",
5439
+
]
5440
+
5441
+
[[package]]
5442
+
name = "wayland-client"
5443
+
version = "0.31.10"
5444
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5445
+
checksum = "978fa7c67b0847dbd6a9f350ca2569174974cd4082737054dbb7fbb79d7d9a61"
5446
+
dependencies = [
5447
+
"bitflags 2.9.0",
5448
+
"rustix",
5449
+
"wayland-backend",
5450
+
"wayland-scanner",
5451
+
]
5452
+
5453
+
[[package]]
5454
+
name = "wayland-csd-frame"
5455
+
version = "0.3.0"
5456
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5457
+
checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e"
5458
+
dependencies = [
5459
+
"bitflags 2.9.0",
5460
+
"cursor-icon",
5461
+
"wayland-backend",
5462
+
]
5463
+
5464
+
[[package]]
5465
+
name = "wayland-cursor"
5466
+
version = "0.31.10"
5467
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5468
+
checksum = "a65317158dec28d00416cb16705934070aef4f8393353d41126c54264ae0f182"
5469
+
dependencies = [
5470
+
"rustix",
5471
+
"wayland-client",
5472
+
"xcursor",
5473
+
]
5474
+
5475
+
[[package]]
5476
+
name = "wayland-protocols"
5477
+
version = "0.32.8"
5478
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5479
+
checksum = "779075454e1e9a521794fed15886323ea0feda3f8b0fc1390f5398141310422a"
5480
+
dependencies = [
5481
+
"bitflags 2.9.0",
5482
+
"wayland-backend",
5483
+
"wayland-client",
5484
+
"wayland-scanner",
5485
+
]
5486
+
5487
+
[[package]]
5488
+
name = "wayland-protocols-plasma"
5489
+
version = "0.3.8"
5490
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5491
+
checksum = "4fd38cdad69b56ace413c6bcc1fbf5acc5e2ef4af9d5f8f1f9570c0c83eae175"
5492
+
dependencies = [
5493
+
"bitflags 2.9.0",
5494
+
"wayland-backend",
5495
+
"wayland-client",
5496
+
"wayland-protocols",
5497
+
"wayland-scanner",
5498
+
]
5499
+
5500
+
[[package]]
5501
+
name = "wayland-protocols-wlr"
5502
+
version = "0.3.8"
5503
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5504
+
checksum = "1cb6cdc73399c0e06504c437fe3cf886f25568dd5454473d565085b36d6a8bbf"
5505
+
dependencies = [
5506
+
"bitflags 2.9.0",
5507
+
"wayland-backend",
5508
+
"wayland-client",
5509
+
"wayland-protocols",
5510
+
"wayland-scanner",
5511
+
]
5512
+
5513
+
[[package]]
5514
+
name = "wayland-scanner"
5515
+
version = "0.31.6"
5516
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5517
+
checksum = "896fdafd5d28145fce7958917d69f2fd44469b1d4e861cb5961bcbeebc6d1484"
5518
+
dependencies = [
5519
+
"proc-macro2",
5520
+
"quick-xml",
5521
+
"quote",
5522
+
]
5523
+
5524
+
[[package]]
5525
+
name = "wayland-sys"
5526
+
version = "0.31.6"
5527
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5528
+
checksum = "dbcebb399c77d5aa9fa5db874806ee7b4eba4e73650948e8f93963f128896615"
5529
+
dependencies = [
5530
+
"dlib",
5531
+
"log",
5532
+
"once_cell",
5533
+
"pkg-config",
5534
+
]
5535
+
5536
+
[[package]]
5537
+
name = "web-sys"
5538
+
version = "0.3.77"
5539
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5540
+
checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2"
5541
+
dependencies = [
5542
+
"js-sys",
5543
+
"wasm-bindgen",
5544
+
]
5545
+
5546
+
[[package]]
5547
+
name = "web-time"
5548
+
version = "1.1.0"
5549
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5550
+
checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb"
5551
+
dependencies = [
5552
+
"js-sys",
5553
+
"wasm-bindgen",
5554
+
]
5555
+
5556
+
[[package]]
5557
+
name = "webbrowser"
5558
+
version = "1.0.4"
5559
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5560
+
checksum = "d5df295f8451142f1856b1bd86a606dfe9587d439bc036e319c827700dbd555e"
5561
+
dependencies = [
5562
+
"core-foundation 0.10.0",
5563
+
"home",
5564
+
"jni",
5565
+
"log",
5566
+
"ndk-context",
5567
+
"objc2 0.6.1",
5568
+
"objc2-foundation 0.3.1",
5569
+
"url",
5570
+
"web-sys",
5571
+
]
5572
+
5573
+
[[package]]
5574
+
name = "weezl"
5575
+
version = "0.1.8"
5576
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5577
+
checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082"
5578
+
5579
+
[[package]]
5580
+
name = "wgpu"
5581
+
version = "24.0.3"
5582
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5583
+
checksum = "35904fb00ba2d2e0a4d002fcbbb6e1b89b574d272a50e5fc95f6e81cf281c245"
5584
+
dependencies = [
5585
+
"arrayvec",
5586
+
"bitflags 2.9.0",
5587
+
"cfg_aliases",
5588
+
"document-features",
5589
+
"js-sys",
5590
+
"log",
5591
+
"naga",
5592
+
"parking_lot",
5593
+
"profiling",
5594
+
"raw-window-handle",
5595
+
"smallvec",
5596
+
"static_assertions",
5597
+
"wasm-bindgen",
5598
+
"wasm-bindgen-futures",
5599
+
"web-sys",
5600
+
"wgpu-core",
5601
+
"wgpu-hal",
5602
+
"wgpu-types",
5603
+
]
5604
+
5605
+
[[package]]
5606
+
name = "wgpu-core"
5607
+
version = "24.0.2"
5608
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5609
+
checksum = "671c25545d479b47d3f0a8e373aceb2060b67c6eb841b24ac8c32348151c7a0c"
5610
+
dependencies = [
5611
+
"arrayvec",
5612
+
"bit-vec 0.8.0",
5613
+
"bitflags 2.9.0",
5614
+
"cfg_aliases",
5615
+
"document-features",
5616
+
"indexmap",
5617
+
"log",
5618
+
"naga",
5619
+
"once_cell",
5620
+
"parking_lot",
5621
+
"profiling",
5622
+
"raw-window-handle",
5623
+
"rustc-hash",
5624
+
"smallvec",
5625
+
"thiserror 2.0.12",
5626
+
"wgpu-hal",
5627
+
"wgpu-types",
5628
+
]
5629
+
5630
+
[[package]]
5631
+
name = "wgpu-hal"
5632
+
version = "24.0.4"
5633
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5634
+
checksum = "f112f464674ca69f3533248508ee30cb84c67cf06c25ff6800685f5e0294e259"
5635
+
dependencies = [
5636
+
"android_system_properties",
5637
+
"arrayvec",
5638
+
"ash",
5639
+
"bit-set 0.8.0",
5640
+
"bitflags 2.9.0",
5641
+
"block",
5642
+
"bytemuck",
5643
+
"cfg_aliases",
5644
+
"core-graphics-types",
5645
+
"glow",
5646
+
"glutin_wgl_sys",
5647
+
"gpu-alloc",
5648
+
"gpu-allocator",
5649
+
"gpu-descriptor",
5650
+
"js-sys",
5651
+
"khronos-egl",
5652
+
"libc",
5653
+
"libloading",
5654
+
"log",
5655
+
"metal",
5656
+
"naga",
5657
+
"ndk-sys 0.5.0+25.2.9519653",
5658
+
"objc",
5659
+
"once_cell",
5660
+
"ordered-float",
5661
+
"parking_lot",
5662
+
"profiling",
5663
+
"range-alloc",
5664
+
"raw-window-handle",
5665
+
"renderdoc-sys",
5666
+
"rustc-hash",
5667
+
"smallvec",
5668
+
"thiserror 2.0.12",
5669
+
"wasm-bindgen",
5670
+
"web-sys",
5671
+
"wgpu-types",
5672
+
"windows 0.58.0",
5673
+
"windows-core 0.58.0",
5674
+
]
5675
+
5676
+
[[package]]
5677
+
name = "wgpu-types"
5678
+
version = "24.0.0"
5679
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5680
+
checksum = "50ac044c0e76c03a0378e7786ac505d010a873665e2d51383dcff8dd227dc69c"
5681
+
dependencies = [
5682
+
"bitflags 2.9.0",
5683
+
"js-sys",
5684
+
"log",
5685
+
"serde",
5686
+
"web-sys",
5687
+
]
5688
+
5689
+
[[package]]
5690
+
name = "wide"
5691
+
version = "0.7.32"
5692
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5693
+
checksum = "41b5576b9a81633f3e8df296ce0063042a73507636cbe956c61133dd7034ab22"
5694
+
dependencies = [
5695
+
"bytemuck",
5696
+
"safe_arch",
5697
+
]
5698
+
5699
+
[[package]]
5700
+
name = "winapi"
5701
+
version = "0.3.9"
5702
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5703
+
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
5704
+
dependencies = [
5705
+
"winapi-i686-pc-windows-gnu",
5706
+
"winapi-x86_64-pc-windows-gnu",
5707
+
]
5708
+
5709
+
[[package]]
5710
+
name = "winapi-i686-pc-windows-gnu"
5711
+
version = "0.4.0"
5712
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5713
+
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
5714
+
5715
+
[[package]]
5716
+
name = "winapi-util"
5717
+
version = "0.1.9"
5718
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5719
+
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
5720
+
dependencies = [
5721
+
"windows-sys 0.59.0",
5722
+
]
5723
+
5724
+
[[package]]
5725
+
name = "winapi-x86_64-pc-windows-gnu"
5726
+
version = "0.4.0"
5727
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5728
+
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
5729
+
5730
+
[[package]]
5731
+
name = "windows"
5732
+
version = "0.54.0"
5733
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5734
+
checksum = "9252e5725dbed82865af151df558e754e4a3c2c30818359eb17465f1346a1b49"
5735
+
dependencies = [
5736
+
"windows-core 0.54.0",
5737
+
"windows-targets 0.52.6",
5738
+
]
5739
+
5740
+
[[package]]
5741
+
name = "windows"
5742
+
version = "0.57.0"
5743
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5744
+
checksum = "12342cb4d8e3b046f3d80effd474a7a02447231330ef77d71daa6fbc40681143"
5745
+
dependencies = [
5746
+
"windows-core 0.57.0",
5747
+
"windows-targets 0.52.6",
5748
+
]
5749
+
5750
+
[[package]]
5751
+
name = "windows"
5752
+
version = "0.58.0"
5753
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5754
+
checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6"
5755
+
dependencies = [
5756
+
"windows-core 0.58.0",
5757
+
"windows-targets 0.52.6",
5758
+
]
5759
+
5760
+
[[package]]
5761
+
name = "windows"
5762
+
version = "0.61.1"
5763
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5764
+
checksum = "c5ee8f3d025738cb02bad7868bbb5f8a6327501e870bf51f1b455b0a2454a419"
5765
+
dependencies = [
5766
+
"windows-collections",
5767
+
"windows-core 0.61.0",
5768
+
"windows-future",
5769
+
"windows-link",
5770
+
"windows-numerics",
5771
+
]
5772
+
5773
+
[[package]]
5774
+
name = "windows-collections"
5775
+
version = "0.2.0"
5776
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5777
+
checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8"
5778
+
dependencies = [
5779
+
"windows-core 0.61.0",
5780
+
]
5781
+
5782
+
[[package]]
5783
+
name = "windows-core"
5784
+
version = "0.54.0"
5785
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5786
+
checksum = "12661b9c89351d684a50a8a643ce5f608e20243b9fb84687800163429f161d65"
5787
+
dependencies = [
5788
+
"windows-result 0.1.2",
5789
+
"windows-targets 0.52.6",
5790
+
]
5791
+
5792
+
[[package]]
5793
+
name = "windows-core"
5794
+
version = "0.57.0"
5795
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5796
+
checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d"
5797
+
dependencies = [
5798
+
"windows-implement 0.57.0",
5799
+
"windows-interface 0.57.0",
5800
+
"windows-result 0.1.2",
5801
+
"windows-targets 0.52.6",
5802
+
]
5803
+
5804
+
[[package]]
5805
+
name = "windows-core"
5806
+
version = "0.58.0"
5807
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5808
+
checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99"
5809
+
dependencies = [
5810
+
"windows-implement 0.58.0",
5811
+
"windows-interface 0.58.0",
5812
+
"windows-result 0.2.0",
5813
+
"windows-strings 0.1.0",
5814
+
"windows-targets 0.52.6",
5815
+
]
5816
+
5817
+
[[package]]
5818
+
name = "windows-core"
5819
+
version = "0.61.0"
5820
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5821
+
checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980"
5822
+
dependencies = [
5823
+
"windows-implement 0.60.0",
5824
+
"windows-interface 0.59.1",
5825
+
"windows-link",
5826
+
"windows-result 0.3.2",
5827
+
"windows-strings 0.4.0",
5828
+
]
5829
+
5830
+
[[package]]
5831
+
name = "windows-future"
5832
+
version = "0.2.0"
5833
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5834
+
checksum = "7a1d6bbefcb7b60acd19828e1bc965da6fcf18a7e39490c5f8be71e54a19ba32"
5835
+
dependencies = [
5836
+
"windows-core 0.61.0",
5837
+
"windows-link",
5838
+
]
5839
+
5840
+
[[package]]
5841
+
name = "windows-implement"
5842
+
version = "0.57.0"
5843
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5844
+
checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7"
5845
+
dependencies = [
5846
+
"proc-macro2",
5847
+
"quote",
5848
+
"syn 2.0.101",
5849
+
]
5850
+
5851
+
[[package]]
5852
+
name = "windows-implement"
5853
+
version = "0.58.0"
5854
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5855
+
checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b"
5856
+
dependencies = [
5857
+
"proc-macro2",
5858
+
"quote",
5859
+
"syn 2.0.101",
5860
+
]
5861
+
5862
+
[[package]]
5863
+
name = "windows-implement"
5864
+
version = "0.60.0"
5865
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5866
+
checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836"
5867
+
dependencies = [
5868
+
"proc-macro2",
5869
+
"quote",
5870
+
"syn 2.0.101",
5871
+
]
5872
+
5873
+
[[package]]
5874
+
name = "windows-interface"
5875
+
version = "0.57.0"
5876
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5877
+
checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7"
5878
+
dependencies = [
5879
+
"proc-macro2",
5880
+
"quote",
5881
+
"syn 2.0.101",
5882
+
]
5883
+
5884
+
[[package]]
5885
+
name = "windows-interface"
5886
+
version = "0.58.0"
5887
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5888
+
checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515"
5889
+
dependencies = [
5890
+
"proc-macro2",
5891
+
"quote",
5892
+
"syn 2.0.101",
5893
+
]
5894
+
5895
+
[[package]]
5896
+
name = "windows-interface"
5897
+
version = "0.59.1"
5898
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5899
+
checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8"
5900
+
dependencies = [
5901
+
"proc-macro2",
5902
+
"quote",
5903
+
"syn 2.0.101",
5904
+
]
5905
+
5906
+
[[package]]
5907
+
name = "windows-link"
5908
+
version = "0.1.1"
5909
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5910
+
checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38"
5911
+
5912
+
[[package]]
5913
+
name = "windows-numerics"
5914
+
version = "0.2.0"
5915
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5916
+
checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1"
5917
+
dependencies = [
5918
+
"windows-core 0.61.0",
5919
+
"windows-link",
5920
+
]
5921
+
5922
+
[[package]]
5923
+
name = "windows-result"
5924
+
version = "0.1.2"
5925
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5926
+
checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8"
5927
+
dependencies = [
5928
+
"windows-targets 0.52.6",
5929
+
]
5930
+
5931
+
[[package]]
5932
+
name = "windows-result"
5933
+
version = "0.2.0"
5934
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5935
+
checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e"
5936
+
dependencies = [
5937
+
"windows-targets 0.52.6",
5938
+
]
5939
+
5940
+
[[package]]
5941
+
name = "windows-result"
5942
+
version = "0.3.2"
5943
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5944
+
checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252"
5945
+
dependencies = [
5946
+
"windows-link",
5947
+
]
5948
+
5949
+
[[package]]
5950
+
name = "windows-strings"
5951
+
version = "0.1.0"
5952
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5953
+
checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10"
5954
+
dependencies = [
5955
+
"windows-result 0.2.0",
5956
+
"windows-targets 0.52.6",
5957
+
]
5958
+
5959
+
[[package]]
5960
+
name = "windows-strings"
5961
+
version = "0.4.0"
5962
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5963
+
checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97"
5964
+
dependencies = [
5965
+
"windows-link",
5966
+
]
5967
+
5968
+
[[package]]
5969
+
name = "windows-sys"
5970
+
version = "0.45.0"
5971
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5972
+
checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
5973
+
dependencies = [
5974
+
"windows-targets 0.42.2",
5975
+
]
5976
+
5977
+
[[package]]
5978
+
name = "windows-sys"
5979
+
version = "0.52.0"
5980
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5981
+
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
5982
+
dependencies = [
5983
+
"windows-targets 0.52.6",
5984
+
]
5985
+
5986
+
[[package]]
5987
+
name = "windows-sys"
5988
+
version = "0.59.0"
5989
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5990
+
checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
5991
+
dependencies = [
5992
+
"windows-targets 0.52.6",
5993
+
]
5994
+
5995
+
[[package]]
5996
+
name = "windows-targets"
5997
+
version = "0.42.2"
5998
+
source = "registry+https://github.com/rust-lang/crates.io-index"
5999
+
checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
6000
+
dependencies = [
6001
+
"windows_aarch64_gnullvm 0.42.2",
6002
+
"windows_aarch64_msvc 0.42.2",
6003
+
"windows_i686_gnu 0.42.2",
6004
+
"windows_i686_msvc 0.42.2",
6005
+
"windows_x86_64_gnu 0.42.2",
6006
+
"windows_x86_64_gnullvm 0.42.2",
6007
+
"windows_x86_64_msvc 0.42.2",
6008
+
]
6009
+
6010
+
[[package]]
6011
+
name = "windows-targets"
6012
+
version = "0.48.5"
6013
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6014
+
checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
6015
+
dependencies = [
6016
+
"windows_aarch64_gnullvm 0.48.5",
6017
+
"windows_aarch64_msvc 0.48.5",
6018
+
"windows_i686_gnu 0.48.5",
6019
+
"windows_i686_msvc 0.48.5",
6020
+
"windows_x86_64_gnu 0.48.5",
6021
+
"windows_x86_64_gnullvm 0.48.5",
6022
+
"windows_x86_64_msvc 0.48.5",
6023
+
]
6024
+
6025
+
[[package]]
6026
+
name = "windows-targets"
6027
+
version = "0.52.6"
6028
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6029
+
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
6030
+
dependencies = [
6031
+
"windows_aarch64_gnullvm 0.52.6",
6032
+
"windows_aarch64_msvc 0.52.6",
6033
+
"windows_i686_gnu 0.52.6",
6034
+
"windows_i686_gnullvm",
6035
+
"windows_i686_msvc 0.52.6",
6036
+
"windows_x86_64_gnu 0.52.6",
6037
+
"windows_x86_64_gnullvm 0.52.6",
6038
+
"windows_x86_64_msvc 0.52.6",
6039
+
]
6040
+
6041
+
[[package]]
6042
+
name = "windows_aarch64_gnullvm"
6043
+
version = "0.42.2"
6044
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6045
+
checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
6046
+
6047
+
[[package]]
6048
+
name = "windows_aarch64_gnullvm"
6049
+
version = "0.48.5"
6050
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6051
+
checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
6052
+
6053
+
[[package]]
6054
+
name = "windows_aarch64_gnullvm"
6055
+
version = "0.52.6"
6056
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6057
+
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
6058
+
6059
+
[[package]]
6060
+
name = "windows_aarch64_msvc"
6061
+
version = "0.42.2"
6062
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6063
+
checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
6064
+
6065
+
[[package]]
6066
+
name = "windows_aarch64_msvc"
6067
+
version = "0.48.5"
6068
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6069
+
checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
6070
+
6071
+
[[package]]
6072
+
name = "windows_aarch64_msvc"
6073
+
version = "0.52.6"
6074
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6075
+
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
6076
+
6077
+
[[package]]
6078
+
name = "windows_i686_gnu"
6079
+
version = "0.42.2"
6080
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6081
+
checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
6082
+
6083
+
[[package]]
6084
+
name = "windows_i686_gnu"
6085
+
version = "0.48.5"
6086
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6087
+
checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
6088
+
6089
+
[[package]]
6090
+
name = "windows_i686_gnu"
6091
+
version = "0.52.6"
6092
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6093
+
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
6094
+
6095
+
[[package]]
6096
+
name = "windows_i686_gnullvm"
6097
+
version = "0.52.6"
6098
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6099
+
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
6100
+
6101
+
[[package]]
6102
+
name = "windows_i686_msvc"
6103
+
version = "0.42.2"
6104
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6105
+
checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
6106
+
6107
+
[[package]]
6108
+
name = "windows_i686_msvc"
6109
+
version = "0.48.5"
6110
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6111
+
checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
6112
+
6113
+
[[package]]
6114
+
name = "windows_i686_msvc"
6115
+
version = "0.52.6"
6116
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6117
+
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
6118
+
6119
+
[[package]]
6120
+
name = "windows_x86_64_gnu"
6121
+
version = "0.42.2"
6122
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6123
+
checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
6124
+
6125
+
[[package]]
6126
+
name = "windows_x86_64_gnu"
6127
+
version = "0.48.5"
6128
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6129
+
checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
6130
+
6131
+
[[package]]
6132
+
name = "windows_x86_64_gnu"
6133
+
version = "0.52.6"
6134
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6135
+
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
6136
+
6137
+
[[package]]
6138
+
name = "windows_x86_64_gnullvm"
6139
+
version = "0.42.2"
6140
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6141
+
checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
6142
+
6143
+
[[package]]
6144
+
name = "windows_x86_64_gnullvm"
6145
+
version = "0.48.5"
6146
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6147
+
checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
6148
+
6149
+
[[package]]
6150
+
name = "windows_x86_64_gnullvm"
6151
+
version = "0.52.6"
6152
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6153
+
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
6154
+
6155
+
[[package]]
6156
+
name = "windows_x86_64_msvc"
6157
+
version = "0.42.2"
6158
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6159
+
checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
6160
+
6161
+
[[package]]
6162
+
name = "windows_x86_64_msvc"
6163
+
version = "0.48.5"
6164
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6165
+
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
6166
+
6167
+
[[package]]
6168
+
name = "windows_x86_64_msvc"
6169
+
version = "0.52.6"
6170
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6171
+
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
6172
+
6173
+
[[package]]
6174
+
name = "winit"
6175
+
version = "0.30.10"
6176
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6177
+
checksum = "b0d05bd8908e14618c9609471db04007e644fd9cce6529756046cfc577f9155e"
6178
+
dependencies = [
6179
+
"ahash",
6180
+
"android-activity",
6181
+
"atomic-waker",
6182
+
"bitflags 2.9.0",
6183
+
"block2",
6184
+
"bytemuck",
6185
+
"calloop",
6186
+
"cfg_aliases",
6187
+
"concurrent-queue",
6188
+
"core-foundation 0.9.4",
6189
+
"core-graphics",
6190
+
"cursor-icon",
6191
+
"dpi",
6192
+
"js-sys",
6193
+
"libc",
6194
+
"memmap2",
6195
+
"ndk 0.9.0",
6196
+
"objc2 0.5.2",
6197
+
"objc2-app-kit 0.2.2",
6198
+
"objc2-foundation 0.2.2",
6199
+
"objc2-ui-kit",
6200
+
"orbclient",
6201
+
"percent-encoding",
6202
+
"pin-project",
6203
+
"raw-window-handle",
6204
+
"redox_syscall 0.4.1",
6205
+
"rustix",
6206
+
"sctk-adwaita",
6207
+
"smithay-client-toolkit",
6208
+
"smol_str",
6209
+
"tracing",
6210
+
"unicode-segmentation",
6211
+
"wasm-bindgen",
6212
+
"wasm-bindgen-futures",
6213
+
"wayland-backend",
6214
+
"wayland-client",
6215
+
"wayland-protocols",
6216
+
"wayland-protocols-plasma",
6217
+
"web-sys",
6218
+
"web-time",
6219
+
"windows-sys 0.52.0",
6220
+
"x11-dl",
6221
+
"x11rb",
6222
+
"xkbcommon-dl",
6223
+
]
6224
+
6225
+
[[package]]
6226
+
name = "winnow"
6227
+
version = "0.7.10"
6228
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6229
+
checksum = "c06928c8748d81b05c9be96aad92e1b6ff01833332f281e8cfca3be4b35fc9ec"
6230
+
dependencies = [
6231
+
"memchr",
6232
+
]
6233
+
6234
+
[[package]]
6235
+
name = "wit-bindgen-rt"
6236
+
version = "0.39.0"
6237
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6238
+
checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1"
6239
+
dependencies = [
6240
+
"bitflags 2.9.0",
6241
+
]
6242
+
6243
+
[[package]]
6244
+
name = "writeable"
6245
+
version = "0.6.1"
6246
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6247
+
checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb"
6248
+
6249
+
[[package]]
6250
+
name = "x11-dl"
6251
+
version = "2.21.0"
6252
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6253
+
checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f"
6254
+
dependencies = [
6255
+
"libc",
6256
+
"once_cell",
6257
+
"pkg-config",
6258
+
]
6259
+
6260
+
[[package]]
6261
+
name = "x11rb"
6262
+
version = "0.13.1"
6263
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6264
+
checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12"
6265
+
dependencies = [
6266
+
"as-raw-xcb-connection",
6267
+
"gethostname",
6268
+
"libc",
6269
+
"libloading",
6270
+
"once_cell",
6271
+
"rustix",
6272
+
"x11rb-protocol",
6273
+
]
6274
+
6275
+
[[package]]
6276
+
name = "x11rb-protocol"
6277
+
version = "0.13.1"
6278
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6279
+
checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d"
6280
+
6281
+
[[package]]
6282
+
name = "xcursor"
6283
+
version = "0.3.8"
6284
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6285
+
checksum = "0ef33da6b1660b4ddbfb3aef0ade110c8b8a781a3b6382fa5f2b5b040fd55f61"
6286
+
6287
+
[[package]]
6288
+
name = "xkbcommon-dl"
6289
+
version = "0.4.2"
6290
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6291
+
checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5"
6292
+
dependencies = [
6293
+
"bitflags 2.9.0",
6294
+
"dlib",
6295
+
"log",
6296
+
"once_cell",
6297
+
"xkeysym",
6298
+
]
6299
+
6300
+
[[package]]
6301
+
name = "xkeysym"
6302
+
version = "0.2.1"
6303
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6304
+
checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56"
6305
+
6306
+
[[package]]
6307
+
name = "xml-rs"
6308
+
version = "0.8.26"
6309
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6310
+
checksum = "a62ce76d9b56901b19a74f19431b0d8b3bc7ca4ad685a746dfd78ca8f4fc6bda"
6311
+
6312
+
[[package]]
6313
+
name = "yazi"
6314
+
version = "0.2.1"
6315
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6316
+
checksum = "e01738255b5a16e78bbb83e7fbba0a1e7dd506905cfc53f4622d89015a03fbb5"
6317
+
6318
+
[[package]]
6319
+
name = "yoke"
6320
+
version = "0.8.0"
6321
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6322
+
checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc"
6323
+
dependencies = [
6324
+
"serde",
6325
+
"stable_deref_trait",
6326
+
"yoke-derive",
6327
+
"zerofrom",
6328
+
]
6329
+
6330
+
[[package]]
6331
+
name = "yoke-derive"
6332
+
version = "0.8.0"
6333
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6334
+
checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6"
6335
+
dependencies = [
6336
+
"proc-macro2",
6337
+
"quote",
6338
+
"syn 2.0.101",
6339
+
"synstructure",
6340
+
]
6341
+
6342
+
[[package]]
6343
+
name = "zeno"
6344
+
version = "0.3.3"
6345
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6346
+
checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524"
6347
+
6348
+
[[package]]
6349
+
name = "zerocopy"
6350
+
version = "0.8.25"
6351
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6352
+
checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb"
6353
+
dependencies = [
6354
+
"zerocopy-derive",
6355
+
]
6356
+
6357
+
[[package]]
6358
+
name = "zerocopy-derive"
6359
+
version = "0.8.25"
6360
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6361
+
checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef"
6362
+
dependencies = [
6363
+
"proc-macro2",
6364
+
"quote",
6365
+
"syn 2.0.101",
6366
+
]
6367
+
6368
+
[[package]]
6369
+
name = "zerofrom"
6370
+
version = "0.1.6"
6371
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6372
+
checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5"
6373
+
dependencies = [
6374
+
"zerofrom-derive",
6375
+
]
6376
+
6377
+
[[package]]
6378
+
name = "zerofrom-derive"
6379
+
version = "0.1.6"
6380
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6381
+
checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
6382
+
dependencies = [
6383
+
"proc-macro2",
6384
+
"quote",
6385
+
"syn 2.0.101",
6386
+
"synstructure",
6387
+
]
6388
+
6389
+
[[package]]
6390
+
name = "zerotrie"
6391
+
version = "0.2.2"
6392
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6393
+
checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595"
6394
+
dependencies = [
6395
+
"displaydoc",
6396
+
"yoke",
6397
+
"zerofrom",
6398
+
]
6399
+
6400
+
[[package]]
6401
+
name = "zerovec"
6402
+
version = "0.11.2"
6403
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6404
+
checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428"
6405
+
dependencies = [
6406
+
"yoke",
6407
+
"zerofrom",
6408
+
"zerovec-derive",
6409
+
]
6410
+
6411
+
[[package]]
6412
+
name = "zerovec-derive"
6413
+
version = "0.11.1"
6414
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6415
+
checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f"
6416
+
dependencies = [
6417
+
"proc-macro2",
6418
+
"quote",
6419
+
"syn 2.0.101",
6420
+
]
6421
+
6422
+
[[package]]
6423
+
name = "zlib-rs"
6424
+
version = "0.5.0"
6425
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6426
+
checksum = "868b928d7949e09af2f6086dfc1e01936064cc7a819253bce650d4e2a2d63ba8"
6427
+
6428
+
[[package]]
6429
+
name = "zune-core"
6430
+
version = "0.4.12"
6431
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6432
+
checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a"
6433
+
6434
+
[[package]]
6435
+
name = "zune-inflate"
6436
+
version = "0.2.54"
6437
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6438
+
checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02"
6439
+
dependencies = [
6440
+
"simd-adler32",
6441
+
]
6442
+
6443
+
[[package]]
6444
+
name = "zune-jpeg"
6445
+
version = "0.4.14"
6446
+
source = "registry+https://github.com/rust-lang/crates.io-index"
6447
+
checksum = "99a5bab8d7dedf81405c4bb1f2b83ea057643d9cb28778cea9eecddeedd2e028"
6448
+
dependencies = [
6449
+
"zune-core",
6450
+
]
+53
vfl/Cargo.toml
+53
vfl/Cargo.toml
···
1
+
[package]
2
+
name = "vfl"
3
+
version = "0.0.1"
4
+
edition = "2024"
5
+
authors = ["Jo Null <me@j0.lol>"]
6
+
exclude = ["*.png", "*.glb", "*.dat"]
7
+
license = "MIT OR Apache-2.0"
8
+
keywords = ["rendering", "decompilation"]
9
+
categories = ["rendering"]
10
+
repository = "https://github.com/j0lol/vee"
11
+
readme = "../README.md"
12
+
description = "Mii parsing and rendering research library"
13
+
14
+
[dependencies]
15
+
binrw = "0.15.0"
16
+
bytemuck = "1.23.0"
17
+
half = "2.6.0"
18
+
itertools = "0.14.0"
19
+
num_enum = "0.7.3"
20
+
21
+
# feat: res
22
+
image = { version = "0.25.6", optional = true }
23
+
flate2 = { version = "1.1.1", features = ["rust_backend"], optional = true }
24
+
25
+
# feat: draw
26
+
glam = { version = "0.30.3", features = ["mint"], optional = true }
27
+
mint = { version = "0.5.9", optional = true }
28
+
nalgebra = { version = "0.33.2", features = ["mint"], optional = true }
29
+
pollster = { version = "0.4.0", optional = true }
30
+
tegra_swizzle = { version = "0.4.0", optional = true }
31
+
texture2ddecoder = { version = "0.1.2", optional = true }
32
+
wgpu = { version = "25", optional = true }
33
+
futures-intrusive = { version = "0.5.0", optional = true }
34
+
35
+
# feat: gltf
36
+
mesh-tools = { version = "0.1.0", optional = true }
37
+
38
+
[dev-dependencies]
39
+
image-compare = "0.4.1"
40
+
41
+
[features]
42
+
res = ["dep:image", "dep:tegra_swizzle", "dep:flate2"]
43
+
draw = [
44
+
"res",
45
+
"dep:wgpu",
46
+
"dep:futures-intrusive",
47
+
"dep:texture2ddecoder",
48
+
"dep:pollster",
49
+
"dep:glam",
50
+
"dep:mint",
51
+
"dep:nalgebra",
52
+
]
53
+
gltf = ["res", "dep:mesh-tools"]
+1
vfl/src/charinfo/mod.rs
+1
vfl/src/charinfo/mod.rs
···
1
+
pub mod nx;
+87
vfl/src/charinfo/nx.rs
+87
vfl/src/charinfo/nx.rs
···
1
+
pub use binrw::{BinRead, NullWideString, binrw};
2
+
3
+
#[derive(Debug, Copy, Clone)]
4
+
#[binrw]
5
+
#[brw(little)]
6
+
pub struct UuidVer4 {
7
+
idc: [u8; 16],
8
+
}
9
+
#[derive(Debug, Clone)]
10
+
#[binrw]
11
+
#[brw(little, assert(nickname.len() <= 22))]
12
+
pub struct NxCharInfo {
13
+
create_info: UuidVer4,
14
+
#[brw(pad_size_to = 0x16)]
15
+
pub nickname: NullWideString,
16
+
pub font_region: u8,
17
+
pub favorite_color: u8,
18
+
pub gender: u8,
19
+
pub height: u8,
20
+
pub build: u8,
21
+
pub is_special: u8,
22
+
pub region_move: u8,
23
+
pub faceline_type: u8,
24
+
pub faceline_color: u8,
25
+
pub faceline_wrinkle: u8,
26
+
pub faceline_make: u8,
27
+
pub hair_type: u8,
28
+
pub hair_color: u8,
29
+
pub hair_flip: u8,
30
+
pub eye_type: u8,
31
+
pub eye_color: u8,
32
+
pub eye_scale: u8,
33
+
pub eye_aspect: u8,
34
+
pub eye_rotate: u8,
35
+
pub eye_x: u8,
36
+
pub eye_y: u8,
37
+
pub eyebrow_type: u8,
38
+
pub eyebrow_color: u8,
39
+
pub eyebrow_scale: u8,
40
+
pub eyebrow_aspect: u8,
41
+
pub eyebrow_rotate: u8,
42
+
pub eyebrow_x: u8,
43
+
pub eyebrow_y: u8,
44
+
pub nose_type: u8,
45
+
pub nose_scale: u8,
46
+
pub nose_y: u8,
47
+
pub mouth_type: u8,
48
+
pub mouth_color: u8,
49
+
pub mouth_scale: u8,
50
+
pub mouth_aspect: u8,
51
+
pub mouth_y: u8,
52
+
pub beard_color: u8,
53
+
pub beard_type: u8,
54
+
pub mustache_type: u8,
55
+
pub mustache_scale: u8,
56
+
pub mustache_y: u8,
57
+
pub glass_type: u8,
58
+
pub glass_color: u8,
59
+
pub glass_scale: u8,
60
+
pub glass_y: u8,
61
+
pub mole_type: u8,
62
+
pub mole_scale: u8,
63
+
pub mole_x: u8,
64
+
pub mole_y: u8,
65
+
reserved: u8, /* always zero */
66
+
}
67
+
68
+
#[cfg(test)]
69
+
mod tests {
70
+
use super::*;
71
+
use binrw::BinRead;
72
+
use std::{error::Error, fs::File};
73
+
74
+
type R = Result<(), Box<dyn Error>>;
75
+
76
+
#[test]
77
+
fn mii_deser() -> R {
78
+
let mut mii = File::open(concat!(env!("CARGO_MANIFEST_DIR"), "/../j0.charinfo"))?;
79
+
80
+
let mii = NxCharInfo::read(&mut mii)?;
81
+
82
+
assert_eq!(mii.glass_color, 17);
83
+
assert_eq!(mii.reserved, 0);
84
+
85
+
Ok(())
86
+
}
87
+
}
+616
vfl/src/color.rs
+616
vfl/src/color.rs
···
1
+
type Color = [f32; 4];
2
+
3
+
pub mod cafe {
4
+
5
+
// No it's not an approximation of 1/pi. You fool. You idiot.
6
+
#![allow(clippy::approx_constant)]
7
+
8
+
pub const HAIR_COLOR: [[f32; 4]; 8] = [
9
+
[0.118, 0.102, 0.094, 1.000],
10
+
[0.251, 0.125, 0.063, 1.000],
11
+
[0.361, 0.094, 0.039, 1.000],
12
+
[0.486, 0.227, 0.078, 1.000],
13
+
[0.471, 0.471, 0.502, 1.000],
14
+
[0.306, 0.243, 0.063, 1.000],
15
+
[0.533, 0.345, 0.094, 1.000],
16
+
[0.816, 0.627, 0.290, 1.000],
17
+
];
18
+
19
+
pub const FACELINE_COLOR: [[f32; 4]; 6] = [
20
+
[1.000, 0.827, 0.678, 1.000],
21
+
[1.000, 0.714, 0.420, 1.000],
22
+
[0.870, 0.475, 0.259, 1.000],
23
+
[1.000, 0.667, 0.549, 1.000],
24
+
[0.678, 0.318, 0.161, 1.000],
25
+
[0.388, 0.173, 0.094, 1.000],
26
+
];
27
+
28
+
pub const EYE_COLOR_R: [[f32; 4]; 3] = [
29
+
[0.000, 0.000, 0.000, 1.000],
30
+
[1.000, 0.510, 0.000, 1.000],
31
+
[0.000, 1.000, 1.000, 1.000],
32
+
];
33
+
34
+
pub const EYE_COLOR_G: [[f32; 4]; 1] = [[1.000, 1.000, 1.000, 1.000]];
35
+
36
+
pub const EYE_COLOR_B: [[f32; 4]; 6] = [
37
+
[0.000, 0.000, 0.000, 1.000],
38
+
[0.424, 0.439, 0.439, 1.000],
39
+
[0.400, 0.235, 0.173, 1.000],
40
+
[0.376, 0.369, 0.188, 1.000],
41
+
[0.275, 0.329, 0.659, 1.000],
42
+
[0.220, 0.439, 0.345, 1.000],
43
+
];
44
+
45
+
pub const MOUTH_COLOR_R: [[f32; 4]; 5] = [
46
+
[0.847, 0.322, 0.031, 1.000],
47
+
[0.941, 0.047, 0.031, 1.000],
48
+
[0.961, 0.282, 0.282, 1.000],
49
+
[0.941, 0.604, 0.455, 1.000],
50
+
[0.549, 0.314, 0.251, 1.000],
51
+
];
52
+
53
+
pub const MOUTH_COLOR_G: [[f32; 4]; 5] = [
54
+
[0.510, 0.188, 0.094, 1.000],
55
+
[0.471, 0.047, 0.047, 1.000],
56
+
[0.533, 0.125, 0.157, 1.000],
57
+
[0.863, 0.471, 0.314, 1.000],
58
+
[0.275, 0.118, 0.039, 1.000],
59
+
];
60
+
61
+
pub const MOUTH_COLOR_B: [[f32; 4]; 1] = [[1.000, 1.000, 1.000, 1.000]];
62
+
63
+
pub const GLASS_COLOR_R: [[f32; 4]; 6] = [
64
+
[0.094, 0.094, 0.094, 1.000],
65
+
[0.376, 0.219, 0.062, 1.000],
66
+
[0.658, 0.062, 0.031, 1.000],
67
+
[0.125, 0.188, 0.407, 1.000],
68
+
[0.658, 0.376, 0.000, 1.000],
69
+
[0.470, 0.439, 0.407, 1.000],
70
+
];
71
+
}
72
+
73
+
pub mod nx {
74
+
// I'm not doing all of that.
75
+
#![allow(clippy::unreadable_literal, clippy::excessive_precision)]
76
+
77
+
use num_enum::IntoPrimitive;
78
+
79
+
use crate::charinfo::nx::NxCharInfo;
80
+
81
+
use super::Color;
82
+
83
+
#[derive(Copy, Clone)]
84
+
pub enum ColorModulated {
85
+
Eye,
86
+
Eyebrow,
87
+
Mouth,
88
+
Glass,
89
+
BeardTexture,
90
+
NoseLineShape,
91
+
FacelineMakeup,
92
+
FacelineWrinkle,
93
+
}
94
+
95
+
pub const NON_MODULATION: Color = [f32::NAN, f32::NAN, f32::NAN, f32::NAN];
96
+
const WHITE: Color = linear::COMMON_COLOR[99];
97
+
const BLACK: Color = linear::COMMON_COLOR[8];
98
+
const TRANSPARENT: Color = [0.0, 0.0, 0.0, 0.0];
99
+
100
+
#[repr(u8)]
101
+
#[derive(IntoPrimitive, Debug, Clone, Copy)]
102
+
pub enum ModulationMode {
103
+
SingleColor = 0,
104
+
DirectTexture = 1,
105
+
LayeredRgbTexture = 2,
106
+
AlphaTexture = 3,
107
+
LuminanceAlphaTexture = 4,
108
+
}
109
+
#[derive(Debug, Clone, Copy)]
110
+
pub struct ModulationIntent {
111
+
pub mode: ModulationMode,
112
+
pub channels: [Color; 3],
113
+
}
114
+
115
+
/// This function will give you color modulations for each needed texture or shape.
116
+
/// When a channel is not modulated, it will return [NaN, NaN, NaN, NaN]
117
+
/// EG: An "R" format texture does not need G&B modulation
118
+
/// Ref: https://github.com/ariankordi/ffl/blob/97eecdf3688f92c4c95cecf5d6ab3e84c0ee42c0/src/FFLiModulate.cpp
119
+
#[allow(clippy::must_use_candidate)]
120
+
pub fn modulate(class: ColorModulated, char: &NxCharInfo) -> ModulationIntent {
121
+
use ModulationMode as M;
122
+
match class {
123
+
ColorModulated::Eye => ModulationIntent {
124
+
mode: M::LayeredRgbTexture,
125
+
channels: [
126
+
BLACK,
127
+
WHITE,
128
+
linear::COMMON_COLOR[usize::from(char.eye_color)],
129
+
],
130
+
},
131
+
ColorModulated::Eyebrow => ModulationIntent {
132
+
mode: M::AlphaTexture,
133
+
channels: [
134
+
linear::COMMON_COLOR[usize::from(char.eyebrow_color)],
135
+
NON_MODULATION,
136
+
NON_MODULATION,
137
+
],
138
+
},
139
+
ColorModulated::Mouth => ModulationIntent {
140
+
mode: M::LayeredRgbTexture,
141
+
channels: [
142
+
linear::COMMON_COLOR[usize::from(char.mouth_color)],
143
+
linear::UPPER_LIP_COLOR[usize::from(char.mouth_color)],
144
+
WHITE,
145
+
],
146
+
},
147
+
ColorModulated::Glass => ModulationIntent {
148
+
mode: M::LuminanceAlphaTexture,
149
+
channels: [
150
+
linear::COMMON_COLOR[usize::from(char.glass_color)],
151
+
NON_MODULATION,
152
+
NON_MODULATION,
153
+
],
154
+
},
155
+
ColorModulated::BeardTexture => ModulationIntent {
156
+
mode: M::AlphaTexture,
157
+
channels: [
158
+
linear::COMMON_COLOR[usize::from(char.beard_color)],
159
+
NON_MODULATION,
160
+
NON_MODULATION,
161
+
],
162
+
},
163
+
ColorModulated::NoseLineShape => ModulationIntent {
164
+
mode: M::AlphaTexture,
165
+
channels: [BLACK, NON_MODULATION, NON_MODULATION],
166
+
},
167
+
// I can't find any information on modulating FacelineWrinkle somehow.
168
+
// TODO: Check for accuracy here.
169
+
ColorModulated::FacelineWrinkle | ColorModulated::FacelineMakeup => ModulationIntent {
170
+
mode: M::DirectTexture,
171
+
channels: [NON_MODULATION; 3],
172
+
},
173
+
}
174
+
}
175
+
176
+
pub mod linear {
177
+
pub const COMMON_COLOR: [[f32; 4]; 100] = [
178
+
[0.02624122, 0.02121902, 0.02121902, 1.0],
179
+
[0.05126946, 0.01444384, 0.00518152, 1.0],
180
+
[0.1070232, 0.00913407, 0.00303527, 1.0],
181
+
[0.2015563, 0.04231142, 0.00699541, 1.0],
182
+
[0.1878208, 0.1878208, 0.2158605, 1.0],
183
+
[0.07618541, 0.04817184, 0.00518152, 1.0],
184
+
[0.2462014, 0.09758739, 0.00913407, 1.0],
185
+
[0.6307572, 0.3515327, 0.06847817, 1.0],
186
+
[0.0, 0.0, 0.0, 1.0],
187
+
[0.1499599, 0.1620294, 0.1620294, 1.0],
188
+
[0.1328683, 0.04518623, 0.02518688, 1.0],
189
+
[0.1169707, 0.1119325, 0.02955684, 1.0],
190
+
[0.0612461, 0.08865561, 0.3915726, 1.0],
191
+
[0.03954626, 0.1620294, 0.09758739, 1.0],
192
+
[0.1169707, 0.03954626, 0.00518152, 1.0],
193
+
[0.3915726, 0.00518152, 0.00242822, 1.0],
194
+
[0.01444384, 0.02955684, 0.1384317, 1.0],
195
+
[0.3915726, 0.1169707, 0.0, 1.0],
196
+
[0.1878208, 0.1620294, 0.1384317, 1.0],
197
+
[0.6866855, 0.08437625, 0.00242822, 1.0],
198
+
[0.8713672, 0.00367651, 0.00242822, 1.0],
199
+
[0.9130989, 0.0648033, 0.0648033, 1.0],
200
+
[0.8713672, 0.3231433, 0.1746474, 1.0],
201
+
[0.2622508, 0.08021983, 0.05126946, 1.0],
202
+
[0.2307401, 0.01938238, 0.01938238, 1.0],
203
+
[1.0, 0.1714411, 0.1328683, 1.0],
204
+
[1.0, 0.3813261, 0.3813261, 1.0],
205
+
[1.0, 0.5271152, 0.4910209, 1.0],
206
+
[0.1714411, 0.0273209, 0.04373505, 1.0],
207
+
[0.3185468, 0.0137021, 0.04666509, 1.0],
208
+
[0.2541521, 0.00856813, 0.04817184, 1.0],
209
+
[0.4620771, 0.04817184, 0.05448031, 1.0],
210
+
[0.571125, 0.01298304, 0.09305902, 1.0],
211
+
[0.4341537, 0.08650047, 0.2195262, 1.0],
212
+
[0.571125, 0.08865561, 0.1559265, 1.0],
213
+
[0.9559736, 0.1778885, 0.309469, 1.0],
214
+
[0.9734454, 0.4125428, 0.5840785, 1.0],
215
+
[1.0, 0.5840785, 0.6866855, 1.0],
216
+
[0.03071345, 0.01161226, 0.05126946, 1.0],
217
+
[0.03820438, 0.02121902, 0.04666509, 1.0],
218
+
[0.07227188, 0.00913407, 0.07421357, 1.0],
219
+
[0.1589609, 0.05448031, 0.4507858, 1.0],
220
+
[0.2345507, 0.1070232, 0.4793203, 1.0],
221
+
[0.5271152, 0.2269659, 0.6038274, 1.0],
222
+
[0.3915726, 0.2917707, 0.5840785, 1.0],
223
+
[0.5583405, 0.4125428, 0.791298, 1.0],
224
+
[0.8549928, 0.5149179, 0.9559736, 1.0],
225
+
[0.6444799, 0.5583405, 0.8468735, 1.0],
226
+
[0.00972123, 0.0137021, 0.05126946, 1.0],
227
+
[0.00604884, 0.0497066, 0.1328683, 1.0],
228
+
[0.02315337, 0.2232281, 0.658375, 1.0],
229
+
[0.09530749, 0.4564111, 0.8879234, 1.0],
230
+
[0.1946179, 0.5583405, 0.7304609, 1.0],
231
+
[0.2501584, 0.3813261, 0.9559736, 1.0],
232
+
[0.2307401, 0.5088814, 0.9559736, 1.0],
233
+
[0.3564002, 0.7681512, 1.0, 1.0],
234
+
[0.00334654, 0.0273209, 0.03688948, 1.0],
235
+
[0.00030353, 0.04666509, 0.04373505, 1.0],
236
+
[0.00402472, 0.07818746, 0.09989879, 1.0],
237
+
[0.0168074, 0.1328683, 0.1247718, 1.0],
238
+
[0.02955684, 0.2086369, 0.2622508, 1.0],
239
+
[0.07818746, 0.4232678, 0.4341537, 1.0],
240
+
[0.1946179, 0.5520115, 0.3419146, 1.0],
241
+
[0.2122308, 0.658375, 0.5271152, 1.0],
242
+
[0.2422812, 0.783538, 0.4677839, 1.0],
243
+
[0.00303527, 0.06847817, 0.03560133, 1.0],
244
+
[0.05612849, 0.1946179, 0.0, 1.0],
245
+
[0.00060706, 0.1778885, 0.1221388, 1.0],
246
+
[0.03688948, 0.3185468, 0.1620294, 1.0],
247
+
[0.07036012, 0.4178851, 0.01032982, 1.0],
248
+
[0.287441, 0.5209957, 0.00303527, 1.0],
249
+
[0.1247718, 0.571125, 0.2462014, 1.0],
250
+
[0.3419146, 0.7454043, 0.05448031, 1.0],
251
+
[0.3049874, 0.7304609, 0.2086369, 1.0],
252
+
[0.4969332, 0.8879234, 0.4019778, 1.0],
253
+
[0.3185468, 0.2917707, 0.02415765, 1.0],
254
+
[0.3813261, 0.3005439, 0.1247718, 1.0],
255
+
[0.6038274, 0.5271152, 0.04091523, 1.0],
256
+
[0.6038274, 0.48515, 0.2422812, 1.0],
257
+
[0.6938719, 0.6038274, 0.2232281, 1.0],
258
+
[0.6653875, 0.6938719, 0.1589609, 1.0],
259
+
[0.6653875, 0.791298, 0.2269659, 1.0],
260
+
[0.6866855, 0.9559736, 0.3371637, 1.0],
261
+
[0.2050788, 0.05951127, 0.0, 1.0],
262
+
[0.791298, 0.4969332, 0.1946179, 1.0],
263
+
[0.9911023, 0.7605247, 0.06847817, 1.0],
264
+
[0.9559736, 0.7304609, 0.2232281, 1.0],
265
+
[0.9301111, 0.822786, 0.3324517, 1.0],
266
+
[0.9559736, 0.938686, 0.3277782, 1.0],
267
+
[0.3813261, 0.07421357, 0.01298304, 1.0],
268
+
[1.0, 0.3049874, 0.00402472, 1.0],
269
+
[0.6375971, 0.3277782, 0.1412634, 1.0],
270
+
[1.0, 0.4452013, 0.1328683, 1.0],
271
+
[1.0, 0.5394797, 0.2622508, 1.0],
272
+
[0.783538, 0.6239606, 0.4396573, 1.0],
273
+
[0.05286067, 0.05286067, 0.05286067, 1.0],
274
+
[0.3277782, 0.3277782, 0.3277782, 1.0],
275
+
[0.5149179, 0.5149179, 0.5149179, 1.0],
276
+
[0.7156936, 0.6795427, 0.6104956, 1.0],
277
+
[1.0, 1.0, 1.0, 1.0],
278
+
];
279
+
280
+
pub const UPPER_LIP_COLOR: [[f32; 4]; 100] = [
281
+
[0.00856813, 0.00699541, 0.00699541, 1.0],
282
+
[0.01444384, 0.00518152, 0.00242822, 1.0],
283
+
[0.0273209, 0.00367651, 0.00151764, 1.0],
284
+
[0.06847817, 0.0168074, 0.00367651, 1.0],
285
+
[0.08865561, 0.08865561, 0.1022417, 1.0],
286
+
[0.02028857, 0.0137021, 0.00242822, 1.0],
287
+
[0.08437625, 0.03560133, 0.00439145, 1.0],
288
+
[0.4396573, 0.2158605, 0.02121902, 1.0],
289
+
[0.0, 0.0, 0.0, 1.0],
290
+
[0.07227188, 0.07618541, 0.07618541, 1.0],
291
+
[0.03310477, 0.01298304, 0.00802321, 1.0],
292
+
[0.04231142, 0.03954626, 0.01228649, 1.0],
293
+
[0.02315337, 0.03189605, 0.1301365, 1.0],
294
+
[0.02028857, 0.07618541, 0.04817184, 1.0],
295
+
[0.02955684, 0.01161226, 0.00242822, 1.0],
296
+
[0.1301365, 0.00303527, 0.00151764, 1.0],
297
+
[0.00518152, 0.00913407, 0.03433982, 1.0],
298
+
[0.1811642, 0.05612849, 0.0, 1.0],
299
+
[0.08865561, 0.07618541, 0.06662599, 1.0],
300
+
[0.2232281, 0.02955684, 0.00913407, 1.0],
301
+
[0.1878208, 0.00367651, 0.00367651, 1.0],
302
+
[0.2462014, 0.01444384, 0.02121902, 1.0],
303
+
[0.7156936, 0.1878208, 0.08021983, 1.0],
304
+
[0.0612461, 0.01298304, 0.00303527, 1.0],
305
+
[0.07818746, 0.00856813, 0.00856813, 1.0],
306
+
[0.3185468, 0.05951127, 0.04666509, 1.0],
307
+
[0.791298, 0.2345507, 0.2345507, 1.0],
308
+
[0.791298, 0.3564002, 0.3277782, 1.0],
309
+
[0.05951127, 0.01161226, 0.0168074, 1.0],
310
+
[0.1070232, 0.0065121, 0.01850023, 1.0],
311
+
[0.08650047, 0.00439145, 0.01850023, 1.0],
312
+
[0.1529262, 0.01850023, 0.02121902, 1.0],
313
+
[0.184475, 0.00604884, 0.03433982, 1.0],
314
+
[0.1441285, 0.03189605, 0.07421357, 1.0],
315
+
[0.184475, 0.03189605, 0.05448031, 1.0],
316
+
[0.4286906, 0.08437625, 0.1441285, 1.0],
317
+
[0.7681512, 0.2622508, 0.4125428, 1.0],
318
+
[0.791298, 0.4072404, 0.4969332, 1.0],
319
+
[0.00972123, 0.00439145, 0.01444384, 1.0],
320
+
[0.01161226, 0.00699541, 0.0137021, 1.0],
321
+
[0.01938238, 0.00367651, 0.02028857, 1.0],
322
+
[0.05612849, 0.02121902, 0.1470273, 1.0],
323
+
[0.08021983, 0.03820438, 0.1559265, 1.0],
324
+
[0.2383976, 0.1070232, 0.2746774, 1.0],
325
+
[0.1811642, 0.1356334, 0.2663557, 1.0],
326
+
[0.4072404, 0.2788943, 0.6239606, 1.0],
327
+
[0.658375, 0.3515327, 0.7529424, 1.0],
328
+
[0.4793203, 0.4019778, 0.6653875, 1.0],
329
+
[0.00402472, 0.00518152, 0.01444384, 1.0],
330
+
[0.00273175, 0.01444384, 0.03310477, 1.0],
331
+
[0.01228649, 0.1046165, 0.2961383, 1.0],
332
+
[0.03189605, 0.309469, 0.7011021, 1.0],
333
+
[0.1070232, 0.4178851, 0.5775806, 1.0],
334
+
[0.1356334, 0.2383976, 0.7529424, 1.0],
335
+
[0.1221388, 0.3467042, 0.7529424, 1.0],
336
+
[0.2158605, 0.571125, 0.791298, 1.0],
337
+
[0.00182117, 0.00856813, 0.0109601, 1.0],
338
+
[0.00030353, 0.0137021, 0.01298304, 1.0],
339
+
[0.00212469, 0.02121902, 0.02624122, 1.0],
340
+
[0.00913407, 0.06301002, 0.05951127, 1.0],
341
+
[0.01599631, 0.09758739, 0.1221388, 1.0],
342
+
[0.02955684, 0.258183, 0.2663557, 1.0],
343
+
[0.1169707, 0.4341537, 0.2422812, 1.0],
344
+
[0.1247718, 0.5209957, 0.3967553, 1.0],
345
+
[0.1412634, 0.6172068, 0.3277782, 1.0],
346
+
[0.00151764, 0.01850023, 0.0109601, 1.0],
347
+
[0.02121902, 0.06662599, 0.0, 1.0],
348
+
[0.00030353, 0.0612461, 0.04373505, 1.0],
349
+
[0.01938238, 0.1470273, 0.07618541, 1.0],
350
+
[0.02518688, 0.2541521, 0.0, 1.0],
351
+
[0.1559265, 0.3185468, 0.0, 1.0],
352
+
[0.06301002, 0.4507858, 0.1589609, 1.0],
353
+
[0.2232281, 0.5906189, 0.0137021, 1.0],
354
+
[0.1946179, 0.5775806, 0.1169707, 1.0],
355
+
[0.3419146, 0.7011021, 0.2622508, 1.0],
356
+
[0.1470273, 0.1356334, 0.01298304, 1.0],
357
+
[0.1746474, 0.1384317, 0.05951127, 1.0],
358
+
[0.3662527, 0.3139888, 0.00802321, 1.0],
359
+
[0.4793203, 0.3662527, 0.1529262, 1.0],
360
+
[0.5457245, 0.4620771, 0.1301365, 1.0],
361
+
[0.5209957, 0.5457245, 0.08228273, 1.0],
362
+
[0.5088814, 0.6239606, 0.1274377, 1.0],
363
+
[0.5028866, 0.7529424, 0.2050788, 1.0],
364
+
[0.07036012, 0.0221739, 0.0, 1.0],
365
+
[0.6239606, 0.3564002, 0.1022417, 1.0],
366
+
[0.783538, 0.5647116, 0.01599631, 1.0],
367
+
[0.7529424, 0.5457245, 0.1144354, 1.0],
368
+
[0.7304609, 0.6307572, 0.2015563, 1.0],
369
+
[0.7529424, 0.7379106, 0.1946179, 1.0],
370
+
[0.1274377, 0.0273209, 0.00604884, 1.0],
371
+
[0.6038274, 0.1878208, 0.00303527, 1.0],
372
+
[0.5028866, 0.2232281, 0.07227188, 1.0],
373
+
[0.791298, 0.287441, 0.05126946, 1.0],
374
+
[0.791298, 0.3712377, 0.1412634, 1.0],
375
+
[0.6172068, 0.4677839, 0.3049874, 1.0],
376
+
[0.01520852, 0.01520852, 0.01520852, 1.0],
377
+
[0.2015563, 0.2015563, 0.2015563, 1.0],
378
+
[0.4072404, 0.4072404, 0.4072404, 1.0],
379
+
[0.5647116, 0.5332766, 0.4677839, 1.0],
380
+
[0.6938719, 0.6938719, 0.6938719, 1.0],
381
+
];
382
+
383
+
pub const FACELINE_COLOR: [[f32; 4]; 10] = [
384
+
[1.0, 0.6514057, 0.4178851, 1.0],
385
+
[1.0, 0.4677839, 0.1470273, 1.0],
386
+
[0.7304609, 0.1912018, 0.05448031, 1.0],
387
+
[1.0, 0.4019778, 0.2622508, 1.0],
388
+
[0.4178851, 0.08228273, 0.0221739, 1.0],
389
+
[0.1247718, 0.02518688, 0.00913407, 1.0],
390
+
[1.0, 0.5149179, 0.3762622, 1.0],
391
+
[1.0, 0.5583405, 0.2746774, 1.0],
392
+
[0.2622508, 0.04518623, 0.0168074, 1.0],
393
+
[0.04518623, 0.02624122, 0.0168074, 1.0],
394
+
];
395
+
}
396
+
pub mod srgb {
397
+
pub const COMMON_COLOR: [[f32; 4]; 100] = [
398
+
[0.1764706, 0.1568628, 0.1568628, 1.0],
399
+
[0.2509804, 0.1254902, 0.0627451, 1.0],
400
+
[0.3607844, 0.0941177, 0.0392157, 1.0],
401
+
[0.4862746, 0.2274510, 0.0784314, 1.0],
402
+
[0.4705883, 0.4705883, 0.5019608, 1.0],
403
+
[0.3058824, 0.2431373, 0.0627451, 1.0],
404
+
[0.5333334, 0.3450981, 0.0941177, 1.0],
405
+
[0.8156863, 0.6274510, 0.2901961, 1.0],
406
+
[0.0000000, 0.0000000, 0.0000000, 1.0],
407
+
[0.4235295, 0.4392157, 0.4392157, 1.0],
408
+
[0.4000000, 0.2352942, 0.1725491, 1.0],
409
+
[0.3764706, 0.3686275, 0.1882353, 1.0],
410
+
[0.2745099, 0.3294118, 0.6588236, 1.0],
411
+
[0.2196079, 0.4392157, 0.3450981, 1.0],
412
+
[0.3764706, 0.2196079, 0.0627451, 1.0],
413
+
[0.6588236, 0.0627451, 0.0313726, 1.0],
414
+
[0.1254902, 0.1882353, 0.4078432, 1.0],
415
+
[0.6588236, 0.3764706, 0.0000000, 1.0],
416
+
[0.4705883, 0.4392157, 0.4078432, 1.0],
417
+
[0.8470589, 0.3215687, 0.0313726, 1.0],
418
+
[0.9411765, 0.0470589, 0.0313726, 1.0],
419
+
[0.9607844, 0.2823530, 0.2823530, 1.0],
420
+
[0.9411765, 0.6039216, 0.4549020, 1.0],
421
+
[0.5490197, 0.3137255, 0.2509804, 1.0],
422
+
[0.5176471, 0.1490197, 0.1490197, 1.0],
423
+
[1.0000000, 0.4509804, 0.4000000, 1.0],
424
+
[1.0000000, 0.6509804, 0.6509804, 1.0],
425
+
[1.0000000, 0.7529412, 0.7294118, 1.0],
426
+
[0.4509804, 0.1803922, 0.2313726, 1.0],
427
+
[0.6000000, 0.1215687, 0.2392157, 1.0],
428
+
[0.5411765, 0.0901961, 0.2431373, 1.0],
429
+
[0.7098040, 0.2431373, 0.2588236, 1.0],
430
+
[0.7803922, 0.1176471, 0.3372550, 1.0],
431
+
[0.6901961, 0.3254902, 0.5058824, 1.0],
432
+
[0.7803922, 0.3294118, 0.4313726, 1.0],
433
+
[0.9803922, 0.4588236, 0.5921569, 1.0],
434
+
[0.9882353, 0.6745099, 0.7882353, 1.0],
435
+
[1.0000000, 0.7882353, 0.8470589, 1.0],
436
+
[0.1921569, 0.1098040, 0.2509804, 1.0],
437
+
[0.2156863, 0.1568628, 0.2392157, 1.0],
438
+
[0.2980393, 0.0941177, 0.3019608, 1.0],
439
+
[0.4352942, 0.2588236, 0.7019608, 1.0],
440
+
[0.5215687, 0.3607844, 0.7215687, 1.0],
441
+
[0.7529412, 0.5137255, 0.8000000, 1.0],
442
+
[0.6588236, 0.5764706, 0.7882353, 1.0],
443
+
[0.7725491, 0.6745099, 0.9019608, 1.0],
444
+
[0.9333334, 0.7450981, 0.9803922, 1.0],
445
+
[0.8235295, 0.7725491, 0.9294118, 1.0],
446
+
[0.0980393, 0.1215687, 0.2509804, 1.0],
447
+
[0.0705883, 0.2470589, 0.4000000, 1.0],
448
+
[0.1647059, 0.5098040, 0.8313726, 1.0],
449
+
[0.3411765, 0.7058824, 0.9490197, 1.0],
450
+
[0.4784314, 0.7725491, 0.8705883, 1.0],
451
+
[0.5372550, 0.6509804, 0.9803922, 1.0],
452
+
[0.5176471, 0.7411765, 0.9803922, 1.0],
453
+
[0.6313726, 0.8901961, 1.0000000, 1.0],
454
+
[0.0431373, 0.1803922, 0.2117648, 1.0],
455
+
[0.0039216, 0.2392157, 0.2313726, 1.0],
456
+
[0.0509804, 0.3098040, 0.3490197, 1.0],
457
+
[0.1372550, 0.4000000, 0.3882353, 1.0],
458
+
[0.1882353, 0.4941177, 0.5490197, 1.0],
459
+
[0.3098040, 0.6823530, 0.6901961, 1.0],
460
+
[0.4784314, 0.7686275, 0.6196079, 1.0],
461
+
[0.4980393, 0.8313726, 0.7529412, 1.0],
462
+
[0.5294118, 0.8980393, 0.7137255, 1.0],
463
+
[0.0392157, 0.2901961, 0.2078432, 1.0],
464
+
[0.2627451, 0.4784314, 0.0000000, 1.0],
465
+
[0.0078432, 0.4588236, 0.3843138, 1.0],
466
+
[0.2117648, 0.6000000, 0.4392157, 1.0],
467
+
[0.2941177, 0.6784314, 0.1019608, 1.0],
468
+
[0.5725491, 0.7490197, 0.0392157, 1.0],
469
+
[0.3882353, 0.7803922, 0.5333334, 1.0],
470
+
[0.6196079, 0.8784314, 0.2588236, 1.0],
471
+
[0.5882353, 0.8705883, 0.4941177, 1.0],
472
+
[0.7333334, 0.9490197, 0.6666667, 1.0],
473
+
[0.6000000, 0.5764706, 0.1686275, 1.0],
474
+
[0.6509804, 0.5843138, 0.3882353, 1.0],
475
+
[0.8000000, 0.7529412, 0.2235295, 1.0],
476
+
[0.8000000, 0.7254902, 0.5294118, 1.0],
477
+
[0.8509804, 0.8000000, 0.5098040, 1.0],
478
+
[0.8352942, 0.8509804, 0.4352942, 1.0],
479
+
[0.8352942, 0.9019608, 0.5137255, 1.0],
480
+
[0.8470589, 0.9803922, 0.6156863, 1.0],
481
+
[0.4901961, 0.2705883, 0.0000000, 1.0],
482
+
[0.9019608, 0.7333334, 0.4784314, 1.0],
483
+
[0.9960785, 0.8862746, 0.2901961, 1.0],
484
+
[0.9803922, 0.8705883, 0.5098040, 1.0],
485
+
[0.9686275, 0.9176471, 0.6117648, 1.0],
486
+
[0.9803922, 0.9725491, 0.6078432, 1.0],
487
+
[0.6509804, 0.3019608, 0.1176471, 1.0],
488
+
[1.0000000, 0.5882353, 0.0509804, 1.0],
489
+
[0.8196079, 0.6078432, 0.4117648, 1.0],
490
+
[1.0000000, 0.6980393, 0.4000000, 1.0],
491
+
[1.0000000, 0.7607844, 0.5490197, 1.0],
492
+
[0.8980393, 0.8117648, 0.6941177, 1.0],
493
+
[0.2549020, 0.2549020, 0.2549020, 1.0],
494
+
[0.6078432, 0.6078432, 0.6078432, 1.0],
495
+
[0.7450981, 0.7450981, 0.7450981, 1.0],
496
+
[0.8627451, 0.8431373, 0.8039216, 1.0],
497
+
[1.0000000, 1.0000000, 1.0000000, 1.0],
498
+
];
499
+
500
+
pub const UPPER_LIP_COLOR: [[f32; 4]; 100] = [
501
+
[0.0901961, 0.0784314, 0.0784314, 1.0],
502
+
[0.1254902, 0.0627451, 0.0313726, 1.0],
503
+
[0.1803922, 0.0470589, 0.0196079, 1.0],
504
+
[0.2901961, 0.1372550, 0.0470589, 1.0],
505
+
[0.3294118, 0.3294118, 0.3529412, 1.0],
506
+
[0.1529412, 0.1215687, 0.0313726, 1.0],
507
+
[0.3215687, 0.2078432, 0.0549020, 1.0],
508
+
[0.6941177, 0.5019608, 0.1568628, 1.0],
509
+
[0.0000000, 0.0000000, 0.0000000, 1.0],
510
+
[0.2980393, 0.3058824, 0.3058824, 1.0],
511
+
[0.2000000, 0.1176471, 0.0862746, 1.0],
512
+
[0.2274510, 0.2196079, 0.1137255, 1.0],
513
+
[0.1647059, 0.1960785, 0.3960785, 1.0],
514
+
[0.1529412, 0.3058824, 0.2431373, 1.0],
515
+
[0.1882353, 0.1098040, 0.0313726, 1.0],
516
+
[0.3960785, 0.0392157, 0.0196079, 1.0],
517
+
[0.0627451, 0.0941177, 0.2039216, 1.0],
518
+
[0.4627451, 0.2627451, 0.0000000, 1.0],
519
+
[0.3294118, 0.3058824, 0.2862746, 1.0],
520
+
[0.5098040, 0.1882353, 0.0941177, 1.0],
521
+
[0.4705883, 0.0470589, 0.0470589, 1.0],
522
+
[0.5333334, 0.1254902, 0.1568628, 1.0],
523
+
[0.8627451, 0.4705883, 0.3137255, 1.0],
524
+
[0.2745099, 0.1176471, 0.0392157, 1.0],
525
+
[0.3098040, 0.0901961, 0.0901961, 1.0],
526
+
[0.6000000, 0.2705883, 0.2392157, 1.0],
527
+
[0.9019608, 0.5215687, 0.5215687, 1.0],
528
+
[0.9019608, 0.6313726, 0.6078432, 1.0],
529
+
[0.2705883, 0.1098040, 0.1372550, 1.0],
530
+
[0.3607844, 0.0745099, 0.1450981, 1.0],
531
+
[0.3254902, 0.0549020, 0.1450981, 1.0],
532
+
[0.4274510, 0.1450981, 0.1568628, 1.0],
533
+
[0.4666667, 0.0705883, 0.2039216, 1.0],
534
+
[0.4156863, 0.1960785, 0.3019608, 1.0],
535
+
[0.4666667, 0.1960785, 0.2588236, 1.0],
536
+
[0.6862746, 0.3215687, 0.4156863, 1.0],
537
+
[0.8901961, 0.5490197, 0.6745099, 1.0],
538
+
[0.9019608, 0.6705883, 0.7333334, 1.0],
539
+
[0.0980393, 0.0549020, 0.1254902, 1.0],
540
+
[0.1098040, 0.0784314, 0.1215687, 1.0],
541
+
[0.1490197, 0.0470589, 0.1529412, 1.0],
542
+
[0.2627451, 0.1568628, 0.4196079, 1.0],
543
+
[0.3137255, 0.2156863, 0.4313726, 1.0],
544
+
[0.5254902, 0.3607844, 0.5607844, 1.0],
545
+
[0.4627451, 0.4039216, 0.5529412, 1.0],
546
+
[0.6705883, 0.5647059, 0.8117648, 1.0],
547
+
[0.8313726, 0.6274510, 0.8823530, 1.0],
548
+
[0.7215687, 0.6666667, 0.8352942, 1.0],
549
+
[0.0509804, 0.0627451, 0.1254902, 1.0],
550
+
[0.0352942, 0.1254902, 0.2000000, 1.0],
551
+
[0.1137255, 0.3568628, 0.5803922, 1.0],
552
+
[0.1960785, 0.5921569, 0.8549020, 1.0],
553
+
[0.3607844, 0.6784314, 0.7843138, 1.0],
554
+
[0.4039216, 0.5254902, 0.8823530, 1.0],
555
+
[0.3843138, 0.6235295, 0.8823530, 1.0],
556
+
[0.5019608, 0.7803922, 0.9019608, 1.0],
557
+
[0.0235295, 0.0901961, 0.1058824, 1.0],
558
+
[0.0039216, 0.1215687, 0.1176471, 1.0],
559
+
[0.0274510, 0.1568628, 0.1764706, 1.0],
560
+
[0.0941177, 0.2784314, 0.2705883, 1.0],
561
+
[0.1333334, 0.3450981, 0.3843138, 1.0],
562
+
[0.1882353, 0.5450981, 0.5529412, 1.0],
563
+
[0.3764706, 0.6901961, 0.5294118, 1.0],
564
+
[0.3882353, 0.7490197, 0.6627451, 1.0],
565
+
[0.4117648, 0.8078432, 0.6078432, 1.0],
566
+
[0.0196079, 0.1450981, 0.1058824, 1.0],
567
+
[0.1568628, 0.2862746, 0.0000000, 1.0],
568
+
[0.0039216, 0.2745099, 0.2313726, 1.0],
569
+
[0.1490197, 0.4196079, 0.3058824, 1.0],
570
+
[0.1725491, 0.5411765, 0.0000000, 1.0],
571
+
[0.4313726, 0.6000000, 0.0000000, 1.0],
572
+
[0.2784314, 0.7019608, 0.4352942, 1.0],
573
+
[0.5098040, 0.7921569, 0.1215687, 1.0],
574
+
[0.4784314, 0.7843138, 0.3764706, 1.0],
575
+
[0.6196079, 0.8549020, 0.5490197, 1.0],
576
+
[0.4196079, 0.4039216, 0.1176471, 1.0],
577
+
[0.4549020, 0.4078432, 0.2705883, 1.0],
578
+
[0.6392157, 0.5960785, 0.0862746, 1.0],
579
+
[0.7215687, 0.6392157, 0.4274510, 1.0],
580
+
[0.7647059, 0.7098040, 0.3960785, 1.0],
581
+
[0.7490197, 0.7647059, 0.3176471, 1.0],
582
+
[0.7411765, 0.8117648, 0.3921569, 1.0],
583
+
[0.7372550, 0.8823530, 0.4901961, 1.0],
584
+
[0.2941177, 0.1607844, 0.0000000, 1.0],
585
+
[0.8117648, 0.6313726, 0.3529412, 1.0],
586
+
[0.8980393, 0.7764706, 0.1333334, 1.0],
587
+
[0.8823530, 0.7647059, 0.3725491, 1.0],
588
+
[0.8705883, 0.8156863, 0.4862746, 1.0],
589
+
[0.8823530, 0.8745099, 0.4784314, 1.0],
590
+
[0.3921569, 0.1803922, 0.0705883, 1.0],
591
+
[0.8000000, 0.4705883, 0.0392157, 1.0],
592
+
[0.7372550, 0.5098040, 0.2980393, 1.0],
593
+
[0.9019608, 0.5725491, 0.2509804, 1.0],
594
+
[0.9019608, 0.6431373, 0.4117648, 1.0],
595
+
[0.8078432, 0.7137255, 0.5882353, 1.0],
596
+
[0.1294118, 0.1294118, 0.1294118, 1.0],
597
+
[0.4862746, 0.4862746, 0.4862746, 1.0],
598
+
[0.6705883, 0.6705883, 0.6705883, 1.0],
599
+
[0.7764706, 0.7568628, 0.7137255, 1.0],
600
+
[0.8509804, 0.8509804, 0.8509804, 1.0],
601
+
];
602
+
603
+
pub const FACELINE_COLOR: [[f32; 4]; 10] = [
604
+
[1.0000000, 0.8274510, 0.6784314, 1.0], // cafe 0
605
+
[1.0000000, 0.7137255, 0.4196079, 1.0], // cafe 1
606
+
[0.8705883, 0.4745099, 0.2588236, 1.0], // cafe 2
607
+
[1.0000000, 0.6666667, 0.5490197, 1.0], // cafe 3
608
+
[0.6784314, 0.3176471, 0.1607844, 1.0], // cafe 4
609
+
[0.3882353, 0.1725491, 0.0941177, 1.0], // cafe 5
610
+
[1.0000000, 0.7450981, 0.6470589, 1.0],
611
+
[1.0000000, 0.7725491, 0.5607844, 1.0],
612
+
[0.5490197, 0.2352942, 0.1372550, 1.0],
613
+
[0.2352942, 0.1764706, 0.1372550, 1.0],
614
+
];
615
+
}
616
+
}
+132
vfl/src/draw/faceline.rs
+132
vfl/src/draw/faceline.rs
···
1
+
use super::wgpu_render::Vertex;
2
+
3
+
pub fn trivial_quad() -> (Vec<Vertex>, Vec<u32>) {
4
+
(
5
+
vec![
6
+
Vertex {
7
+
position: [1.0 - 0.5, 0.0 - 0.5, 0.0],
8
+
tex_coords: [0.0, 0.0],
9
+
normal: [0.0, 0.0, 0.0],
10
+
},
11
+
Vertex {
12
+
position: [1.0 - 0.5, 1.0 - 0.5, 0.0],
13
+
tex_coords: [0.0, 1.0],
14
+
normal: [0.0, 0.0, 0.0],
15
+
},
16
+
Vertex {
17
+
position: [0.0 - 0.5, 1.0 - 0.5, 0.0],
18
+
tex_coords: [1.0, 1.0],
19
+
normal: [0.0, 0.0, 0.0],
20
+
},
21
+
Vertex {
22
+
position: [0.0 - 0.5, 0.0 - 0.5, 0.0],
23
+
tex_coords: [1.0, 0.0],
24
+
normal: [0.0, 0.0, 0.0],
25
+
},
26
+
],
27
+
vec![0, 1, 2, 0, 2, 3],
28
+
)
29
+
}
30
+
pub fn bgr_to_rgb([b, g, r, a]: [f32; 4]) -> [f32; 4] {
31
+
[r, g, b, a]
32
+
}
33
+
#[cfg(test)]
34
+
mod tests {
35
+
use crate::charinfo;
36
+
use crate::charinfo::nx::NxCharInfo;
37
+
use crate::color::nx::modulate;
38
+
use crate::draw::faceline::{bgr_to_rgb, trivial_quad};
39
+
use crate::draw::render_2d::Rendered2dShape;
40
+
use crate::draw::render_3d::ProgramState;
41
+
use crate::draw::wgpu_render::{HeadlessRenderer, Vertex, model_view_matrix, quad, texture};
42
+
use crate::res::shape::nx::{ResourceShape, SHAPE_MID_DAT};
43
+
use crate::res::tex::nx::{ResourceTexture, ResourceTextureFormat, TEXTURE_MID_SRGB_DAT};
44
+
use binrw::BinRead;
45
+
use glam::{uvec2, vec3};
46
+
use nalgebra::Matrix4;
47
+
use std::error::Error;
48
+
use std::{fs::File, io::BufReader};
49
+
use wgpu::CommandEncoder;
50
+
51
+
type R = Result<(), Box<dyn Error>>;
52
+
53
+
// #[test]
54
+
// fn faceline_makeup() -> R {
55
+
// let mut headless_renderer = HeadlessRenderer::new();
56
+
// let mut encoder: CommandEncoder = headless_renderer
57
+
// .device()
58
+
// .create_command_encoder(&wgpu::CommandEncoderDescriptor { label: None });
59
+
60
+
// let char = NxCharInfo::read(&mut File::open("../charline.charinfo").unwrap()).unwrap();
61
+
// let mut bin = BufReader::new(File::open(TEXTURE_MID_SRGB_DAT)?);
62
+
63
+
// let res_texture = ResourceTexture::read(&mut bin)?;
64
+
65
+
// let tex = res_texture.makeup[char.faceline_make as usize]
66
+
// .get_image(&mut BufReader::new(File::open(TEXTURE_MID_SRGB_DAT)?))?;
67
+
// let tex = image::DynamicImage::ImageRgba8(tex.unwrap());
68
+
69
+
// let target_texture =
70
+
// texture::Texture::create_texture(&headless_renderer.device(), &uvec2(256, 512), "");
71
+
72
+
// Rendered2dShape::render_texture_trivial(
73
+
// tex,
74
+
// modulate(crate::color::nx::ColorModulated::FacelineMakeup, &char),
75
+
// Some(bgr_to_rgb(
76
+
// crate::color::nx::srgb::FACELINE_COLOR[usize::from(char.faceline_color)],
77
+
// )),
78
+
// &mut headless_renderer,
79
+
// &target_texture.view,
80
+
// &mut encoder,
81
+
// );
82
+
83
+
// let image = headless_renderer.output_texture(&target_texture, encoder);
84
+
85
+
// println!("Done!");
86
+
// image.save(concat!(
87
+
// env!("CARGO_MANIFEST_DIR"),
88
+
// "/test_output/faceline_makeup.png"
89
+
// ))?;
90
+
91
+
// Ok(())
92
+
// }
93
+
94
+
// #[test]
95
+
// fn faceline_beard() -> R {
96
+
// let mut headless_renderer = HeadlessRenderer::new();
97
+
// let mut encoder: CommandEncoder = headless_renderer
98
+
// .device()
99
+
// .create_command_encoder(&wgpu::CommandEncoderDescriptor { label: None });
100
+
101
+
// let char = NxCharInfo::read(&mut File::open("../testguy.charinfo").unwrap()).unwrap();
102
+
// let mut bin = BufReader::new(File::open(TEXTURE_MID_SRGB_DAT)?);
103
+
104
+
// let res_texture = ResourceTexture::read(&mut bin)?;
105
+
106
+
// let tex = res_texture.beard[0]
107
+
// .get_image(&mut BufReader::new(File::open(TEXTURE_MID_SRGB_DAT)?))?;
108
+
// let tex = image::DynamicImage::ImageRgba8(tex.unwrap());
109
+
110
+
// let target_texture =
111
+
// texture::Texture::create_texture(&headless_renderer.device(), &uvec2(256, 512), "");
112
+
113
+
// Rendered2dShape::render_texture_trivial(
114
+
// tex,
115
+
// modulate(crate::color::nx::ColorModulated::FacelineMakeup, &char),
116
+
// None,
117
+
// &mut headless_renderer,
118
+
// &target_texture.view,
119
+
// &mut encoder,
120
+
// );
121
+
122
+
// let image = headless_renderer.output_texture(&target_texture, encoder);
123
+
124
+
// println!("Done!");
125
+
// image.save(concat!(
126
+
// env!("CARGO_MANIFEST_DIR"),
127
+
// "/test_output/faceline_beard.png"
128
+
// ))?;
129
+
130
+
// Ok(())
131
+
// }
132
+
}
+252
vfl/src/draw/mask.rs
+252
vfl/src/draw/mask.rs
···
1
+
use crate::charinfo::nx::NxCharInfo;
2
+
3
+
use super::{TEX_SCALE_X, TEX_SCALE_Y};
4
+
5
+
const fn tex_scale2dim(scale: f32) -> f32 {
6
+
1.0 + 0.4 * scale
7
+
}
8
+
9
+
// i16 to not lose precision
10
+
const fn tex_rotate2ang(rotate: i16) -> f32 {
11
+
(360.0 / 32.0) * (rotate % 32) as f32
12
+
}
13
+
14
+
const fn tex_unit(x: f32) -> f32 {
15
+
x / 64.0
16
+
}
17
+
18
+
const TEX_EYE_BASE_X: f32 = tex_unit(0.0);
19
+
const TEX_EYE_BASE_Y: f32 = 18.451_525;
20
+
const TEX_EYE_BASE_W: f32 = tex_unit(342.0);
21
+
const TEX_EYE_BASE_H: f32 = tex_unit(288.0);
22
+
23
+
const TEX_EYEBROW_BASE_X: f32 = tex_unit(0.0);
24
+
const TEX_EYEBROW_BASE_Y: f32 = 16.549_807;
25
+
const TEX_EYEBROW_BASE_W: f32 = tex_unit(324.0);
26
+
const TEX_EYEBROW_BASE_H: f32 = tex_unit(288.0);
27
+
28
+
const TEX_MOUTH_BASE_Y: f32 = 29.25885;
29
+
const TEX_MOUTH_BASE_W: f32 = tex_unit(396.0);
30
+
const TEX_MOUTH_BASE_H: f32 = tex_unit(288.0);
31
+
32
+
const TEX_MUSTACHE_BASE_Y: f32 = 31.763_554;
33
+
const TEX_MUSTACHE_BASE_W: f32 = tex_unit(288.0);
34
+
const TEX_MUSTACHE_BASE_H: f32 = tex_unit(576.0);
35
+
36
+
const TEX_MOLE_BASE_X: f32 = 17.766_165;
37
+
const TEX_MOLE_BASE_Y: f32 = 17.95986;
38
+
const TEX_MOLE_BASE_W: f32 = tex_unit(0.0);
39
+
const TEX_MOLE_BASE_H: f32 = tex_unit(0.0);
40
+
41
+
const EYE_ROT_OFFSET: [u8; 50] = [
42
+
29, 28, 28, 28, 29, 28, 28, 28, 29, 28, 28, 28, 28, 29, 29, 28, 28, 28, 29, 29, 28, 29, 28, 29,
43
+
29, 28, 29, 28, 28, 29, 28, 28, 28, 29, 29, 29, 28, 28, 29, 29, 29, 28, 28, 29, 29, 29, 29, 29,
44
+
28, 28,
45
+
];
46
+
47
+
const EYEBROW_ROT_OFFSET: [u8; 24] = [
48
+
26, 26, 27, 25, 26, 25, 26, 25, 28, 25, 26, 24, 27, 27, 26, 26, 25, 25, 26, 26, 27, 26, 25, 27,
49
+
];
50
+
51
+
// Found in RFL, no idea what it is
52
+
const RFL_MAGIC_Y_OFFSET: f32 = 1.160_000_1;
53
+
54
+
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
55
+
pub enum ImageOrigin {
56
+
Center,
57
+
Left,
58
+
Right,
59
+
Ignore,
60
+
}
61
+
62
+
#[derive(Clone, Copy, Debug)]
63
+
pub struct FacePart {
64
+
pub x: f32,
65
+
pub y: f32,
66
+
pub width: f32,
67
+
pub height: f32,
68
+
pub angle_deg: f32,
69
+
pub origin: ImageOrigin,
70
+
}
71
+
72
+
/// The positioning of all parts of the face on the mask.
73
+
#[derive(Clone, Copy, Debug)]
74
+
pub struct MaskFaceParts {
75
+
pub eye: [FacePart; 2],
76
+
pub eyebrow: [FacePart; 2],
77
+
pub mouth: FacePart,
78
+
pub mustache: [FacePart; 2],
79
+
pub mole: FacePart,
80
+
}
81
+
82
+
impl MaskFaceParts {
83
+
pub fn init_glasses(
84
+
info: &NxCharInfo,
85
+
resolution: f32,
86
+
nose_translate: [f32; 3],
87
+
) -> [FacePart; 2] {
88
+
let resolution = resolution / 64.0;
89
+
90
+
let glass_y = TEX_EYE_BASE_Y + RFL_MAGIC_Y_OFFSET * TEX_SCALE_Y * f32::from(info.glass_y);
91
+
let glass_w = TEX_EYE_BASE_W * tex_scale2dim(info.glass_scale.into());
92
+
let glass_h = TEX_EYE_BASE_H * tex_scale2dim(info.glass_scale.into());
93
+
// let eye_a =
94
+
// tex_rotate2ang((info + EYE_ROT_OFFSET[info.glass_type as usize]).into());
95
+
96
+
let eye_l = FacePart {
97
+
x: resolution * (32.0),
98
+
y: glass_y * resolution,
99
+
width: glass_w * resolution,
100
+
height: glass_h * resolution,
101
+
angle_deg: 360.0 - 0.0,
102
+
origin: ImageOrigin::Left,
103
+
};
104
+
let eye_r = FacePart {
105
+
x: resolution * (32.0),
106
+
y: glass_y * resolution,
107
+
width: glass_w * resolution,
108
+
height: glass_h * resolution,
109
+
angle_deg: 0.0,
110
+
origin: ImageOrigin::Right,
111
+
};
112
+
113
+
[eye_l, eye_r]
114
+
}
115
+
pub fn init(info: &NxCharInfo, resolution: f32) -> MaskFaceParts {
116
+
// RFLi_TEX_UNIT
117
+
let resolution = resolution / 64.0;
118
+
119
+
let eye_spacing_x = TEX_EYE_BASE_X + TEX_SCALE_X * f32::from(info.eye_x);
120
+
let eye_y = TEX_EYE_BASE_Y + RFL_MAGIC_Y_OFFSET * TEX_SCALE_Y * f32::from(info.eye_y);
121
+
let eye_w = TEX_EYE_BASE_W * tex_scale2dim(info.eye_scale.into());
122
+
let eye_h = TEX_EYE_BASE_H * tex_scale2dim(info.eye_scale.into());
123
+
let eye_a =
124
+
tex_rotate2ang((info.eye_rotate + EYE_ROT_OFFSET[info.eye_type as usize]).into());
125
+
126
+
let eye_l = FacePart {
127
+
x: resolution * (32.0 + eye_spacing_x),
128
+
y: eye_y * resolution,
129
+
width: eye_w * resolution,
130
+
height: eye_h * resolution,
131
+
angle_deg: 360.0 - eye_a,
132
+
origin: ImageOrigin::Left,
133
+
};
134
+
let eye_r = FacePart {
135
+
x: resolution * (32.0 - eye_spacing_x),
136
+
y: eye_y * resolution,
137
+
width: eye_w * resolution,
138
+
height: eye_h * resolution,
139
+
angle_deg: eye_a,
140
+
origin: ImageOrigin::Right,
141
+
};
142
+
143
+
let eb_spacing_x = TEX_EYEBROW_BASE_X + TEX_SCALE_X * f32::from(info.eyebrow_x);
144
+
let eb_y =
145
+
TEX_EYEBROW_BASE_Y + RFL_MAGIC_Y_OFFSET * TEX_SCALE_Y * f32::from(info.eyebrow_y);
146
+
let eb_w = TEX_EYEBROW_BASE_W * tex_scale2dim(info.eyebrow_scale.into());
147
+
let eb_h = TEX_EYEBROW_BASE_H * tex_scale2dim(info.eyebrow_scale.into());
148
+
let eb_a = tex_rotate2ang(
149
+
(info.eyebrow_rotate + EYEBROW_ROT_OFFSET[info.eyebrow_type as usize]).into(),
150
+
);
151
+
let eb_l = FacePart {
152
+
x: resolution * (32.0 + eb_spacing_x),
153
+
y: eb_y * resolution,
154
+
width: eb_w * resolution,
155
+
height: eb_h * resolution,
156
+
angle_deg: 360.0 - eb_a,
157
+
origin: ImageOrigin::Left,
158
+
};
159
+
let eb_r = FacePart {
160
+
x: resolution * (32.0 - eb_spacing_x),
161
+
y: eb_y * resolution,
162
+
width: eb_w * resolution,
163
+
height: eb_h * resolution,
164
+
angle_deg: eb_a,
165
+
origin: ImageOrigin::Right,
166
+
};
167
+
168
+
let mouth_y = TEX_MOUTH_BASE_Y + RFL_MAGIC_Y_OFFSET * TEX_SCALE_Y * f32::from(info.mouth_y);
169
+
let mouth_w = TEX_MOUTH_BASE_W * tex_scale2dim(info.mouth_scale.into());
170
+
let mouth_h = TEX_MOUTH_BASE_H * tex_scale2dim(info.mouth_scale.into());
171
+
172
+
let mouth = FacePart {
173
+
x: resolution * 32.0,
174
+
y: mouth_y * resolution,
175
+
width: mouth_w * resolution,
176
+
height: mouth_h * resolution,
177
+
angle_deg: 0.0,
178
+
origin: ImageOrigin::Center,
179
+
};
180
+
181
+
let mus_y =
182
+
TEX_MUSTACHE_BASE_Y + RFL_MAGIC_Y_OFFSET * TEX_SCALE_Y * f32::from(info.mustache_y);
183
+
let mus_w = TEX_MUSTACHE_BASE_W * tex_scale2dim(info.mustache_scale.into());
184
+
let mus_h = TEX_MUSTACHE_BASE_H * tex_scale2dim(info.mustache_scale.into());
185
+
186
+
let mus_l = FacePart {
187
+
x: resolution * 32.0,
188
+
y: mus_y * resolution,
189
+
width: mus_w * resolution,
190
+
height: mus_h * resolution,
191
+
angle_deg: 0.0,
192
+
origin: ImageOrigin::Left,
193
+
};
194
+
let mus_r = FacePart {
195
+
x: resolution * 32.0,
196
+
y: mus_y * resolution,
197
+
width: mus_w * resolution,
198
+
height: mus_h * resolution,
199
+
angle_deg: 0.0,
200
+
origin: ImageOrigin::Right,
201
+
};
202
+
203
+
let mole_x = TEX_MOLE_BASE_X + 2.0 * TEX_SCALE_X * f32::from(info.mole_x);
204
+
let mole_y = TEX_MOLE_BASE_Y + RFL_MAGIC_Y_OFFSET * TEX_SCALE_Y * f32::from(info.mole_y);
205
+
let mole_w = TEX_MOLE_BASE_W * tex_scale2dim(info.mole_scale.into());
206
+
let mole_h = TEX_MOLE_BASE_H * tex_scale2dim(info.mole_scale.into());
207
+
208
+
let mole = FacePart {
209
+
x: mole_x * resolution,
210
+
y: mole_y * resolution,
211
+
width: mole_w * resolution,
212
+
height: mole_h * resolution,
213
+
angle_deg: 0.0,
214
+
origin: ImageOrigin::Center,
215
+
};
216
+
217
+
MaskFaceParts {
218
+
eye: [eye_l, eye_r],
219
+
eyebrow: [eb_l, eb_r],
220
+
mouth,
221
+
mustache: [mus_l, mus_r],
222
+
mole,
223
+
}
224
+
}
225
+
}
226
+
227
+
#[cfg(test)]
228
+
mod tests {
229
+
use crate::res::shape::nx::{ResourceShape, SHAPE_MID_DAT};
230
+
use binrw::BinRead;
231
+
use std::error::Error;
232
+
use std::{fs::File, io::BufReader};
233
+
234
+
type R = Result<(), Box<dyn Error>>;
235
+
236
+
// #[test]
237
+
// fn mask_shape() -> R {
238
+
// let mut bin = BufReader::new(File::open(SHAPE_MID_DAT)?);
239
+
240
+
// let res = ResourceShape::read(&mut bin)?;
241
+
242
+
// let mut shape = res.mask[1];
243
+
// let mut shape = shape.shape_data(&mut bin)?;
244
+
245
+
// // let mut file = File::open(SHAPE_MID_DAT)?;
246
+
247
+
// // let gltf = shape.gltf(&mut file)?;
248
+
// // gltf.export_glb("jas.glb")?;
249
+
// //
250
+
// Ok(())
251
+
// }
252
+
}
+12
vfl/src/draw/mod.rs
+12
vfl/src/draw/mod.rs
···
1
+
#[cfg(feature = "draw")]
2
+
pub mod render_2d;
3
+
#[cfg(feature = "draw")]
4
+
pub mod render_3d;
5
+
#[cfg(feature = "draw")]
6
+
pub mod wgpu_render;
7
+
8
+
pub mod faceline;
9
+
pub mod mask;
10
+
11
+
pub const TEX_SCALE_X: f32 = 0.889_614_64;
12
+
pub const TEX_SCALE_Y: f32 = 0.927_667_5;
+353
vfl/src/draw/render_2d.rs
+353
vfl/src/draw/render_2d.rs
···
1
+
use bytemuck::cast_slice;
2
+
use glam::vec3;
3
+
use image::DynamicImage;
4
+
use nalgebra::Matrix4;
5
+
use wgpu::{
6
+
CommandEncoder, PipelineCompilationOptions, TexelCopyTextureInfo, TextureFormat, TextureView,
7
+
include_wgsl, util::DeviceExt,
8
+
};
9
+
10
+
use crate::{
11
+
color::nx::{ModulationIntent, modulate},
12
+
res::tex::nx::{RawTexture, ResourceTexture, ResourceTextureFormat, TextureElement},
13
+
};
14
+
15
+
use super::{
16
+
faceline::trivial_quad,
17
+
render_3d::ProgramState,
18
+
wgpu_render::{TextureTransformUniform, Vertex},
19
+
};
20
+
21
+
type Color = [f32; 4];
22
+
23
+
const NON_REPLACEMENT: Color = [f32::NAN, f32::NAN, f32::NAN, f32::NAN];
24
+
#[derive(Debug)]
25
+
pub struct Rendered2dShape {
26
+
pub vertices: Vec<Vertex>,
27
+
pub indices: Vec<u32>,
28
+
pub tex: RawTexture,
29
+
pub mvp_matrix: Matrix4<f32>,
30
+
pub modulation: ModulationIntent,
31
+
pub opaque: Option<Color>,
32
+
}
33
+
34
+
pub fn texture_format_to_wgpu(tex: TextureElement) -> TextureFormat {
35
+
use TextureFormat as WgpuTextureFormat;
36
+
let format = ResourceTextureFormat::try_from(tex.texture.format).unwrap();
37
+
match format {
38
+
ResourceTextureFormat::R => WgpuTextureFormat::R8Unorm,
39
+
ResourceTextureFormat::Rg => WgpuTextureFormat::Rg8Unorm,
40
+
ResourceTextureFormat::Rgba => WgpuTextureFormat::Rgba8Unorm,
41
+
ResourceTextureFormat::Bc4 => WgpuTextureFormat::Bc4RUnorm,
42
+
ResourceTextureFormat::Bc5 => WgpuTextureFormat::Bc5RgUnorm,
43
+
ResourceTextureFormat::Bc7 => WgpuTextureFormat::Bc7RgbaUnorm,
44
+
ResourceTextureFormat::Astc4x4 => WgpuTextureFormat::Astc {
45
+
block: wgpu::AstcBlock::B4x4,
46
+
channel: wgpu::AstcChannel::Unorm,
47
+
},
48
+
}
49
+
}
50
+
51
+
pub fn texture_format_buffer_layout(tex: TextureElement) -> wgpu::TexelCopyBufferLayout {
52
+
use ResourceTextureFormat as Rtf;
53
+
const BC3_BYTES_PER_BLOCK: u32 = 16;
54
+
const BC3_PIXELS_PER_BLOCK: u32 = 4;
55
+
const BC4_BYTES_PER_BLOCK: u32 = 8;
56
+
57
+
let format = Rtf::try_from(tex.texture.format).unwrap();
58
+
59
+
match format {
60
+
Rtf::R => wgpu::TexelCopyBufferLayout {
61
+
offset: 0,
62
+
bytes_per_row: Some(u32::from(tex.texture.width)),
63
+
rows_per_image: None,
64
+
},
65
+
Rtf::Rg => wgpu::TexelCopyBufferLayout {
66
+
offset: 0,
67
+
bytes_per_row: Some(2 * u32::from(tex.texture.width)),
68
+
rows_per_image: None,
69
+
},
70
+
Rtf::Astc4x4 | Rtf::Bc7 | Rtf::Bc4 | Rtf::Rgba => wgpu::TexelCopyBufferLayout {
71
+
offset: 0,
72
+
bytes_per_row: Some((16 / 4) * u32::from(tex.texture.width)),
73
+
rows_per_image: None,
74
+
},
75
+
Rtf::Bc5 => wgpu::TexelCopyBufferLayout {
76
+
offset: 0,
77
+
bytes_per_row: Some((32 / 4) * u32::from(tex.texture.width)),
78
+
rows_per_image: None,
79
+
},
80
+
}
81
+
}
82
+
83
+
impl Rendered2dShape {
84
+
pub fn render_texture_trivial(
85
+
rendered_texture: RawTexture,
86
+
modulation: ModulationIntent,
87
+
opaque: Option<Color>,
88
+
st: &mut impl ProgramState,
89
+
texture_view: &TextureView,
90
+
encoder: &mut CommandEncoder,
91
+
) {
92
+
let (vertices, indices) = trivial_quad();
93
+
94
+
let mvp_matrix = {
95
+
let scale = vec3(-2.0, -2.0, 1.0);
96
+
let scale = nalgebra::Vector3::<f32>::from(Into::<mint::Vector3<f32>>::into(scale));
97
+
98
+
nalgebra::Matrix4::new_nonuniform_scaling(&scale)
99
+
};
100
+
101
+
let rendered_2d_shape = Rendered2dShape {
102
+
vertices,
103
+
indices,
104
+
tex: rendered_texture,
105
+
mvp_matrix,
106
+
modulation,
107
+
opaque,
108
+
};
109
+
110
+
rendered_2d_shape.render(st, texture_view, encoder);
111
+
}
112
+
113
+
#[allow(clippy::too_many_lines)]
114
+
pub fn render(
115
+
self,
116
+
st: &mut impl ProgramState,
117
+
texture_view: &TextureView,
118
+
encoder: &mut CommandEncoder,
119
+
) {
120
+
let vertex_buffer = st
121
+
.device()
122
+
.create_buffer_init(&wgpu::util::BufferInitDescriptor {
123
+
label: Some("Vertex Buffer"),
124
+
contents: cast_slice(&self.vertices),
125
+
usage: wgpu::BufferUsages::VERTEX,
126
+
});
127
+
128
+
let index_buffer = st
129
+
.device()
130
+
.create_buffer_init(&wgpu::util::BufferInitDescriptor {
131
+
label: Some("Index Buffer"),
132
+
contents: cast_slice(&self.indices),
133
+
usage: wgpu::BufferUsages::INDEX,
134
+
});
135
+
136
+
let shape_texture_size = wgpu::Extent3d {
137
+
width: u32::from(self.tex.metadata.texture.width),
138
+
height: u32::from(self.tex.metadata.texture.height),
139
+
depth_or_array_layers: 1,
140
+
};
141
+
let shape_diffuse_texture = st.device().create_texture(&wgpu::TextureDescriptor {
142
+
size: shape_texture_size,
143
+
mip_level_count: 1,
144
+
sample_count: 1,
145
+
dimension: wgpu::TextureDimension::D2,
146
+
format: texture_format_to_wgpu(self.tex.metadata),
147
+
usage: wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::COPY_DST,
148
+
label: Some("diffuse_texture"),
149
+
view_formats: &[
150
+
texture_format_to_wgpu(self.tex.metadata),
151
+
texture_format_to_wgpu(self.tex.metadata).add_srgb_suffix(),
152
+
],
153
+
});
154
+
155
+
st.queue().write_texture(
156
+
TexelCopyTextureInfo {
157
+
texture: &shape_diffuse_texture,
158
+
mip_level: 0,
159
+
origin: wgpu::Origin3d::ZERO,
160
+
aspect: wgpu::TextureAspect::All,
161
+
},
162
+
&self.tex.bytes,
163
+
texture_format_buffer_layout(self.tex.metadata),
164
+
shape_texture_size,
165
+
);
166
+
167
+
let shape_diffuse_texture_view =
168
+
shape_diffuse_texture.create_view(&wgpu::TextureViewDescriptor {
169
+
format: Some(texture_format_to_wgpu(self.tex.metadata)),
170
+
..Default::default()
171
+
});
172
+
let shape_diffuse_sampler = st.device().create_sampler(&wgpu::SamplerDescriptor {
173
+
address_mode_u: wgpu::AddressMode::ClampToEdge,
174
+
address_mode_v: wgpu::AddressMode::ClampToEdge,
175
+
address_mode_w: wgpu::AddressMode::ClampToEdge,
176
+
mag_filter: wgpu::FilterMode::Linear,
177
+
min_filter: wgpu::FilterMode::Nearest,
178
+
mipmap_filter: wgpu::FilterMode::Nearest,
179
+
..Default::default()
180
+
});
181
+
182
+
let texture_bind_group_layout =
183
+
st.device()
184
+
.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor {
185
+
entries: &[
186
+
wgpu::BindGroupLayoutEntry {
187
+
binding: 0,
188
+
visibility: wgpu::ShaderStages::FRAGMENT,
189
+
ty: wgpu::BindingType::Texture {
190
+
multisampled: false,
191
+
view_dimension: wgpu::TextureViewDimension::D2,
192
+
sample_type: wgpu::TextureSampleType::Float { filterable: true },
193
+
},
194
+
count: None,
195
+
},
196
+
wgpu::BindGroupLayoutEntry {
197
+
binding: 1,
198
+
visibility: wgpu::ShaderStages::FRAGMENT,
199
+
ty: wgpu::BindingType::Sampler(wgpu::SamplerBindingType::Filtering),
200
+
count: None,
201
+
},
202
+
],
203
+
label: Some("texture_bind_group_layout"),
204
+
});
205
+
206
+
let shape_diffuse_bind_group = st.device().create_bind_group(&wgpu::BindGroupDescriptor {
207
+
layout: &texture_bind_group_layout,
208
+
entries: &[
209
+
wgpu::BindGroupEntry {
210
+
binding: 0,
211
+
resource: wgpu::BindingResource::TextureView(&shape_diffuse_texture_view),
212
+
},
213
+
wgpu::BindGroupEntry {
214
+
binding: 1,
215
+
resource: wgpu::BindingResource::Sampler(&shape_diffuse_sampler),
216
+
},
217
+
],
218
+
label: Some("diffuse_bind_group"),
219
+
});
220
+
221
+
let mvp_matrix = self.mvp_matrix.into();
222
+
let mvp_uniform = TextureTransformUniform {
223
+
mvp_matrix,
224
+
channel_replacements_r: self.modulation.channels[0],
225
+
channel_replacements_g: self.modulation.channels[1],
226
+
channel_replacements_b: self.modulation.channels[2],
227
+
texture_type: (Into::<u8>::into(self.modulation.mode)).into(),
228
+
pad: Default::default(),
229
+
};
230
+
231
+
let mvp_buffer = st
232
+
.device()
233
+
.create_buffer_init(&wgpu::util::BufferInitDescriptor {
234
+
label: Some("MvpMatrix Buffer"),
235
+
contents: cast_slice(&[mvp_uniform]),
236
+
usage: wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST,
237
+
});
238
+
239
+
let mvp_bind_group_layout =
240
+
st.device()
241
+
.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor {
242
+
entries: &[wgpu::BindGroupLayoutEntry {
243
+
binding: 0,
244
+
visibility: wgpu::ShaderStages::VERTEX | wgpu::ShaderStages::FRAGMENT,
245
+
ty: wgpu::BindingType::Buffer {
246
+
ty: wgpu::BufferBindingType::Uniform,
247
+
has_dynamic_offset: false,
248
+
min_binding_size: None,
249
+
},
250
+
count: None,
251
+
}],
252
+
label: Some("mvp_bind_group_layout"),
253
+
});
254
+
255
+
let mvp_bind_group = st.device().create_bind_group(&wgpu::BindGroupDescriptor {
256
+
layout: &mvp_bind_group_layout,
257
+
entries: &[wgpu::BindGroupEntry {
258
+
binding: 0,
259
+
resource: mvp_buffer.as_entire_binding(),
260
+
}],
261
+
label: Some("mvp_bind_group"),
262
+
});
263
+
264
+
let shader_module = st
265
+
.device()
266
+
.create_shader_module(include_wgsl!("shader.wgsl"));
267
+
let render_pipeline_layout =
268
+
st.device()
269
+
.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor {
270
+
label: Some("Render Pipeline Layout"),
271
+
bind_group_layouts: &[&texture_bind_group_layout, &mvp_bind_group_layout],
272
+
push_constant_ranges: &[],
273
+
});
274
+
let render_pipeline = st
275
+
.device()
276
+
.create_render_pipeline(&wgpu::RenderPipelineDescriptor {
277
+
label: Some("Render Pipeline"),
278
+
layout: Some(&render_pipeline_layout),
279
+
vertex: wgpu::VertexState {
280
+
module: &shader_module,
281
+
entry_point: Some("vs_main"),
282
+
buffers: &[Vertex::desc()],
283
+
compilation_options: PipelineCompilationOptions::default(),
284
+
},
285
+
fragment: Some(wgpu::FragmentState {
286
+
module: &shader_module,
287
+
entry_point: Some("fs_main"),
288
+
targets: &[Some(wgpu::ColorTargetState {
289
+
format: st.surface_fmt().add_srgb_suffix(),
290
+
blend: Some(wgpu::BlendState::ALPHA_BLENDING),
291
+
write_mask: wgpu::ColorWrites::ALL,
292
+
})],
293
+
compilation_options: PipelineCompilationOptions::default(),
294
+
}),
295
+
primitive: wgpu::PrimitiveState {
296
+
topology: wgpu::PrimitiveTopology::TriangleList,
297
+
strip_index_format: None,
298
+
front_face: wgpu::FrontFace::Ccw,
299
+
cull_mode: None,
300
+
// Setting this to anything other than Fill requires Features::NON_FILL_POLYGON_MODE
301
+
polygon_mode: wgpu::PolygonMode::Fill,
302
+
// Requires Features::DEPTH_CLIP_CONTROL
303
+
unclipped_depth: false,
304
+
// Requires Features::CONSERVATIVE_RASTERIZATION
305
+
conservative: false,
306
+
},
307
+
depth_stencil: None,
308
+
multisample: wgpu::MultisampleState {
309
+
count: 1,
310
+
mask: !0,
311
+
alpha_to_coverage_enabled: false,
312
+
},
313
+
// If the pipeline will be used with a multiview render pass, this
314
+
// indicates how many array layers the attachments will have.
315
+
multiview: None,
316
+
cache: None,
317
+
});
318
+
319
+
{
320
+
let render_pass_desc = wgpu::RenderPassDescriptor {
321
+
label: Some("Render Pass"),
322
+
color_attachments: &[Some(wgpu::RenderPassColorAttachment {
323
+
view: texture_view,
324
+
resolve_target: None,
325
+
ops: wgpu::Operations {
326
+
load: match self.opaque {
327
+
Some([r, g, b, a]) => wgpu::LoadOp::Clear(wgpu::Color {
328
+
r: r.into(),
329
+
g: g.into(),
330
+
b: b.into(),
331
+
a: a.into(),
332
+
}),
333
+
None => wgpu::LoadOp::Load,
334
+
},
335
+
store: wgpu::StoreOp::Store,
336
+
},
337
+
})],
338
+
depth_stencil_attachment: None,
339
+
occlusion_query_set: None,
340
+
timestamp_writes: None,
341
+
};
342
+
let mut render_pass = encoder.begin_render_pass(&render_pass_desc);
343
+
344
+
render_pass.set_pipeline(&render_pipeline);
345
+
render_pass.set_bind_group(0, &shape_diffuse_bind_group, &[]);
346
+
render_pass.set_bind_group(1, &mvp_bind_group, &[]);
347
+
render_pass.set_vertex_buffer(0, vertex_buffer.slice(..));
348
+
render_pass.set_index_buffer(index_buffer.slice(..), wgpu::IndexFormat::Uint32);
349
+
350
+
render_pass.draw_indexed(0..self.indices.len().try_into().unwrap(), 0, 0..1);
351
+
}
352
+
}
353
+
}
+245
vfl/src/draw/render_3d.rs
+245
vfl/src/draw/render_3d.rs
···
1
+
use bytemuck::cast_slice;
2
+
use glam::{Vec3, Vec4};
3
+
use wgpu::{
4
+
BlendState, CommandEncoder, PipelineCompilationOptions, TextureView, include_wgsl,
5
+
util::DeviceExt,
6
+
};
7
+
8
+
use super::wgpu_render::{Vertex, texture};
9
+
10
+
#[repr(C)]
11
+
#[derive(Debug, Copy, Clone, bytemuck::Pod, bytemuck::Zeroable)]
12
+
struct CharShapeUniform {
13
+
diffuse_color: [f32; 4],
14
+
position: [f32; 3],
15
+
_pad: f32,
16
+
}
17
+
18
+
pub trait ProgramState {
19
+
fn device(&self) -> wgpu::Device;
20
+
fn queue(&self) -> wgpu::Queue;
21
+
fn camera_bgl(&self) -> &wgpu::BindGroupLayout;
22
+
fn camera_bg(&self) -> &wgpu::BindGroup;
23
+
fn surface_fmt(&self) -> wgpu::TextureFormat;
24
+
fn depth_texture(&self) -> &texture::TextureBundle;
25
+
}
26
+
27
+
#[derive(Default, Debug)]
28
+
pub struct Rendered3dShape {
29
+
pub vertices: Vec<Vertex>,
30
+
pub indices: Vec<u32>,
31
+
pub color: Vec4,
32
+
pub texture: Option<crate::draw::wgpu_render::texture::TextureBundle>,
33
+
pub position: Vec3,
34
+
}
35
+
36
+
impl Rendered3dShape {
37
+
#[allow(clippy::too_many_lines)]
38
+
pub fn render(
39
+
&mut self,
40
+
st: &mut impl ProgramState,
41
+
texture_view: &TextureView,
42
+
encoder: &mut CommandEncoder,
43
+
) {
44
+
let vertex_buffer = st
45
+
.device()
46
+
.create_buffer_init(&wgpu::util::BufferInitDescriptor {
47
+
label: Some("Vertex Buffer"),
48
+
contents: cast_slice(&self.vertices),
49
+
usage: wgpu::BufferUsages::VERTEX,
50
+
});
51
+
52
+
let index_buffer = st
53
+
.device()
54
+
.create_buffer_init(&wgpu::util::BufferInitDescriptor {
55
+
label: Some("Index Buffer"),
56
+
contents: cast_slice(&self.indices),
57
+
usage: wgpu::BufferUsages::INDEX,
58
+
});
59
+
60
+
let char_shape_uniform = CharShapeUniform {
61
+
diffuse_color: self.color.into(),
62
+
position: self.position.into(),
63
+
_pad: 0.0,
64
+
};
65
+
let char_shape_buffer = st
66
+
.device()
67
+
.create_buffer_init(&wgpu::util::BufferInitDescriptor {
68
+
label: Some("Cs Buffer"),
69
+
contents: cast_slice(&[char_shape_uniform]),
70
+
usage: wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST,
71
+
});
72
+
let char_shape_bind_group_layout =
73
+
st.device()
74
+
.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor {
75
+
entries: &[wgpu::BindGroupLayoutEntry {
76
+
binding: 0,
77
+
visibility: wgpu::ShaderStages::VERTEX | wgpu::ShaderStages::FRAGMENT,
78
+
ty: wgpu::BindingType::Buffer {
79
+
ty: wgpu::BufferBindingType::Uniform,
80
+
has_dynamic_offset: false,
81
+
min_binding_size: None,
82
+
},
83
+
count: None,
84
+
}],
85
+
label: Some("cs_group_layout"),
86
+
});
87
+
88
+
let char_shape_bind_group = st.device().create_bind_group(&wgpu::BindGroupDescriptor {
89
+
layout: &char_shape_bind_group_layout,
90
+
entries: &[wgpu::BindGroupEntry {
91
+
binding: 0,
92
+
resource: char_shape_buffer.as_entire_binding(),
93
+
}],
94
+
label: Some("cs_bind_group"),
95
+
});
96
+
97
+
let mut bind_group_layouts = vec![st.camera_bgl(), &char_shape_bind_group_layout];
98
+
99
+
let projected_texture_bind_group_layout =
100
+
st.device()
101
+
.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor {
102
+
entries: &[
103
+
wgpu::BindGroupLayoutEntry {
104
+
binding: 0,
105
+
visibility: wgpu::ShaderStages::FRAGMENT,
106
+
ty: wgpu::BindingType::Texture {
107
+
multisampled: false,
108
+
view_dimension: wgpu::TextureViewDimension::D2,
109
+
sample_type: wgpu::TextureSampleType::Float { filterable: true },
110
+
},
111
+
count: None,
112
+
},
113
+
wgpu::BindGroupLayoutEntry {
114
+
binding: 1,
115
+
visibility: wgpu::ShaderStages::FRAGMENT,
116
+
ty: wgpu::BindingType::Sampler(wgpu::SamplerBindingType::Filtering),
117
+
count: None,
118
+
},
119
+
],
120
+
label: Some("texture_bind_group_layout"),
121
+
});
122
+
if self.texture.is_some() {
123
+
bind_group_layouts.push(&projected_texture_bind_group_layout);
124
+
}
125
+
126
+
let shader_module = if self.texture.is_some() {
127
+
st.device()
128
+
.create_shader_module(include_wgsl!("shader-3d-texture.wgsl"))
129
+
} else {
130
+
st.device()
131
+
.create_shader_module(include_wgsl!("shader-3d.wgsl"))
132
+
};
133
+
134
+
// Optional projected texture
135
+
let projected_texture_bind_group = self.texture.as_ref().map(|texture| {
136
+
st.device().create_bind_group(&wgpu::BindGroupDescriptor {
137
+
layout: &projected_texture_bind_group_layout,
138
+
entries: &[
139
+
wgpu::BindGroupEntry {
140
+
binding: 0,
141
+
resource: wgpu::BindingResource::TextureView(&texture.view),
142
+
},
143
+
wgpu::BindGroupEntry {
144
+
binding: 1,
145
+
resource: wgpu::BindingResource::Sampler(&texture.sampler),
146
+
},
147
+
],
148
+
label: Some("diffuse_bind_group"),
149
+
})
150
+
});
151
+
152
+
let render_pipeline_layout =
153
+
st.device()
154
+
.create_pipeline_layout(&wgpu::PipelineLayoutDescriptor {
155
+
label: Some("Render Pipeline Layout"),
156
+
bind_group_layouts: &bind_group_layouts,
157
+
push_constant_ranges: &[],
158
+
});
159
+
let render_pipeline = st
160
+
.device()
161
+
.create_render_pipeline(&wgpu::RenderPipelineDescriptor {
162
+
label: Some("Render Pipeline"),
163
+
layout: Some(&render_pipeline_layout),
164
+
vertex: wgpu::VertexState {
165
+
module: &shader_module,
166
+
entry_point: Some("vs_main"),
167
+
buffers: &[Vertex::desc()],
168
+
compilation_options: PipelineCompilationOptions::default(),
169
+
},
170
+
fragment: Some(wgpu::FragmentState {
171
+
module: &shader_module,
172
+
entry_point: Some("fs_main"),
173
+
targets: &[Some(wgpu::ColorTargetState {
174
+
format: st.surface_fmt().add_srgb_suffix(),
175
+
blend: Some(BlendState::ALPHA_BLENDING),
176
+
write_mask: wgpu::ColorWrites::ALL,
177
+
})],
178
+
compilation_options: PipelineCompilationOptions::default(),
179
+
}),
180
+
primitive: wgpu::PrimitiveState {
181
+
topology: wgpu::PrimitiveTopology::TriangleList,
182
+
strip_index_format: None,
183
+
front_face: wgpu::FrontFace::Ccw,
184
+
cull_mode: None, // TODO toggle
185
+
// Setting this to anything other than Fill requires Features::NON_FILL_POLYGON_MODE
186
+
polygon_mode: wgpu::PolygonMode::Fill,
187
+
// Requires Features::DEPTH_CLIP_CONTROL
188
+
unclipped_depth: false,
189
+
// Requires Features::CONSERVATIVE_RASTERIZATION
190
+
conservative: false,
191
+
},
192
+
depth_stencil: Some(wgpu::DepthStencilState {
193
+
format: texture::TextureBundle::DEPTH_FORMAT,
194
+
depth_write_enabled: true,
195
+
depth_compare: wgpu::CompareFunction::Less, // 1.
196
+
stencil: wgpu::StencilState::default(), // 2.
197
+
bias: wgpu::DepthBiasState::default(),
198
+
}),
199
+
multisample: wgpu::MultisampleState {
200
+
count: 1,
201
+
mask: !0,
202
+
alpha_to_coverage_enabled: false,
203
+
},
204
+
// If the pipeline will be used with a multiview render pass, this
205
+
// indicates how many array layers the attachments will have.
206
+
multiview: None,
207
+
cache: None,
208
+
});
209
+
210
+
// Scoped lifetime to drop the render pass
211
+
{
212
+
let render_pass_desc = wgpu::RenderPassDescriptor {
213
+
label: Some("Render Pass"),
214
+
color_attachments: &[Some(wgpu::RenderPassColorAttachment {
215
+
view: texture_view,
216
+
resolve_target: None,
217
+
ops: wgpu::Operations {
218
+
load: wgpu::LoadOp::Load,
219
+
store: wgpu::StoreOp::Store,
220
+
},
221
+
})],
222
+
depth_stencil_attachment: Some(wgpu::RenderPassDepthStencilAttachment {
223
+
view: &st.depth_texture().view,
224
+
depth_ops: Some(wgpu::Operations {
225
+
load: wgpu::LoadOp::Load,
226
+
store: wgpu::StoreOp::Store,
227
+
}),
228
+
stencil_ops: None,
229
+
}),
230
+
occlusion_query_set: None,
231
+
timestamp_writes: None,
232
+
};
233
+
let mut render_pass = encoder.begin_render_pass(&render_pass_desc);
234
+
235
+
render_pass.set_pipeline(&render_pipeline);
236
+
render_pass.set_bind_group(0, st.camera_bg(), &[]);
237
+
render_pass.set_bind_group(1, &char_shape_bind_group, &[]);
238
+
render_pass.set_bind_group(2, &projected_texture_bind_group, &[]);
239
+
render_pass.set_vertex_buffer(0, vertex_buffer.slice(..));
240
+
render_pass.set_index_buffer(index_buffer.slice(..), wgpu::IndexFormat::Uint32);
241
+
242
+
render_pass.draw_indexed(0..self.indices.len().try_into().unwrap(), 0, 0..1);
243
+
}
244
+
}
245
+
}
+60
vfl/src/draw/shader-3d-texture.wgsl
+60
vfl/src/draw/shader-3d-texture.wgsl
···
1
+
struct CameraUniform {
2
+
view_proj: mat4x4<f32>,
3
+
};
4
+
@group(0) @binding(0)
5
+
var<uniform> camera: CameraUniform;
6
+
7
+
struct CharShapeUniform {
8
+
color: vec4<f32>
9
+
}
10
+
@group(1) @binding(0)
11
+
var<uniform> char_shape: CharShapeUniform;
12
+
13
+
@group(2) @binding(0)
14
+
var t_diffuse: texture_2d<f32>;
15
+
@group(2) @binding(1)
16
+
var s_diffuse: sampler;
17
+
18
+
struct VertexInput {
19
+
@location(0) position: vec3<f32>,
20
+
@location(1) tex_coords: vec2<f32>,
21
+
@location(2) normal: vec3<f32>,
22
+
}
23
+
24
+
struct VertexOutput {
25
+
@builtin(position) clip_position: vec4<f32>,
26
+
@location(0) tex_coords: vec2<f32>,
27
+
@location(1) world_normal: vec3<f32>,
28
+
@location(2) world_position: vec3<f32>,
29
+
}
30
+
31
+
@vertex
32
+
fn vs_main(
33
+
model: VertexInput,
34
+
// instance: InstanceInput,
35
+
) -> VertexOutput {
36
+
var out: VertexOutput;
37
+
out.tex_coords = model.tex_coords;
38
+
out.world_normal = model.normal;
39
+
var world_position: vec4<f32> = vec4<f32>(model.position, 1.0);
40
+
out.world_position = world_position.xyz;
41
+
out.clip_position = camera.view_proj * world_position;
42
+
return out;
43
+
}
44
+
45
+
@fragment
46
+
fn fs_main(in: VertexOutput) -> @location(0) vec4<f32> {
47
+
48
+
// Sampler AddressMode::MirrorRepeat + Move down one tex = Free Y-flip!
49
+
let sample_position = in.tex_coords;
50
+
let tex_color = textureSample(t_diffuse, s_diffuse, sample_position);
51
+
52
+
// if tex_color.a == 0.0 {
53
+
// discard;
54
+
// }
55
+
56
+
// return tex_color;
57
+
58
+
return mix(char_shape.color, tex_color, tex_color.a);
59
+
60
+
}
+71
vfl/src/draw/shader-3d.wgsl
+71
vfl/src/draw/shader-3d.wgsl
···
1
+
struct CameraUniform {
2
+
view_proj: mat4x4<f32>,
3
+
};
4
+
@group(0) @binding(0)
5
+
var<uniform> camera: CameraUniform;
6
+
7
+
struct CharShapeUniform {
8
+
color: vec4<f32>,
9
+
position: vec3<f32>
10
+
}
11
+
@group(1) @binding(0)
12
+
var<uniform> char_shape: CharShapeUniform;
13
+
14
+
struct VertexInput {
15
+
@location(0) position: vec3<f32>,
16
+
@location(1) tex_coords: vec2<f32>,
17
+
@location(2) normal: vec3<f32>,
18
+
}
19
+
20
+
struct VertexOutput {
21
+
@builtin(position) clip_position: vec4<f32>,
22
+
@location(0) tex_coords: vec2<f32>,
23
+
@location(1) world_normal: vec3<f32>,
24
+
@location(2) world_position: vec3<f32>,
25
+
}
26
+
27
+
@vertex
28
+
fn vs_main(
29
+
model: VertexInput,
30
+
// instance: InstanceInput,
31
+
) -> VertexOutput {
32
+
var out: VertexOutput;
33
+
out.tex_coords = model.tex_coords;
34
+
out.world_normal = model.normal;
35
+
var world_position: vec4<f32> = vec4<f32>(model.position + char_shape.position, 1.0);
36
+
out.world_position = world_position.xyz;
37
+
out.clip_position = camera.view_proj * world_position;
38
+
return out;
39
+
}
40
+
41
+
// Fragment shader
42
+
43
+
@fragment
44
+
fn fs_main(in: VertexOutput) -> @location(0) vec4<f32> {
45
+
46
+
let color = char_shape.color;
47
+
48
+
if color.a == 0.0 {
49
+
discard;
50
+
}
51
+
return color;
52
+
// let object_color: vec4<f32> = textureSample(t_diffuse, s_diffuse, in.tex_coords);
53
+
54
+
// // We don't need (or want) much ambient light, so 0.1 is fine
55
+
// let ambient_strength = 0.1;
56
+
// let ambient_color = light.color * ambient_strength;
57
+
58
+
// let light_dir = normalize(light.position - in.world_position);
59
+
// let view_dir = normalize(camera.view_pos.xyz - in.world_position);
60
+
// let half_dir = normalize(view_dir + light_dir);
61
+
62
+
// let diffuse_strength = max(dot(in.world_normal, light_dir), 0.0);
63
+
// let diffuse_color = light.color * diffuse_strength;
64
+
65
+
// let specular_strength = pow(max(dot(in.world_normal, half_dir), 0.0), 32.0);
66
+
// let specular_color = specular_strength * light.color;
67
+
68
+
// let result = (ambient_color + diffuse_color + specular_color) * object_color.xyz;
69
+
70
+
// return vec4<f32>(result, object_color.a);
71
+
}
+109
vfl/src/draw/shader.wgsl
+109
vfl/src/draw/shader.wgsl
···
1
+
struct TransformUniform {
2
+
mtx: mat4x4<f32>,
3
+
color_r: vec4<f32>,
4
+
color_g: vec4<f32>,
5
+
color_b: vec4<f32>,
6
+
modulation_mode: u32,
7
+
};
8
+
9
+
@group(1) @binding(0) // 1.
10
+
var<uniform> mvp: TransformUniform;
11
+
12
+
13
+
struct VertexOutput {
14
+
@builtin(position) clip_position: vec4<f32>,
15
+
@location(0) tex_coords: vec2<f32>,
16
+
@location(1) thirdthing: vec4<f32>,
17
+
}
18
+
19
+
@vertex
20
+
fn vs_main(
21
+
@location(0) position: vec3<f32>,
22
+
@location(1) tex_coords: vec2<f32>
23
+
) -> VertexOutput {
24
+
var out: VertexOutput;
25
+
out.tex_coords = tex_coords;
26
+
// if mvp.modulation_mode == 1 {
27
+
// // Ignore matrix with direct texture output.
28
+
// out.clip_position = vec4<f32>(position, 1.0);
29
+
// } else {
30
+
out.clip_position = mvp.mtx * vec4<f32>(position, 1.0);
31
+
// }
32
+
return out;
33
+
}
34
+
35
+
@group(0) @binding(0)
36
+
var t_diffuse: texture_2d<f32>;
37
+
@group(0) @binding(1)
38
+
var s_diffuse: sampler;
39
+
40
+
@fragment
41
+
fn fs_main(in: VertexOutput) -> @location(0) vec4<f32> {
42
+
let color: vec4<f32> = textureSample(t_diffuse, s_diffuse, in.tex_coords);
43
+
44
+
// if color.a == 0.0 {
45
+
// discard;
46
+
// }
47
+
48
+
// enum vfl::color::nx::ModulationMode {
49
+
// SingleColor = 0,
50
+
// DirectTexture = 1,
51
+
// LayeredRgbTexture = 2,
52
+
// AlphaTexture = 3,
53
+
// LuminanceAlphaTexture = 4,
54
+
// }
55
+
if mvp.modulation_mode == 0 {
56
+
return modulate_single_color(color);
57
+
}
58
+
return color;
59
+
60
+
// if mvp.modulation_mode == 0 {
61
+
// return modulate_single_color(color);
62
+
// } else if mvp.modulation_mode == 1 {
63
+
// return modulate_direct_texture(color);
64
+
// } else if mvp.modulation_mode == 2 {
65
+
// return modulate_rgba(color);
66
+
// } else if mvp.modulation_mode == 3 {
67
+
// return modulate_alpha(color);
68
+
// } else if mvp.modulation_mode == 4 {
69
+
// return modulate_lum_alpha(color);
70
+
// } else {
71
+
// // OOB access, return RebeccaPurple
72
+
// return vec4f(0.4, 0.2, 0.6, 1.0);
73
+
// }
74
+
}
75
+
76
+
// Two trivial cases
77
+
fn modulate_single_color(color: vec4f) -> vec4f {
78
+
return mvp.color_r;
79
+
}
80
+
81
+
fn modulate_direct_texture(color: vec4f) -> vec4f {
82
+
return color;
83
+
}
84
+
85
+
// Texture passes us alpha information, we fill in the rest of the color.
86
+
// [a,0,0,0] -> [r,g,b,a]
87
+
fn modulate_alpha(color: vec4f) -> vec4f {
88
+
let repl = mvp.color_r;
89
+
90
+
return vec4(repl.rgb, repl.a * color.r);
91
+
}
92
+
93
+
// Texture passes luminance + alpha, we colorize it.
94
+
// [l,a,0,0] -> [r,g,b,a]
95
+
fn modulate_lum_alpha(color: vec4f) -> vec4f {
96
+
let repl_lum = mvp.color_r;
97
+
98
+
return vec4(color.g * repl_lum.rgb, repl_lum.a * color.r);
99
+
}
100
+
101
+
102
+
fn modulate_rgba(color: vec4f) -> vec4f {
103
+
let repl_r = mvp.color_r;
104
+
let repl_g = mvp.color_g;
105
+
let repl_b = mvp.color_b;
106
+
107
+
return vec4f(color.r * repl_r.rgb + color.g * repl_g.rgb + color.b * repl_b.rgb, color.a * repl_r.a);
108
+
109
+
}
+871
vfl/src/draw/wgpu_render.rs
+871
vfl/src/draw/wgpu_render.rs
···
1
+
use super::TEX_SCALE_X;
2
+
use super::TEX_SCALE_Y;
3
+
use super::mask::{FacePart, ImageOrigin, MaskFaceParts};
4
+
use super::render_2d::Rendered2dShape;
5
+
use super::render_3d::ProgramState;
6
+
use super::render_3d::Rendered3dShape;
7
+
use crate::{
8
+
charinfo::nx::NxCharInfo,
9
+
color::{
10
+
cafe::{
11
+
EYE_COLOR_B, EYE_COLOR_G, EYE_COLOR_R, GLASS_COLOR_R, HAIR_COLOR, MOUTH_COLOR_B,
12
+
MOUTH_COLOR_G, MOUTH_COLOR_R,
13
+
},
14
+
nx::{ColorModulated, modulate},
15
+
},
16
+
res::shape::nx::ResourceShape,
17
+
res::tex::nx::{ResourceTexture, ResourceTextureFormat, TextureElement},
18
+
};
19
+
use binrw::BinRead;
20
+
use camera::Camera;
21
+
use camera::CameraUniform;
22
+
use glam::Vec3;
23
+
use glam::{UVec2, uvec2, vec3};
24
+
use image::{DynamicImage, RgbaImage};
25
+
use nalgebra::Matrix4;
26
+
use std::f32::consts::FRAC_PI_2;
27
+
use std::f32::consts::PI;
28
+
use std::{error::Error, fs::File, io::BufReader};
29
+
use wgpu::CommandEncoder;
30
+
use wgpu::{DeviceDescriptor, TexelCopyTextureInfo, util::DeviceExt};
31
+
32
+
pub const FACE_OUTPUT_SIZE: u16 = 512;
33
+
pub const SHADER: &str = include_str!("./shader.wgsl");
34
+
pub use bytemuck::cast_slice;
35
+
36
+
#[repr(C)]
37
+
#[derive(Copy, Clone, Debug, bytemuck::Pod, bytemuck::Zeroable)]
38
+
pub struct Vertex {
39
+
pub position: [f32; 3],
40
+
pub tex_coords: [f32; 2],
41
+
pub normal: [f32; 3],
42
+
}
43
+
44
+
impl Vertex {
45
+
const ATTRIBS: [wgpu::VertexAttribute; 3] =
46
+
wgpu::vertex_attr_array![0 => Float32x3, 1 => Float32x2, 2 => Float32x3];
47
+
48
+
pub fn desc() -> wgpu::VertexBufferLayout<'static> {
49
+
use std::mem;
50
+
wgpu::VertexBufferLayout {
51
+
array_stride: mem::size_of::<Vertex>() as wgpu::BufferAddress,
52
+
step_mode: wgpu::VertexStepMode::Vertex,
53
+
attributes: &Self::ATTRIBS,
54
+
}
55
+
}
56
+
}
57
+
58
+
#[repr(C)]
59
+
#[derive(Debug, Copy, Clone, bytemuck::Pod, bytemuck::Zeroable)]
60
+
pub struct TextureTransformUniform {
61
+
pub mvp_matrix: [[f32; 4]; 4],
62
+
pub channel_replacements_r: [f32; 4],
63
+
pub channel_replacements_g: [f32; 4],
64
+
pub channel_replacements_b: [f32; 4],
65
+
pub texture_type: u32,
66
+
pub pad: [u32; 3],
67
+
}
68
+
69
+
const NON_REPLACEMENT: [f32; 4] = [f32::NAN, f32::NAN, f32::NAN, f32::NAN];
70
+
// #[derive(Debug)]
71
+
// #[deprecated]
72
+
// pub struct RenderShape {
73
+
// pub vertices: Vec<Vertex>,
74
+
// pub indices: Vec<u32>,
75
+
// pub tex: DynamicImage,
76
+
// pub mvp_matrix: Matrix4<f32>,
77
+
// pub texture_type: ResourceTextureFormat,
78
+
// pub channel_replacements: [[f32; 4]; 3],
79
+
// }
80
+
81
+
pub struct RenderContext {
82
+
pub size: UVec2,
83
+
pub shape: Vec<Rendered2dShape>,
84
+
}
85
+
impl RenderContext {
86
+
pub fn from_shapes(shape: Vec<Rendered2dShape>) -> RenderContext {
87
+
RenderContext {
88
+
size: uvec2(FACE_OUTPUT_SIZE.into(), FACE_OUTPUT_SIZE.into()),
89
+
shape,
90
+
}
91
+
}
92
+
}
93
+
94
+
impl RenderContext {
95
+
#[allow(clippy::too_many_lines)]
96
+
pub fn new(
97
+
char: &NxCharInfo,
98
+
res_texture: &ResourceTexture,
99
+
res_shape: &ResourceShape,
100
+
file_texture: &Vec<u8>,
101
+
) -> Result<Self, Box<dyn Error>> {
102
+
let mask = MaskFaceParts::init(char, 256.0);
103
+
104
+
let mut make_shape =
105
+
|part: FacePart, modulated: ColorModulated, tex_data: TextureElement| {
106
+
let (vertices, indices, mtx) = quad(
107
+
part.x,
108
+
part.y,
109
+
part.width,
110
+
part.height,
111
+
part.angle_deg,
112
+
part.origin,
113
+
256.0,
114
+
);
115
+
116
+
let tex = tex_data
117
+
.get_uncompressed_bytes(file_texture)
118
+
.unwrap()
119
+
.unwrap();
120
+
121
+
Rendered2dShape {
122
+
vertices,
123
+
indices,
124
+
tex,
125
+
mvp_matrix: mtx,
126
+
modulation: modulate(modulated, char),
127
+
opaque: None,
128
+
}
129
+
};
130
+
131
+
let left_eye = make_shape(
132
+
mask.eye[0],
133
+
ColorModulated::Eye,
134
+
res_texture.eye[char.eye_type as usize],
135
+
);
136
+
let right_eye = make_shape(
137
+
mask.eye[1],
138
+
ColorModulated::Eye,
139
+
res_texture.eye[char.eye_type as usize],
140
+
);
141
+
142
+
let left_brow = make_shape(
143
+
mask.eyebrow[0],
144
+
ColorModulated::Eyebrow,
145
+
res_texture.eyebrow[char.eyebrow_type as usize],
146
+
);
147
+
let right_brow = make_shape(
148
+
mask.eyebrow[1],
149
+
ColorModulated::Eyebrow,
150
+
res_texture.eyebrow[char.eyebrow_type as usize],
151
+
);
152
+
153
+
let mouth = make_shape(
154
+
mask.mouth,
155
+
ColorModulated::Mouth,
156
+
res_texture.mouth[char.mouth_type as usize],
157
+
);
158
+
159
+
Ok(RenderContext {
160
+
size: uvec2(FACE_OUTPUT_SIZE.into(), FACE_OUTPUT_SIZE.into()),
161
+
shape: vec![left_eye, right_eye, left_brow, right_brow, mouth],
162
+
})
163
+
}
164
+
165
+
#[allow(clippy::too_many_lines)]
166
+
pub fn new_faceline(
167
+
char: &NxCharInfo,
168
+
res_texture: &ResourceTexture,
169
+
res_shape: &ResourceShape,
170
+
file_texture: &Vec<u8>,
171
+
) -> Result<Self, Box<dyn Error>> {
172
+
let mask = MaskFaceParts::init(char, 256.0);
173
+
let makeup = char.faceline_make;
174
+
175
+
let mut make_shape =
176
+
|part: FacePart, modulated: ColorModulated, tex_data: TextureElement| {
177
+
let (vertices, indices, mtx) = quad(
178
+
part.x,
179
+
part.y,
180
+
part.width,
181
+
part.height,
182
+
part.angle_deg,
183
+
part.origin,
184
+
256.0,
185
+
);
186
+
187
+
let tex = tex_data
188
+
.get_uncompressed_bytes(file_texture)
189
+
.unwrap()
190
+
.unwrap();
191
+
192
+
Rendered2dShape {
193
+
vertices,
194
+
indices,
195
+
tex,
196
+
mvp_matrix: mtx,
197
+
modulation: modulate(modulated, char),
198
+
opaque: None,
199
+
}
200
+
};
201
+
202
+
let mouth = make_shape(
203
+
mask.mouth,
204
+
ColorModulated::Mouth,
205
+
res_texture.mouth[char.mouth_type as usize],
206
+
);
207
+
208
+
Ok(RenderContext {
209
+
size: uvec2(FACE_OUTPUT_SIZE.into(), FACE_OUTPUT_SIZE.into()),
210
+
shape: vec![mouth],
211
+
})
212
+
}
213
+
214
+
pub fn new_glasses(
215
+
char: &NxCharInfo,
216
+
res_texture: &ResourceTexture,
217
+
res_shape: &ResourceShape,
218
+
file_texture: &Vec<u8>,
219
+
) -> Result<Self, Box<dyn Error>> {
220
+
let nose_translate =
221
+
res_shape.face_line_transform[char.faceline_type as usize].nose_translate;
222
+
223
+
let glasses = dbg!(MaskFaceParts::init_glasses(char, 256.0, nose_translate));
224
+
225
+
// let mask = FaceParts::init(&char, 256.0);
226
+
// let part = mask[0];
227
+
let tex_data = res_texture.glass[char.glass_type as usize];
228
+
let mut glass_l = glasses[0];
229
+
230
+
let (vertices, indices, mtx) = quad(
231
+
glass_l.x,
232
+
glass_l.y,
233
+
glass_l.width,
234
+
glass_l.height,
235
+
glass_l.angle_deg,
236
+
glass_l.origin,
237
+
256.0,
238
+
);
239
+
240
+
let tex = tex_data.get_uncompressed_bytes(file_texture)?.unwrap();
241
+
242
+
let glass_l_render_shape = Rendered2dShape {
243
+
vertices,
244
+
indices,
245
+
tex: tex.clone(),
246
+
mvp_matrix: mtx,
247
+
modulation: modulate(ColorModulated::Glass, &char),
248
+
opaque: None,
249
+
};
250
+
251
+
let glass_r = glasses[1];
252
+
253
+
let (vertices, indices, mtx) = quad(
254
+
glass_r.x,
255
+
glass_r.y,
256
+
glass_r.width,
257
+
glass_r.height,
258
+
glass_r.angle_deg,
259
+
glass_r.origin,
260
+
256.0,
261
+
);
262
+
263
+
let glass_r_render_shape = Rendered2dShape {
264
+
vertices,
265
+
indices,
266
+
tex,
267
+
mvp_matrix: mtx,
268
+
modulation: modulate(ColorModulated::Glass, &char),
269
+
opaque: None,
270
+
};
271
+
272
+
Ok(RenderContext {
273
+
size: uvec2(512, 256),
274
+
shape: vec![glass_l_render_shape, glass_r_render_shape],
275
+
})
276
+
}
277
+
}
278
+
279
+
pub fn model_view_matrix(
280
+
translation: mint::Vector3<f32>,
281
+
scale: mint::Vector3<f32>,
282
+
rot_z: f32,
283
+
) -> nalgebra::Matrix4<f32> {
284
+
let mut scale = nalgebra::Vector3::<f32>::from(scale);
285
+
let translation = nalgebra::Vector3::<f32>::from(translation);
286
+
287
+
let mut mtx = nalgebra::Matrix4::identity();
288
+
mtx.append_nonuniform_scaling_mut(&scale);
289
+
mtx *= nalgebra::Rotation3::from_euler_angles(0.0, 0.0, rot_z.to_radians()).to_homogeneous();
290
+
mtx.append_nonuniform_scaling_mut(&nalgebra::Vector3::new(TEX_SCALE_X, TEX_SCALE_Y, 1.0));
291
+
mtx.append_translation_mut(&translation);
292
+
293
+
mtx
294
+
}
295
+
296
+
fn v2(x: f32, y: f32) -> [f32; 3] {
297
+
[x, y, 0.0]
298
+
}
299
+
300
+
// https://github.com/SMGCommunity/Petari/blob/6e9ae741a99bb32e6ffbb230a88c976f539dde70/src/RVLFaceLib/RFL_MakeTex.c#L817
301
+
pub fn quad(
302
+
x: f32,
303
+
y: f32,
304
+
width: f32,
305
+
height: f32,
306
+
rot_z: f32,
307
+
origin: ImageOrigin,
308
+
resolution: f32,
309
+
) -> (Vec<Vertex>, Vec<u32>, nalgebra::Matrix4<f32>) {
310
+
// Mtx rot;
311
+
// Mtx pos;
312
+
// f32 baseX;
313
+
// s16 s0;
314
+
// s16 s1;
315
+
let base_x: f32;
316
+
let s0: f32;
317
+
let s1: f32;
318
+
319
+
let mv_mtx = model_view_matrix(
320
+
vec3(x, resolution - y, 0.0).into(),
321
+
vec3(width, height, 1.0).into(),
322
+
rot_z,
323
+
);
324
+
325
+
let p_mtx = Matrix4::new_orthographic(0.0, resolution, 0.0, resolution, -200.0, 200.0);
326
+
let mut mvp_mtx = p_mtx * mv_mtx;
327
+
328
+
*mvp_mtx.get_mut((1, 1)).unwrap() *= -1.0;
329
+
330
+
match origin {
331
+
ImageOrigin::Center => {
332
+
base_x = -0.5;
333
+
s0 = 1.0;
334
+
s1 = 0.0;
335
+
}
336
+
ImageOrigin::Right => {
337
+
base_x = -1.0;
338
+
s0 = 1.0;
339
+
s1 = 0.0;
340
+
}
341
+
ImageOrigin::Left => {
342
+
base_x = 0.0;
343
+
s0 = 0.0;
344
+
s1 = 1.0;
345
+
}
346
+
ImageOrigin::Ignore => {
347
+
base_x = 0.0;
348
+
s0 = 0.0;
349
+
s1 = 1.0;
350
+
}
351
+
}
352
+
353
+
(
354
+
vec![
355
+
Vertex {
356
+
position: v2(1.0 + base_x, -0.5),
357
+
tex_coords: [s0, 0.0],
358
+
normal: [0.0, 0.0, 0.0],
359
+
},
360
+
Vertex {
361
+
position: v2(1.0 + base_x, 0.5),
362
+
tex_coords: [s0, 1.0],
363
+
normal: [0.0, 0.0, 0.0],
364
+
},
365
+
Vertex {
366
+
position: v2(base_x, 0.5),
367
+
tex_coords: [s1, 1.0],
368
+
normal: [0.0, 0.0, 0.0],
369
+
},
370
+
Vertex {
371
+
position: v2(base_x, -0.5),
372
+
tex_coords: [s1, 0.0],
373
+
normal: [0.0, 0.0, 0.0],
374
+
},
375
+
],
376
+
vec![0, 1, 2, 0, 2, 3],
377
+
mvp_mtx,
378
+
)
379
+
}
380
+
381
+
pub struct HeadlessRenderer {
382
+
device: wgpu::Device,
383
+
queue: wgpu::Queue,
384
+
camera_bgl: wgpu::BindGroupLayout,
385
+
camera_bg: wgpu::BindGroup,
386
+
surface_fmt: wgpu::TextureFormat,
387
+
depth_texture: texture::TextureBundle,
388
+
}
389
+
390
+
impl ProgramState for HeadlessRenderer {
391
+
fn device(&self) -> wgpu::Device {
392
+
self.device.clone()
393
+
}
394
+
395
+
fn queue(&self) -> wgpu::Queue {
396
+
self.queue.clone()
397
+
}
398
+
399
+
fn camera_bgl(&self) -> &wgpu::BindGroupLayout {
400
+
&self.camera_bgl
401
+
}
402
+
403
+
fn camera_bg(&self) -> &wgpu::BindGroup {
404
+
&self.camera_bg
405
+
}
406
+
407
+
fn surface_fmt(&self) -> wgpu::TextureFormat {
408
+
self.surface_fmt
409
+
}
410
+
411
+
fn depth_texture(&self) -> &texture::TextureBundle {
412
+
&self.depth_texture
413
+
}
414
+
}
415
+
416
+
impl Default for HeadlessRenderer {
417
+
fn default() -> HeadlessRenderer {
418
+
HeadlessRenderer::new()
419
+
}
420
+
}
421
+
impl HeadlessRenderer {
422
+
pub fn new() -> HeadlessRenderer {
423
+
pollster::block_on(HeadlessRenderer::async_new())
424
+
}
425
+
async fn async_new() -> HeadlessRenderer {
426
+
const SIZE: UVec2 = uvec2(512, 512);
427
+
let instance = wgpu::Instance::new(&wgpu::InstanceDescriptor {
428
+
backends: wgpu::Backends::all(),
429
+
..Default::default()
430
+
});
431
+
let adapter = instance
432
+
.request_adapter(&wgpu::RequestAdapterOptions {
433
+
power_preference: wgpu::PowerPreference::default(),
434
+
compatible_surface: None,
435
+
force_fallback_adapter: false,
436
+
})
437
+
.await
438
+
.unwrap();
439
+
let (device, queue) = adapter
440
+
.request_device(&DeviceDescriptor::default())
441
+
.await
442
+
.unwrap();
443
+
444
+
// let surface = instance.create_surface(window.clone()).unwrap();
445
+
// let cap = surface.get_capabilities(&adapter);
446
+
// let surface_fmt = cap.formats[0];
447
+
let surface_fmt = wgpu::TextureFormat::Bgra8Unorm;
448
+
449
+
let depth_texture =
450
+
texture::TextureBundle::create_depth_texture(&device, &SIZE, "depth_texture");
451
+
452
+
let camera = Camera {
453
+
eye: (0.0, 25.0, 100.0).into(),
454
+
target: (0.0, 25.0, 0.0).into(),
455
+
up: Vec3::Y,
456
+
aspect: SIZE.x as f32 / SIZE.y as f32,
457
+
fov_y_radians: FRAC_PI_2,
458
+
znear: 0.1,
459
+
zfar: 10000.0,
460
+
};
461
+
462
+
let mut camera_uniform = CameraUniform::new();
463
+
camera_uniform.update_view_proj(&camera);
464
+
465
+
let camera_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor {
466
+
label: Some("Camera Buffer"),
467
+
contents: bytemuck::cast_slice(&[camera_uniform]),
468
+
usage: wgpu::BufferUsages::UNIFORM | wgpu::BufferUsages::COPY_DST,
469
+
});
470
+
471
+
let camera_bgl = device.create_bind_group_layout(&wgpu::BindGroupLayoutDescriptor {
472
+
entries: &[wgpu::BindGroupLayoutEntry {
473
+
binding: 0,
474
+
visibility: wgpu::ShaderStages::VERTEX,
475
+
ty: wgpu::BindingType::Buffer {
476
+
ty: wgpu::BufferBindingType::Uniform,
477
+
has_dynamic_offset: false,
478
+
min_binding_size: None,
479
+
},
480
+
count: None,
481
+
}],
482
+
label: Some("camera_bind_group_layout"),
483
+
});
484
+
485
+
let camera_bg = device.create_bind_group(&wgpu::BindGroupDescriptor {
486
+
layout: &camera_bgl,
487
+
entries: &[wgpu::BindGroupEntry {
488
+
binding: 0,
489
+
resource: camera_buffer.as_entire_binding(),
490
+
}],
491
+
label: Some("camera_bind_group"),
492
+
});
493
+
494
+
HeadlessRenderer {
495
+
device,
496
+
queue,
497
+
camera_bgl,
498
+
camera_bg,
499
+
surface_fmt,
500
+
depth_texture,
501
+
}
502
+
}
503
+
504
+
pub fn output_texture(
505
+
&mut self,
506
+
texture: &texture::TextureBundle,
507
+
mut encoder: CommandEncoder,
508
+
) -> DynamicImage {
509
+
pollster::block_on(async {
510
+
let u32_size = std::mem::size_of::<u32>() as u32;
511
+
let output_buffer_size = wgpu::BufferAddress::from(
512
+
u32_size * texture.texture.size().width * texture.texture.size().height,
513
+
);
514
+
let output_buffer_desc = wgpu::BufferDescriptor {
515
+
size: output_buffer_size,
516
+
usage: wgpu::BufferUsages::COPY_DST
517
+
// this tells wpgu that we want to read this buffer from the cpu
518
+
| wgpu::BufferUsages::MAP_READ,
519
+
label: None,
520
+
mapped_at_creation: false,
521
+
};
522
+
let output_buffer = self.device.create_buffer(&output_buffer_desc);
523
+
524
+
encoder.copy_texture_to_buffer(
525
+
wgpu::TexelCopyTextureInfo {
526
+
aspect: wgpu::TextureAspect::All,
527
+
texture: &texture.texture,
528
+
mip_level: 0,
529
+
origin: wgpu::Origin3d::ZERO,
530
+
},
531
+
wgpu::TexelCopyBufferInfo {
532
+
buffer: &output_buffer,
533
+
layout: wgpu::TexelCopyBufferLayout {
534
+
offset: 0,
535
+
bytes_per_row: Some(u32_size * texture.texture.size().width),
536
+
rows_per_image: Some(texture.texture.size().height),
537
+
},
538
+
},
539
+
texture.texture.size(),
540
+
);
541
+
542
+
self.queue.submit(Some(encoder.finish()));
543
+
544
+
let mut image = None;
545
+
// We need to scope the mapping variables so that we can
546
+
// unmap the buffer
547
+
{
548
+
let buffer_slice = output_buffer.slice(..);
549
+
550
+
// NOTE: We have to create the mapping THEN device.poll() before await
551
+
// the future. Otherwise the application will freeze.
552
+
let (tx, rx) = futures_intrusive::channel::shared::oneshot_channel();
553
+
buffer_slice.map_async(wgpu::MapMode::Read, move |result| {
554
+
tx.send(result).unwrap();
555
+
});
556
+
self.device.poll(wgpu::PollType::Wait).unwrap();
557
+
rx.receive().await.unwrap().unwrap();
558
+
559
+
let data = &buffer_slice.get_mapped_range()[..];
560
+
561
+
use image::{ImageBuffer, Rgba};
562
+
let buffer: RgbaImage = ImageBuffer::<Rgba<u8>, _>::from_raw(
563
+
texture.texture.size().width,
564
+
texture.texture.size().height,
565
+
data.to_owned(),
566
+
)
567
+
.unwrap();
568
+
image = Some(DynamicImage::ImageRgba8(buffer));
569
+
}
570
+
output_buffer.unmap();
571
+
572
+
image.unwrap()
573
+
})
574
+
}
575
+
}
576
+
577
+
pub mod texture {
578
+
use std::error::Error;
579
+
use std::fmt::Debug;
580
+
581
+
use glam::UVec2;
582
+
use image::GenericImageView;
583
+
use wgpu::TextureFormat;
584
+
585
+
pub struct TextureBundle {
586
+
#[allow(unused)]
587
+
pub texture: wgpu::Texture,
588
+
pub view: wgpu::TextureView,
589
+
pub sampler: wgpu::Sampler,
590
+
}
591
+
impl Debug for TextureBundle {
592
+
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
593
+
f.debug_struct("Texture").finish()
594
+
}
595
+
}
596
+
597
+
#[allow(unused)]
598
+
impl TextureBundle {
599
+
pub fn from_bytes(
600
+
device: &wgpu::Device,
601
+
queue: &wgpu::Queue,
602
+
bytes: &[u8],
603
+
label: &str,
604
+
) -> Result<Self, Box<dyn Error>> {
605
+
let img = image::load_from_memory(bytes)?;
606
+
Self::from_image(device, queue, &img, Some(label))
607
+
}
608
+
609
+
pub fn from_image(
610
+
device: &wgpu::Device,
611
+
queue: &wgpu::Queue,
612
+
img: &image::DynamicImage,
613
+
label: Option<&str>,
614
+
) -> Result<Self, Box<dyn Error>> {
615
+
let rgba = img.to_rgba8();
616
+
let dimensions = img.dimensions();
617
+
618
+
let size = wgpu::Extent3d {
619
+
width: dimensions.0,
620
+
height: dimensions.1,
621
+
depth_or_array_layers: 1,
622
+
};
623
+
let texture = device.create_texture(&wgpu::TextureDescriptor {
624
+
label,
625
+
size,
626
+
mip_level_count: 1,
627
+
sample_count: 1,
628
+
dimension: wgpu::TextureDimension::D2,
629
+
format: wgpu::TextureFormat::Rgba8UnormSrgb,
630
+
usage: wgpu::TextureUsages::TEXTURE_BINDING | wgpu::TextureUsages::COPY_DST,
631
+
view_formats: &[],
632
+
});
633
+
634
+
queue.write_texture(
635
+
wgpu::TexelCopyTextureInfo {
636
+
aspect: wgpu::TextureAspect::All,
637
+
texture: &texture,
638
+
mip_level: 0,
639
+
origin: wgpu::Origin3d::ZERO,
640
+
},
641
+
&rgba,
642
+
wgpu::TexelCopyBufferLayout {
643
+
offset: 0,
644
+
bytes_per_row: Some(4 * dimensions.0),
645
+
rows_per_image: Some(dimensions.1),
646
+
},
647
+
size,
648
+
);
649
+
650
+
let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
651
+
let sampler = device.create_sampler(&wgpu::SamplerDescriptor {
652
+
address_mode_u: wgpu::AddressMode::ClampToEdge,
653
+
address_mode_v: wgpu::AddressMode::ClampToEdge,
654
+
address_mode_w: wgpu::AddressMode::ClampToEdge,
655
+
mag_filter: wgpu::FilterMode::Linear,
656
+
min_filter: wgpu::FilterMode::Nearest,
657
+
mipmap_filter: wgpu::FilterMode::Nearest,
658
+
..Default::default()
659
+
});
660
+
661
+
Ok(Self {
662
+
texture,
663
+
view,
664
+
sampler,
665
+
})
666
+
}
667
+
668
+
pub const DEPTH_FORMAT: wgpu::TextureFormat = wgpu::TextureFormat::Depth32Float; // 1.
669
+
670
+
pub fn create_depth_texture(device: &wgpu::Device, size: &UVec2, label: &str) -> Self {
671
+
let size = wgpu::Extent3d {
672
+
// 2.
673
+
width: size.x.max(1),
674
+
height: size.y.max(1),
675
+
depth_or_array_layers: 1,
676
+
};
677
+
let desc = wgpu::TextureDescriptor {
678
+
label: Some(label),
679
+
size,
680
+
mip_level_count: 1,
681
+
sample_count: 1,
682
+
dimension: wgpu::TextureDimension::D2,
683
+
format: Self::DEPTH_FORMAT,
684
+
usage: wgpu::TextureUsages::RENDER_ATTACHMENT // 3.
685
+
| wgpu::TextureUsages::TEXTURE_BINDING,
686
+
view_formats: &[],
687
+
};
688
+
let texture = device.create_texture(&desc);
689
+
690
+
let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
691
+
let sampler = device.create_sampler(&wgpu::SamplerDescriptor {
692
+
// 4.
693
+
address_mode_u: wgpu::AddressMode::ClampToEdge,
694
+
address_mode_v: wgpu::AddressMode::ClampToEdge,
695
+
address_mode_w: wgpu::AddressMode::ClampToEdge,
696
+
mag_filter: wgpu::FilterMode::Linear,
697
+
min_filter: wgpu::FilterMode::Linear,
698
+
mipmap_filter: wgpu::FilterMode::Nearest,
699
+
compare: Some(wgpu::CompareFunction::LessEqual), // 5.
700
+
lod_min_clamp: 0.0,
701
+
lod_max_clamp: 100.0,
702
+
..Default::default()
703
+
});
704
+
705
+
Self {
706
+
texture,
707
+
view,
708
+
sampler,
709
+
}
710
+
}
711
+
712
+
pub fn create_texture(device: &wgpu::Device, size: &UVec2, label: &str) -> Self {
713
+
let size = wgpu::Extent3d {
714
+
// 2.
715
+
width: size.x.max(1),
716
+
height: size.y.max(1),
717
+
depth_or_array_layers: 1,
718
+
};
719
+
let desc = wgpu::TextureDescriptor {
720
+
label: Some(label),
721
+
size,
722
+
mip_level_count: 1,
723
+
sample_count: 1,
724
+
dimension: wgpu::TextureDimension::D2,
725
+
format: TextureFormat::Bgra8UnormSrgb,
726
+
usage: wgpu::TextureUsages::RENDER_ATTACHMENT // 3.
727
+
| wgpu::TextureUsages::TEXTURE_BINDING
728
+
| wgpu::TextureUsages::COPY_SRC,
729
+
view_formats: &[],
730
+
};
731
+
let texture = device.create_texture(&desc);
732
+
733
+
let view = texture.create_view(&wgpu::TextureViewDescriptor::default());
734
+
let sampler = device.create_sampler(&wgpu::SamplerDescriptor {
735
+
// 4.
736
+
address_mode_u: wgpu::AddressMode::MirrorRepeat,
737
+
address_mode_v: wgpu::AddressMode::MirrorRepeat,
738
+
address_mode_w: wgpu::AddressMode::MirrorRepeat,
739
+
mag_filter: wgpu::FilterMode::Linear,
740
+
min_filter: wgpu::FilterMode::Linear,
741
+
mipmap_filter: wgpu::FilterMode::Nearest,
742
+
lod_min_clamp: 0.0,
743
+
lod_max_clamp: 100.0,
744
+
..Default::default()
745
+
});
746
+
747
+
Self {
748
+
texture,
749
+
view,
750
+
sampler,
751
+
}
752
+
}
753
+
}
754
+
}
755
+
756
+
#[cfg(test)]
757
+
mod tests {
758
+
use crate::draw::mask::MaskFaceParts;
759
+
use crate::res::shape::nx::{ResourceShape, SHAPE_MID_DAT};
760
+
use crate::res::tex::nx::{ResourceTexture, TEXTURE_MID_SRGB_DAT};
761
+
use binrw::BinRead;
762
+
use glam::uvec2;
763
+
use image_compare::Algorithm;
764
+
765
+
use super::*;
766
+
use std::{error::Error, fs::File, io::BufReader};
767
+
768
+
type R = Result<(), Box<dyn Error>>;
769
+
770
+
// #[test]
771
+
// #[allow(clippy::too_many_lines)]
772
+
// fn test_render() -> R {
773
+
// let mut tex_file = BufReader::new(File::open(TEXTURE_MID_SRGB_DAT)?);
774
+
// let mut tex_shape = BufReader::new(File::open(SHAPE_MID_DAT)?);
775
+
776
+
// let mut char =
777
+
// File::open(concat!(env!("CARGO_MANIFEST_DIR"), "/../Jasmine.charinfo")).unwrap();
778
+
// let char = NxCharInfo::read(&mut char).unwrap();
779
+
780
+
// let image = pollster::block_on(render_context_wgpu(RenderContext::new(
781
+
// // &FaceParts::init(&char, 256.0),
782
+
// &char,
783
+
// (&mut tex_shape, &mut tex_file),
784
+
// )?));
785
+
// let image = image.flipv();
786
+
787
+
// image.save(concat!(
788
+
// env!("CARGO_MANIFEST_DIR"),
789
+
// "/test_output/mask-rendered.png"
790
+
// ))?;
791
+
792
+
// let reference_image = image::open(concat!(
793
+
// env!("CARGO_MANIFEST_DIR"),
794
+
// "/test_data/jasmine-mask.png"
795
+
// ))
796
+
// .unwrap();
797
+
798
+
// let similarity = image_compare::rgb_hybrid_compare(
799
+
// &image.clone().into_rgb8(),
800
+
// &reference_image.clone().into_rgb8(),
801
+
// )
802
+
// .expect("wrong size!");
803
+
804
+
// similarity
805
+
// .image
806
+
// .to_color_map()
807
+
// .save(concat!(
808
+
// env!("CARGO_MANIFEST_DIR"),
809
+
// "/test_output/mask-similarity.png"
810
+
// ))
811
+
// .unwrap();
812
+
813
+
// let similarity = image_compare::gray_similarity_structure(
814
+
// &Algorithm::MSSIMSimple,
815
+
// &image.into_luma8(),
816
+
// &reference_image.into_luma8(),
817
+
// )
818
+
// .expect("wrong size!");
819
+
820
+
// similarity
821
+
// .image
822
+
// .to_color_map()
823
+
// .save(concat!(
824
+
// env!("CARGO_MANIFEST_DIR"),
825
+
// "/test_output/mask-similarity-grey.png"
826
+
// ))
827
+
// .unwrap();
828
+
829
+
// Ok(())
830
+
// }
831
+
}
832
+
833
+
mod camera {
834
+
use glam::{Mat4, Vec3};
835
+
836
+
pub struct Camera {
837
+
pub eye: Vec3,
838
+
pub target: Vec3,
839
+
pub up: Vec3,
840
+
pub aspect: f32,
841
+
pub fov_y_radians: f32,
842
+
pub znear: f32,
843
+
pub zfar: f32,
844
+
}
845
+
846
+
impl Camera {
847
+
pub fn build_view_projection_matrix(&self) -> Mat4 {
848
+
let view = Mat4::look_at_rh(self.eye, self.target, self.up);
849
+
let proj = Mat4::perspective_rh(self.fov_y_radians, self.aspect, self.znear, self.zfar);
850
+
proj * view
851
+
}
852
+
}
853
+
854
+
#[repr(C)]
855
+
#[derive(Debug, Copy, Clone, bytemuck::Pod, bytemuck::Zeroable)]
856
+
pub struct CameraUniform {
857
+
view_proj: [[f32; 4]; 4],
858
+
}
859
+
860
+
impl CameraUniform {
861
+
pub fn new() -> Self {
862
+
Self {
863
+
view_proj: Mat4::IDENTITY.to_cols_array_2d(),
864
+
}
865
+
}
866
+
867
+
pub fn update_view_proj(&mut self, camera: &Camera) {
868
+
self.view_proj = camera.build_view_projection_matrix().to_cols_array_2d();
869
+
}
870
+
}
871
+
}
+11
vfl/src/lib.rs
+11
vfl/src/lib.rs
+1
vfl/src/res/shape/mod.rs
+1
vfl/src/res/shape/mod.rs
···
1
+
pub mod nx;
+387
vfl/src/res/shape/nx.rs
+387
vfl/src/res/shape/nx.rs
···
1
+
use crate::utils::{ReadSeek, Vec3PackedSnorm, inflate_bytes, read_byte_slice, u16_to_f32};
2
+
use binrw::{BinRead, Endian};
3
+
use std::fs::File;
4
+
use std::{
5
+
error::Error,
6
+
io::{Cursor, Read, Seek, SeekFrom},
7
+
};
8
+
9
+
pub const SHAPE_MID_DAT: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/ShapeMid.dat");
10
+
#[cfg(target_family = "wasm")]
11
+
pub const SHAPE_MID_DAT_LOADED: &[u8] = include_bytes!("../../../ShapeMid.dat");
12
+
13
+
#[cfg(feature = "gltf")]
14
+
use mesh_tools::GltfBuilder;
15
+
16
+
enum AttributeType {
17
+
/// Vertex positions. Format: `AttributeFormat_16_16_16_16_Float`
18
+
Position = 0, // `AttributeFormat_16_16_16_16_Float`
19
+
Normal = 1, // `AttributeFormat_10_10_10_2_Snorm`
20
+
Uv = 2, // `AttributeFormat_16_16_Float`
21
+
Tangent = 3, // `AttributeFormat_8_8_8_8_Snorm`
22
+
Param = 4, // `AttributeFormat_8_8_8_8_Unorm`
23
+
}
24
+
25
+
#[derive(Debug, Clone)]
26
+
pub struct ShapeData {
27
+
pub positions: Vec<[f32; 3]>,
28
+
pub indices: Vec<u16>,
29
+
pub normals: Option<Vec<[f32; 3]>>,
30
+
pub uvs: Option<Vec<[f32; 2]>>,
31
+
pub color_params: Option<Vec<u8>>,
32
+
}
33
+
impl ShapeData {
34
+
#[cfg(feature = "gltf")]
35
+
fn gltf(&self, _bounding_box: [[f32; 3]; 2]) -> GltfBuilder {
36
+
let mut builder = GltfBuilder::new();
37
+
38
+
let ShapeData {
39
+
positions,
40
+
indices,
41
+
normals: _,
42
+
uvs: _,
43
+
color_params: _,
44
+
} = self;
45
+
46
+
let material = builder.create_basic_material(
47
+
Some("Hair texture".to_string()),
48
+
[0.118, 0.102, 0.094, 1.000],
49
+
);
50
+
51
+
let mesh = builder.create_simple_mesh(
52
+
Some("Mii Shape".to_string()),
53
+
positions.as_flattened(),
54
+
indices,
55
+
// normals.clone().map(|v| v.into_flattened()).as_deref(),
56
+
// uvs.clone().map(|v| v.into_flattened()).as_deref(),
57
+
None,
58
+
None,
59
+
Some(material),
60
+
);
61
+
62
+
let mii_shape_node = builder.add_node(
63
+
Some("Mii Node".to_string()),
64
+
Some(mesh),
65
+
Some([0.0, 0.0, 0.0]),
66
+
None,
67
+
None,
68
+
);
69
+
70
+
builder.add_scene(Some("Mii Scene".to_string()), Some(vec![mii_shape_node]));
71
+
72
+
builder
73
+
}
74
+
}
75
+
76
+
impl BinRead for ShapeData {
77
+
type Args<'a> = ResourceShapeAttribute;
78
+
79
+
fn read_options<R: Read + Seek>(
80
+
reader: &mut R,
81
+
endian: binrw::Endian,
82
+
args: Self::Args<'_>,
83
+
) -> binrw::BinResult<Self> {
84
+
const PER_VERTEX_SIZE: u32 = 8;
85
+
const PER_INDEX_SIZE: u32 = 2;
86
+
87
+
// let offset = u32::read_options(reader, endian, ())?;
88
+
// let saved_position = reader.stream_position()?;
89
+
90
+
// Read positions
91
+
reader.seek(SeekFrom::Start(u64::from(
92
+
args.attr_offset[AttributeType::Position as usize],
93
+
)))?;
94
+
95
+
let vertex_count = args.attr_size[AttributeType::Position as usize] / PER_VERTEX_SIZE;
96
+
97
+
let mut positions = vec![];
98
+
for _vertex in 0..vertex_count {
99
+
positions.push({
100
+
let positions = <[u16; 3]>::read_options(reader, endian, ())?;
101
+
let _ = <u16>::read_options(reader, endian, ())?;
102
+
103
+
// Skip 2 bytes for padding
104
+
// let _ = reader.take(2);
105
+
106
+
positions.map(u16_to_f32)
107
+
});
108
+
}
109
+
110
+
// Read indices
111
+
reader.seek(SeekFrom::Start(u64::from(args.index_offset)))?;
112
+
113
+
let index_count = args.index_size / PER_INDEX_SIZE;
114
+
115
+
let mut indices = vec![];
116
+
for _index in 0..index_count {
117
+
let value = <u16>::read_options(reader, endian, ())?;
118
+
indices.push(value);
119
+
}
120
+
121
+
// Read normals
122
+
let normals = if args.is_valid_attribute(AttributeType::Normal) {
123
+
reader.seek(SeekFrom::Start(u64::from(
124
+
args.attr_offset[AttributeType::Normal as usize],
125
+
)))?;
126
+
127
+
let mut normals = vec![];
128
+
for _vertex in 0..vertex_count {
129
+
let packed = <u32>::read_options(reader, endian, ())?;
130
+
normals.push(Vec3PackedSnorm(packed).unpack());
131
+
}
132
+
133
+
Some(normals)
134
+
} else {
135
+
None
136
+
};
137
+
138
+
// Read UVs
139
+
let uvs = if args.is_valid_attribute(AttributeType::Uv) {
140
+
reader.seek(SeekFrom::Start(u64::from(
141
+
args.attr_offset[AttributeType::Uv as usize],
142
+
)))?;
143
+
144
+
let mut uvs = vec![];
145
+
for _vertex in 0..vertex_count {
146
+
uvs.push(<[u16; 2]>::read_options(reader, endian, ())?.map(u16_to_f32));
147
+
}
148
+
149
+
Some(uvs)
150
+
} else {
151
+
None
152
+
};
153
+
154
+
// Read Params (Colors)
155
+
let color_params = if args.is_valid_attribute(AttributeType::Param) {
156
+
reader.seek(SeekFrom::Start(u64::from(
157
+
args.attr_offset[AttributeType::Param as usize],
158
+
)))?;
159
+
160
+
let color_count = args.attr_size[AttributeType::Param as usize] / PER_VERTEX_SIZE;
161
+
162
+
let mut color_params = vec![];
163
+
for _color in 0..color_count {
164
+
color_params.push(<u8>::read_options(reader, endian, ())?);
165
+
}
166
+
167
+
Some(color_params)
168
+
} else {
169
+
None
170
+
};
171
+
172
+
// // Read from an offset with a provided base offset.
173
+
// reader.seek(SeekFrom::Start(args + offset as u64))?;
174
+
// let value = u16::read_options(reader, endian, ())?;
175
+
176
+
// reader.seek(SeekFrom::Start(saved_position))?;
177
+
178
+
Ok(ShapeData {
179
+
positions,
180
+
indices,
181
+
normals,
182
+
uvs,
183
+
color_params,
184
+
})
185
+
}
186
+
}
187
+
#[derive(BinRead, Debug, Clone, Copy)]
188
+
pub struct ResourceCommonAttribute {
189
+
pub offset: u32,
190
+
pub size: u32,
191
+
pub size_compressed: u32,
192
+
pub compression_level: u8,
193
+
pub memory_level: u8,
194
+
pad: u16,
195
+
}
196
+
#[derive(BinRead, Default, Debug, Clone, Copy)]
197
+
pub struct ResourceShapeAttribute {
198
+
pub attr_offset: [u32; 5],
199
+
pub attr_size: [u32; 5],
200
+
pub index_offset: u32,
201
+
pub index_size: u32,
202
+
pub bounding_box: [[f32; 3]; 2],
203
+
}
204
+
impl ResourceShapeAttribute {
205
+
fn is_valid_attribute(&self, attr_type: AttributeType) -> bool {
206
+
// assert!(attr_type as usize < AttributeType::End as usize);
207
+
self.attr_size[attr_type as usize] != 0
208
+
}
209
+
}
210
+
211
+
#[derive(BinRead, Debug, Clone, Copy)]
212
+
pub struct ShapeElement {
213
+
pub common: ResourceCommonAttribute,
214
+
pub shape: ResourceShapeAttribute,
215
+
}
216
+
217
+
impl ShapeElement {
218
+
/// # Errors
219
+
/// Can error if:
220
+
/// - Shape data is in a malformed zlib format
221
+
/// - Writing out shape data file errors
222
+
/// - Parsing vertices and etc from data fails
223
+
pub fn shape_data(&mut self, file: &[u8]) -> Result<ShapeData, Box<dyn Error>> {
224
+
// exporter set boundingbox
225
+
226
+
// println!("shapeload");
227
+
let start: usize = self.common.offset as usize;
228
+
let end: usize = self.common.offset as usize + self.common.size_compressed as usize;
229
+
230
+
let range = start..end;
231
+
232
+
let shape_data = inflate_bytes(&file[range])?;
233
+
234
+
// if !cfg!(target_family = "wasm") {
235
+
// std::fs::write("./shape.dat", shape_data.clone())?;
236
+
// }
237
+
238
+
let data =
239
+
ShapeData::read_options(&mut Cursor::new(shape_data), Endian::Little, self.shape)?;
240
+
241
+
Ok(data)
242
+
}
243
+
244
+
/// # Errors
245
+
/// Can error if:
246
+
/// - Shape data cannot be parsed
247
+
#[cfg(feature = "gltf")]
248
+
pub fn gltf(&mut self, file: &[u8]) -> Result<GltfBuilder, Box<dyn Error>> {
249
+
let data = self.shape_data(file)?;
250
+
251
+
Ok(data.gltf(self.shape.bounding_box))
252
+
}
253
+
}
254
+
255
+
#[derive(BinRead, Debug, Clone, Copy)]
256
+
pub struct ResourceShapeHairTransform {
257
+
front_translate: [f32; 3],
258
+
front_rotate: [f32; 3],
259
+
side_translate: [f32; 3],
260
+
side_rotate: [f32; 3],
261
+
top_translate: [f32; 3],
262
+
top_rotate: [f32; 3],
263
+
}
264
+
265
+
#[derive(BinRead, Debug, Clone, Copy)]
266
+
pub struct ResourceShapeFacelineTransform {
267
+
pub hair_translate: [f32; 3],
268
+
pub nose_translate: [f32; 3],
269
+
pub beard_translate: [f32; 3],
270
+
}
271
+
272
+
#[derive(Clone, Copy, Debug)]
273
+
pub enum Shape {
274
+
Beard,
275
+
FaceLine,
276
+
Mask,
277
+
HatNormal,
278
+
HatCap,
279
+
ForeheadNormal,
280
+
ForeheadCap,
281
+
HairNormal,
282
+
HairCap,
283
+
Glasses,
284
+
Nose,
285
+
NoseLine,
286
+
HairTransform,
287
+
FaceLineTransform,
288
+
}
289
+
#[derive(Clone, Copy)]
290
+
pub enum GenericResourceShape {
291
+
Element(ShapeElement),
292
+
HairTransform(ResourceShapeHairTransform),
293
+
FaceLineTransform(ResourceShapeFacelineTransform),
294
+
}
295
+
296
+
#[derive(BinRead, Debug, Clone, Copy)]
297
+
#[br(little, magic = b"NFSR")]
298
+
pub struct ResourceShape {
299
+
ver: u32,
300
+
file_size: u32,
301
+
max_size: [u32; 12],
302
+
max_alignment: [u32; 12],
303
+
pub beard: [ShapeElement; 4],
304
+
pub face_line: [ShapeElement; 12],
305
+
pub mask: [ShapeElement; 12],
306
+
pub hat_normal: [ShapeElement; 132],
307
+
pub hat_cap: [ShapeElement; 132],
308
+
pub forehead_normal: [ShapeElement; 132],
309
+
pub forehead_cap: [ShapeElement; 132],
310
+
pub hair_normal: [ShapeElement; 132],
311
+
pub hair_cap: [ShapeElement; 132],
312
+
313
+
pub glasses: [ShapeElement; 1],
314
+
315
+
pub nose: [ShapeElement; 18],
316
+
pub nose_line: [ShapeElement; 18],
317
+
318
+
pub hair_transform: [ResourceShapeHairTransform; 132],
319
+
pub face_line_transform: [ResourceShapeFacelineTransform; 12],
320
+
}
321
+
322
+
impl ResourceShape {
323
+
#[allow(clippy::must_use_candidate)]
324
+
pub fn index_by_shape(&self, shape: Shape, index: usize) -> Option<GenericResourceShape> {
325
+
let shape_el = |x: &ShapeElement| GenericResourceShape::Element(*x);
326
+
let hair_t = |x: &ResourceShapeHairTransform| GenericResourceShape::HairTransform(*x);
327
+
let fl_t = |x: &ResourceShapeFacelineTransform| GenericResourceShape::FaceLineTransform(*x);
328
+
329
+
match shape {
330
+
Shape::Beard => self.beard.get(index).map(shape_el),
331
+
Shape::FaceLine => self.face_line.get(index).map(shape_el),
332
+
Shape::Mask => self.mask.get(index).map(shape_el),
333
+
Shape::HatNormal => self.hat_normal.get(index).map(shape_el),
334
+
Shape::HatCap => self.hat_cap.get(index).map(shape_el),
335
+
Shape::ForeheadNormal => self.forehead_normal.get(index).map(shape_el),
336
+
Shape::ForeheadCap => self.forehead_cap.get(index).map(shape_el),
337
+
Shape::HairNormal => self.hair_normal.get(index).map(shape_el),
338
+
Shape::HairCap => self.hair_cap.get(index).map(shape_el),
339
+
Shape::Glasses => self.glasses.get(index).map(shape_el),
340
+
Shape::Nose => self.nose.get(index).map(shape_el),
341
+
Shape::NoseLine => self.nose_line.get(index).map(shape_el),
342
+
Shape::HairTransform => self.hair_transform.get(index).map(hair_t),
343
+
Shape::FaceLineTransform => self.face_line_transform.get(index).map(fl_t),
344
+
}
345
+
}
346
+
}
347
+
348
+
#[cfg(test)]
349
+
mod tests {
350
+
use super::*;
351
+
use half::f16;
352
+
use std::{error::Error, fs::File, io::BufReader};
353
+
354
+
type R = Result<(), Box<dyn Error>>;
355
+
356
+
#[test]
357
+
fn read() -> R {
358
+
let mut bin = BufReader::new(File::open(SHAPE_MID_DAT)?);
359
+
360
+
let _ = ResourceShape::read(&mut bin)?;
361
+
362
+
Ok(())
363
+
}
364
+
365
+
// #[test]
366
+
// #[cfg(feature = "gltf")]
367
+
// fn jas() -> R {
368
+
// let mut bin = BufReader::new(File::open(SHAPE_MID_DAT)?);
369
+
370
+
// let res = ResourceShape::read(&mut bin)?;
371
+
372
+
// let mut shape = res.hair_normal[123];
373
+
374
+
// let mut file = File::open(SHAPE_MID_DAT)?;
375
+
376
+
// let gltf = shape.gltf(&mut file)?;
377
+
// gltf.export_glb(concat!(env!("CARGO_MANIFEST_DIR"), "/test_output/jas.glb"))?;
378
+
379
+
// Ok(())
380
+
// }
381
+
382
+
#[test]
383
+
fn u16_to_f16_to_f32() {
384
+
let within_tolerance = (1.0 - f16::from_bits(15360).to_f32()).abs() < 1.0;
385
+
assert!(within_tolerance);
386
+
}
387
+
}
+1
vfl/src/res/tex/mod.rs
+1
vfl/src/res/tex/mod.rs
···
1
+
pub mod nx;
+320
vfl/src/res/tex/nx.rs
+320
vfl/src/res/tex/nx.rs
···
1
+
use crate::{
2
+
res::shape::nx::ResourceCommonAttribute,
3
+
utils::{ReadSeek, inflate_bytes, read_byte_slice},
4
+
};
5
+
use binrw::BinRead;
6
+
use image::{ImageBuffer, Rgba, RgbaImage};
7
+
use num_enum::{IntoPrimitive, TryFromPrimitive};
8
+
use std::error::Error;
9
+
use tegra_swizzle::{block_height_mip0, div_round_up, swizzle::deswizzle_block_linear};
10
+
11
+
pub const TEXTURE_MID_SRGB_DAT: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/NXTextureMidSRGB.dat");
12
+
13
+
#[derive(BinRead, Debug, Clone, Copy)]
14
+
pub struct ResourceTextureAttribute {
15
+
alignment: u32,
16
+
pub width: u16,
17
+
pub height: u16,
18
+
pub format: u8,
19
+
mip_count: u8,
20
+
tile_mode: u8,
21
+
pad: [u8; 1],
22
+
}
23
+
24
+
#[derive(BinRead, Debug, Clone, Copy)]
25
+
pub struct TextureElement {
26
+
pub common: ResourceCommonAttribute,
27
+
pub texture: ResourceTextureAttribute,
28
+
}
29
+
30
+
// Format rundown:
31
+
// https://www.reedbeta.com/blog/understanding-bcn-texture-compression-formats/#comparison-table
32
+
33
+
#[derive(IntoPrimitive, TryFromPrimitive, Debug)]
34
+
#[repr(u8)]
35
+
pub enum ResourceTextureFormat {
36
+
R = 0, // R8Unorm (Ffl Name)
37
+
Rg = 1, // R8G8Unorm
38
+
Rgba = 2, // R8G8B8A8Unorm
39
+
Bc4 = 3, // Bc4Unorm (Compressed R)
40
+
Bc5 = 4, // Bc5Unorm (Compressed Rb)
41
+
Bc7 = 5, // Bc7Unorm (Compressed Rgba)
42
+
Astc4x4 = 6, // Astc4x4Unorm (Compressed Rgba)
43
+
}
44
+
45
+
// pub enum RawTexture {
46
+
// R(Vec<u8>),
47
+
// Rb(Vec<u8>),
48
+
// Rgba(Vec<u8>),
49
+
// Bc4(Vec<u8>),
50
+
// Bc5(Vec<u8>),
51
+
// Bc7(Vec<u8>),
52
+
// Astc4x4(Vec<u8>),
53
+
// }
54
+
55
+
#[derive(Clone, Debug)]
56
+
pub struct RawTexture {
57
+
pub bytes: Vec<u8>,
58
+
pub metadata: TextureElement,
59
+
}
60
+
61
+
impl TextureElement {
62
+
pub fn get_texture_bytes(&self, file: &Vec<u8>) -> Result<Vec<u8>, Box<dyn Error>> {
63
+
let start: usize = self.common.offset as usize;
64
+
let end: usize = self.common.offset as usize + self.common.size_compressed as usize;
65
+
66
+
// println!("texload");
67
+
68
+
let range = start..end;
69
+
70
+
// let tex_data = read_byte_slice(
71
+
// file,
72
+
// self.common.offset.into(),
73
+
// self.common.size_compressed.try_into()?,
74
+
// )?;
75
+
76
+
let tex_data = inflate_bytes(&file[range])?;
77
+
78
+
let needs_swizzling = self.texture.tile_mode == 0;
79
+
80
+
let tex_data = if needs_swizzling {
81
+
let block_size = match ResourceTextureFormat::try_from(self.texture.format).unwrap() {
82
+
ResourceTextureFormat::R
83
+
| ResourceTextureFormat::Rg
84
+
| ResourceTextureFormat::Rgba => 1,
85
+
ResourceTextureFormat::Bc4
86
+
| ResourceTextureFormat::Bc5
87
+
| ResourceTextureFormat::Bc7
88
+
| ResourceTextureFormat::Astc4x4 => 4,
89
+
};
90
+
91
+
let bytes_per_pixel =
92
+
match ResourceTextureFormat::try_from(self.texture.format).unwrap() {
93
+
ResourceTextureFormat::R
94
+
| ResourceTextureFormat::Rg
95
+
| ResourceTextureFormat::Rgba => 1,
96
+
ResourceTextureFormat::Bc4 => 8,
97
+
ResourceTextureFormat::Bc5
98
+
| ResourceTextureFormat::Bc7
99
+
| ResourceTextureFormat::Astc4x4 => 16,
100
+
};
101
+
102
+
let height = self.texture.height.into();
103
+
let block_height = block_height_mip0(div_round_up(height, block_size));
104
+
105
+
// panic!("{}", tex_data.len());
106
+
deswizzle_block_linear(
107
+
div_round_up(self.texture.width.into(), block_size),
108
+
div_round_up(self.texture.height.into(), block_size),
109
+
1,
110
+
&tex_data,
111
+
block_height,
112
+
bytes_per_pixel,
113
+
)?
114
+
} else {
115
+
tex_data
116
+
};
117
+
118
+
Ok(tex_data)
119
+
}
120
+
121
+
#[cfg(feature = "draw")]
122
+
pub fn get_uncompressed_bytes(
123
+
&self,
124
+
file: &Vec<u8>,
125
+
) -> Result<Option<RawTexture>, Box<dyn Error>> {
126
+
let normalize_textures = false;
127
+
128
+
if self.texture.width == 0 || self.texture.height == 0 {
129
+
return Ok(None);
130
+
}
131
+
132
+
let tex_data = self.get_texture_bytes(file)?;
133
+
assert!(!tex_data.is_empty());
134
+
135
+
let mut tex_data_decoded =
136
+
vec![0; (u32::from(self.texture.width) * u32::from(self.texture.height)) as usize];
137
+
match ResourceTextureFormat::try_from(self.texture.format).unwrap() {
138
+
ResourceTextureFormat::Bc7 => {
139
+
texture2ddecoder::decode_bc7(
140
+
&tex_data,
141
+
self.texture.width.into(),
142
+
self.texture.height.into(),
143
+
&mut tex_data_decoded,
144
+
)?;
145
+
}
146
+
ResourceTextureFormat::Bc4 => {
147
+
texture2ddecoder::decode_bc4(
148
+
&tex_data,
149
+
self.texture.width.into(),
150
+
self.texture.height.into(),
151
+
&mut tex_data_decoded,
152
+
)?;
153
+
154
+
// Convert R to Rgba
155
+
if normalize_textures {
156
+
tex_data_decoded = tex_data_decoded
157
+
.iter()
158
+
.map(|x| {
159
+
let [_, _, w, _] = x.to_le_bytes();
160
+
u32::from_le_bytes([w, w, w, w])
161
+
})
162
+
.collect();
163
+
}
164
+
}
165
+
ResourceTextureFormat::Bc5 => {
166
+
texture2ddecoder::decode_bc5(
167
+
&tex_data,
168
+
self.texture.width.into(),
169
+
self.texture.height.into(),
170
+
&mut tex_data_decoded,
171
+
)?;
172
+
173
+
// Convert Rb to Rgba
174
+
if normalize_textures {
175
+
tex_data_decoded = tex_data_decoded
176
+
.iter()
177
+
.map(|x| {
178
+
let [w, a, _, _] = x.to_le_bytes();
179
+
u32::from_le_bytes([w, w, w, a])
180
+
})
181
+
.collect();
182
+
}
183
+
}
184
+
ResourceTextureFormat::R => {
185
+
tex_data_decoded = tex_data
186
+
.iter()
187
+
.map(|x| u32::from_le_bytes([*x, *x, *x, 255]))
188
+
.collect();
189
+
}
190
+
ResourceTextureFormat::Astc4x4 => {
191
+
texture2ddecoder::decode_astc_4_4(
192
+
&tex_data,
193
+
self.texture.width.into(),
194
+
self.texture.height.into(),
195
+
&mut tex_data_decoded,
196
+
)?;
197
+
}
198
+
e => unimplemented!("{e:?} is not decoded yet"),
199
+
}
200
+
201
+
// U32 to 4x U8
202
+
let tex_data_decoded: Vec<u8> = tex_data_decoded
203
+
.iter()
204
+
.flat_map(|x| {
205
+
let [b, g, r, a] = x.to_le_bytes();
206
+
[r, g, b, a]
207
+
})
208
+
.collect();
209
+
210
+
Ok(Some(RawTexture {
211
+
bytes: tex_data_decoded,
212
+
metadata: self.clone(),
213
+
}))
214
+
}
215
+
216
+
#[cfg(feature = "draw")]
217
+
pub fn get_image(&self, bytes: &Vec<u8>) -> Result<Option<RgbaImage>, Box<dyn Error>> {
218
+
let raw_texture = match self.get_uncompressed_bytes(bytes) {
219
+
Ok(Some(bytes)) => bytes,
220
+
Ok(None) => return Ok(None),
221
+
Err(e) => return Err(e),
222
+
};
223
+
224
+
let img: ImageBuffer<Rgba<u8>, Vec<u8>> = image::RgbaImage::from_raw(
225
+
self.texture.width.into(),
226
+
self.texture.height.into(),
227
+
raw_texture.bytes,
228
+
)
229
+
.unwrap();
230
+
231
+
Ok(Some(img))
232
+
}
233
+
}
234
+
235
+
#[derive(BinRead, Clone, Copy)]
236
+
#[br(little, magic = b"NFTR")]
237
+
pub struct ResourceTexture {
238
+
ver: u32,
239
+
file_size: u32,
240
+
max_size: [u32; 11],
241
+
max_alignment: [u32; 11],
242
+
pub hat: [TextureElement; 132],
243
+
pub eye: [TextureElement; 62],
244
+
pub eyebrow: [TextureElement; 24],
245
+
pub beard: [TextureElement; 2],
246
+
pub wrinkle: [TextureElement; 12],
247
+
pub makeup: [TextureElement; 12],
248
+
pub glass: [TextureElement; 20],
249
+
pub mole: [TextureElement; 2],
250
+
pub mouth: [TextureElement; 37],
251
+
pub mustache: [TextureElement; 6],
252
+
pub noseline: [TextureElement; 18],
253
+
}
254
+
255
+
#[cfg(test)]
256
+
mod tests {
257
+
use super::*;
258
+
use std::{error::Error, fs::File, io::BufReader};
259
+
260
+
type R = Result<(), Box<dyn Error>>;
261
+
262
+
#[test]
263
+
fn read() -> R {
264
+
let mut bin = BufReader::new(File::open(TEXTURE_MID_SRGB_DAT)?);
265
+
266
+
let _ = ResourceTexture::read(&mut bin)?;
267
+
268
+
Ok(())
269
+
}
270
+
271
+
// #[test]
272
+
// #[cfg(feature = "draw")]
273
+
// fn eye_tex() -> R {
274
+
// let mut bin = BufReader::new(File::open(TEXTURE_MID_SRGB_DAT)?);
275
+
276
+
// let res = ResourceTexture::read(&mut bin)?;
277
+
278
+
// let res = res.eye[0];
279
+
280
+
// let tex = res.get_image(&mut BufReader::new(File::open(TEXTURE_MID_SRGB_DAT)?))?;
281
+
282
+
// if let Some(tex) = tex {
283
+
// tex.save(concat!(env!("CARGO_MANIFEST_DIR"), "/test_output/eye.png"))?;
284
+
// }
285
+
// Ok(())
286
+
// }
287
+
288
+
// #[test]
289
+
// #[cfg(feature = "draw")]
290
+
// fn face_tex() -> R {
291
+
// let mut bin = BufReader::new(File::open(TEXTURE_MID_SRGB_DAT)?);
292
+
293
+
// let res = ResourceTexture::read(&mut bin)?;
294
+
295
+
// // let res = res.makeup[1];
296
+
297
+
// let tex =
298
+
// res.makeup[1].get_image(&mut BufReader::new(File::open(TEXTURE_MID_SRGB_DAT)?))?;
299
+
300
+
// if let Some(tex) = tex {
301
+
// tex.save(concat!(
302
+
// env!("CARGO_MANIFEST_DIR"),
303
+
// "/test_output/makeup.png"
304
+
// ))?;
305
+
// // tex.save("./tex.png")?;
306
+
// }
307
+
308
+
// // let res = ResourceTexture::read(&mut bin)?;
309
+
// let tex =
310
+
// res.noseline[1].get_image(&mut BufReader::new(File::open(TEXTURE_MID_SRGB_DAT)?))?;
311
+
312
+
// if let Some(tex) = tex {
313
+
// tex.save(concat!(
314
+
// env!("CARGO_MANIFEST_DIR"),
315
+
// "/test_output/noseline.png"
316
+
// ))?;
317
+
// }
318
+
// Ok(())
319
+
// }
320
+
}
+67
vfl/src/utils.rs
+67
vfl/src/utils.rs
···
1
+
use std::{
2
+
error::Error,
3
+
io::{self, Read, SeekFrom},
4
+
};
5
+
6
+
pub fn u16_to_f32(num: u16) -> f32 {
7
+
half::f16::from_bits(num).to_f32()
8
+
}
9
+
10
+
/// Signed, normalized Vec3 + w component packed in a u32.
11
+
/// [x: 10; y: 10; z: 10; w: 2]
12
+
pub struct Vec3PackedSnorm(pub u32);
13
+
14
+
impl Vec3PackedSnorm {
15
+
/// The w component is discarded.
16
+
#[allow(clippy::cast_precision_loss, clippy::cast_possible_wrap)]
17
+
pub fn unpack(self) -> [f32; 3] {
18
+
let packed = self.0;
19
+
20
+
let nx = (packed << 22) as i32 >> 22;
21
+
let ny = (packed << 12) as i32 >> 22;
22
+
let nz = (packed << 2) as i32 >> 22;
23
+
24
+
[nx as f32 / 511.0, ny as f32 / 511.0, nz as f32 / 511.0]
25
+
}
26
+
}
27
+
28
+
/// Abstraction over anything that can be read as Seek or Read
29
+
pub trait ReadSeek: std::io::Seek + std::io::Read {}
30
+
impl<T: ?Sized> ReadSeek for T where T: std::io::Seek + std::io::Read {}
31
+
32
+
pub(crate) fn read_byte_slice(
33
+
file: &mut dyn ReadSeek, // Dynamic param: Anything that impl's Read + Seek
34
+
start: u64,
35
+
count: usize,
36
+
) -> Result<Vec<u8>, Box<dyn Error>> {
37
+
file.seek(SeekFrom::Start(start))?;
38
+
let mut buf = vec![0; count];
39
+
file.read_exact(&mut buf)?;
40
+
41
+
Ok(buf)
42
+
}
43
+
44
+
#[cfg(feature = "res")]
45
+
pub(crate) fn inflate_bytes(bytes: &[u8]) -> io::Result<Vec<u8>> {
46
+
use flate2::read::ZlibDecoder;
47
+
48
+
let mut z = ZlibDecoder::new(bytes);
49
+
// z.read_to_string(&mut s)?;
50
+
let mut vec = Vec::new();
51
+
z.read_to_end(&mut vec)?;
52
+
Ok(vec)
53
+
}
54
+
55
+
#[cfg(test)]
56
+
mod tests {
57
+
use super::Vec3PackedSnorm;
58
+
59
+
#[test]
60
+
fn vec3_packed_snorm_test() {
61
+
for test in [0x567a_67ca, 0x567_a6436, 0x5675_9fca, 0x5675_9c36] {
62
+
for x in Vec3PackedSnorm(test).unpack() {
63
+
assert!(x.abs() <= 1.0, "Not normalised!");
64
+
}
65
+
}
66
+
}
67
+
}