feat: add the Paperdoll Renderer foundation shell
Record the design, including the verbatim Dutch specification and the OBJ, FBX and glTF support matrix. Add a Rust status window that reports import and rendering as not built, with unit tests and a BlueGit pipeline that calls the documented release API without creating a tag. Co-authored-by: tim <tim@timfalken.com>
@@ -0,0 +1,8 @@
1
/target/
2
/dist/
3
/cargo-home/
4
/packaging/arch/src/
5
/packaging/arch/pkg/
6
/packaging/arch/*.pkg.tar.zst
7
/packaging/arch/*.pkg.tar.zst.sig
8
**/*.AppImage
@@ -0,0 +1,8 @@1
/target/2
/dist/3
/cargo-home/4
/packaging/arch/src/5
/packaging/arch/pkg/6
/packaging/arch/*.pkg.tar.zst7
/packaging/arch/*.pkg.tar.zst.sig8
**/*.AppImage@@ -0,0 +1,3174 @@
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.32"
8
source = "registry+https://github.com/rust-lang/crates.io-index"
9
checksum = "01c0457472c38ea5bd1c3b5ada5e368271cb550be7a4ca4a0b4634e9913f6cc2"
10
dependencies = [
11
"ab_glyph_rasterizer",
12
"owned_ttf_parser",
13
]
14
15
[[package]]
16
name = "ab_glyph_rasterizer"
17
version = "0.1.10"
18
source = "registry+https://github.com/rust-lang/crates.io-index"
19
checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618"
20
21
[[package]]
22
name = "adler2"
23
version = "2.0.1"
24
source = "registry+https://github.com/rust-lang/crates.io-index"
25
checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
26
27
[[package]]
28
name = "ahash"
29
version = "0.8.12"
30
source = "registry+https://github.com/rust-lang/crates.io-index"
31
checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75"
32
dependencies = [
33
"cfg-if",
34
"getrandom 0.3.4",
35
"once_cell",
36
"version_check",
37
"zerocopy",
38
]
39
40
[[package]]
41
name = "android-activity"
42
version = "0.6.1"
43
source = "registry+https://github.com/rust-lang/crates.io-index"
44
checksum = "0f2a1bb052857d5dd49572219344a7332b31b76405648eabac5bc68978251bcd"
45
dependencies = [
46
"android-properties",
47
"bitflags 2.13.2",
48
"cc",
49
"jni",
50
"libc",
51
"log",
52
"ndk",
53
"ndk-context",
54
"ndk-sys 0.6.0+11769913",
55
"num_enum",
56
"thiserror 2.0.21",
57
]
58
59
[[package]]
60
name = "android-properties"
61
version = "0.2.2"
62
source = "registry+https://github.com/rust-lang/crates.io-index"
63
checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04"
64
65
[[package]]
66
name = "android_system_properties"
67
version = "0.1.6"
68
source = "registry+https://github.com/rust-lang/crates.io-index"
69
checksum = "ae221649c9976a6f6c56ae1facf410f3ddb33cc661c4b7b61020a912d4237fbc"
70
dependencies = [
71
"libc",
72
]
73
74
[[package]]
75
name = "arboard"
76
version = "3.7.0"
77
source = "registry+https://github.com/rust-lang/crates.io-index"
78
checksum = "aeb9553e62312c8756a5979254fc6d7da8bbeb5986a1e17037fab932f7037917"
79
dependencies = [
80
"clipboard-win",
81
"log",
82
"objc2 0.6.5",
83
"objc2-app-kit 0.3.2",
84
"objc2-foundation 0.3.2",
85
"parking_lot",
86
"percent-encoding",
87
"windows-sys 0.61.2",
88
"x11rb",
89
]
90
91
[[package]]
92
name = "arrayvec"
93
version = "0.7.8"
94
source = "registry+https://github.com/rust-lang/crates.io-index"
95
checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56"
96
97
[[package]]
98
name = "as-raw-xcb-connection"
99
version = "1.0.1"
100
source = "registry+https://github.com/rust-lang/crates.io-index"
101
checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b"
102
103
[[package]]
104
name = "ash"
105
version = "0.38.0+1.3.281"
106
source = "registry+https://github.com/rust-lang/crates.io-index"
107
checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f"
108
dependencies = [
109
"libloading",
110
]
111
112
[[package]]
113
name = "atomic-waker"
114
version = "1.1.2"
115
source = "registry+https://github.com/rust-lang/crates.io-index"
116
checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
117
118
[[package]]
119
name = "autocfg"
120
version = "1.5.1"
121
source = "registry+https://github.com/rust-lang/crates.io-index"
122
checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"
123
124
[[package]]
125
name = "bit-set"
126
version = "0.6.0"
127
source = "registry+https://github.com/rust-lang/crates.io-index"
128
checksum = "f0481a0e032742109b1133a095184ee93d88f3dc9e0d28a5d033dc77a073f44f"
129
dependencies = [
130
"bit-vec",
131
]
132
133
[[package]]
134
name = "bit-vec"
135
version = "0.7.0"
136
source = "registry+https://github.com/rust-lang/crates.io-index"
137
checksum = "d2c54ff287cfc0a34f38a6b832ea1bd8e448a330b3e40a50859e6488bee07f22"
138
139
[[package]]
140
name = "bitflags"
141
version = "1.3.2"
142
source = "registry+https://github.com/rust-lang/crates.io-index"
143
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
144
145
[[package]]
146
name = "bitflags"
147
version = "2.13.2"
148
source = "registry+https://github.com/rust-lang/crates.io-index"
149
checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06"
150
151
[[package]]
152
name = "block"
153
version = "0.1.6"
154
source = "registry+https://github.com/rust-lang/crates.io-index"
155
checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
156
157
[[package]]
158
name = "block2"
159
version = "0.5.1"
160
source = "registry+https://github.com/rust-lang/crates.io-index"
161
checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f"
162
dependencies = [
163
"objc2 0.5.3",
164
]
165
166
[[package]]
167
name = "bumpalo"
168
version = "3.20.3"
169
source = "registry+https://github.com/rust-lang/crates.io-index"
170
checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649"
171
172
[[package]]
173
name = "bytemuck"
174
version = "1.25.2"
175
source = "registry+https://github.com/rust-lang/crates.io-index"
176
checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797"
177
dependencies = [
178
"bytemuck_derive",
179
]
180
181
[[package]]
182
name = "bytemuck_derive"
183
version = "1.12.1"
184
source = "registry+https://github.com/rust-lang/crates.io-index"
185
checksum = "6a1f896587b6f2c069c73d2f0913e2d590c3990285cd2f0b6aa02b786b4c679c"
186
dependencies = [
187
"proc-macro2",
188
"quote",
189
"syn 3.0.9",
190
]
191
192
[[package]]
193
name = "byteorder-lite"
194
version = "0.1.0"
195
source = "registry+https://github.com/rust-lang/crates.io-index"
196
checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495"
197
198
[[package]]
199
name = "bytes"
200
version = "1.12.1"
201
source = "registry+https://github.com/rust-lang/crates.io-index"
202
checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04"
203
204
[[package]]
205
name = "calloop"
206
version = "0.13.0"
207
source = "registry+https://github.com/rust-lang/crates.io-index"
208
checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec"
209
dependencies = [
210
"bitflags 2.13.2",
211
"log",
212
"polling",
213
"rustix 0.38.44",
214
"slab",
215
"thiserror 1.0.69",
216
]
217
218
[[package]]
219
name = "calloop"
220
version = "0.14.5"
221
source = "registry+https://github.com/rust-lang/crates.io-index"
222
checksum = "43b32313e937c8721c9d17ee9bf60699a6402b4b7c2cb6ac1bee0ffcaa4b4e5e"
223
dependencies = [
224
"bitflags 2.13.2",
225
"polling",
226
"rustix 1.1.6",
227
"tracing",
228
]
229
230
[[package]]
231
name = "calloop-wayland-source"
232
version = "0.3.0"
233
source = "registry+https://github.com/rust-lang/crates.io-index"
234
checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20"
235
dependencies = [
236
"calloop 0.13.0",
237
"rustix 0.38.44",
238
"wayland-backend",
239
"wayland-client",
240
]
241
242
[[package]]
243
name = "calloop-wayland-source"
244
version = "0.4.1"
245
source = "registry+https://github.com/rust-lang/crates.io-index"
246
checksum = "138efcf0940a02ebf0cc8d1eff41a1682a46b431630f4c52450d6265876021fa"
247
dependencies = [
248
"calloop 0.14.5",
249
"rustix 1.1.6",
250
"wayland-backend",
251
"wayland-client",
252
]
253
254
[[package]]
255
name = "cc"
256
version = "1.11.1"
257
source = "registry+https://github.com/rust-lang/crates.io-index"
258
checksum = "4ff2a8126fff0f8c839080d619675a585e61720bb12d2baceae45769fd66f155"
259
dependencies = [
260
"find-msvc-tools",
261
"jobserver",
262
"libc",
263
"shlex",
264
]
265
266
[[package]]
267
name = "cfg-if"
268
version = "1.0.5"
269
source = "registry+https://github.com/rust-lang/crates.io-index"
270
checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600"
271
272
[[package]]
273
name = "cfg_aliases"
274
version = "0.1.1"
275
source = "registry+https://github.com/rust-lang/crates.io-index"
276
checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"
277
278
[[package]]
279
name = "cfg_aliases"
280
version = "0.2.2"
281
source = "registry+https://github.com/rust-lang/crates.io-index"
282
checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527"
283
284
[[package]]
285
name = "cgl"
286
version = "0.3.2"
287
source = "registry+https://github.com/rust-lang/crates.io-index"
288
checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff"
289
dependencies = [
290
"libc",
291
]
292
293
[[package]]
294
name = "clipboard-win"
295
version = "5.4.3"
296
source = "registry+https://github.com/rust-lang/crates.io-index"
297
checksum = "052af7878466feccda12ba7a6a67d019d712f296809559b47c12c8cc196d3a9a"
298
dependencies = [
299
"error-code",
300
]
301
302
[[package]]
303
name = "codespan-reporting"
304
version = "0.11.1"
305
source = "registry+https://github.com/rust-lang/crates.io-index"
306
checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
307
dependencies = [
308
"termcolor",
309
"unicode-width",
310
]
311
312
[[package]]
313
name = "com"
314
version = "0.6.0"
315
source = "registry+https://github.com/rust-lang/crates.io-index"
316
checksum = "7e17887fd17353b65b1b2ef1c526c83e26cd72e74f598a8dc1bee13a48f3d9f6"
317
dependencies = [
318
"com_macros",
319
]
320
321
[[package]]
322
name = "com_macros"
323
version = "0.6.0"
324
source = "registry+https://github.com/rust-lang/crates.io-index"
325
checksum = "d375883580a668c7481ea6631fc1a8863e33cc335bf56bfad8d7e6d4b04b13a5"
326
dependencies = [
327
"com_macros_support",
328
"proc-macro2",
329
"syn 1.0.109",
330
]
331
332
[[package]]
333
name = "com_macros_support"
334
version = "0.6.0"
335
source = "registry+https://github.com/rust-lang/crates.io-index"
336
checksum = "ad899a1087a9296d5644792d7cb72b8e34c1bec8e7d4fbc002230169a6e8710c"
337
dependencies = [
338
"proc-macro2",
339
"quote",
340
"syn 1.0.109",
341
]
342
343
[[package]]
344
name = "combine"
345
version = "4.6.9"
346
source = "registry+https://github.com/rust-lang/crates.io-index"
347
checksum = "4356eba6976435498d05a311ee9fc486da3bc81c200d3f0d7dd9703b41913f92"
348
dependencies = [
349
"bytes",
350
"memchr",
351
]
352
353
[[package]]
354
name = "concurrent-queue"
355
version = "2.5.0"
356
source = "registry+https://github.com/rust-lang/crates.io-index"
357
checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973"
358
dependencies = [
359
"crossbeam-utils",
360
]
361
362
[[package]]
363
name = "core-foundation"
364
version = "0.9.4"
365
source = "registry+https://github.com/rust-lang/crates.io-index"
366
checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
367
dependencies = [
368
"core-foundation-sys",
369
"libc",
370
]
371
372
[[package]]
373
name = "core-foundation-sys"
374
version = "0.8.7"
375
source = "registry+https://github.com/rust-lang/crates.io-index"
376
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
377
378
[[package]]
379
name = "core-graphics"
380
version = "0.23.2"
381
source = "registry+https://github.com/rust-lang/crates.io-index"
382
checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081"
383
dependencies = [
384
"bitflags 1.3.2",
385
"core-foundation",
386
"core-graphics-types",
387
"foreign-types",
388
"libc",
389
]
390
391
[[package]]
392
name = "core-graphics-types"
393
version = "0.1.3"
394
source = "registry+https://github.com/rust-lang/crates.io-index"
395
checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf"
396
dependencies = [
397
"bitflags 1.3.2",
398
"core-foundation",
399
"libc",
400
]
401
402
[[package]]
403
name = "crc32fast"
404
version = "1.5.4"
405
source = "registry+https://github.com/rust-lang/crates.io-index"
406
checksum = "5f97d3416d5337d15c4b0d78c8c91df922ca143f57ec20e2d1c188333047ef04"
407
dependencies = [
408
"cfg-if",
409
]
410
411
[[package]]
412
name = "crossbeam-utils"
413
version = "0.8.23"
414
source = "registry+https://github.com/rust-lang/crates.io-index"
415
checksum = "a31eee39dddec8330830986fcd7625edb5a24ec90ea038215273bbc3adb08ac6"
416
417
[[package]]
418
name = "cursor-icon"
419
version = "1.2.0"
420
source = "registry+https://github.com/rust-lang/crates.io-index"
421
checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f"
422
423
[[package]]
424
name = "dispatch"
425
version = "0.2.0"
426
source = "registry+https://github.com/rust-lang/crates.io-index"
427
checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
428
429
[[package]]
430
name = "dispatch2"
431
version = "0.3.1"
432
source = "registry+https://github.com/rust-lang/crates.io-index"
433
checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38"
434
dependencies = [
435
"bitflags 2.13.2",
436
"objc2 0.6.5",
437
]
438
439
[[package]]
440
name = "displaydoc"
441
version = "0.2.7"
442
source = "registry+https://github.com/rust-lang/crates.io-index"
443
checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8"
444
dependencies = [
445
"proc-macro2",
446
"quote",
447
"syn 3.0.9",
448
]
449
450
[[package]]
451
name = "dlib"
452
version = "0.5.3"
453
source = "registry+https://github.com/rust-lang/crates.io-index"
454
checksum = "ab8ecd87370524b461f8557c119c405552c396ed91fc0a8eec68679eab26f94a"
455
dependencies = [
456
"libloading",
457
]
458
459
[[package]]
460
name = "document-features"
461
version = "0.2.12"
462
source = "registry+https://github.com/rust-lang/crates.io-index"
463
checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61"
464
dependencies = [
465
"litrs",
466
]
467
468
[[package]]
469
name = "downcast-rs"
470
version = "1.2.1"
471
source = "registry+https://github.com/rust-lang/crates.io-index"
472
checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2"
473
474
[[package]]
475
name = "dpi"
476
version = "0.1.2"
477
source = "registry+https://github.com/rust-lang/crates.io-index"
478
checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76"
479
480
[[package]]
481
name = "ecolor"
482
version = "0.29.1"
483
source = "registry+https://github.com/rust-lang/crates.io-index"
484
checksum = "775cfde491852059e386c4e1deb4aef381c617dc364184c6f6afee99b87c402b"
485
dependencies = [
486
"bytemuck",
487
"emath",
488
]
489
490
[[package]]
491
name = "eframe"
492
version = "0.29.1"
493
source = "registry+https://github.com/rust-lang/crates.io-index"
494
checksum = "8ac2645a9bf4826eb4e91488b1f17b8eaddeef09396706b2f14066461338e24f"
495
dependencies = [
496
"ahash",
497
"bytemuck",
498
"document-features",
499
"egui",
500
"egui-wgpu",
501
"egui-winit",
502
"egui_glow",
503
"glow 0.14.2",
504
"glutin",
505
"glutin-winit",
506
"image",
507
"js-sys",
508
"log",
509
"objc2 0.5.3",
510
"objc2-app-kit 0.2.2",
511
"objc2-foundation 0.2.2",
512
"parking_lot",
513
"percent-encoding",
514
"raw-window-handle",
515
"static_assertions",
516
"wasm-bindgen",
517
"wasm-bindgen-futures",
518
"web-sys",
519
"web-time",
520
"winapi",
521
"windows-sys 0.52.0",
522
"winit",
523
]
524
525
[[package]]
526
name = "egui"
527
version = "0.29.1"
528
source = "registry+https://github.com/rust-lang/crates.io-index"
529
checksum = "53eafabcce0cb2325a59a98736efe0bf060585b437763f8c476957fb274bb974"
530
dependencies = [
531
"ahash",
532
"emath",
533
"epaint",
534
"log",
535
"nohash-hasher",
536
]
537
538
[[package]]
539
name = "egui-wgpu"
540
version = "0.29.1"
541
source = "registry+https://github.com/rust-lang/crates.io-index"
542
checksum = "d00fd5d06d8405397e64a928fa0ef3934b3c30273ea7603e3dc4627b1f7a1a82"
543
dependencies = [
544
"ahash",
545
"bytemuck",
546
"document-features",
547
"egui",
548
"epaint",
549
"log",
550
"thiserror 1.0.69",
551
"type-map",
552
"web-time",
553
"wgpu",
554
"winit",
555
]
556
557
[[package]]
558
name = "egui-winit"
559
version = "0.29.1"
560
source = "registry+https://github.com/rust-lang/crates.io-index"
561
checksum = "0a9c430f4f816340e8e8c1b20eec274186b1be6bc4c7dfc467ed50d57abc36c6"
562
dependencies = [
563
"ahash",
564
"arboard",
565
"egui",
566
"log",
567
"raw-window-handle",
568
"smithay-clipboard",
569
"web-time",
570
"webbrowser",
571
"winit",
572
]
573
574
[[package]]
575
name = "egui_glow"
576
version = "0.29.1"
577
source = "registry+https://github.com/rust-lang/crates.io-index"
578
checksum = "0e39bccc683cd43adab530d8f21a13eb91e80de10bcc38c3f1c16601b6f62b26"
579
dependencies = [
580
"ahash",
581
"bytemuck",
582
"egui",
583
"glow 0.14.2",
584
"log",
585
"memoffset",
586
"wasm-bindgen",
587
"web-sys",
588
"winit",
589
]
590
591
[[package]]
592
name = "emath"
593
version = "0.29.1"
594
source = "registry+https://github.com/rust-lang/crates.io-index"
595
checksum = "b1fe0049ce51d0fb414d029e668dd72eb30bc2b739bf34296ed97bd33df544f3"
596
dependencies = [
597
"bytemuck",
598
]
599
600
[[package]]
601
name = "epaint"
602
version = "0.29.1"
603
source = "registry+https://github.com/rust-lang/crates.io-index"
604
checksum = "a32af8da821bd4f43f2c137e295459ee2e1661d87ca8779dfa0eaf45d870e20f"
605
dependencies = [
606
"ab_glyph",
607
"ahash",
608
"bytemuck",
609
"ecolor",
610
"emath",
611
"epaint_default_fonts",
612
"log",
613
"nohash-hasher",
614
"parking_lot",
615
]
616
617
[[package]]
618
name = "epaint_default_fonts"
619
version = "0.29.1"
620
source = "registry+https://github.com/rust-lang/crates.io-index"
621
checksum = "483440db0b7993cf77a20314f08311dbe95675092405518c0677aa08c151a3ea"
622
623
[[package]]
624
name = "equivalent"
625
version = "1.0.3"
626
source = "registry+https://github.com/rust-lang/crates.io-index"
627
checksum = "00d174d5400e5e8fd687ad1049e2f578285fa914201b1af7e8b112a4546bd826"
628
629
[[package]]
630
name = "errno"
631
version = "0.3.14"
632
source = "registry+https://github.com/rust-lang/crates.io-index"
633
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
634
dependencies = [
635
"libc",
636
"windows-sys 0.61.2",
637
]
638
639
[[package]]
640
name = "error-code"
641
version = "3.4.0"
642
source = "registry+https://github.com/rust-lang/crates.io-index"
643
checksum = "0b5343afd4a8365a643ac588dab4cf234a190c7f6c88c9f6dd6ffe00837661b7"
644
645
[[package]]
646
name = "fdeflate"
647
version = "0.3.7"
648
source = "registry+https://github.com/rust-lang/crates.io-index"
649
checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c"
650
dependencies = [
651
"simd-adler32",
652
]
653
654
[[package]]
655
name = "find-msvc-tools"
656
version = "0.1.15"
657
source = "registry+https://github.com/rust-lang/crates.io-index"
658
checksum = "1c66915cc5391097de7a2b0b972e8505aa33c0df401fd3a6811dbdb32881ba48"
659
660
[[package]]
661
name = "flate2"
662
version = "1.1.11"
663
source = "registry+https://github.com/rust-lang/crates.io-index"
664
checksum = "626d4928326b646e70f65ed36fc7cf9f206bdb68a0019ee7c6b4709da4e084c4"
665
dependencies = [
666
"crc32fast",
667
"miniz_oxide 0.9.1",
668
"zlib-rs",
669
]
670
671
[[package]]
672
name = "foldhash"
673
version = "0.1.5"
674
source = "registry+https://github.com/rust-lang/crates.io-index"
675
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
676
677
[[package]]
678
name = "foreign-types"
679
version = "0.5.0"
680
source = "registry+https://github.com/rust-lang/crates.io-index"
681
checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965"
682
dependencies = [
683
"foreign-types-macros",
684
"foreign-types-shared",
685
]
686
687
[[package]]
688
name = "foreign-types-macros"
689
version = "0.2.4"
690
source = "registry+https://github.com/rust-lang/crates.io-index"
691
checksum = "ea5190182e6915eb873ddbc16e23b711b6eb1f9c00a0d0a3a91b5f6228475225"
692
dependencies = [
693
"proc-macro2",
694
"quote",
695
"syn 3.0.9",
696
]
697
698
[[package]]
699
name = "foreign-types-shared"
700
version = "0.3.1"
701
source = "registry+https://github.com/rust-lang/crates.io-index"
702
checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b"
703
704
[[package]]
705
name = "form_urlencoded"
706
version = "1.2.2"
707
source = "registry+https://github.com/rust-lang/crates.io-index"
708
checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"
709
dependencies = [
710
"percent-encoding",
711
]
712
713
[[package]]
714
name = "futures-core"
715
version = "0.3.34"
716
source = "registry+https://github.com/rust-lang/crates.io-index"
717
checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e"
718
719
[[package]]
720
name = "futures-task"
721
version = "0.3.34"
722
source = "registry+https://github.com/rust-lang/crates.io-index"
723
checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd"
724
725
[[package]]
726
name = "futures-util"
727
version = "0.3.34"
728
source = "registry+https://github.com/rust-lang/crates.io-index"
729
checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc"
730
dependencies = [
731
"futures-core",
732
"futures-task",
733
"pin-project-lite",
734
"slab",
735
]
736
737
[[package]]
738
name = "gethostname"
739
version = "1.1.0"
740
source = "registry+https://github.com/rust-lang/crates.io-index"
741
checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8"
742
dependencies = [
743
"rustix 1.1.6",
744
"windows-link",
745
]
746
747
[[package]]
748
name = "getrandom"
749
version = "0.3.4"
750
source = "registry+https://github.com/rust-lang/crates.io-index"
751
checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
752
dependencies = [
753
"cfg-if",
754
"libc",
755
"r-efi 5.3.0",
756
"wasip2",
757
]
758
759
[[package]]
760
name = "getrandom"
761
version = "0.4.3"
762
source = "registry+https://github.com/rust-lang/crates.io-index"
763
checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099"
764
dependencies = [
765
"cfg-if",
766
"libc",
767
"r-efi 6.0.0",
768
]
769
770
[[package]]
771
name = "gl_generator"
772
version = "0.14.0"
773
source = "registry+https://github.com/rust-lang/crates.io-index"
774
checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d"
775
dependencies = [
776
"khronos_api",
777
"log",
778
"xml-rs",
779
]
780
781
[[package]]
782
name = "glow"
783
version = "0.13.1"
784
source = "registry+https://github.com/rust-lang/crates.io-index"
785
checksum = "bd348e04c43b32574f2de31c8bb397d96c9fcfa1371bd4ca6d8bdc464ab121b1"
786
dependencies = [
787
"js-sys",
788
"slotmap",
789
"wasm-bindgen",
790
"web-sys",
791
]
792
793
[[package]]
794
name = "glow"
795
version = "0.14.2"
796
source = "registry+https://github.com/rust-lang/crates.io-index"
797
checksum = "d51fa363f025f5c111e03f13eda21162faeacb6911fe8caa0c0349f9cf0c4483"
798
dependencies = [
799
"js-sys",
800
"slotmap",
801
"wasm-bindgen",
802
"web-sys",
803
]
804
805
[[package]]
806
name = "glutin"
807
version = "0.32.3"
808
source = "registry+https://github.com/rust-lang/crates.io-index"
809
checksum = "12124de845cacfebedff80e877bb37b5b75c34c5a4c89e47e1cdd67fb6041325"
810
dependencies = [
811
"bitflags 2.13.2",
812
"cfg_aliases 0.2.2",
813
"cgl",
814
"dispatch2",
815
"glutin_egl_sys",
816
"glutin_glx_sys",
817
"glutin_wgl_sys",
818
"libloading",
819
"objc2 0.6.5",
820
"objc2-app-kit 0.3.2",
821
"objc2-core-foundation",
822
"objc2-foundation 0.3.2",
823
"once_cell",
824
"raw-window-handle",
825
"wayland-sys",
826
"windows-sys 0.52.0",
827
"x11-dl",
828
]
829
830
[[package]]
831
name = "glutin-winit"
832
version = "0.5.0"
833
source = "registry+https://github.com/rust-lang/crates.io-index"
834
checksum = "85edca7075f8fc728f28cb8fbb111a96c3b89e930574369e3e9c27eb75d3788f"
835
dependencies = [
836
"cfg_aliases 0.2.2",
837
"glutin",
838
"raw-window-handle",
839
"winit",
840
]
841
842
[[package]]
843
name = "glutin_egl_sys"
844
version = "0.7.1"
845
source = "registry+https://github.com/rust-lang/crates.io-index"
846
checksum = "4c4680ba6195f424febdc3ba46e7a42a0e58743f2edb115297b86d7f8ecc02d2"
847
dependencies = [
848
"gl_generator",
849
"windows-sys 0.52.0",
850
]
851
852
[[package]]
853
name = "glutin_glx_sys"
854
version = "0.6.1"
855
source = "registry+https://github.com/rust-lang/crates.io-index"
856
checksum = "8a7bb2938045a88b612499fbcba375a77198e01306f52272e692f8c1f3751185"
857
dependencies = [
858
"gl_generator",
859
"x11-dl",
860
]
861
862
[[package]]
863
name = "glutin_wgl_sys"
864
version = "0.6.1"
865
source = "registry+https://github.com/rust-lang/crates.io-index"
866
checksum = "2c4ee00b289aba7a9e5306d57c2d05499b2e5dc427f84ac708bd2c090212cf3e"
867
dependencies = [
868
"gl_generator",
869
]
870
871
[[package]]
872
name = "gpu-alloc"
873
version = "0.6.2"
874
source = "registry+https://github.com/rust-lang/crates.io-index"
875
checksum = "45cf04b2726f02df5508c6de726acdc90cdf97ac771a9a0ffd8ba10a6e696bf9"
876
dependencies = [
877
"bitflags 2.13.2",
878
"gpu-alloc-types",
879
]
880
881
[[package]]
882
name = "gpu-alloc-types"
883
version = "0.3.1"
884
source = "registry+https://github.com/rust-lang/crates.io-index"
885
checksum = "b2bbed164dd10ed526c2e4fe3e721ca4a71c61730e5aafac6844b417b3227058"
886
dependencies = [
887
"bitflags 2.13.2",
888
]
889
890
[[package]]
891
name = "gpu-allocator"
892
version = "0.26.0"
893
source = "registry+https://github.com/rust-lang/crates.io-index"
894
checksum = "fdd4240fc91d3433d5e5b0fc5b67672d771850dc19bbee03c1381e19322803d7"
895
dependencies = [
896
"log",
897
"presser",
898
"thiserror 1.0.69",
899
"winapi",
900
"windows",
901
]
902
903
[[package]]
904
name = "gpu-descriptor"
905
version = "0.3.2"
906
source = "registry+https://github.com/rust-lang/crates.io-index"
907
checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca"
908
dependencies = [
909
"bitflags 2.13.2",
910
"gpu-descriptor-types",
911
"hashbrown 0.15.5",
912
]
913
914
[[package]]
915
name = "gpu-descriptor-types"
916
version = "0.2.0"
917
source = "registry+https://github.com/rust-lang/crates.io-index"
918
checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91"
919
dependencies = [
920
"bitflags 2.13.2",
921
]
922
923
[[package]]
924
name = "hashbrown"
925
version = "0.15.5"
926
source = "registry+https://github.com/rust-lang/crates.io-index"
927
checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
928
dependencies = [
929
"foldhash",
930
]
931
932
[[package]]
933
name = "hashbrown"
934
version = "0.17.1"
935
source = "registry+https://github.com/rust-lang/crates.io-index"
936
checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a"
937
938
[[package]]
939
name = "hassle-rs"
940
version = "0.11.0"
941
source = "registry+https://github.com/rust-lang/crates.io-index"
942
checksum = "af2a7e73e1f34c48da31fb668a907f250794837e08faa144fd24f0b8b741e890"
943
dependencies = [
944
"bitflags 2.13.2",
945
"com",
946
"libc",
947
"libloading",
948
"thiserror 1.0.69",
949
"widestring",
950
"winapi",
951
]
952
953
[[package]]
954
name = "hermit-abi"
955
version = "0.5.3"
956
source = "registry+https://github.com/rust-lang/crates.io-index"
957
checksum = "e17592d60ebacc7d5e169f4663c5f84f9161cc90328abcfe8456f41e4dfcb284"
958
959
[[package]]
960
name = "hexf-parse"
961
version = "0.2.1"
962
source = "registry+https://github.com/rust-lang/crates.io-index"
963
checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df"
964
965
[[package]]
966
name = "icu_collections"
967
version = "2.4.0"
968
source = "registry+https://github.com/rust-lang/crates.io-index"
969
checksum = "fe090a42a0d3140fed8c63263ed1fecc02422cb2f4bfe55cd8de2de1b8e105dd"
970
dependencies = [
971
"displaydoc",
972
"potential_utf",
973
"utf8_iter",
974
"yoke",
975
"zerofrom",
976
"zerovec",
977
]
978
979
[[package]]
980
name = "icu_locale_core"
981
version = "2.4.0"
982
source = "registry+https://github.com/rust-lang/crates.io-index"
983
checksum = "25d29b57c17c6528d0dc4c2141cfa2d08200465acb537a3909c8b9b8a4a984c0"
984
dependencies = [
985
"displaydoc",
986
"litemap",
987
"tinystr",
988
"writeable",
989
"zerovec",
990
]
991
992
[[package]]
993
name = "icu_normalizer"
994
version = "2.4.0"
995
source = "registry+https://github.com/rust-lang/crates.io-index"
996
checksum = "404a3b8c486f205c87fe7f23ab6894d84a4ad76d6e4671ae1981ba7def87c599"
997
dependencies = [
998
"icu_collections",
999
"icu_normalizer_data",
1000
"icu_properties",
1001
"icu_provider",
1002
"smallvec",
1003
"zerovec",
1004
]
1005
1006
[[package]]
1007
name = "icu_normalizer_data"
1008
version = "2.4.0"
1009
source = "registry+https://github.com/rust-lang/crates.io-index"
1010
checksum = "20f0088bfb7441f7a37fa0c9e20cb1e9cba1cac6b9ce8cd2a6dc44294f8e8cbc"
1011
1012
[[package]]
1013
name = "icu_properties"
1014
version = "2.4.0"
1015
source = "registry+https://github.com/rust-lang/crates.io-index"
1016
checksum = "2ea83d991c56158f7cf898bf86436c1dfe7c07ee82fe88951f2695c9f37a379f"
1017
dependencies = [
1018
"displaydoc",
1019
"icu_collections",
1020
"icu_locale_core",
1021
"icu_properties_data",
1022
"icu_provider",
1023
"zerotrie",
1024
"zerovec",
1025
]
1026
1027
[[package]]
1028
name = "icu_properties_data"
1029
version = "2.4.0"
1030
source = "registry+https://github.com/rust-lang/crates.io-index"
1031
checksum = "b98f29af82d02b163fe50161388350e743bb3107cc8e8c2f7314cb505faddfcf"
1032
1033
[[package]]
1034
name = "icu_provider"
1035
version = "2.4.0"
1036
source = "registry+https://github.com/rust-lang/crates.io-index"
1037
checksum = "413099315636c588ee8f011190b329b971a09a8fae9d157e01dcae8379468514"
1038
dependencies = [
1039
"displaydoc",
1040
"icu_locale_core",
1041
"writeable",
1042
"yoke",
1043
"zerofrom",
1044
"zerotrie",
1045
"zerovec",
1046
]
1047
1048
[[package]]
1049
name = "idna"
1050
version = "1.1.0"
1051
source = "registry+https://github.com/rust-lang/crates.io-index"
1052
checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"
1053
dependencies = [
1054
"idna_adapter",
1055
"smallvec",
1056
"utf8_iter",
1057
]
1058
1059
[[package]]
1060
name = "idna_adapter"
1061
version = "1.2.2"
1062
source = "registry+https://github.com/rust-lang/crates.io-index"
1063
checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714"
1064
dependencies = [
1065
"icu_normalizer",
1066
"icu_properties",
1067
]
1068
1069
[[package]]
1070
name = "image"
1071
version = "0.25.10"
1072
source = "registry+https://github.com/rust-lang/crates.io-index"
1073
checksum = "85ab80394333c02fe689eaf900ab500fbd0c2213da414687ebf995a65d5a6104"
1074
dependencies = [
1075
"bytemuck",
1076
"byteorder-lite",
1077
"moxcms",
1078
"num-traits",
1079
"png",
1080
]
1081
1082
[[package]]
1083
name = "indexmap"
1084
version = "2.14.2"
1085
source = "registry+https://github.com/rust-lang/crates.io-index"
1086
checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855"
1087
dependencies = [
1088
"equivalent",
1089
"hashbrown 0.17.1",
1090
]
1091
1092
[[package]]
1093
name = "jni"
1094
version = "0.22.4"
1095
source = "registry+https://github.com/rust-lang/crates.io-index"
1096
checksum = "5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498"
1097
dependencies = [
1098
"cfg-if",
1099
"combine",
1100
"jni-macros",
1101
"jni-sys 0.4.1",
1102
"log",
1103
"simd_cesu8",
1104
"thiserror 2.0.21",
1105
"walkdir",
1106
"windows-link",
1107
]
1108
1109
[[package]]
1110
name = "jni-macros"
1111
version = "0.22.4"
1112
source = "registry+https://github.com/rust-lang/crates.io-index"
1113
checksum = "a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3"
1114
dependencies = [
1115
"proc-macro2",
1116
"quote",
1117
"rustc_version",
1118
"simd_cesu8",
1119
"syn 2.0.119",
1120
]
1121
1122
[[package]]
1123
name = "jni-sys"
1124
version = "0.3.1"
1125
source = "registry+https://github.com/rust-lang/crates.io-index"
1126
checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258"
1127
dependencies = [
1128
"jni-sys 0.4.1",
1129
]
1130
1131
[[package]]
1132
name = "jni-sys"
1133
version = "0.4.1"
1134
source = "registry+https://github.com/rust-lang/crates.io-index"
1135
checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2"
1136
dependencies = [
1137
"jni-sys-macros",
1138
]
1139
1140
[[package]]
1141
name = "jni-sys-macros"
1142
version = "0.4.1"
1143
source = "registry+https://github.com/rust-lang/crates.io-index"
1144
checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264"
1145
dependencies = [
1146
"quote",
1147
"syn 2.0.119",
1148
]
1149
1150
[[package]]
1151
name = "jobserver"
1152
version = "0.1.35"
1153
source = "registry+https://github.com/rust-lang/crates.io-index"
1154
checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3"
1155
dependencies = [
1156
"getrandom 0.4.3",
1157
"libc",
1158
]
1159
1160
[[package]]
1161
name = "js-sys"
1162
version = "0.3.107"
1163
source = "registry+https://github.com/rust-lang/crates.io-index"
1164
checksum = "8dc09d2154098bbf4ef54eab6b117a3c24cbbffe94046b16ee6d6d4510584d3a"
1165
dependencies = [
1166
"cfg-if",
1167
"futures-util",
1168
"wasm-bindgen",
1169
]
1170
1171
[[package]]
1172
name = "khronos-egl"
1173
version = "6.0.0"
1174
source = "registry+https://github.com/rust-lang/crates.io-index"
1175
checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76"
1176
dependencies = [
1177
"libc",
1178
"libloading",
1179
"pkg-config",
1180
]
1181
1182
[[package]]
1183
name = "khronos_api"
1184
version = "3.1.0"
1185
source = "registry+https://github.com/rust-lang/crates.io-index"
1186
checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc"
1187
1188
[[package]]
1189
name = "libc"
1190
version = "0.2.191"
1191
source = "registry+https://github.com/rust-lang/crates.io-index"
1192
checksum = "65cd87c9a6d60536580b316ad985726104730a5151c99845f2490428ef91240a"
1193
1194
[[package]]
1195
name = "libloading"
1196
version = "0.8.9"
1197
source = "registry+https://github.com/rust-lang/crates.io-index"
1198
checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55"
1199
dependencies = [
1200
"cfg-if",
1201
"windows-link",
1202
]
1203
1204
[[package]]
1205
name = "libredox"
1206
version = "0.1.25"
1207
source = "registry+https://github.com/rust-lang/crates.io-index"
1208
checksum = "61ff90caf6077a803a240f62fdbe88645a890bbca49ef8174c3cb0404362171d"
1209
dependencies = [
1210
"bitflags 2.13.2",
1211
"libc",
1212
"plain",
1213
"redox_syscall 0.9.5",
1214
]
1215
1216
[[package]]
1217
name = "linux-raw-sys"
1218
version = "0.4.15"
1219
source = "registry+https://github.com/rust-lang/crates.io-index"
1220
checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
1221
1222
[[package]]
1223
name = "linux-raw-sys"
1224
version = "0.12.1"
1225
source = "registry+https://github.com/rust-lang/crates.io-index"
1226
checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53"
1227
1228
[[package]]
1229
name = "litemap"
1230
version = "0.8.3"
1231
source = "registry+https://github.com/rust-lang/crates.io-index"
1232
checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae"
1233
1234
[[package]]
1235
name = "litrs"
1236
version = "1.0.1"
1237
source = "registry+https://github.com/rust-lang/crates.io-index"
1238
checksum = "4744e383959f0db86ede514b809b1c53251889093803c05267acc7d4e7030d70"
1239
1240
[[package]]
1241
name = "lock_api"
1242
version = "0.4.14"
1243
source = "registry+https://github.com/rust-lang/crates.io-index"
1244
checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
1245
dependencies = [
1246
"scopeguard",
1247
]
1248
1249
[[package]]
1250
name = "log"
1251
version = "0.4.35"
1252
source = "registry+https://github.com/rust-lang/crates.io-index"
1253
checksum = "5d15f86d12da44cd8d4ec3c73984537eb7f4cadcb9776a575a0a8a05ca11005c"
1254
1255
[[package]]
1256
name = "malloc_buf"
1257
version = "0.0.6"
1258
source = "registry+https://github.com/rust-lang/crates.io-index"
1259
checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
1260
dependencies = [
1261
"libc",
1262
]
1263
1264
[[package]]
1265
name = "memchr"
1266
version = "2.8.3"
1267
source = "registry+https://github.com/rust-lang/crates.io-index"
1268
checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98"
1269
1270
[[package]]
1271
name = "memmap2"
1272
version = "0.9.12"
1273
source = "registry+https://github.com/rust-lang/crates.io-index"
1274
checksum = "6b0ca1155a9ecc25aa12e8313a119f32edf0255fea2f44839c4ac0a12b2ac157"
1275
dependencies = [
1276
"libc",
1277
]
1278
1279
[[package]]
1280
name = "memoffset"
1281
version = "0.9.1"
1282
source = "registry+https://github.com/rust-lang/crates.io-index"
1283
checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
1284
dependencies = [
1285
"autocfg",
1286
]
1287
1288
[[package]]
1289
name = "metal"
1290
version = "0.29.0"
1291
source = "registry+https://github.com/rust-lang/crates.io-index"
1292
checksum = "7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21"
1293
dependencies = [
1294
"bitflags 2.13.2",
1295
"block",
1296
"core-graphics-types",
1297
"foreign-types",
1298
"log",
1299
"objc",
1300
"paste",
1301
]
1302
1303
[[package]]
1304
name = "miniz_oxide"
1305
version = "0.8.9"
1306
source = "registry+https://github.com/rust-lang/crates.io-index"
1307
checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
1308
dependencies = [
1309
"adler2",
1310
"simd-adler32",
1311
]
1312
1313
[[package]]
1314
name = "miniz_oxide"
1315
version = "0.9.1"
1316
source = "registry+https://github.com/rust-lang/crates.io-index"
1317
checksum = "b63fbc4a50860e98e7b2aa7804ded1db5cbc3aff9193adaff57a6931bf7c4b4c"
1318
dependencies = [
1319
"adler2",
1320
"simd-adler32",
1321
]
1322
1323
[[package]]
1324
name = "moxcms"
1325
version = "0.8.1"
1326
source = "registry+https://github.com/rust-lang/crates.io-index"
1327
checksum = "bb85c154ba489f01b25c0d36ae69a87e4a1c73a72631fc6c0eb6dde34a73e44b"
1328
dependencies = [
1329
"num-traits",
1330
"pxfm",
1331
]
1332
1333
[[package]]
1334
name = "naga"
1335
version = "22.1.0"
1336
source = "registry+https://github.com/rust-lang/crates.io-index"
1337
checksum = "8bd5a652b6faf21496f2cfd88fc49989c8db0825d1f6746b1a71a6ede24a63ad"
1338
dependencies = [
1339
"arrayvec",
1340
"bit-set",
1341
"bitflags 2.13.2",
1342
"cfg_aliases 0.1.1",
1343
"codespan-reporting",
1344
"hexf-parse",
1345
"indexmap",
1346
"log",
1347
"rustc-hash 1.1.0",
1348
"spirv",
1349
"termcolor",
1350
"thiserror 1.0.69",
1351
"unicode-xid",
1352
]
1353
1354
[[package]]
1355
name = "ndk"
1356
version = "0.9.0"
1357
source = "registry+https://github.com/rust-lang/crates.io-index"
1358
checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4"
1359
dependencies = [
1360
"bitflags 2.13.2",
1361
"jni-sys 0.3.1",
1362
"log",
1363
"ndk-sys 0.6.0+11769913",
1364
"num_enum",
1365
"raw-window-handle",
1366
"thiserror 1.0.69",
1367
]
1368
1369
[[package]]
1370
name = "ndk-context"
1371
version = "0.1.1"
1372
source = "registry+https://github.com/rust-lang/crates.io-index"
1373
checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
1374
1375
[[package]]
1376
name = "ndk-sys"
1377
version = "0.5.0+25.2.9519653"
1378
source = "registry+https://github.com/rust-lang/crates.io-index"
1379
checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691"
1380
dependencies = [
1381
"jni-sys 0.3.1",
1382
]
1383
1384
[[package]]
1385
name = "ndk-sys"
1386
version = "0.6.0+11769913"
1387
source = "registry+https://github.com/rust-lang/crates.io-index"
1388
checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873"
1389
dependencies = [
1390
"jni-sys 0.3.1",
1391
]
1392
1393
[[package]]
1394
name = "nohash-hasher"
1395
version = "0.2.0"
1396
source = "registry+https://github.com/rust-lang/crates.io-index"
1397
checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451"
1398
1399
[[package]]
1400
name = "num-traits"
1401
version = "0.2.19"
1402
source = "registry+https://github.com/rust-lang/crates.io-index"
1403
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
1404
dependencies = [
1405
"autocfg",
1406
]
1407
1408
[[package]]
1409
name = "num_enum"
1410
version = "0.7.6"
1411
source = "registry+https://github.com/rust-lang/crates.io-index"
1412
checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26"
1413
dependencies = [
1414
"num_enum_derive",
1415
"rustversion",
1416
]
1417
1418
[[package]]
1419
name = "num_enum_derive"
1420
version = "0.7.6"
1421
source = "registry+https://github.com/rust-lang/crates.io-index"
1422
checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8"
1423
dependencies = [
1424
"proc-macro-crate",
1425
"proc-macro2",
1426
"quote",
1427
"syn 2.0.119",
1428
]
1429
1430
[[package]]
1431
name = "objc"
1432
version = "0.2.7"
1433
source = "registry+https://github.com/rust-lang/crates.io-index"
1434
checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
1435
dependencies = [
1436
"malloc_buf",
1437
]
1438
1439
[[package]]
1440
name = "objc-sys"
1441
version = "0.3.5"
1442
source = "registry+https://github.com/rust-lang/crates.io-index"
1443
checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310"
1444
1445
[[package]]
1446
name = "objc2"
1447
version = "0.5.3"
1448
source = "registry+https://github.com/rust-lang/crates.io-index"
1449
checksum = "19d5490aaf8f1d7cf7688dfa9b0ce07900e168852c45cd2c03f534dfd27cfd0b"
1450
dependencies = [
1451
"objc-sys",
1452
"objc2-encode",
1453
]
1454
1455
[[package]]
1456
name = "objc2"
1457
version = "0.6.5"
1458
source = "registry+https://github.com/rust-lang/crates.io-index"
1459
checksum = "08849bbd4767dfae9457696856ae1c84fe4e0281bbe4a7abff2d0e06fb7981f8"
1460
dependencies = [
1461
"objc2-encode",
1462
]
1463
1464
[[package]]
1465
name = "objc2-app-kit"
1466
version = "0.2.2"
1467
source = "registry+https://github.com/rust-lang/crates.io-index"
1468
checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff"
1469
dependencies = [
1470
"bitflags 2.13.2",
1471
"block2",
1472
"libc",
1473
"objc2 0.5.3",
1474
"objc2-core-data",
1475
"objc2-core-image",
1476
"objc2-foundation 0.2.2",
1477
"objc2-quartz-core",
1478
]
1479
1480
[[package]]
1481
name = "objc2-app-kit"
1482
version = "0.3.2"
1483
source = "registry+https://github.com/rust-lang/crates.io-index"
1484
checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c"
1485
dependencies = [
1486
"bitflags 2.13.2",
1487
"objc2 0.6.5",
1488
"objc2-core-foundation",
1489
"objc2-core-graphics",
1490
"objc2-foundation 0.3.2",
1491
]
1492
1493
[[package]]
1494
name = "objc2-cloud-kit"
1495
version = "0.2.2"
1496
source = "registry+https://github.com/rust-lang/crates.io-index"
1497
checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009"
1498
dependencies = [
1499
"bitflags 2.13.2",
1500
"block2",
1501
"objc2 0.5.3",
1502
"objc2-core-location",
1503
"objc2-foundation 0.2.2",
1504
]
1505
1506
[[package]]
1507
name = "objc2-contacts"
1508
version = "0.2.2"
1509
source = "registry+https://github.com/rust-lang/crates.io-index"
1510
checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889"
1511
dependencies = [
1512
"block2",
1513
"objc2 0.5.3",
1514
"objc2-foundation 0.2.2",
1515
]
1516
1517
[[package]]
1518
name = "objc2-core-data"
1519
version = "0.2.2"
1520
source = "registry+https://github.com/rust-lang/crates.io-index"
1521
checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef"
1522
dependencies = [
1523
"bitflags 2.13.2",
1524
"block2",
1525
"objc2 0.5.3",
1526
"objc2-foundation 0.2.2",
1527
]
1528
1529
[[package]]
1530
name = "objc2-core-foundation"
1531
version = "0.3.2"
1532
source = "registry+https://github.com/rust-lang/crates.io-index"
1533
checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536"
1534
dependencies = [
1535
"bitflags 2.13.2",
1536
"dispatch2",
1537
"objc2 0.6.5",
1538
]
1539
1540
[[package]]
1541
name = "objc2-core-graphics"
1542
version = "0.3.2"
1543
source = "registry+https://github.com/rust-lang/crates.io-index"
1544
checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807"
1545
dependencies = [
1546
"bitflags 2.13.2",
1547
"dispatch2",
1548
"objc2 0.6.5",
1549
"objc2-core-foundation",
1550
"objc2-io-surface",
1551
]
1552
1553
[[package]]
1554
name = "objc2-core-image"
1555
version = "0.2.2"
1556
source = "registry+https://github.com/rust-lang/crates.io-index"
1557
checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80"
1558
dependencies = [
1559
"block2",
1560
"objc2 0.5.3",
1561
"objc2-foundation 0.2.2",
1562
"objc2-metal",
1563
]
1564
1565
[[package]]
1566
name = "objc2-core-location"
1567
version = "0.2.2"
1568
source = "registry+https://github.com/rust-lang/crates.io-index"
1569
checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781"
1570
dependencies = [
1571
"block2",
1572
"objc2 0.5.3",
1573
"objc2-contacts",
1574
"objc2-foundation 0.2.2",
1575
]
1576
1577
[[package]]
1578
name = "objc2-encode"
1579
version = "4.1.0"
1580
source = "registry+https://github.com/rust-lang/crates.io-index"
1581
checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33"
1582
1583
[[package]]
1584
name = "objc2-foundation"
1585
version = "0.2.2"
1586
source = "registry+https://github.com/rust-lang/crates.io-index"
1587
checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8"
1588
dependencies = [
1589
"bitflags 2.13.2",
1590
"block2",
1591
"dispatch",
1592
"libc",
1593
"objc2 0.5.3",
1594
]
1595
1596
[[package]]
1597
name = "objc2-foundation"
1598
version = "0.3.2"
1599
source = "registry+https://github.com/rust-lang/crates.io-index"
1600
checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272"
1601
dependencies = [
1602
"bitflags 2.13.2",
1603
"objc2 0.6.5",
1604
"objc2-core-foundation",
1605
]
1606
1607
[[package]]
1608
name = "objc2-io-surface"
1609
version = "0.3.2"
1610
source = "registry+https://github.com/rust-lang/crates.io-index"
1611
checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d"
1612
dependencies = [
1613
"bitflags 2.13.2",
1614
"objc2 0.6.5",
1615
"objc2-core-foundation",
1616
]
1617
1618
[[package]]
1619
name = "objc2-link-presentation"
1620
version = "0.2.2"
1621
source = "registry+https://github.com/rust-lang/crates.io-index"
1622
checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398"
1623
dependencies = [
1624
"block2",
1625
"objc2 0.5.3",
1626
"objc2-app-kit 0.2.2",
1627
"objc2-foundation 0.2.2",
1628
]
1629
1630
[[package]]
1631
name = "objc2-metal"
1632
version = "0.2.2"
1633
source = "registry+https://github.com/rust-lang/crates.io-index"
1634
checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6"
1635
dependencies = [
1636
"bitflags 2.13.2",
1637
"block2",
1638
"objc2 0.5.3",
1639
"objc2-foundation 0.2.2",
1640
]
1641
1642
[[package]]
1643
name = "objc2-quartz-core"
1644
version = "0.2.2"
1645
source = "registry+https://github.com/rust-lang/crates.io-index"
1646
checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a"
1647
dependencies = [
1648
"bitflags 2.13.2",
1649
"block2",
1650
"objc2 0.5.3",
1651
"objc2-foundation 0.2.2",
1652
"objc2-metal",
1653
]
1654
1655
[[package]]
1656
name = "objc2-symbols"
1657
version = "0.2.2"
1658
source = "registry+https://github.com/rust-lang/crates.io-index"
1659
checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc"
1660
dependencies = [
1661
"objc2 0.5.3",
1662
"objc2-foundation 0.2.2",
1663
]
1664
1665
[[package]]
1666
name = "objc2-ui-kit"
1667
version = "0.2.2"
1668
source = "registry+https://github.com/rust-lang/crates.io-index"
1669
checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f"
1670
dependencies = [
1671
"bitflags 2.13.2",
1672
"block2",
1673
"objc2 0.5.3",
1674
"objc2-cloud-kit",
1675
"objc2-core-data",
1676
"objc2-core-image",
1677
"objc2-core-location",
1678
"objc2-foundation 0.2.2",
1679
"objc2-link-presentation",
1680
"objc2-quartz-core",
1681
"objc2-symbols",
1682
"objc2-uniform-type-identifiers",
1683
"objc2-user-notifications",
1684
]
1685
1686
[[package]]
1687
name = "objc2-uniform-type-identifiers"
1688
version = "0.2.2"
1689
source = "registry+https://github.com/rust-lang/crates.io-index"
1690
checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe"
1691
dependencies = [
1692
"block2",
1693
"objc2 0.5.3",
1694
"objc2-foundation 0.2.2",
1695
]
1696
1697
[[package]]
1698
name = "objc2-user-notifications"
1699
version = "0.2.2"
1700
source = "registry+https://github.com/rust-lang/crates.io-index"
1701
checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3"
1702
dependencies = [
1703
"bitflags 2.13.2",
1704
"block2",
1705
"objc2 0.5.3",
1706
"objc2-core-location",
1707
"objc2-foundation 0.2.2",
1708
]
1709
1710
[[package]]
1711
name = "once_cell"
1712
version = "1.21.4"
1713
source = "registry+https://github.com/rust-lang/crates.io-index"
1714
checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
1715
1716
[[package]]
1717
name = "orbclient"
1718
version = "0.3.55"
1719
source = "registry+https://github.com/rust-lang/crates.io-index"
1720
checksum = "5df339f526ea9a60e371768d50efc2f2508c7203290731565d1f7a6f71d21747"
1721
dependencies = [
1722
"libc",
1723
"libredox",
1724
]
1725
1726
[[package]]
1727
name = "owned_ttf_parser"
1728
version = "0.25.1"
1729
source = "registry+https://github.com/rust-lang/crates.io-index"
1730
checksum = "36820e9051aca1014ddc75770aab4d68bc1e9e632f0f5627c4086bc216fb583b"
1731
dependencies = [
1732
"ttf-parser",
1733
]
1734
1735
[[package]]
1736
name = "paperdoll-renderer"
1737
version = "0.1.0"
1738
dependencies = [
1739
"eframe",
1740
"libloading",
1741
]
1742
1743
[[package]]
1744
name = "parking_lot"
1745
version = "0.12.5"
1746
source = "registry+https://github.com/rust-lang/crates.io-index"
1747
checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
1748
dependencies = [
1749
"lock_api",
1750
"parking_lot_core",
1751
]
1752
1753
[[package]]
1754
name = "parking_lot_core"
1755
version = "0.9.12"
1756
source = "registry+https://github.com/rust-lang/crates.io-index"
1757
checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
1758
dependencies = [
1759
"cfg-if",
1760
"libc",
1761
"redox_syscall 0.5.18",
1762
"smallvec",
1763
"windows-link",
1764
]
1765
1766
[[package]]
1767
name = "paste"
1768
version = "1.0.15"
1769
source = "registry+https://github.com/rust-lang/crates.io-index"
1770
checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
1771
1772
[[package]]
1773
name = "percent-encoding"
1774
version = "2.3.2"
1775
source = "registry+https://github.com/rust-lang/crates.io-index"
1776
checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
1777
1778
[[package]]
1779
name = "pin-project"
1780
version = "1.1.13"
1781
source = "registry+https://github.com/rust-lang/crates.io-index"
1782
checksum = "2466b2336ed02bcdca6b294417127b90ec92038d1d5c4fbeac971a922e0e0924"
1783
dependencies = [
1784
"pin-project-internal",
1785
]
1786
1787
[[package]]
1788
name = "pin-project-internal"
1789
version = "1.1.13"
1790
source = "registry+https://github.com/rust-lang/crates.io-index"
1791
checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b"
1792
dependencies = [
1793
"proc-macro2",
1794
"quote",
1795
"syn 2.0.119",
1796
]
1797
1798
[[package]]
1799
name = "pin-project-lite"
1800
version = "0.2.17"
1801
source = "registry+https://github.com/rust-lang/crates.io-index"
1802
checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"
1803
1804
[[package]]
1805
name = "pkg-config"
1806
version = "0.3.34"
1807
source = "registry+https://github.com/rust-lang/crates.io-index"
1808
checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548"
1809
1810
[[package]]
1811
name = "plain"
1812
version = "0.2.3"
1813
source = "registry+https://github.com/rust-lang/crates.io-index"
1814
checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6"
1815
1816
[[package]]
1817
name = "png"
1818
version = "0.18.1"
1819
source = "registry+https://github.com/rust-lang/crates.io-index"
1820
checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61"
1821
dependencies = [
1822
"bitflags 2.13.2",
1823
"crc32fast",
1824
"fdeflate",
1825
"flate2",
1826
"miniz_oxide 0.8.9",
1827
]
1828
1829
[[package]]
1830
name = "polling"
1831
version = "3.11.0"
1832
source = "registry+https://github.com/rust-lang/crates.io-index"
1833
checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218"
1834
dependencies = [
1835
"cfg-if",
1836
"concurrent-queue",
1837
"hermit-abi",
1838
"pin-project-lite",
1839
"rustix 1.1.6",
1840
"windows-sys 0.61.2",
1841
]
1842
1843
[[package]]
1844
name = "potential_utf"
1845
version = "0.1.6"
1846
source = "registry+https://github.com/rust-lang/crates.io-index"
1847
checksum = "d83eb9bc6d8e5cf568e7a1101d60ee05e81ed50ea106026f3d18deeb046d7661"
1848
dependencies = [
1849
"zerovec",
1850
]
1851
1852
[[package]]
1853
name = "presser"
1854
version = "0.3.1"
1855
source = "registry+https://github.com/rust-lang/crates.io-index"
1856
checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa"
1857
1858
[[package]]
1859
name = "proc-macro-crate"
1860
version = "3.5.0"
1861
source = "registry+https://github.com/rust-lang/crates.io-index"
1862
checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f"
1863
dependencies = [
1864
"toml_edit",
1865
]
1866
1867
[[package]]
1868
name = "proc-macro2"
1869
version = "1.0.107"
1870
source = "registry+https://github.com/rust-lang/crates.io-index"
1871
checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9"
1872
dependencies = [
1873
"unicode-ident",
1874
]
1875
1876
[[package]]
1877
name = "profiling"
1878
version = "1.0.18"
1879
source = "registry+https://github.com/rust-lang/crates.io-index"
1880
checksum = "3d595e54a326bc53c1c197b32d295e14b169e3cfeaa8dc82b529f947fba6bcf5"
1881
1882
[[package]]
1883
name = "pxfm"
1884
version = "0.1.30"
1885
source = "registry+https://github.com/rust-lang/crates.io-index"
1886
checksum = "d55d956fa96f5ec02be2e13af0e20391a5aa83d6a074e3ad368959d0fab299ea"
1887
1888
[[package]]
1889
name = "quick-xml"
1890
version = "0.41.0"
1891
source = "registry+https://github.com/rust-lang/crates.io-index"
1892
checksum = "e660451e55124f798a69a5af3f49ccfbefbd41910eefd25caf2393e1f3473ec1"
1893
dependencies = [
1894
"memchr",
1895
]
1896
1897
[[package]]
1898
name = "quote"
1899
version = "1.0.47"
1900
source = "registry+https://github.com/rust-lang/crates.io-index"
1901
checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001"
1902
dependencies = [
1903
"proc-macro2",
1904
]
1905
1906
[[package]]
1907
name = "r-efi"
1908
version = "5.3.0"
1909
source = "registry+https://github.com/rust-lang/crates.io-index"
1910
checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
1911
1912
[[package]]
1913
name = "r-efi"
1914
version = "6.0.0"
1915
source = "registry+https://github.com/rust-lang/crates.io-index"
1916
checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
1917
1918
[[package]]
1919
name = "raw-window-handle"
1920
version = "0.6.2"
1921
source = "registry+https://github.com/rust-lang/crates.io-index"
1922
checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539"
1923
1924
[[package]]
1925
name = "redox_syscall"
1926
version = "0.4.1"
1927
source = "registry+https://github.com/rust-lang/crates.io-index"
1928
checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
1929
dependencies = [
1930
"bitflags 1.3.2",
1931
]
1932
1933
[[package]]
1934
name = "redox_syscall"
1935
version = "0.5.18"
1936
source = "registry+https://github.com/rust-lang/crates.io-index"
1937
checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
1938
dependencies = [
1939
"bitflags 2.13.2",
1940
]
1941
1942
[[package]]
1943
name = "redox_syscall"
1944
version = "0.9.5"
1945
source = "registry+https://github.com/rust-lang/crates.io-index"
1946
checksum = "580c875845b41ecb1564ad1ae4703044cef774145e3d7a94dc2b3fa7c97868fd"
1947
dependencies = [
1948
"bitflags 2.13.2",
1949
]
1950
1951
[[package]]
1952
name = "renderdoc-sys"
1953
version = "1.1.0"
1954
source = "registry+https://github.com/rust-lang/crates.io-index"
1955
checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832"
1956
1957
[[package]]
1958
name = "rustc-hash"
1959
version = "1.1.0"
1960
source = "registry+https://github.com/rust-lang/crates.io-index"
1961
checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
1962
1963
[[package]]
1964
name = "rustc-hash"
1965
version = "2.1.3"
1966
source = "registry+https://github.com/rust-lang/crates.io-index"
1967
checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d"
1968
1969
[[package]]
1970
name = "rustc_version"
1971
version = "0.4.1"
1972
source = "registry+https://github.com/rust-lang/crates.io-index"
1973
checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
1974
dependencies = [
1975
"semver",
1976
]
1977
1978
[[package]]
1979
name = "rustix"
1980
version = "0.38.44"
1981
source = "registry+https://github.com/rust-lang/crates.io-index"
1982
checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154"
1983
dependencies = [
1984
"bitflags 2.13.2",
1985
"errno",
1986
"libc",
1987
"linux-raw-sys 0.4.15",
1988
"windows-sys 0.59.0",
1989
]
1990
1991
[[package]]
1992
name = "rustix"
1993
version = "1.1.6"
1994
source = "registry+https://github.com/rust-lang/crates.io-index"
1995
checksum = "e5e76742e5294153d4dde1207dbec5bdd81eef6fabdc0d2118babadabfd858aa"
1996
dependencies = [
1997
"bitflags 2.13.2",
1998
"errno",
1999
"libc",
2000
"linux-raw-sys 0.12.1",
2001
"windows-sys 0.61.2",
2002
]
2003
2004
[[package]]
2005
name = "rustversion"
2006
version = "1.0.23"
2007
source = "registry+https://github.com/rust-lang/crates.io-index"
2008
checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f"
2009
2010
[[package]]
2011
name = "same-file"
2012
version = "1.0.6"
2013
source = "registry+https://github.com/rust-lang/crates.io-index"
2014
checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
2015
dependencies = [
2016
"winapi-util",
2017
]
2018
2019
[[package]]
2020
name = "scoped-tls"
2021
version = "1.0.1"
2022
source = "registry+https://github.com/rust-lang/crates.io-index"
2023
checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
2024
2025
[[package]]
2026
name = "scopeguard"
2027
version = "1.2.0"
2028
source = "registry+https://github.com/rust-lang/crates.io-index"
2029
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
2030
2031
[[package]]
2032
name = "semver"
2033
version = "1.0.28"
2034
source = "registry+https://github.com/rust-lang/crates.io-index"
2035
checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd"
2036
2037
[[package]]
2038
name = "serde"
2039
version = "1.0.229"
2040
source = "registry+https://github.com/rust-lang/crates.io-index"
2041
checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba"
2042
dependencies = [
2043
"serde_core",
2044
]
2045
2046
[[package]]
2047
name = "serde_core"
2048
version = "1.0.229"
2049
source = "registry+https://github.com/rust-lang/crates.io-index"
2050
checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48"
2051
dependencies = [
2052
"serde_derive",
2053
]
2054
2055
[[package]]
2056
name = "serde_derive"
2057
version = "1.0.229"
2058
source = "registry+https://github.com/rust-lang/crates.io-index"
2059
checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348"
2060
dependencies = [
2061
"proc-macro2",
2062
"quote",
2063
"syn 3.0.9",
2064
]
2065
2066
[[package]]
2067
name = "shlex"
2068
version = "2.0.1"
2069
source = "registry+https://github.com/rust-lang/crates.io-index"
2070
checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba"
2071
2072
[[package]]
2073
name = "simd-adler32"
2074
version = "0.3.10"
2075
source = "registry+https://github.com/rust-lang/crates.io-index"
2076
checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea"
2077
2078
[[package]]
2079
name = "simd_cesu8"
2080
version = "1.2.0"
2081
source = "registry+https://github.com/rust-lang/crates.io-index"
2082
checksum = "11031e251abf8611c80f460e19dbdeb54a66db918e49c65a7065b46ac7aec520"
2083
dependencies = [
2084
"rustc_version",
2085
"simdutf8",
2086
]
2087
2088
[[package]]
2089
name = "simdutf8"
2090
version = "0.1.5"
2091
source = "registry+https://github.com/rust-lang/crates.io-index"
2092
checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e"
2093
2094
[[package]]
2095
name = "slab"
2096
version = "0.4.12"
2097
source = "registry+https://github.com/rust-lang/crates.io-index"
2098
checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
2099
2100
[[package]]
2101
name = "slotmap"
2102
version = "1.1.1"
2103
source = "registry+https://github.com/rust-lang/crates.io-index"
2104
checksum = "bdd58c3c93c3d278ca835519292445cb4b0d4dc59ccfdf7ceadaab3f8aeb4038"
2105
dependencies = [
2106
"version_check",
2107
]
2108
2109
[[package]]
2110
name = "smallvec"
2111
version = "1.16.4"
2112
source = "registry+https://github.com/rust-lang/crates.io-index"
2113
checksum = "d0d5d4b1981b8bbbb7aed204cae5726d683d5d6ac7e74ec54122ea28f315e7c8"
2114
2115
[[package]]
2116
name = "smithay-client-toolkit"
2117
version = "0.19.2"
2118
source = "registry+https://github.com/rust-lang/crates.io-index"
2119
checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016"
2120
dependencies = [
2121
"bitflags 2.13.2",
2122
"calloop 0.13.0",
2123
"calloop-wayland-source 0.3.0",
2124
"cursor-icon",
2125
"libc",
2126
"log",
2127
"memmap2",
2128
"rustix 0.38.44",
2129
"thiserror 1.0.69",
2130
"wayland-backend",
2131
"wayland-client",
2132
"wayland-csd-frame",
2133
"wayland-cursor",
2134
"wayland-protocols",
2135
"wayland-protocols-wlr",
2136
"wayland-scanner",
2137
"xkeysym",
2138
]
2139
2140
[[package]]
2141
name = "smithay-client-toolkit"
2142
version = "0.20.0"
2143
source = "registry+https://github.com/rust-lang/crates.io-index"
2144
checksum = "0512da38f5e2b31201a93524adb8d3136276fa4fe4aafab4e1f727a82b534cc0"
2145
dependencies = [
2146
"bitflags 2.13.2",
2147
"calloop 0.14.5",
2148
"calloop-wayland-source 0.4.1",
2149
"cursor-icon",
2150
"libc",
2151
"log",
2152
"memmap2",
2153
"rustix 1.1.6",
2154
"thiserror 2.0.21",
2155
"wayland-backend",
2156
"wayland-client",
2157
"wayland-csd-frame",
2158
"wayland-cursor",
2159
"wayland-protocols",
2160
"wayland-protocols-experimental",
2161
"wayland-protocols-misc",
2162
"wayland-protocols-wlr",
2163
"wayland-scanner",
2164
"xkeysym",
2165
]
2166
2167
[[package]]
2168
name = "smithay-clipboard"
2169
version = "0.7.3"
2170
source = "registry+https://github.com/rust-lang/crates.io-index"
2171
checksum = "71704c03f739f7745053bde45fa203a46c58d25bc5c4efba1d9a60e9dba81226"
2172
dependencies = [
2173
"libc",
2174
"smithay-client-toolkit 0.20.0",
2175
"wayland-backend",
2176
]
2177
2178
[[package]]
2179
name = "smol_str"
2180
version = "0.2.2"
2181
source = "registry+https://github.com/rust-lang/crates.io-index"
2182
checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead"
2183
dependencies = [
2184
"serde",
2185
]
2186
2187
[[package]]
2188
name = "spirv"
2189
version = "0.3.0+sdk-1.3.268.0"
2190
source = "registry+https://github.com/rust-lang/crates.io-index"
2191
checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844"
2192
dependencies = [
2193
"bitflags 2.13.2",
2194
]
2195
2196
[[package]]
2197
name = "stable_deref_trait"
2198
version = "1.2.1"
2199
source = "registry+https://github.com/rust-lang/crates.io-index"
2200
checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
2201
2202
[[package]]
2203
name = "static_assertions"
2204
version = "1.1.0"
2205
source = "registry+https://github.com/rust-lang/crates.io-index"
2206
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
2207
2208
[[package]]
2209
name = "syn"
2210
version = "1.0.109"
2211
source = "registry+https://github.com/rust-lang/crates.io-index"
2212
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
2213
dependencies = [
2214
"proc-macro2",
2215
"quote",
2216
"unicode-ident",
2217
]
2218
2219
[[package]]
2220
name = "syn"
2221
version = "2.0.119"
2222
source = "registry+https://github.com/rust-lang/crates.io-index"
2223
checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297"
2224
dependencies = [
2225
"proc-macro2",
2226
"quote",
2227
"unicode-ident",
2228
]
2229
2230
[[package]]
2231
name = "syn"
2232
version = "3.0.9"
2233
source = "registry+https://github.com/rust-lang/crates.io-index"
2234
checksum = "d78c8dee4c7bf0e14673097256fed6142ce9d3b85a408189d07482442145823b"
2235
dependencies = [
2236
"proc-macro2",
2237
"quote",
2238
"unicode-ident",
2239
]
2240
2241
[[package]]
2242
name = "synstructure"
2243
version = "0.14.0"
2244
source = "registry+https://github.com/rust-lang/crates.io-index"
2245
checksum = "901704edd0dfe137f1987838ee4f259e4e063c31371bdb423f7ae38ec6f77f02"
2246
dependencies = [
2247
"proc-macro2",
2248
"quote",
2249
"syn 3.0.9",
2250
]
2251
2252
[[package]]
2253
name = "termcolor"
2254
version = "1.4.1"
2255
source = "registry+https://github.com/rust-lang/crates.io-index"
2256
checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
2257
dependencies = [
2258
"winapi-util",
2259
]
2260
2261
[[package]]
2262
name = "thiserror"
2263
version = "1.0.69"
2264
source = "registry+https://github.com/rust-lang/crates.io-index"
2265
checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
2266
dependencies = [
2267
"thiserror-impl 1.0.69",
2268
]
2269
2270
[[package]]
2271
name = "thiserror"
2272
version = "2.0.21"
2273
source = "registry+https://github.com/rust-lang/crates.io-index"
2274
checksum = "09e52cb86a36cede5cb101bf8908837b3e4c6e5e59fe7fd85c23fb56200d189e"
2275
dependencies = [
2276
"thiserror-impl 2.0.21",
2277
]
2278
2279
[[package]]
2280
name = "thiserror-impl"
2281
version = "1.0.69"
2282
source = "registry+https://github.com/rust-lang/crates.io-index"
2283
checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
2284
dependencies = [
2285
"proc-macro2",
2286
"quote",
2287
"syn 2.0.119",
2288
]
2289
2290
[[package]]
2291
name = "thiserror-impl"
2292
version = "2.0.21"
2293
source = "registry+https://github.com/rust-lang/crates.io-index"
2294
checksum = "fe5197923287db20a58125f0bc85c062f7f2c892de97b18c356f9efb14b28524"
2295
dependencies = [
2296
"proc-macro2",
2297
"quote",
2298
"syn 3.0.9",
2299
]
2300
2301
[[package]]
2302
name = "tinystr"
2303
version = "0.8.5"
2304
source = "registry+https://github.com/rust-lang/crates.io-index"
2305
checksum = "abc840c238154d58f9e86b2792261edfde565a17696e1cda1a449de27979801a"
2306
dependencies = [
2307
"displaydoc",
2308
"zerovec",
2309
]
2310
2311
[[package]]
2312
name = "tokio"
2313
version = "1.54.1"
2314
source = "registry+https://github.com/rust-lang/crates.io-index"
2315
checksum = "b52fd3255258d26fac7264ab5a76b53c13367136dc011d3d6ad4f8ed070396a3"
2316
dependencies = [
2317
"pin-project-lite",
2318
]
2319
2320
[[package]]
2321
name = "toml_datetime"
2322
version = "1.1.3+spec-1.1.0"
2323
source = "registry+https://github.com/rust-lang/crates.io-index"
2324
checksum = "173f25c883cd2176a2d8212155638c0a60d484a9d84546d270866f40f56b6e49"
2325
dependencies = [
2326
"serde_core",
2327
]
2328
2329
[[package]]
2330
name = "toml_edit"
2331
version = "0.25.19+spec-1.1.0"
2332
source = "registry+https://github.com/rust-lang/crates.io-index"
2333
checksum = "dd43688c4858d7264ae1cf9a9f874a67c3feb74a883b1cd7bebd6a4ea8307218"
2334
dependencies = [
2335
"indexmap",
2336
"toml_datetime",
2337
"toml_parser",
2338
"winnow",
2339
]
2340
2341
[[package]]
2342
name = "toml_parser"
2343
version = "1.1.5+spec-1.1.0"
2344
source = "registry+https://github.com/rust-lang/crates.io-index"
2345
checksum = "baa693a8032d7e1cada7d0041e96126df243179ff061456783ac7f12bda4744c"
2346
dependencies = [
2347
"winnow",
2348
]
2349
2350
[[package]]
2351
name = "tracing"
2352
version = "0.1.44"
2353
source = "registry+https://github.com/rust-lang/crates.io-index"
2354
checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100"
2355
dependencies = [
2356
"log",
2357
"pin-project-lite",
2358
"tracing-core",
2359
]
2360
2361
[[package]]
2362
name = "tracing-core"
2363
version = "0.1.36"
2364
source = "registry+https://github.com/rust-lang/crates.io-index"
2365
checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a"
2366
2367
[[package]]
2368
name = "ttf-parser"
2369
version = "0.25.1"
2370
source = "registry+https://github.com/rust-lang/crates.io-index"
2371
checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31"
2372
2373
[[package]]
2374
name = "type-map"
2375
version = "0.5.1"
2376
source = "registry+https://github.com/rust-lang/crates.io-index"
2377
checksum = "cb30dbbd9036155e74adad6812e9898d03ec374946234fbcebd5dfc7b9187b90"
2378
dependencies = [
2379
"rustc-hash 2.1.3",
2380
]
2381
2382
[[package]]
2383
name = "unicode-ident"
2384
version = "1.0.27"
2385
source = "registry+https://github.com/rust-lang/crates.io-index"
2386
checksum = "a2c754d6c33795a1c324727428e5a7dedb5b06195f9890bdbcba760d3e246563"
2387
2388
[[package]]
2389
name = "unicode-segmentation"
2390
version = "1.13.3"
2391
source = "registry+https://github.com/rust-lang/crates.io-index"
2392
checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8"
2393
2394
[[package]]
2395
name = "unicode-width"
2396
version = "0.1.14"
2397
source = "registry+https://github.com/rust-lang/crates.io-index"
2398
checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af"
2399
2400
[[package]]
2401
name = "unicode-xid"
2402
version = "0.2.6"
2403
source = "registry+https://github.com/rust-lang/crates.io-index"
2404
checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
2405
2406
[[package]]
2407
name = "url"
2408
version = "2.5.8"
2409
source = "registry+https://github.com/rust-lang/crates.io-index"
2410
checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed"
2411
dependencies = [
2412
"form_urlencoded",
2413
"idna",
2414
"percent-encoding",
2415
"serde",
2416
]
2417
2418
[[package]]
2419
name = "utf8_iter"
2420
version = "1.1.0"
2421
source = "registry+https://github.com/rust-lang/crates.io-index"
2422
checksum = "af3bd9d3e571c26fcce9d033b87ea5ab061b8d2ffe9b7a5675d810d68f03edf0"
2423
dependencies = [
2424
"utf_types",
2425
]
2426
2427
[[package]]
2428
name = "utf_types"
2429
version = "1.0.0"
2430
source = "registry+https://github.com/rust-lang/crates.io-index"
2431
checksum = "3a3b425286980a367278453f3b6d28cdcb134b574e5a35824a6ff5eebad50bb6"
2432
2433
[[package]]
2434
name = "version_check"
2435
version = "0.9.5"
2436
source = "registry+https://github.com/rust-lang/crates.io-index"
2437
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
2438
2439
[[package]]
2440
name = "walkdir"
2441
version = "2.5.0"
2442
source = "registry+https://github.com/rust-lang/crates.io-index"
2443
checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
2444
dependencies = [
2445
"same-file",
2446
"winapi-util",
2447
]
2448
2449
[[package]]
2450
name = "wasip2"
2451
version = "1.0.4+wasi-0.2.12"
2452
source = "registry+https://github.com/rust-lang/crates.io-index"
2453
checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487"
2454
dependencies = [
2455
"wit-bindgen",
2456
]
2457
2458
[[package]]
2459
name = "wasm-bindgen"
2460
version = "0.2.130"
2461
source = "registry+https://github.com/rust-lang/crates.io-index"
2462
checksum = "a0181c14ddd6c7b8b0b0132a5f1ea2f32be0d893cd3ea97b6e3b28886b8a3d1c"
2463
dependencies = [
2464
"cfg-if",
2465
"rustversion",
2466
"wasm-bindgen-macro",
2467
"wasm-bindgen-shared",
2468
]
2469
2470
[[package]]
2471
name = "wasm-bindgen-futures"
2472
version = "0.4.80"
2473
source = "registry+https://github.com/rust-lang/crates.io-index"
2474
checksum = "5e14e0327cb5368ad60ccb22d04a9827a693c95a926d8d125e9fa39e0baec501"
2475
dependencies = [
2476
"js-sys",
2477
"tokio",
2478
"wasm-bindgen",
2479
]
2480
2481
[[package]]
2482
name = "wasm-bindgen-macro"
2483
version = "0.2.130"
2484
source = "registry+https://github.com/rust-lang/crates.io-index"
2485
checksum = "6e931a02a39abdbf66966fc35902b5ed58344750a70885bed4ebb3d8eaf28ed9"
2486
dependencies = [
2487
"quote",
2488
"wasm-bindgen-macro-support",
2489
]
2490
2491
[[package]]
2492
name = "wasm-bindgen-macro-support"
2493
version = "0.2.130"
2494
source = "registry+https://github.com/rust-lang/crates.io-index"
2495
checksum = "2ca4b54280e455bd831e33a6b8e734baf432fe63fbc35c42ac14ce67a043a53a"
2496
dependencies = [
2497
"bumpalo",
2498
"proc-macro2",
2499
"quote",
2500
"syn 3.0.9",
2501
"wasm-bindgen-shared",
2502
]
2503
2504
[[package]]
2505
name = "wasm-bindgen-shared"
2506
version = "0.2.130"
2507
source = "registry+https://github.com/rust-lang/crates.io-index"
2508
checksum = "3b1f9c3798725016c6ee5f2f57869ec0831e8bbc0ab0310a86e787e97f41389e"
2509
dependencies = [
2510
"unicode-ident",
2511
]
2512
2513
[[package]]
2514
name = "wayland-backend"
2515
version = "0.3.17"
2516
source = "registry+https://github.com/rust-lang/crates.io-index"
2517
checksum = "38a91b4eaddff87b1cd1074985e3713da4af2c49742d1b356b2c01670a67a078"
2518
dependencies = [
2519
"cc",
2520
"downcast-rs",
2521
"rustix 1.1.6",
2522
"scoped-tls",
2523
"smallvec",
2524
"wayland-sys",
2525
]
2526
2527
[[package]]
2528
name = "wayland-client"
2529
version = "0.31.15"
2530
source = "registry+https://github.com/rust-lang/crates.io-index"
2531
checksum = "e3c36a0f861ad76d0901f2800b46321410d9f73f2ea88aac0650d86c32688073"
2532
dependencies = [
2533
"bitflags 2.13.2",
2534
"rustix 1.1.6",
2535
"wayland-backend",
2536
"wayland-scanner",
2537
]
2538
2539
[[package]]
2540
name = "wayland-csd-frame"
2541
version = "0.3.0"
2542
source = "registry+https://github.com/rust-lang/crates.io-index"
2543
checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e"
2544
dependencies = [
2545
"bitflags 2.13.2",
2546
"cursor-icon",
2547
"wayland-backend",
2548
]
2549
2550
[[package]]
2551
name = "wayland-cursor"
2552
version = "0.31.14"
2553
source = "registry+https://github.com/rust-lang/crates.io-index"
2554
checksum = "4a52d18780be9b1314328a3de5f930b73d2200112e3849ca6cb11822793fb34d"
2555
dependencies = [
2556
"rustix 1.1.6",
2557
"wayland-client",
2558
"xcursor",
2559
]
2560
2561
[[package]]
2562
name = "wayland-protocols"
2563
version = "0.32.13"
2564
source = "registry+https://github.com/rust-lang/crates.io-index"
2565
checksum = "23d0c813de3daa2ed6520af85a3bd49b0e722a3078506899aa9686fea58dc4b6"
2566
dependencies = [
2567
"bitflags 2.13.2",
2568
"wayland-backend",
2569
"wayland-client",
2570
"wayland-scanner",
2571
]
2572
2573
[[package]]
2574
name = "wayland-protocols-experimental"
2575
version = "20250721.0.1"
2576
source = "registry+https://github.com/rust-lang/crates.io-index"
2577
checksum = "40a1f863128dcaaec790d7b4b396cc9b9a7a079e878e18c47e6c2d2c5a8dcbb1"
2578
dependencies = [
2579
"bitflags 2.13.2",
2580
"wayland-backend",
2581
"wayland-client",
2582
"wayland-protocols",
2583
"wayland-scanner",
2584
]
2585
2586
[[package]]
2587
name = "wayland-protocols-misc"
2588
version = "0.3.12"
2589
source = "registry+https://github.com/rust-lang/crates.io-index"
2590
checksum = "6e9567599ef23e09b8dad6e429e5738d4509dfc46b3b21f32841a304d16b29c8"
2591
dependencies = [
2592
"bitflags 2.13.2",
2593
"wayland-backend",
2594
"wayland-client",
2595
"wayland-protocols",
2596
"wayland-scanner",
2597
]
2598
2599
[[package]]
2600
name = "wayland-protocols-plasma"
2601
version = "0.3.12"
2602
source = "registry+https://github.com/rust-lang/crates.io-index"
2603
checksum = "2b6d8cf1eb2c1c31ed1f5643c88a6e53538129d4af80030c8cabd1f9fa884d91"
2604
dependencies = [
2605
"bitflags 2.13.2",
2606
"wayland-backend",
2607
"wayland-client",
2608
"wayland-protocols",
2609
"wayland-scanner",
2610
]
2611
2612
[[package]]
2613
name = "wayland-protocols-wlr"
2614
version = "0.3.12"
2615
source = "registry+https://github.com/rust-lang/crates.io-index"
2616
checksum = "eb04e52f7836d7c7976c78ca0250d61e33873c34156a2a1fc9474828ec268234"
2617
dependencies = [
2618
"bitflags 2.13.2",
2619
"wayland-backend",
2620
"wayland-client",
2621
"wayland-protocols",
2622
"wayland-scanner",
2623
]
2624
2625
[[package]]
2626
name = "wayland-scanner"
2627
version = "0.31.11"
2628
source = "registry+https://github.com/rust-lang/crates.io-index"
2629
checksum = "338e30461b3a2b67d70eb30a6d89f8e0c93a833e07d2ae89085cd070c4a00ac0"
2630
dependencies = [
2631
"proc-macro2",
2632
"quick-xml",
2633
"quote",
2634
]
2635
2636
[[package]]
2637
name = "wayland-sys"
2638
version = "0.31.11"
2639
source = "registry+https://github.com/rust-lang/crates.io-index"
2640
checksum = "d8eab23fefc9e41f8e841df4a9c707e8a8c4ed26e944ef69297184de2785e3be"
2641
dependencies = [
2642
"dlib",
2643
"log",
2644
"once_cell",
2645
"pkg-config",
2646
]
2647
2648
[[package]]
2649
name = "web-sys"
2650
version = "0.3.107"
2651
source = "registry+https://github.com/rust-lang/crates.io-index"
2652
checksum = "d7d179596ff5ec0f6de4db64d54011bde6289cc49603d3a6e4ce3f329207ab88"
2653
dependencies = [
2654
"js-sys",
2655
"wasm-bindgen",
2656
]
2657
2658
[[package]]
2659
name = "web-time"
2660
version = "1.1.0"
2661
source = "registry+https://github.com/rust-lang/crates.io-index"
2662
checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb"
2663
dependencies = [
2664
"js-sys",
2665
"wasm-bindgen",
2666
]
2667
2668
[[package]]
2669
name = "webbrowser"
2670
version = "1.2.6"
2671
source = "registry+https://github.com/rust-lang/crates.io-index"
2672
checksum = "fe8d20d0214027baf11b8b0cc307c1da7657d8f4db9aa956f7de27a6fb1acbd5"
2673
dependencies = [
2674
"jni",
2675
"log",
2676
"ndk-context",
2677
"objc2 0.6.5",
2678
"objc2-app-kit 0.3.2",
2679
"objc2-foundation 0.3.2",
2680
"url",
2681
"web-sys",
2682
]
2683
2684
[[package]]
2685
name = "wgpu"
2686
version = "22.1.0"
2687
source = "registry+https://github.com/rust-lang/crates.io-index"
2688
checksum = "e1d1c4ba43f80542cf63a0a6ed3134629ae73e8ab51e4b765a67f3aa062eb433"
2689
dependencies = [
2690
"arrayvec",
2691
"cfg_aliases 0.1.1",
2692
"document-features",
2693
"js-sys",
2694
"log",
2695
"parking_lot",
2696
"profiling",
2697
"raw-window-handle",
2698
"smallvec",
2699
"static_assertions",
2700
"wasm-bindgen",
2701
"wasm-bindgen-futures",
2702
"web-sys",
2703
"wgpu-core",
2704
"wgpu-hal",
2705
"wgpu-types",
2706
]
2707
2708
[[package]]
2709
name = "wgpu-core"
2710
version = "22.1.0"
2711
source = "registry+https://github.com/rust-lang/crates.io-index"
2712
checksum = "0348c840d1051b8e86c3bcd31206080c5e71e5933dabd79be1ce732b0b2f089a"
2713
dependencies = [
2714
"arrayvec",
2715
"bit-vec",
2716
"bitflags 2.13.2",
2717
"cfg_aliases 0.1.1",
2718
"document-features",
2719
"indexmap",
2720
"log",
2721
"naga",
2722
"once_cell",
2723
"parking_lot",
2724
"profiling",
2725
"raw-window-handle",
2726
"rustc-hash 1.1.0",
2727
"smallvec",
2728
"thiserror 1.0.69",
2729
"wgpu-hal",
2730
"wgpu-types",
2731
]
2732
2733
[[package]]
2734
name = "wgpu-hal"
2735
version = "22.0.0"
2736
source = "registry+https://github.com/rust-lang/crates.io-index"
2737
checksum = "f6bbf4b4de8b2a83c0401d9e5ae0080a2792055f25859a02bf9be97952bbed4f"
2738
dependencies = [
2739
"android_system_properties",
2740
"arrayvec",
2741
"ash",
2742
"bitflags 2.13.2",
2743
"cfg_aliases 0.1.1",
2744
"core-graphics-types",
2745
"glow 0.13.1",
2746
"glutin_wgl_sys",
2747
"gpu-alloc",
2748
"gpu-allocator",
2749
"gpu-descriptor",
2750
"hassle-rs",
2751
"js-sys",
2752
"khronos-egl",
2753
"libc",
2754
"libloading",
2755
"log",
2756
"metal",
2757
"naga",
2758
"ndk-sys 0.5.0+25.2.9519653",
2759
"objc",
2760
"once_cell",
2761
"parking_lot",
2762
"profiling",
2763
"raw-window-handle",
2764
"renderdoc-sys",
2765
"rustc-hash 1.1.0",
2766
"smallvec",
2767
"thiserror 1.0.69",
2768
"wasm-bindgen",
2769
"web-sys",
2770
"wgpu-types",
2771
"winapi",
2772
]
2773
2774
[[package]]
2775
name = "wgpu-types"
2776
version = "22.0.0"
2777
source = "registry+https://github.com/rust-lang/crates.io-index"
2778
checksum = "bc9d91f0e2c4b51434dfa6db77846f2793149d8e73f800fa2e41f52b8eac3c5d"
2779
dependencies = [
2780
"bitflags 2.13.2",
2781
"js-sys",
2782
"web-sys",
2783
]
2784
2785
[[package]]
2786
name = "widestring"
2787
version = "1.2.1"
2788
source = "registry+https://github.com/rust-lang/crates.io-index"
2789
checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471"
2790
2791
[[package]]
2792
name = "winapi"
2793
version = "0.3.9"
2794
source = "registry+https://github.com/rust-lang/crates.io-index"
2795
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
2796
dependencies = [
2797
"winapi-i686-pc-windows-gnu",
2798
"winapi-x86_64-pc-windows-gnu",
2799
]
2800
2801
[[package]]
2802
name = "winapi-i686-pc-windows-gnu"
2803
version = "0.4.0"
2804
source = "registry+https://github.com/rust-lang/crates.io-index"
2805
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
2806
2807
[[package]]
2808
name = "winapi-util"
2809
version = "0.1.11"
2810
source = "registry+https://github.com/rust-lang/crates.io-index"
2811
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
2812
dependencies = [
2813
"windows-sys 0.61.2",
2814
]
2815
2816
[[package]]
2817
name = "winapi-x86_64-pc-windows-gnu"
2818
version = "0.4.0"
2819
source = "registry+https://github.com/rust-lang/crates.io-index"
2820
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
2821
2822
[[package]]
2823
name = "windows"
2824
version = "0.52.0"
2825
source = "registry+https://github.com/rust-lang/crates.io-index"
2826
checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be"
2827
dependencies = [
2828
"windows-core",
2829
"windows-targets",
2830
]
2831
2832
[[package]]
2833
name = "windows-core"
2834
version = "0.52.0"
2835
source = "registry+https://github.com/rust-lang/crates.io-index"
2836
checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
2837
dependencies = [
2838
"windows-targets",
2839
]
2840
2841
[[package]]
2842
name = "windows-link"
2843
version = "0.2.1"
2844
source = "registry+https://github.com/rust-lang/crates.io-index"
2845
checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
2846
2847
[[package]]
2848
name = "windows-sys"
2849
version = "0.52.0"
2850
source = "registry+https://github.com/rust-lang/crates.io-index"
2851
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
2852
dependencies = [
2853
"windows-targets",
2854
]
2855
2856
[[package]]
2857
name = "windows-sys"
2858
version = "0.59.0"
2859
source = "registry+https://github.com/rust-lang/crates.io-index"
2860
checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
2861
dependencies = [
2862
"windows-targets",
2863
]
2864
2865
[[package]]
2866
name = "windows-sys"
2867
version = "0.61.2"
2868
source = "registry+https://github.com/rust-lang/crates.io-index"
2869
checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
2870
dependencies = [
2871
"windows-link",
2872
]
2873
2874
[[package]]
2875
name = "windows-targets"
2876
version = "0.52.6"
2877
source = "registry+https://github.com/rust-lang/crates.io-index"
2878
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
2879
dependencies = [
2880
"windows_aarch64_gnullvm",
2881
"windows_aarch64_msvc",
2882
"windows_i686_gnu",
2883
"windows_i686_gnullvm",
2884
"windows_i686_msvc",
2885
"windows_x86_64_gnu",
2886
"windows_x86_64_gnullvm",
2887
"windows_x86_64_msvc",
2888
]
2889
2890
[[package]]
2891
name = "windows_aarch64_gnullvm"
2892
version = "0.52.6"
2893
source = "registry+https://github.com/rust-lang/crates.io-index"
2894
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
2895
2896
[[package]]
2897
name = "windows_aarch64_msvc"
2898
version = "0.52.6"
2899
source = "registry+https://github.com/rust-lang/crates.io-index"
2900
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
2901
2902
[[package]]
2903
name = "windows_i686_gnu"
2904
version = "0.52.6"
2905
source = "registry+https://github.com/rust-lang/crates.io-index"
2906
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
2907
2908
[[package]]
2909
name = "windows_i686_gnullvm"
2910
version = "0.52.6"
2911
source = "registry+https://github.com/rust-lang/crates.io-index"
2912
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
2913
2914
[[package]]
2915
name = "windows_i686_msvc"
2916
version = "0.52.6"
2917
source = "registry+https://github.com/rust-lang/crates.io-index"
2918
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
2919
2920
[[package]]
2921
name = "windows_x86_64_gnu"
2922
version = "0.52.6"
2923
source = "registry+https://github.com/rust-lang/crates.io-index"
2924
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
2925
2926
[[package]]
2927
name = "windows_x86_64_gnullvm"
2928
version = "0.52.6"
2929
source = "registry+https://github.com/rust-lang/crates.io-index"
2930
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
2931
2932
[[package]]
2933
name = "windows_x86_64_msvc"
2934
version = "0.52.6"
2935
source = "registry+https://github.com/rust-lang/crates.io-index"
2936
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
2937
2938
[[package]]
2939
name = "winit"
2940
version = "0.30.13"
2941
source = "registry+https://github.com/rust-lang/crates.io-index"
2942
checksum = "a6755fa58a9f8350bd1e472d4c3fcc25f824ec358933bba33306d0b63df5978d"
2943
dependencies = [
2944
"ahash",
2945
"android-activity",
2946
"atomic-waker",
2947
"bitflags 2.13.2",
2948
"block2",
2949
"bytemuck",
2950
"calloop 0.13.0",
2951
"cfg_aliases 0.2.2",
2952
"concurrent-queue",
2953
"core-foundation",
2954
"core-graphics",
2955
"cursor-icon",
2956
"dpi",
2957
"js-sys",
2958
"libc",
2959
"memmap2",
2960
"ndk",
2961
"objc2 0.5.3",
2962
"objc2-app-kit 0.2.2",
2963
"objc2-foundation 0.2.2",
2964
"objc2-ui-kit",
2965
"orbclient",
2966
"percent-encoding",
2967
"pin-project",
2968
"raw-window-handle",
2969
"redox_syscall 0.4.1",
2970
"rustix 0.38.44",
2971
"smithay-client-toolkit 0.19.2",
2972
"smol_str",
2973
"tracing",
2974
"unicode-segmentation",
2975
"wasm-bindgen",
2976
"wasm-bindgen-futures",
2977
"wayland-backend",
2978
"wayland-client",
2979
"wayland-protocols",
2980
"wayland-protocols-plasma",
2981
"web-sys",
2982
"web-time",
2983
"windows-sys 0.52.0",
2984
"x11-dl",
2985
"x11rb",
2986
"xkbcommon-dl",
2987
]
2988
2989
[[package]]
2990
name = "winnow"
2991
version = "1.0.5"
2992
source = "registry+https://github.com/rust-lang/crates.io-index"
2993
checksum = "8c3b93199df0ab874cdf0c6a94f0a0dc3423fe41f1cafb62b8bd7b1deb277aef"
2994
dependencies = [
2995
"memchr",
2996
]
2997
2998
[[package]]
2999
name = "wit-bindgen"
3000
version = "0.57.1"
3001
source = "registry+https://github.com/rust-lang/crates.io-index"
3002
checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e"
3003
3004
[[package]]
3005
name = "writeable"
3006
version = "0.6.4"
3007
source = "registry+https://github.com/rust-lang/crates.io-index"
3008
checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc"
3009
3010
[[package]]
3011
name = "x11-dl"
3012
version = "2.21.0"
3013
source = "registry+https://github.com/rust-lang/crates.io-index"
3014
checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f"
3015
dependencies = [
3016
"libc",
3017
"once_cell",
3018
"pkg-config",
3019
]
3020
3021
[[package]]
3022
name = "x11rb"
3023
version = "0.13.2"
3024
source = "registry+https://github.com/rust-lang/crates.io-index"
3025
checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414"
3026
dependencies = [
3027
"as-raw-xcb-connection",
3028
"gethostname",
3029
"libc",
3030
"libloading",
3031
"once_cell",
3032
"rustix 1.1.6",
3033
"x11rb-protocol",
3034
]
3035
3036
[[package]]
3037
name = "x11rb-protocol"
3038
version = "0.13.2"
3039
source = "registry+https://github.com/rust-lang/crates.io-index"
3040
checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd"
3041
3042
[[package]]
3043
name = "xcursor"
3044
version = "0.3.11"
3045
source = "registry+https://github.com/rust-lang/crates.io-index"
3046
checksum = "163b33ed8786455e2fa5d72f554057ce3f3182425434f756cd39c99839d88e23"
3047
3048
[[package]]
3049
name = "xkbcommon-dl"
3050
version = "0.4.2"
3051
source = "registry+https://github.com/rust-lang/crates.io-index"
3052
checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5"
3053
dependencies = [
3054
"bitflags 2.13.2",
3055
"dlib",
3056
"log",
3057
"once_cell",
3058
"xkeysym",
3059
]
3060
3061
[[package]]
3062
name = "xkeysym"
3063
version = "0.2.1"
3064
source = "registry+https://github.com/rust-lang/crates.io-index"
3065
checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56"
3066
3067
[[package]]
3068
name = "xml-rs"
3069
version = "0.8.29"
3070
source = "registry+https://github.com/rust-lang/crates.io-index"
3071
checksum = "e450f9b2ed1dff33c94c12589a87338689467b9c4f5d8a5710bd09a847d2c8a7"
3072
3073
[[package]]
3074
name = "yoke"
3075
version = "0.8.4"
3076
source = "registry+https://github.com/rust-lang/crates.io-index"
3077
checksum = "417ef3fcf6c300b7dbd25c85531a746931c02ad536f3cf4786ed1e88223340b3"
3078
dependencies = [
3079
"stable_deref_trait",
3080
"yoke-derive",
3081
"zerofrom",
3082
]
3083
3084
[[package]]
3085
name = "yoke-derive"
3086
version = "0.8.4"
3087
source = "registry+https://github.com/rust-lang/crates.io-index"
3088
checksum = "ec8ebde2db3681e8c9980cc27822030e68752690ddfa9473e739aeb4dbde6d71"
3089
dependencies = [
3090
"proc-macro2",
3091
"quote",
3092
"syn 3.0.9",
3093
"synstructure",
3094
]
3095
3096
[[package]]
3097
name = "zerocopy"
3098
version = "0.8.63"
3099
source = "registry+https://github.com/rust-lang/crates.io-index"
3100
checksum = "e5fe1f8f1b06191a00962174c61aa5005e0bb391a6d80d07e24d115c01a92ed8"
3101
dependencies = [
3102
"zerocopy-derive",
3103
]
3104
3105
[[package]]
3106
name = "zerocopy-derive"
3107
version = "0.8.63"
3108
source = "registry+https://github.com/rust-lang/crates.io-index"
3109
checksum = "863ad3ac83293fb4d740aedbfdc9240dd8d1a50c1099acd76ce80ce7c7230c7f"
3110
dependencies = [
3111
"proc-macro2",
3112
"quote",
3113
"syn 2.0.119",
3114
]
3115
3116
[[package]]
3117
name = "zerofrom"
3118
version = "0.1.8"
3119
source = "registry+https://github.com/rust-lang/crates.io-index"
3120
checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272"
3121
dependencies = [
3122
"zerofrom-derive",
3123
]
3124
3125
[[package]]
3126
name = "zerofrom-derive"
3127
version = "0.1.8"
3128
source = "registry+https://github.com/rust-lang/crates.io-index"
3129
checksum = "f75b4683f6c7f45248d4d64056a24298c6281e0993356d7d1b4a1a962ef10d4a"
3130
dependencies = [
3131
"proc-macro2",
3132
"quote",
3133
"syn 3.0.9",
3134
"synstructure",
3135
]
3136
3137
[[package]]
3138
name = "zerotrie"
3139
version = "0.2.5"
3140
source = "registry+https://github.com/rust-lang/crates.io-index"
3141
checksum = "4ea269c3bd32f0a32c321907a2ae912ba6f4649bb0fc764a15627e99a7095a3f"
3142
dependencies = [
3143
"displaydoc",
3144
"yoke",
3145
"zerofrom",
3146
]
3147
3148
[[package]]
3149
name = "zerovec"
3150
version = "0.11.9"
3151
source = "registry+https://github.com/rust-lang/crates.io-index"
3152
checksum = "f58a2799cfe9a1670c7ea8edbd52ef8edb93cb37a7f83bf31ba9e35d9dae6a40"
3153
dependencies = [
3154
"yoke",
3155
"zerofrom",
3156
"zerovec-derive",
3157
]
3158
3159
[[package]]
3160
name = "zerovec-derive"
3161
version = "0.11.7"
3162
source = "registry+https://github.com/rust-lang/crates.io-index"
3163
checksum = "c3743ddbf47738d929cd1ae2e199d40d0162979dfe31aef8ae646d2bf00bf97a"
3164
dependencies = [
3165
"proc-macro2",
3166
"quote",
3167
"syn 3.0.9",
3168
]
3169
3170
[[package]]
3171
name = "zlib-rs"
3172
version = "0.6.8"
3173
source = "registry+https://github.com/rust-lang/crates.io-index"
3174
checksum = "b268e58e7c693d7c271f93ffc4ba3b380412554231c85bf61ca7af91042a4112"
@@ -0,0 +1,3174 @@1
# This file is automatically @generated by Cargo.2
# It is not intended for manual editing.3
version = 44
5
[[package]]6
name = "ab_glyph"7
version = "0.2.32"8
source = "registry+https://github.com/rust-lang/crates.io-index"9
checksum = "01c0457472c38ea5bd1c3b5ada5e368271cb550be7a4ca4a0b4634e9913f6cc2"10
dependencies = [11
"ab_glyph_rasterizer",12
"owned_ttf_parser",13
]14
15
[[package]]16
name = "ab_glyph_rasterizer"17
version = "0.1.10"18
source = "registry+https://github.com/rust-lang/crates.io-index"19
checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618"20
21
[[package]]22
name = "adler2"23
version = "2.0.1"24
source = "registry+https://github.com/rust-lang/crates.io-index"25
checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"26
27
[[package]]28
name = "ahash"29
version = "0.8.12"30
source = "registry+https://github.com/rust-lang/crates.io-index"31
checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75"32
dependencies = [33
"cfg-if",34
"getrandom 0.3.4",35
"once_cell",36
"version_check",37
"zerocopy",38
]39
40
[[package]]41
name = "android-activity"42
version = "0.6.1"43
source = "registry+https://github.com/rust-lang/crates.io-index"44
checksum = "0f2a1bb052857d5dd49572219344a7332b31b76405648eabac5bc68978251bcd"45
dependencies = [46
"android-properties",47
"bitflags 2.13.2",48
"cc",49
"jni",50
"libc",51
"log",52
"ndk",53
"ndk-context",54
"ndk-sys 0.6.0+11769913",55
"num_enum",56
"thiserror 2.0.21",57
]58
59
[[package]]60
name = "android-properties"61
version = "0.2.2"62
source = "registry+https://github.com/rust-lang/crates.io-index"63
checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04"64
65
[[package]]66
name = "android_system_properties"67
version = "0.1.6"68
source = "registry+https://github.com/rust-lang/crates.io-index"69
checksum = "ae221649c9976a6f6c56ae1facf410f3ddb33cc661c4b7b61020a912d4237fbc"70
dependencies = [71
"libc",72
]73
74
[[package]]75
name = "arboard"76
version = "3.7.0"77
source = "registry+https://github.com/rust-lang/crates.io-index"78
checksum = "aeb9553e62312c8756a5979254fc6d7da8bbeb5986a1e17037fab932f7037917"79
dependencies = [80
"clipboard-win",81
"log",82
"objc2 0.6.5",83
"objc2-app-kit 0.3.2",84
"objc2-foundation 0.3.2",85
"parking_lot",86
"percent-encoding",87
"windows-sys 0.61.2",88
"x11rb",89
]90
91
[[package]]92
name = "arrayvec"93
version = "0.7.8"94
source = "registry+https://github.com/rust-lang/crates.io-index"95
checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56"96
97
[[package]]98
name = "as-raw-xcb-connection"99
version = "1.0.1"100
source = "registry+https://github.com/rust-lang/crates.io-index"101
checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b"102
103
[[package]]104
name = "ash"105
version = "0.38.0+1.3.281"106
source = "registry+https://github.com/rust-lang/crates.io-index"107
checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f"108
dependencies = [109
"libloading",110
]111
112
[[package]]113
name = "atomic-waker"114
version = "1.1.2"115
source = "registry+https://github.com/rust-lang/crates.io-index"116
checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"117
118
[[package]]119
name = "autocfg"120
version = "1.5.1"121
source = "registry+https://github.com/rust-lang/crates.io-index"122
checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"123
124
[[package]]125
name = "bit-set"126
version = "0.6.0"127
source = "registry+https://github.com/rust-lang/crates.io-index"128
checksum = "f0481a0e032742109b1133a095184ee93d88f3dc9e0d28a5d033dc77a073f44f"129
dependencies = [130
"bit-vec",131
]132
133
[[package]]134
name = "bit-vec"135
version = "0.7.0"136
source = "registry+https://github.com/rust-lang/crates.io-index"137
checksum = "d2c54ff287cfc0a34f38a6b832ea1bd8e448a330b3e40a50859e6488bee07f22"138
139
[[package]]140
name = "bitflags"141
version = "1.3.2"142
source = "registry+https://github.com/rust-lang/crates.io-index"143
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"144
145
[[package]]146
name = "bitflags"147
version = "2.13.2"148
source = "registry+https://github.com/rust-lang/crates.io-index"149
checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06"150
151
[[package]]152
name = "block"153
version = "0.1.6"154
source = "registry+https://github.com/rust-lang/crates.io-index"155
checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"156
157
[[package]]158
name = "block2"159
version = "0.5.1"160
source = "registry+https://github.com/rust-lang/crates.io-index"161
checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f"162
dependencies = [163
"objc2 0.5.3",164
]165
166
[[package]]167
name = "bumpalo"168
version = "3.20.3"169
source = "registry+https://github.com/rust-lang/crates.io-index"170
checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649"171
172
[[package]]173
name = "bytemuck"174
version = "1.25.2"175
source = "registry+https://github.com/rust-lang/crates.io-index"176
checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797"177
dependencies = [178
"bytemuck_derive",179
]180
181
[[package]]182
name = "bytemuck_derive"183
version = "1.12.1"184
source = "registry+https://github.com/rust-lang/crates.io-index"185
checksum = "6a1f896587b6f2c069c73d2f0913e2d590c3990285cd2f0b6aa02b786b4c679c"186
dependencies = [187
"proc-macro2",188
"quote",189
"syn 3.0.9",190
]191
192
[[package]]193
name = "byteorder-lite"194
version = "0.1.0"195
source = "registry+https://github.com/rust-lang/crates.io-index"196
checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495"197
198
[[package]]199
name = "bytes"200
version = "1.12.1"201
source = "registry+https://github.com/rust-lang/crates.io-index"202
checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04"203
204
[[package]]205
name = "calloop"206
version = "0.13.0"207
source = "registry+https://github.com/rust-lang/crates.io-index"208
checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec"209
dependencies = [210
"bitflags 2.13.2",211
"log",212
"polling",213
"rustix 0.38.44",214
"slab",215
"thiserror 1.0.69",216
]217
218
[[package]]219
name = "calloop"220
version = "0.14.5"221
source = "registry+https://github.com/rust-lang/crates.io-index"222
checksum = "43b32313e937c8721c9d17ee9bf60699a6402b4b7c2cb6ac1bee0ffcaa4b4e5e"223
dependencies = [224
"bitflags 2.13.2",225
"polling",226
"rustix 1.1.6",227
"tracing",228
]229
230
[[package]]231
name = "calloop-wayland-source"232
version = "0.3.0"233
source = "registry+https://github.com/rust-lang/crates.io-index"234
checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20"235
dependencies = [236
"calloop 0.13.0",237
"rustix 0.38.44",238
"wayland-backend",239
"wayland-client",240
]241
242
[[package]]243
name = "calloop-wayland-source"244
version = "0.4.1"245
source = "registry+https://github.com/rust-lang/crates.io-index"246
checksum = "138efcf0940a02ebf0cc8d1eff41a1682a46b431630f4c52450d6265876021fa"247
dependencies = [248
"calloop 0.14.5",249
"rustix 1.1.6",250
"wayland-backend",251
"wayland-client",252
]253
254
[[package]]255
name = "cc"256
version = "1.11.1"257
source = "registry+https://github.com/rust-lang/crates.io-index"258
checksum = "4ff2a8126fff0f8c839080d619675a585e61720bb12d2baceae45769fd66f155"259
dependencies = [260
"find-msvc-tools",261
"jobserver",262
"libc",263
"shlex",264
]265
266
[[package]]267
name = "cfg-if"268
version = "1.0.5"269
source = "registry+https://github.com/rust-lang/crates.io-index"270
checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600"271
272
[[package]]273
name = "cfg_aliases"274
version = "0.1.1"275
source = "registry+https://github.com/rust-lang/crates.io-index"276
checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"277
278
[[package]]279
name = "cfg_aliases"280
version = "0.2.2"281
source = "registry+https://github.com/rust-lang/crates.io-index"282
checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527"283
284
[[package]]285
name = "cgl"286
version = "0.3.2"287
source = "registry+https://github.com/rust-lang/crates.io-index"288
checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff"289
dependencies = [290
"libc",291
]292
293
[[package]]294
name = "clipboard-win"295
version = "5.4.3"296
source = "registry+https://github.com/rust-lang/crates.io-index"297
checksum = "052af7878466feccda12ba7a6a67d019d712f296809559b47c12c8cc196d3a9a"298
dependencies = [299
"error-code",300
]301
302
[[package]]303
name = "codespan-reporting"304
version = "0.11.1"305
source = "registry+https://github.com/rust-lang/crates.io-index"306
checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"307
dependencies = [308
"termcolor",309
"unicode-width",310
]311
312
[[package]]313
name = "com"314
version = "0.6.0"315
source = "registry+https://github.com/rust-lang/crates.io-index"316
checksum = "7e17887fd17353b65b1b2ef1c526c83e26cd72e74f598a8dc1bee13a48f3d9f6"317
dependencies = [318
"com_macros",319
]320
321
[[package]]322
name = "com_macros"323
version = "0.6.0"324
source = "registry+https://github.com/rust-lang/crates.io-index"325
checksum = "d375883580a668c7481ea6631fc1a8863e33cc335bf56bfad8d7e6d4b04b13a5"326
dependencies = [327
"com_macros_support",328
"proc-macro2",329
"syn 1.0.109",330
]331
332
[[package]]333
name = "com_macros_support"334
version = "0.6.0"335
source = "registry+https://github.com/rust-lang/crates.io-index"336
checksum = "ad899a1087a9296d5644792d7cb72b8e34c1bec8e7d4fbc002230169a6e8710c"337
dependencies = [338
"proc-macro2",339
"quote",340
"syn 1.0.109",341
]342
343
[[package]]344
name = "combine"345
version = "4.6.9"346
source = "registry+https://github.com/rust-lang/crates.io-index"347
checksum = "4356eba6976435498d05a311ee9fc486da3bc81c200d3f0d7dd9703b41913f92"348
dependencies = [349
"bytes",350
"memchr",351
]352
353
[[package]]354
name = "concurrent-queue"355
version = "2.5.0"356
source = "registry+https://github.com/rust-lang/crates.io-index"357
checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973"358
dependencies = [359
"crossbeam-utils",360
]361
362
[[package]]363
name = "core-foundation"364
version = "0.9.4"365
source = "registry+https://github.com/rust-lang/crates.io-index"366
checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"367
dependencies = [368
"core-foundation-sys",369
"libc",370
]371
372
[[package]]373
name = "core-foundation-sys"374
version = "0.8.7"375
source = "registry+https://github.com/rust-lang/crates.io-index"376
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"377
378
[[package]]379
name = "core-graphics"380
version = "0.23.2"381
source = "registry+https://github.com/rust-lang/crates.io-index"382
checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081"383
dependencies = [384
"bitflags 1.3.2",385
"core-foundation",386
"core-graphics-types",387
"foreign-types",388
"libc",389
]390
391
[[package]]392
name = "core-graphics-types"393
version = "0.1.3"394
source = "registry+https://github.com/rust-lang/crates.io-index"395
checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf"396
dependencies = [397
"bitflags 1.3.2",398
"core-foundation",399
"libc",400
]401
402
[[package]]403
name = "crc32fast"404
version = "1.5.4"405
source = "registry+https://github.com/rust-lang/crates.io-index"406
checksum = "5f97d3416d5337d15c4b0d78c8c91df922ca143f57ec20e2d1c188333047ef04"407
dependencies = [408
"cfg-if",409
]410
411
[[package]]412
name = "crossbeam-utils"413
version = "0.8.23"414
source = "registry+https://github.com/rust-lang/crates.io-index"415
checksum = "a31eee39dddec8330830986fcd7625edb5a24ec90ea038215273bbc3adb08ac6"416
417
[[package]]418
name = "cursor-icon"419
version = "1.2.0"420
source = "registry+https://github.com/rust-lang/crates.io-index"421
checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f"422
423
[[package]]424
name = "dispatch"425
version = "0.2.0"426
source = "registry+https://github.com/rust-lang/crates.io-index"427
checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"428
429
[[package]]430
name = "dispatch2"431
version = "0.3.1"432
source = "registry+https://github.com/rust-lang/crates.io-index"433
checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38"434
dependencies = [435
"bitflags 2.13.2",436
"objc2 0.6.5",437
]438
439
[[package]]440
name = "displaydoc"441
version = "0.2.7"442
source = "registry+https://github.com/rust-lang/crates.io-index"443
checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8"444
dependencies = [445
"proc-macro2",446
"quote",447
"syn 3.0.9",448
]449
450
[[package]]451
name = "dlib"452
version = "0.5.3"453
source = "registry+https://github.com/rust-lang/crates.io-index"454
checksum = "ab8ecd87370524b461f8557c119c405552c396ed91fc0a8eec68679eab26f94a"455
dependencies = [456
"libloading",457
]458
459
[[package]]460
name = "document-features"461
version = "0.2.12"462
source = "registry+https://github.com/rust-lang/crates.io-index"463
checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61"464
dependencies = [465
"litrs",466
]467
468
[[package]]469
name = "downcast-rs"470
version = "1.2.1"471
source = "registry+https://github.com/rust-lang/crates.io-index"472
checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2"473
474
[[package]]475
name = "dpi"476
version = "0.1.2"477
source = "registry+https://github.com/rust-lang/crates.io-index"478
checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76"479
480
[[package]]481
name = "ecolor"482
version = "0.29.1"483
source = "registry+https://github.com/rust-lang/crates.io-index"484
checksum = "775cfde491852059e386c4e1deb4aef381c617dc364184c6f6afee99b87c402b"485
dependencies = [486
"bytemuck",487
"emath",488
]489
490
[[package]]491
name = "eframe"492
version = "0.29.1"493
source = "registry+https://github.com/rust-lang/crates.io-index"494
checksum = "8ac2645a9bf4826eb4e91488b1f17b8eaddeef09396706b2f14066461338e24f"495
dependencies = [496
"ahash",497
"bytemuck",498
"document-features",499
"egui",500
"egui-wgpu",501
"egui-winit",502
"egui_glow",503
"glow 0.14.2",504
"glutin",505
"glutin-winit",506
"image",507
"js-sys",508
"log",509
"objc2 0.5.3",510
"objc2-app-kit 0.2.2",511
"objc2-foundation 0.2.2",512
"parking_lot",513
"percent-encoding",514
"raw-window-handle",515
"static_assertions",516
"wasm-bindgen",517
"wasm-bindgen-futures",518
"web-sys",519
"web-time",520
"winapi",521
"windows-sys 0.52.0",522
"winit",523
]524
525
[[package]]526
name = "egui"527
version = "0.29.1"528
source = "registry+https://github.com/rust-lang/crates.io-index"529
checksum = "53eafabcce0cb2325a59a98736efe0bf060585b437763f8c476957fb274bb974"530
dependencies = [531
"ahash",532
"emath",533
"epaint",534
"log",535
"nohash-hasher",536
]537
538
[[package]]539
name = "egui-wgpu"540
version = "0.29.1"541
source = "registry+https://github.com/rust-lang/crates.io-index"542
checksum = "d00fd5d06d8405397e64a928fa0ef3934b3c30273ea7603e3dc4627b1f7a1a82"543
dependencies = [544
"ahash",545
"bytemuck",546
"document-features",547
"egui",548
"epaint",549
"log",550
"thiserror 1.0.69",551
"type-map",552
"web-time",553
"wgpu",554
"winit",555
]556
557
[[package]]558
name = "egui-winit"559
version = "0.29.1"560
source = "registry+https://github.com/rust-lang/crates.io-index"561
checksum = "0a9c430f4f816340e8e8c1b20eec274186b1be6bc4c7dfc467ed50d57abc36c6"562
dependencies = [563
"ahash",564
"arboard",565
"egui",566
"log",567
"raw-window-handle",568
"smithay-clipboard",569
"web-time",570
"webbrowser",571
"winit",572
]573
574
[[package]]575
name = "egui_glow"576
version = "0.29.1"577
source = "registry+https://github.com/rust-lang/crates.io-index"578
checksum = "0e39bccc683cd43adab530d8f21a13eb91e80de10bcc38c3f1c16601b6f62b26"579
dependencies = [580
"ahash",581
"bytemuck",582
"egui",583
"glow 0.14.2",584
"log",585
"memoffset",586
"wasm-bindgen",587
"web-sys",588
"winit",589
]590
591
[[package]]592
name = "emath"593
version = "0.29.1"594
source = "registry+https://github.com/rust-lang/crates.io-index"595
checksum = "b1fe0049ce51d0fb414d029e668dd72eb30bc2b739bf34296ed97bd33df544f3"596
dependencies = [597
"bytemuck",598
]599
600
[[package]]601
name = "epaint"602
version = "0.29.1"603
source = "registry+https://github.com/rust-lang/crates.io-index"604
checksum = "a32af8da821bd4f43f2c137e295459ee2e1661d87ca8779dfa0eaf45d870e20f"605
dependencies = [606
"ab_glyph",607
"ahash",608
"bytemuck",609
"ecolor",610
"emath",611
"epaint_default_fonts",612
"log",613
"nohash-hasher",614
"parking_lot",615
]616
617
[[package]]618
name = "epaint_default_fonts"619
version = "0.29.1"620
source = "registry+https://github.com/rust-lang/crates.io-index"621
checksum = "483440db0b7993cf77a20314f08311dbe95675092405518c0677aa08c151a3ea"622
623
[[package]]624
name = "equivalent"625
version = "1.0.3"626
source = "registry+https://github.com/rust-lang/crates.io-index"627
checksum = "00d174d5400e5e8fd687ad1049e2f578285fa914201b1af7e8b112a4546bd826"628
629
[[package]]630
name = "errno"631
version = "0.3.14"632
source = "registry+https://github.com/rust-lang/crates.io-index"633
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"634
dependencies = [635
"libc",636
"windows-sys 0.61.2",637
]638
639
[[package]]640
name = "error-code"641
version = "3.4.0"642
source = "registry+https://github.com/rust-lang/crates.io-index"643
checksum = "0b5343afd4a8365a643ac588dab4cf234a190c7f6c88c9f6dd6ffe00837661b7"644
645
[[package]]646
name = "fdeflate"647
version = "0.3.7"648
source = "registry+https://github.com/rust-lang/crates.io-index"649
checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c"650
dependencies = [651
"simd-adler32",652
]653
654
[[package]]655
name = "find-msvc-tools"656
version = "0.1.15"657
source = "registry+https://github.com/rust-lang/crates.io-index"658
checksum = "1c66915cc5391097de7a2b0b972e8505aa33c0df401fd3a6811dbdb32881ba48"659
660
[[package]]661
name = "flate2"662
version = "1.1.11"663
source = "registry+https://github.com/rust-lang/crates.io-index"664
checksum = "626d4928326b646e70f65ed36fc7cf9f206bdb68a0019ee7c6b4709da4e084c4"665
dependencies = [666
"crc32fast",667
"miniz_oxide 0.9.1",668
"zlib-rs",669
]670
671
[[package]]672
name = "foldhash"673
version = "0.1.5"674
source = "registry+https://github.com/rust-lang/crates.io-index"675
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"676
677
[[package]]678
name = "foreign-types"679
version = "0.5.0"680
source = "registry+https://github.com/rust-lang/crates.io-index"681
checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965"682
dependencies = [683
"foreign-types-macros",684
"foreign-types-shared",685
]686
687
[[package]]688
name = "foreign-types-macros"689
version = "0.2.4"690
source = "registry+https://github.com/rust-lang/crates.io-index"691
checksum = "ea5190182e6915eb873ddbc16e23b711b6eb1f9c00a0d0a3a91b5f6228475225"692
dependencies = [693
"proc-macro2",694
"quote",695
"syn 3.0.9",696
]697
698
[[package]]699
name = "foreign-types-shared"700
version = "0.3.1"701
source = "registry+https://github.com/rust-lang/crates.io-index"702
checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b"703
704
[[package]]705
name = "form_urlencoded"706
version = "1.2.2"707
source = "registry+https://github.com/rust-lang/crates.io-index"708
checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf"709
dependencies = [710
"percent-encoding",711
]712
713
[[package]]714
name = "futures-core"715
version = "0.3.34"716
source = "registry+https://github.com/rust-lang/crates.io-index"717
checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e"718
719
[[package]]720
name = "futures-task"721
version = "0.3.34"722
source = "registry+https://github.com/rust-lang/crates.io-index"723
checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd"724
725
[[package]]726
name = "futures-util"727
version = "0.3.34"728
source = "registry+https://github.com/rust-lang/crates.io-index"729
checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc"730
dependencies = [731
"futures-core",732
"futures-task",733
"pin-project-lite",734
"slab",735
]736
737
[[package]]738
name = "gethostname"739
version = "1.1.0"740
source = "registry+https://github.com/rust-lang/crates.io-index"741
checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8"742
dependencies = [743
"rustix 1.1.6",744
"windows-link",745
]746
747
[[package]]748
name = "getrandom"749
version = "0.3.4"750
source = "registry+https://github.com/rust-lang/crates.io-index"751
checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"752
dependencies = [753
"cfg-if",754
"libc",755
"r-efi 5.3.0",756
"wasip2",757
]758
759
[[package]]760
name = "getrandom"761
version = "0.4.3"762
source = "registry+https://github.com/rust-lang/crates.io-index"763
checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099"764
dependencies = [765
"cfg-if",766
"libc",767
"r-efi 6.0.0",768
]769
770
[[package]]771
name = "gl_generator"772
version = "0.14.0"773
source = "registry+https://github.com/rust-lang/crates.io-index"774
checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d"775
dependencies = [776
"khronos_api",777
"log",778
"xml-rs",779
]780
781
[[package]]782
name = "glow"783
version = "0.13.1"784
source = "registry+https://github.com/rust-lang/crates.io-index"785
checksum = "bd348e04c43b32574f2de31c8bb397d96c9fcfa1371bd4ca6d8bdc464ab121b1"786
dependencies = [787
"js-sys",788
"slotmap",789
"wasm-bindgen",790
"web-sys",791
]792
793
[[package]]794
name = "glow"795
version = "0.14.2"796
source = "registry+https://github.com/rust-lang/crates.io-index"797
checksum = "d51fa363f025f5c111e03f13eda21162faeacb6911fe8caa0c0349f9cf0c4483"798
dependencies = [799
"js-sys",800
"slotmap",801
"wasm-bindgen",802
"web-sys",803
]804
805
[[package]]806
name = "glutin"807
version = "0.32.3"808
source = "registry+https://github.com/rust-lang/crates.io-index"809
checksum = "12124de845cacfebedff80e877bb37b5b75c34c5a4c89e47e1cdd67fb6041325"810
dependencies = [811
"bitflags 2.13.2",812
"cfg_aliases 0.2.2",813
"cgl",814
"dispatch2",815
"glutin_egl_sys",816
"glutin_glx_sys",817
"glutin_wgl_sys",818
"libloading",819
"objc2 0.6.5",820
"objc2-app-kit 0.3.2",821
"objc2-core-foundation",822
"objc2-foundation 0.3.2",823
"once_cell",824
"raw-window-handle",825
"wayland-sys",826
"windows-sys 0.52.0",827
"x11-dl",828
]829
830
[[package]]831
name = "glutin-winit"832
version = "0.5.0"833
source = "registry+https://github.com/rust-lang/crates.io-index"834
checksum = "85edca7075f8fc728f28cb8fbb111a96c3b89e930574369e3e9c27eb75d3788f"835
dependencies = [836
"cfg_aliases 0.2.2",837
"glutin",838
"raw-window-handle",839
"winit",840
]841
842
[[package]]843
name = "glutin_egl_sys"844
version = "0.7.1"845
source = "registry+https://github.com/rust-lang/crates.io-index"846
checksum = "4c4680ba6195f424febdc3ba46e7a42a0e58743f2edb115297b86d7f8ecc02d2"847
dependencies = [848
"gl_generator",849
"windows-sys 0.52.0",850
]851
852
[[package]]853
name = "glutin_glx_sys"854
version = "0.6.1"855
source = "registry+https://github.com/rust-lang/crates.io-index"856
checksum = "8a7bb2938045a88b612499fbcba375a77198e01306f52272e692f8c1f3751185"857
dependencies = [858
"gl_generator",859
"x11-dl",860
]861
862
[[package]]863
name = "glutin_wgl_sys"864
version = "0.6.1"865
source = "registry+https://github.com/rust-lang/crates.io-index"866
checksum = "2c4ee00b289aba7a9e5306d57c2d05499b2e5dc427f84ac708bd2c090212cf3e"867
dependencies = [868
"gl_generator",869
]870
871
[[package]]872
name = "gpu-alloc"873
version = "0.6.2"874
source = "registry+https://github.com/rust-lang/crates.io-index"875
checksum = "45cf04b2726f02df5508c6de726acdc90cdf97ac771a9a0ffd8ba10a6e696bf9"876
dependencies = [877
"bitflags 2.13.2",878
"gpu-alloc-types",879
]880
881
[[package]]882
name = "gpu-alloc-types"883
version = "0.3.1"884
source = "registry+https://github.com/rust-lang/crates.io-index"885
checksum = "b2bbed164dd10ed526c2e4fe3e721ca4a71c61730e5aafac6844b417b3227058"886
dependencies = [887
"bitflags 2.13.2",888
]889
890
[[package]]891
name = "gpu-allocator"892
version = "0.26.0"893
source = "registry+https://github.com/rust-lang/crates.io-index"894
checksum = "fdd4240fc91d3433d5e5b0fc5b67672d771850dc19bbee03c1381e19322803d7"895
dependencies = [896
"log",897
"presser",898
"thiserror 1.0.69",899
"winapi",900
"windows",901
]902
903
[[package]]904
name = "gpu-descriptor"905
version = "0.3.2"906
source = "registry+https://github.com/rust-lang/crates.io-index"907
checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca"908
dependencies = [909
"bitflags 2.13.2",910
"gpu-descriptor-types",911
"hashbrown 0.15.5",912
]913
914
[[package]]915
name = "gpu-descriptor-types"916
version = "0.2.0"917
source = "registry+https://github.com/rust-lang/crates.io-index"918
checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91"919
dependencies = [920
"bitflags 2.13.2",921
]922
923
[[package]]924
name = "hashbrown"925
version = "0.15.5"926
source = "registry+https://github.com/rust-lang/crates.io-index"927
checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"928
dependencies = [929
"foldhash",930
]931
932
[[package]]933
name = "hashbrown"934
version = "0.17.1"935
source = "registry+https://github.com/rust-lang/crates.io-index"936
checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a"937
938
[[package]]939
name = "hassle-rs"940
version = "0.11.0"941
source = "registry+https://github.com/rust-lang/crates.io-index"942
checksum = "af2a7e73e1f34c48da31fb668a907f250794837e08faa144fd24f0b8b741e890"943
dependencies = [944
"bitflags 2.13.2",945
"com",946
"libc",947
"libloading",948
"thiserror 1.0.69",949
"widestring",950
"winapi",951
]952
953
[[package]]954
name = "hermit-abi"955
version = "0.5.3"956
source = "registry+https://github.com/rust-lang/crates.io-index"957
checksum = "e17592d60ebacc7d5e169f4663c5f84f9161cc90328abcfe8456f41e4dfcb284"958
959
[[package]]960
name = "hexf-parse"961
version = "0.2.1"962
source = "registry+https://github.com/rust-lang/crates.io-index"963
checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df"964
965
[[package]]966
name = "icu_collections"967
version = "2.4.0"968
source = "registry+https://github.com/rust-lang/crates.io-index"969
checksum = "fe090a42a0d3140fed8c63263ed1fecc02422cb2f4bfe55cd8de2de1b8e105dd"970
dependencies = [971
"displaydoc",972
"potential_utf",973
"utf8_iter",974
"yoke",975
"zerofrom",976
"zerovec",977
]978
979
[[package]]980
name = "icu_locale_core"981
version = "2.4.0"982
source = "registry+https://github.com/rust-lang/crates.io-index"983
checksum = "25d29b57c17c6528d0dc4c2141cfa2d08200465acb537a3909c8b9b8a4a984c0"984
dependencies = [985
"displaydoc",986
"litemap",987
"tinystr",988
"writeable",989
"zerovec",990
]991
992
[[package]]993
name = "icu_normalizer"994
version = "2.4.0"995
source = "registry+https://github.com/rust-lang/crates.io-index"996
checksum = "404a3b8c486f205c87fe7f23ab6894d84a4ad76d6e4671ae1981ba7def87c599"997
dependencies = [998
"icu_collections",999
"icu_normalizer_data",1000
"icu_properties",1001
"icu_provider",1002
"smallvec",1003
"zerovec",1004
]1005
1006
[[package]]1007
name = "icu_normalizer_data"1008
version = "2.4.0"1009
source = "registry+https://github.com/rust-lang/crates.io-index"1010
checksum = "20f0088bfb7441f7a37fa0c9e20cb1e9cba1cac6b9ce8cd2a6dc44294f8e8cbc"1011
1012
[[package]]1013
name = "icu_properties"1014
version = "2.4.0"1015
source = "registry+https://github.com/rust-lang/crates.io-index"1016
checksum = "2ea83d991c56158f7cf898bf86436c1dfe7c07ee82fe88951f2695c9f37a379f"1017
dependencies = [1018
"displaydoc",1019
"icu_collections",1020
"icu_locale_core",1021
"icu_properties_data",1022
"icu_provider",1023
"zerotrie",1024
"zerovec",1025
]1026
1027
[[package]]1028
name = "icu_properties_data"1029
version = "2.4.0"1030
source = "registry+https://github.com/rust-lang/crates.io-index"1031
checksum = "b98f29af82d02b163fe50161388350e743bb3107cc8e8c2f7314cb505faddfcf"1032
1033
[[package]]1034
name = "icu_provider"1035
version = "2.4.0"1036
source = "registry+https://github.com/rust-lang/crates.io-index"1037
checksum = "413099315636c588ee8f011190b329b971a09a8fae9d157e01dcae8379468514"1038
dependencies = [1039
"displaydoc",1040
"icu_locale_core",1041
"writeable",1042
"yoke",1043
"zerofrom",1044
"zerotrie",1045
"zerovec",1046
]1047
1048
[[package]]1049
name = "idna"1050
version = "1.1.0"1051
source = "registry+https://github.com/rust-lang/crates.io-index"1052
checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de"1053
dependencies = [1054
"idna_adapter",1055
"smallvec",1056
"utf8_iter",1057
]1058
1059
[[package]]1060
name = "idna_adapter"1061
version = "1.2.2"1062
source = "registry+https://github.com/rust-lang/crates.io-index"1063
checksum = "cb68373c0d6620ef8105e855e7745e18b0d00d3bdb07fb532e434244cdb9a714"1064
dependencies = [1065
"icu_normalizer",1066
"icu_properties",1067
]1068
1069
[[package]]1070
name = "image"1071
version = "0.25.10"1072
source = "registry+https://github.com/rust-lang/crates.io-index"1073
checksum = "85ab80394333c02fe689eaf900ab500fbd0c2213da414687ebf995a65d5a6104"1074
dependencies = [1075
"bytemuck",1076
"byteorder-lite",1077
"moxcms",1078
"num-traits",1079
"png",1080
]1081
1082
[[package]]1083
name = "indexmap"1084
version = "2.14.2"1085
source = "registry+https://github.com/rust-lang/crates.io-index"1086
checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855"1087
dependencies = [1088
"equivalent",1089
"hashbrown 0.17.1",1090
]1091
1092
[[package]]1093
name = "jni"1094
version = "0.22.4"1095
source = "registry+https://github.com/rust-lang/crates.io-index"1096
checksum = "5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498"1097
dependencies = [1098
"cfg-if",1099
"combine",1100
"jni-macros",1101
"jni-sys 0.4.1",1102
"log",1103
"simd_cesu8",1104
"thiserror 2.0.21",1105
"walkdir",1106
"windows-link",1107
]1108
1109
[[package]]1110
name = "jni-macros"1111
version = "0.22.4"1112
source = "registry+https://github.com/rust-lang/crates.io-index"1113
checksum = "a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3"1114
dependencies = [1115
"proc-macro2",1116
"quote",1117
"rustc_version",1118
"simd_cesu8",1119
"syn 2.0.119",1120
]1121
1122
[[package]]1123
name = "jni-sys"1124
version = "0.3.1"1125
source = "registry+https://github.com/rust-lang/crates.io-index"1126
checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258"1127
dependencies = [1128
"jni-sys 0.4.1",1129
]1130
1131
[[package]]1132
name = "jni-sys"1133
version = "0.4.1"1134
source = "registry+https://github.com/rust-lang/crates.io-index"1135
checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2"1136
dependencies = [1137
"jni-sys-macros",1138
]1139
1140
[[package]]1141
name = "jni-sys-macros"1142
version = "0.4.1"1143
source = "registry+https://github.com/rust-lang/crates.io-index"1144
checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264"1145
dependencies = [1146
"quote",1147
"syn 2.0.119",1148
]1149
1150
[[package]]1151
name = "jobserver"1152
version = "0.1.35"1153
source = "registry+https://github.com/rust-lang/crates.io-index"1154
checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3"1155
dependencies = [1156
"getrandom 0.4.3",1157
"libc",1158
]1159
1160
[[package]]1161
name = "js-sys"1162
version = "0.3.107"1163
source = "registry+https://github.com/rust-lang/crates.io-index"1164
checksum = "8dc09d2154098bbf4ef54eab6b117a3c24cbbffe94046b16ee6d6d4510584d3a"1165
dependencies = [1166
"cfg-if",1167
"futures-util",1168
"wasm-bindgen",1169
]1170
1171
[[package]]1172
name = "khronos-egl"1173
version = "6.0.0"1174
source = "registry+https://github.com/rust-lang/crates.io-index"1175
checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76"1176
dependencies = [1177
"libc",1178
"libloading",1179
"pkg-config",1180
]1181
1182
[[package]]1183
name = "khronos_api"1184
version = "3.1.0"1185
source = "registry+https://github.com/rust-lang/crates.io-index"1186
checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc"1187
1188
[[package]]1189
name = "libc"1190
version = "0.2.191"1191
source = "registry+https://github.com/rust-lang/crates.io-index"1192
checksum = "65cd87c9a6d60536580b316ad985726104730a5151c99845f2490428ef91240a"1193
1194
[[package]]1195
name = "libloading"1196
version = "0.8.9"1197
source = "registry+https://github.com/rust-lang/crates.io-index"1198
checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55"1199
dependencies = [1200
"cfg-if",1201
"windows-link",1202
]1203
1204
[[package]]1205
name = "libredox"1206
version = "0.1.25"1207
source = "registry+https://github.com/rust-lang/crates.io-index"1208
checksum = "61ff90caf6077a803a240f62fdbe88645a890bbca49ef8174c3cb0404362171d"1209
dependencies = [1210
"bitflags 2.13.2",1211
"libc",1212
"plain",1213
"redox_syscall 0.9.5",1214
]1215
1216
[[package]]1217
name = "linux-raw-sys"1218
version = "0.4.15"1219
source = "registry+https://github.com/rust-lang/crates.io-index"1220
checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"1221
1222
[[package]]1223
name = "linux-raw-sys"1224
version = "0.12.1"1225
source = "registry+https://github.com/rust-lang/crates.io-index"1226
checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53"1227
1228
[[package]]1229
name = "litemap"1230
version = "0.8.3"1231
source = "registry+https://github.com/rust-lang/crates.io-index"1232
checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae"1233
1234
[[package]]1235
name = "litrs"1236
version = "1.0.1"1237
source = "registry+https://github.com/rust-lang/crates.io-index"1238
checksum = "4744e383959f0db86ede514b809b1c53251889093803c05267acc7d4e7030d70"1239
1240
[[package]]1241
name = "lock_api"1242
version = "0.4.14"1243
source = "registry+https://github.com/rust-lang/crates.io-index"1244
checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"1245
dependencies = [1246
"scopeguard",1247
]1248
1249
[[package]]1250
name = "log"1251
version = "0.4.35"1252
source = "registry+https://github.com/rust-lang/crates.io-index"1253
checksum = "5d15f86d12da44cd8d4ec3c73984537eb7f4cadcb9776a575a0a8a05ca11005c"1254
1255
[[package]]1256
name = "malloc_buf"1257
version = "0.0.6"1258
source = "registry+https://github.com/rust-lang/crates.io-index"1259
checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"1260
dependencies = [1261
"libc",1262
]1263
1264
[[package]]1265
name = "memchr"1266
version = "2.8.3"1267
source = "registry+https://github.com/rust-lang/crates.io-index"1268
checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98"1269
1270
[[package]]1271
name = "memmap2"1272
version = "0.9.12"1273
source = "registry+https://github.com/rust-lang/crates.io-index"1274
checksum = "6b0ca1155a9ecc25aa12e8313a119f32edf0255fea2f44839c4ac0a12b2ac157"1275
dependencies = [1276
"libc",1277
]1278
1279
[[package]]1280
name = "memoffset"1281
version = "0.9.1"1282
source = "registry+https://github.com/rust-lang/crates.io-index"1283
checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"1284
dependencies = [1285
"autocfg",1286
]1287
1288
[[package]]1289
name = "metal"1290
version = "0.29.0"1291
source = "registry+https://github.com/rust-lang/crates.io-index"1292
checksum = "7ecfd3296f8c56b7c1f6fbac3c71cefa9d78ce009850c45000015f206dc7fa21"1293
dependencies = [1294
"bitflags 2.13.2",1295
"block",1296
"core-graphics-types",1297
"foreign-types",1298
"log",1299
"objc",1300
"paste",1301
]1302
1303
[[package]]1304
name = "miniz_oxide"1305
version = "0.8.9"1306
source = "registry+https://github.com/rust-lang/crates.io-index"1307
checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"1308
dependencies = [1309
"adler2",1310
"simd-adler32",1311
]1312
1313
[[package]]1314
name = "miniz_oxide"1315
version = "0.9.1"1316
source = "registry+https://github.com/rust-lang/crates.io-index"1317
checksum = "b63fbc4a50860e98e7b2aa7804ded1db5cbc3aff9193adaff57a6931bf7c4b4c"1318
dependencies = [1319
"adler2",1320
"simd-adler32",1321
]1322
1323
[[package]]1324
name = "moxcms"1325
version = "0.8.1"1326
source = "registry+https://github.com/rust-lang/crates.io-index"1327
checksum = "bb85c154ba489f01b25c0d36ae69a87e4a1c73a72631fc6c0eb6dde34a73e44b"1328
dependencies = [1329
"num-traits",1330
"pxfm",1331
]1332
1333
[[package]]1334
name = "naga"1335
version = "22.1.0"1336
source = "registry+https://github.com/rust-lang/crates.io-index"1337
checksum = "8bd5a652b6faf21496f2cfd88fc49989c8db0825d1f6746b1a71a6ede24a63ad"1338
dependencies = [1339
"arrayvec",1340
"bit-set",1341
"bitflags 2.13.2",1342
"cfg_aliases 0.1.1",1343
"codespan-reporting",1344
"hexf-parse",1345
"indexmap",1346
"log",1347
"rustc-hash 1.1.0",1348
"spirv",1349
"termcolor",1350
"thiserror 1.0.69",1351
"unicode-xid",1352
]1353
1354
[[package]]1355
name = "ndk"1356
version = "0.9.0"1357
source = "registry+https://github.com/rust-lang/crates.io-index"1358
checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4"1359
dependencies = [1360
"bitflags 2.13.2",1361
"jni-sys 0.3.1",1362
"log",1363
"ndk-sys 0.6.0+11769913",1364
"num_enum",1365
"raw-window-handle",1366
"thiserror 1.0.69",1367
]1368
1369
[[package]]1370
name = "ndk-context"1371
version = "0.1.1"1372
source = "registry+https://github.com/rust-lang/crates.io-index"1373
checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"1374
1375
[[package]]1376
name = "ndk-sys"1377
version = "0.5.0+25.2.9519653"1378
source = "registry+https://github.com/rust-lang/crates.io-index"1379
checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691"1380
dependencies = [1381
"jni-sys 0.3.1",1382
]1383
1384
[[package]]1385
name = "ndk-sys"1386
version = "0.6.0+11769913"1387
source = "registry+https://github.com/rust-lang/crates.io-index"1388
checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873"1389
dependencies = [1390
"jni-sys 0.3.1",1391
]1392
1393
[[package]]1394
name = "nohash-hasher"1395
version = "0.2.0"1396
source = "registry+https://github.com/rust-lang/crates.io-index"1397
checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451"1398
1399
[[package]]1400
name = "num-traits"1401
version = "0.2.19"1402
source = "registry+https://github.com/rust-lang/crates.io-index"1403
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"1404
dependencies = [1405
"autocfg",1406
]1407
1408
[[package]]1409
name = "num_enum"1410
version = "0.7.6"1411
source = "registry+https://github.com/rust-lang/crates.io-index"1412
checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26"1413
dependencies = [1414
"num_enum_derive",1415
"rustversion",1416
]1417
1418
[[package]]1419
name = "num_enum_derive"1420
version = "0.7.6"1421
source = "registry+https://github.com/rust-lang/crates.io-index"1422
checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8"1423
dependencies = [1424
"proc-macro-crate",1425
"proc-macro2",1426
"quote",1427
"syn 2.0.119",1428
]1429
1430
[[package]]1431
name = "objc"1432
version = "0.2.7"1433
source = "registry+https://github.com/rust-lang/crates.io-index"1434
checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"1435
dependencies = [1436
"malloc_buf",1437
]1438
1439
[[package]]1440
name = "objc-sys"1441
version = "0.3.5"1442
source = "registry+https://github.com/rust-lang/crates.io-index"1443
checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310"1444
1445
[[package]]1446
name = "objc2"1447
version = "0.5.3"1448
source = "registry+https://github.com/rust-lang/crates.io-index"1449
checksum = "19d5490aaf8f1d7cf7688dfa9b0ce07900e168852c45cd2c03f534dfd27cfd0b"1450
dependencies = [1451
"objc-sys",1452
"objc2-encode",1453
]1454
1455
[[package]]1456
name = "objc2"1457
version = "0.6.5"1458
source = "registry+https://github.com/rust-lang/crates.io-index"1459
checksum = "08849bbd4767dfae9457696856ae1c84fe4e0281bbe4a7abff2d0e06fb7981f8"1460
dependencies = [1461
"objc2-encode",1462
]1463
1464
[[package]]1465
name = "objc2-app-kit"1466
version = "0.2.2"1467
source = "registry+https://github.com/rust-lang/crates.io-index"1468
checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff"1469
dependencies = [1470
"bitflags 2.13.2",1471
"block2",1472
"libc",1473
"objc2 0.5.3",1474
"objc2-core-data",1475
"objc2-core-image",1476
"objc2-foundation 0.2.2",1477
"objc2-quartz-core",1478
]1479
1480
[[package]]1481
name = "objc2-app-kit"1482
version = "0.3.2"1483
source = "registry+https://github.com/rust-lang/crates.io-index"1484
checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c"1485
dependencies = [1486
"bitflags 2.13.2",1487
"objc2 0.6.5",1488
"objc2-core-foundation",1489
"objc2-core-graphics",1490
"objc2-foundation 0.3.2",1491
]1492
1493
[[package]]1494
name = "objc2-cloud-kit"1495
version = "0.2.2"1496
source = "registry+https://github.com/rust-lang/crates.io-index"1497
checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009"1498
dependencies = [1499
"bitflags 2.13.2",1500
"block2",1501
"objc2 0.5.3",1502
"objc2-core-location",1503
"objc2-foundation 0.2.2",1504
]1505
1506
[[package]]1507
name = "objc2-contacts"1508
version = "0.2.2"1509
source = "registry+https://github.com/rust-lang/crates.io-index"1510
checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889"1511
dependencies = [1512
"block2",1513
"objc2 0.5.3",1514
"objc2-foundation 0.2.2",1515
]1516
1517
[[package]]1518
name = "objc2-core-data"1519
version = "0.2.2"1520
source = "registry+https://github.com/rust-lang/crates.io-index"1521
checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef"1522
dependencies = [1523
"bitflags 2.13.2",1524
"block2",1525
"objc2 0.5.3",1526
"objc2-foundation 0.2.2",1527
]1528
1529
[[package]]1530
name = "objc2-core-foundation"1531
version = "0.3.2"1532
source = "registry+https://github.com/rust-lang/crates.io-index"1533
checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536"1534
dependencies = [1535
"bitflags 2.13.2",1536
"dispatch2",1537
"objc2 0.6.5",1538
]1539
1540
[[package]]1541
name = "objc2-core-graphics"1542
version = "0.3.2"1543
source = "registry+https://github.com/rust-lang/crates.io-index"1544
checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807"1545
dependencies = [1546
"bitflags 2.13.2",1547
"dispatch2",1548
"objc2 0.6.5",1549
"objc2-core-foundation",1550
"objc2-io-surface",1551
]1552
1553
[[package]]1554
name = "objc2-core-image"1555
version = "0.2.2"1556
source = "registry+https://github.com/rust-lang/crates.io-index"1557
checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80"1558
dependencies = [1559
"block2",1560
"objc2 0.5.3",1561
"objc2-foundation 0.2.2",1562
"objc2-metal",1563
]1564
1565
[[package]]1566
name = "objc2-core-location"1567
version = "0.2.2"1568
source = "registry+https://github.com/rust-lang/crates.io-index"1569
checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781"1570
dependencies = [1571
"block2",1572
"objc2 0.5.3",1573
"objc2-contacts",1574
"objc2-foundation 0.2.2",1575
]1576
1577
[[package]]1578
name = "objc2-encode"1579
version = "4.1.0"1580
source = "registry+https://github.com/rust-lang/crates.io-index"1581
checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33"1582
1583
[[package]]1584
name = "objc2-foundation"1585
version = "0.2.2"1586
source = "registry+https://github.com/rust-lang/crates.io-index"1587
checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8"1588
dependencies = [1589
"bitflags 2.13.2",1590
"block2",1591
"dispatch",1592
"libc",1593
"objc2 0.5.3",1594
]1595
1596
[[package]]1597
name = "objc2-foundation"1598
version = "0.3.2"1599
source = "registry+https://github.com/rust-lang/crates.io-index"1600
checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272"1601
dependencies = [1602
"bitflags 2.13.2",1603
"objc2 0.6.5",1604
"objc2-core-foundation",1605
]1606
1607
[[package]]1608
name = "objc2-io-surface"1609
version = "0.3.2"1610
source = "registry+https://github.com/rust-lang/crates.io-index"1611
checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d"1612
dependencies = [1613
"bitflags 2.13.2",1614
"objc2 0.6.5",1615
"objc2-core-foundation",1616
]1617
1618
[[package]]1619
name = "objc2-link-presentation"1620
version = "0.2.2"1621
source = "registry+https://github.com/rust-lang/crates.io-index"1622
checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398"1623
dependencies = [1624
"block2",1625
"objc2 0.5.3",1626
"objc2-app-kit 0.2.2",1627
"objc2-foundation 0.2.2",1628
]1629
1630
[[package]]1631
name = "objc2-metal"1632
version = "0.2.2"1633
source = "registry+https://github.com/rust-lang/crates.io-index"1634
checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6"1635
dependencies = [1636
"bitflags 2.13.2",1637
"block2",1638
"objc2 0.5.3",1639
"objc2-foundation 0.2.2",1640
]1641
1642
[[package]]1643
name = "objc2-quartz-core"1644
version = "0.2.2"1645
source = "registry+https://github.com/rust-lang/crates.io-index"1646
checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a"1647
dependencies = [1648
"bitflags 2.13.2",1649
"block2",1650
"objc2 0.5.3",1651
"objc2-foundation 0.2.2",1652
"objc2-metal",1653
]1654
1655
[[package]]1656
name = "objc2-symbols"1657
version = "0.2.2"1658
source = "registry+https://github.com/rust-lang/crates.io-index"1659
checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc"1660
dependencies = [1661
"objc2 0.5.3",1662
"objc2-foundation 0.2.2",1663
]1664
1665
[[package]]1666
name = "objc2-ui-kit"1667
version = "0.2.2"1668
source = "registry+https://github.com/rust-lang/crates.io-index"1669
checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f"1670
dependencies = [1671
"bitflags 2.13.2",1672
"block2",1673
"objc2 0.5.3",1674
"objc2-cloud-kit",1675
"objc2-core-data",1676
"objc2-core-image",1677
"objc2-core-location",1678
"objc2-foundation 0.2.2",1679
"objc2-link-presentation",1680
"objc2-quartz-core",1681
"objc2-symbols",1682
"objc2-uniform-type-identifiers",1683
"objc2-user-notifications",1684
]1685
1686
[[package]]1687
name = "objc2-uniform-type-identifiers"1688
version = "0.2.2"1689
source = "registry+https://github.com/rust-lang/crates.io-index"1690
checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe"1691
dependencies = [1692
"block2",1693
"objc2 0.5.3",1694
"objc2-foundation 0.2.2",1695
]1696
1697
[[package]]1698
name = "objc2-user-notifications"1699
version = "0.2.2"1700
source = "registry+https://github.com/rust-lang/crates.io-index"1701
checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3"1702
dependencies = [1703
"bitflags 2.13.2",1704
"block2",1705
"objc2 0.5.3",1706
"objc2-core-location",1707
"objc2-foundation 0.2.2",1708
]1709
1710
[[package]]1711
name = "once_cell"1712
version = "1.21.4"1713
source = "registry+https://github.com/rust-lang/crates.io-index"1714
checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"1715
1716
[[package]]1717
name = "orbclient"1718
version = "0.3.55"1719
source = "registry+https://github.com/rust-lang/crates.io-index"1720
checksum = "5df339f526ea9a60e371768d50efc2f2508c7203290731565d1f7a6f71d21747"1721
dependencies = [1722
"libc",1723
"libredox",1724
]1725
1726
[[package]]1727
name = "owned_ttf_parser"1728
version = "0.25.1"1729
source = "registry+https://github.com/rust-lang/crates.io-index"1730
checksum = "36820e9051aca1014ddc75770aab4d68bc1e9e632f0f5627c4086bc216fb583b"1731
dependencies = [1732
"ttf-parser",1733
]1734
1735
[[package]]1736
name = "paperdoll-renderer"1737
version = "0.1.0"1738
dependencies = [1739
"eframe",1740
"libloading",1741
]1742
1743
[[package]]1744
name = "parking_lot"1745
version = "0.12.5"1746
source = "registry+https://github.com/rust-lang/crates.io-index"1747
checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"1748
dependencies = [1749
"lock_api",1750
"parking_lot_core",1751
]1752
1753
[[package]]1754
name = "parking_lot_core"1755
version = "0.9.12"1756
source = "registry+https://github.com/rust-lang/crates.io-index"1757
checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"1758
dependencies = [1759
"cfg-if",1760
"libc",1761
"redox_syscall 0.5.18",1762
"smallvec",1763
"windows-link",1764
]1765
1766
[[package]]1767
name = "paste"1768
version = "1.0.15"1769
source = "registry+https://github.com/rust-lang/crates.io-index"1770
checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"1771
1772
[[package]]1773
name = "percent-encoding"1774
version = "2.3.2"1775
source = "registry+https://github.com/rust-lang/crates.io-index"1776
checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"1777
1778
[[package]]1779
name = "pin-project"1780
version = "1.1.13"1781
source = "registry+https://github.com/rust-lang/crates.io-index"1782
checksum = "2466b2336ed02bcdca6b294417127b90ec92038d1d5c4fbeac971a922e0e0924"1783
dependencies = [1784
"pin-project-internal",1785
]1786
1787
[[package]]1788
name = "pin-project-internal"1789
version = "1.1.13"1790
source = "registry+https://github.com/rust-lang/crates.io-index"1791
checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b"1792
dependencies = [1793
"proc-macro2",1794
"quote",1795
"syn 2.0.119",1796
]1797
1798
[[package]]1799
name = "pin-project-lite"1800
version = "0.2.17"1801
source = "registry+https://github.com/rust-lang/crates.io-index"1802
checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd"1803
1804
[[package]]1805
name = "pkg-config"1806
version = "0.3.34"1807
source = "registry+https://github.com/rust-lang/crates.io-index"1808
checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548"1809
1810
[[package]]1811
name = "plain"1812
version = "0.2.3"1813
source = "registry+https://github.com/rust-lang/crates.io-index"1814
checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6"1815
1816
[[package]]1817
name = "png"1818
version = "0.18.1"1819
source = "registry+https://github.com/rust-lang/crates.io-index"1820
checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61"1821
dependencies = [1822
"bitflags 2.13.2",1823
"crc32fast",1824
"fdeflate",1825
"flate2",1826
"miniz_oxide 0.8.9",1827
]1828
1829
[[package]]1830
name = "polling"1831
version = "3.11.0"1832
source = "registry+https://github.com/rust-lang/crates.io-index"1833
checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218"1834
dependencies = [1835
"cfg-if",1836
"concurrent-queue",1837
"hermit-abi",1838
"pin-project-lite",1839
"rustix 1.1.6",1840
"windows-sys 0.61.2",1841
]1842
1843
[[package]]1844
name = "potential_utf"1845
version = "0.1.6"1846
source = "registry+https://github.com/rust-lang/crates.io-index"1847
checksum = "d83eb9bc6d8e5cf568e7a1101d60ee05e81ed50ea106026f3d18deeb046d7661"1848
dependencies = [1849
"zerovec",1850
]1851
1852
[[package]]1853
name = "presser"1854
version = "0.3.1"1855
source = "registry+https://github.com/rust-lang/crates.io-index"1856
checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa"1857
1858
[[package]]1859
name = "proc-macro-crate"1860
version = "3.5.0"1861
source = "registry+https://github.com/rust-lang/crates.io-index"1862
checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f"1863
dependencies = [1864
"toml_edit",1865
]1866
1867
[[package]]1868
name = "proc-macro2"1869
version = "1.0.107"1870
source = "registry+https://github.com/rust-lang/crates.io-index"1871
checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9"1872
dependencies = [1873
"unicode-ident",1874
]1875
1876
[[package]]1877
name = "profiling"1878
version = "1.0.18"1879
source = "registry+https://github.com/rust-lang/crates.io-index"1880
checksum = "3d595e54a326bc53c1c197b32d295e14b169e3cfeaa8dc82b529f947fba6bcf5"1881
1882
[[package]]1883
name = "pxfm"1884
version = "0.1.30"1885
source = "registry+https://github.com/rust-lang/crates.io-index"1886
checksum = "d55d956fa96f5ec02be2e13af0e20391a5aa83d6a074e3ad368959d0fab299ea"1887
1888
[[package]]1889
name = "quick-xml"1890
version = "0.41.0"1891
source = "registry+https://github.com/rust-lang/crates.io-index"1892
checksum = "e660451e55124f798a69a5af3f49ccfbefbd41910eefd25caf2393e1f3473ec1"1893
dependencies = [1894
"memchr",1895
]1896
1897
[[package]]1898
name = "quote"1899
version = "1.0.47"1900
source = "registry+https://github.com/rust-lang/crates.io-index"1901
checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001"1902
dependencies = [1903
"proc-macro2",1904
]1905
1906
[[package]]1907
name = "r-efi"1908
version = "5.3.0"1909
source = "registry+https://github.com/rust-lang/crates.io-index"1910
checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"1911
1912
[[package]]1913
name = "r-efi"1914
version = "6.0.0"1915
source = "registry+https://github.com/rust-lang/crates.io-index"1916
checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"1917
1918
[[package]]1919
name = "raw-window-handle"1920
version = "0.6.2"1921
source = "registry+https://github.com/rust-lang/crates.io-index"1922
checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539"1923
1924
[[package]]1925
name = "redox_syscall"1926
version = "0.4.1"1927
source = "registry+https://github.com/rust-lang/crates.io-index"1928
checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"1929
dependencies = [1930
"bitflags 1.3.2",1931
]1932
1933
[[package]]1934
name = "redox_syscall"1935
version = "0.5.18"1936
source = "registry+https://github.com/rust-lang/crates.io-index"1937
checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"1938
dependencies = [1939
"bitflags 2.13.2",1940
]1941
1942
[[package]]1943
name = "redox_syscall"1944
version = "0.9.5"1945
source = "registry+https://github.com/rust-lang/crates.io-index"1946
checksum = "580c875845b41ecb1564ad1ae4703044cef774145e3d7a94dc2b3fa7c97868fd"1947
dependencies = [1948
"bitflags 2.13.2",1949
]1950
1951
[[package]]1952
name = "renderdoc-sys"1953
version = "1.1.0"1954
source = "registry+https://github.com/rust-lang/crates.io-index"1955
checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832"1956
1957
[[package]]1958
name = "rustc-hash"1959
version = "1.1.0"1960
source = "registry+https://github.com/rust-lang/crates.io-index"1961
checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"1962
1963
[[package]]1964
name = "rustc-hash"1965
version = "2.1.3"1966
source = "registry+https://github.com/rust-lang/crates.io-index"1967
checksum = "6b1e7f9a428571be2dc5bc0505c13fb6bf936822b894ec87abf8a08a4e51742d"1968
1969
[[package]]1970
name = "rustc_version"1971
version = "0.4.1"1972
source = "registry+https://github.com/rust-lang/crates.io-index"1973
checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"1974
dependencies = [1975
"semver",1976
]1977
1978
[[package]]1979
name = "rustix"1980
version = "0.38.44"1981
source = "registry+https://github.com/rust-lang/crates.io-index"1982
checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154"1983
dependencies = [1984
"bitflags 2.13.2",1985
"errno",1986
"libc",1987
"linux-raw-sys 0.4.15",1988
"windows-sys 0.59.0",1989
]1990
1991
[[package]]1992
name = "rustix"1993
version = "1.1.6"1994
source = "registry+https://github.com/rust-lang/crates.io-index"1995
checksum = "e5e76742e5294153d4dde1207dbec5bdd81eef6fabdc0d2118babadabfd858aa"1996
dependencies = [1997
"bitflags 2.13.2",1998
"errno",1999
"libc",2000
"linux-raw-sys 0.12.1",2001
"windows-sys 0.61.2",2002
]2003
2004
[[package]]2005
name = "rustversion"2006
version = "1.0.23"2007
source = "registry+https://github.com/rust-lang/crates.io-index"2008
checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f"2009
2010
[[package]]2011
name = "same-file"2012
version = "1.0.6"2013
source = "registry+https://github.com/rust-lang/crates.io-index"2014
checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"2015
dependencies = [2016
"winapi-util",2017
]2018
2019
[[package]]2020
name = "scoped-tls"2021
version = "1.0.1"2022
source = "registry+https://github.com/rust-lang/crates.io-index"2023
checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"2024
2025
[[package]]2026
name = "scopeguard"2027
version = "1.2.0"2028
source = "registry+https://github.com/rust-lang/crates.io-index"2029
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"2030
2031
[[package]]2032
name = "semver"2033
version = "1.0.28"2034
source = "registry+https://github.com/rust-lang/crates.io-index"2035
checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd"2036
2037
[[package]]2038
name = "serde"2039
version = "1.0.229"2040
source = "registry+https://github.com/rust-lang/crates.io-index"2041
checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba"2042
dependencies = [2043
"serde_core",2044
]2045
2046
[[package]]2047
name = "serde_core"2048
version = "1.0.229"2049
source = "registry+https://github.com/rust-lang/crates.io-index"2050
checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48"2051
dependencies = [2052
"serde_derive",2053
]2054
2055
[[package]]2056
name = "serde_derive"2057
version = "1.0.229"2058
source = "registry+https://github.com/rust-lang/crates.io-index"2059
checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348"2060
dependencies = [2061
"proc-macro2",2062
"quote",2063
"syn 3.0.9",2064
]2065
2066
[[package]]2067
name = "shlex"2068
version = "2.0.1"2069
source = "registry+https://github.com/rust-lang/crates.io-index"2070
checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba"2071
2072
[[package]]2073
name = "simd-adler32"2074
version = "0.3.10"2075
source = "registry+https://github.com/rust-lang/crates.io-index"2076
checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea"2077
2078
[[package]]2079
name = "simd_cesu8"2080
version = "1.2.0"2081
source = "registry+https://github.com/rust-lang/crates.io-index"2082
checksum = "11031e251abf8611c80f460e19dbdeb54a66db918e49c65a7065b46ac7aec520"2083
dependencies = [2084
"rustc_version",2085
"simdutf8",2086
]2087
2088
[[package]]2089
name = "simdutf8"2090
version = "0.1.5"2091
source = "registry+https://github.com/rust-lang/crates.io-index"2092
checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e"2093
2094
[[package]]2095
name = "slab"2096
version = "0.4.12"2097
source = "registry+https://github.com/rust-lang/crates.io-index"2098
checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"2099
2100
[[package]]2101
name = "slotmap"2102
version = "1.1.1"2103
source = "registry+https://github.com/rust-lang/crates.io-index"2104
checksum = "bdd58c3c93c3d278ca835519292445cb4b0d4dc59ccfdf7ceadaab3f8aeb4038"2105
dependencies = [2106
"version_check",2107
]2108
2109
[[package]]2110
name = "smallvec"2111
version = "1.16.4"2112
source = "registry+https://github.com/rust-lang/crates.io-index"2113
checksum = "d0d5d4b1981b8bbbb7aed204cae5726d683d5d6ac7e74ec54122ea28f315e7c8"2114
2115
[[package]]2116
name = "smithay-client-toolkit"2117
version = "0.19.2"2118
source = "registry+https://github.com/rust-lang/crates.io-index"2119
checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016"2120
dependencies = [2121
"bitflags 2.13.2",2122
"calloop 0.13.0",2123
"calloop-wayland-source 0.3.0",2124
"cursor-icon",2125
"libc",2126
"log",2127
"memmap2",2128
"rustix 0.38.44",2129
"thiserror 1.0.69",2130
"wayland-backend",2131
"wayland-client",2132
"wayland-csd-frame",2133
"wayland-cursor",2134
"wayland-protocols",2135
"wayland-protocols-wlr",2136
"wayland-scanner",2137
"xkeysym",2138
]2139
2140
[[package]]2141
name = "smithay-client-toolkit"2142
version = "0.20.0"2143
source = "registry+https://github.com/rust-lang/crates.io-index"2144
checksum = "0512da38f5e2b31201a93524adb8d3136276fa4fe4aafab4e1f727a82b534cc0"2145
dependencies = [2146
"bitflags 2.13.2",2147
"calloop 0.14.5",2148
"calloop-wayland-source 0.4.1",2149
"cursor-icon",2150
"libc",2151
"log",2152
"memmap2",2153
"rustix 1.1.6",2154
"thiserror 2.0.21",2155
"wayland-backend",2156
"wayland-client",2157
"wayland-csd-frame",2158
"wayland-cursor",2159
"wayland-protocols",2160
"wayland-protocols-experimental",2161
"wayland-protocols-misc",2162
"wayland-protocols-wlr",2163
"wayland-scanner",2164
"xkeysym",2165
]2166
2167
[[package]]2168
name = "smithay-clipboard"2169
version = "0.7.3"2170
source = "registry+https://github.com/rust-lang/crates.io-index"2171
checksum = "71704c03f739f7745053bde45fa203a46c58d25bc5c4efba1d9a60e9dba81226"2172
dependencies = [2173
"libc",2174
"smithay-client-toolkit 0.20.0",2175
"wayland-backend",2176
]2177
2178
[[package]]2179
name = "smol_str"2180
version = "0.2.2"2181
source = "registry+https://github.com/rust-lang/crates.io-index"2182
checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead"2183
dependencies = [2184
"serde",2185
]2186
2187
[[package]]2188
name = "spirv"2189
version = "0.3.0+sdk-1.3.268.0"2190
source = "registry+https://github.com/rust-lang/crates.io-index"2191
checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844"2192
dependencies = [2193
"bitflags 2.13.2",2194
]2195
2196
[[package]]2197
name = "stable_deref_trait"2198
version = "1.2.1"2199
source = "registry+https://github.com/rust-lang/crates.io-index"2200
checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"2201
2202
[[package]]2203
name = "static_assertions"2204
version = "1.1.0"2205
source = "registry+https://github.com/rust-lang/crates.io-index"2206
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"2207
2208
[[package]]2209
name = "syn"2210
version = "1.0.109"2211
source = "registry+https://github.com/rust-lang/crates.io-index"2212
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"2213
dependencies = [2214
"proc-macro2",2215
"quote",2216
"unicode-ident",2217
]2218
2219
[[package]]2220
name = "syn"2221
version = "2.0.119"2222
source = "registry+https://github.com/rust-lang/crates.io-index"2223
checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297"2224
dependencies = [2225
"proc-macro2",2226
"quote",2227
"unicode-ident",2228
]2229
2230
[[package]]2231
name = "syn"2232
version = "3.0.9"2233
source = "registry+https://github.com/rust-lang/crates.io-index"2234
checksum = "d78c8dee4c7bf0e14673097256fed6142ce9d3b85a408189d07482442145823b"2235
dependencies = [2236
"proc-macro2",2237
"quote",2238
"unicode-ident",2239
]2240
2241
[[package]]2242
name = "synstructure"2243
version = "0.14.0"2244
source = "registry+https://github.com/rust-lang/crates.io-index"2245
checksum = "901704edd0dfe137f1987838ee4f259e4e063c31371bdb423f7ae38ec6f77f02"2246
dependencies = [2247
"proc-macro2",2248
"quote",2249
"syn 3.0.9",2250
]2251
2252
[[package]]2253
name = "termcolor"2254
version = "1.4.1"2255
source = "registry+https://github.com/rust-lang/crates.io-index"2256
checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"2257
dependencies = [2258
"winapi-util",2259
]2260
2261
[[package]]2262
name = "thiserror"2263
version = "1.0.69"2264
source = "registry+https://github.com/rust-lang/crates.io-index"2265
checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"2266
dependencies = [2267
"thiserror-impl 1.0.69",2268
]2269
2270
[[package]]2271
name = "thiserror"2272
version = "2.0.21"2273
source = "registry+https://github.com/rust-lang/crates.io-index"2274
checksum = "09e52cb86a36cede5cb101bf8908837b3e4c6e5e59fe7fd85c23fb56200d189e"2275
dependencies = [2276
"thiserror-impl 2.0.21",2277
]2278
2279
[[package]]2280
name = "thiserror-impl"2281
version = "1.0.69"2282
source = "registry+https://github.com/rust-lang/crates.io-index"2283
checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"2284
dependencies = [2285
"proc-macro2",2286
"quote",2287
"syn 2.0.119",2288
]2289
2290
[[package]]2291
name = "thiserror-impl"2292
version = "2.0.21"2293
source = "registry+https://github.com/rust-lang/crates.io-index"2294
checksum = "fe5197923287db20a58125f0bc85c062f7f2c892de97b18c356f9efb14b28524"2295
dependencies = [2296
"proc-macro2",2297
"quote",2298
"syn 3.0.9",2299
]2300
2301
[[package]]2302
name = "tinystr"2303
version = "0.8.5"2304
source = "registry+https://github.com/rust-lang/crates.io-index"2305
checksum = "abc840c238154d58f9e86b2792261edfde565a17696e1cda1a449de27979801a"2306
dependencies = [2307
"displaydoc",2308
"zerovec",2309
]2310
2311
[[package]]2312
name = "tokio"2313
version = "1.54.1"2314
source = "registry+https://github.com/rust-lang/crates.io-index"2315
checksum = "b52fd3255258d26fac7264ab5a76b53c13367136dc011d3d6ad4f8ed070396a3"2316
dependencies = [2317
"pin-project-lite",2318
]2319
2320
[[package]]2321
name = "toml_datetime"2322
version = "1.1.3+spec-1.1.0"2323
source = "registry+https://github.com/rust-lang/crates.io-index"2324
checksum = "173f25c883cd2176a2d8212155638c0a60d484a9d84546d270866f40f56b6e49"2325
dependencies = [2326
"serde_core",2327
]2328
2329
[[package]]2330
name = "toml_edit"2331
version = "0.25.19+spec-1.1.0"2332
source = "registry+https://github.com/rust-lang/crates.io-index"2333
checksum = "dd43688c4858d7264ae1cf9a9f874a67c3feb74a883b1cd7bebd6a4ea8307218"2334
dependencies = [2335
"indexmap",2336
"toml_datetime",2337
"toml_parser",2338
"winnow",2339
]2340
2341
[[package]]2342
name = "toml_parser"2343
version = "1.1.5+spec-1.1.0"2344
source = "registry+https://github.com/rust-lang/crates.io-index"2345
checksum = "baa693a8032d7e1cada7d0041e96126df243179ff061456783ac7f12bda4744c"2346
dependencies = [2347
"winnow",2348
]2349
2350
[[package]]2351
name = "tracing"2352
version = "0.1.44"2353
source = "registry+https://github.com/rust-lang/crates.io-index"2354
checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100"2355
dependencies = [2356
"log",2357
"pin-project-lite",2358
"tracing-core",2359
]2360
2361
[[package]]2362
name = "tracing-core"2363
version = "0.1.36"2364
source = "registry+https://github.com/rust-lang/crates.io-index"2365
checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a"2366
2367
[[package]]2368
name = "ttf-parser"2369
version = "0.25.1"2370
source = "registry+https://github.com/rust-lang/crates.io-index"2371
checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31"2372
2373
[[package]]2374
name = "type-map"2375
version = "0.5.1"2376
source = "registry+https://github.com/rust-lang/crates.io-index"2377
checksum = "cb30dbbd9036155e74adad6812e9898d03ec374946234fbcebd5dfc7b9187b90"2378
dependencies = [2379
"rustc-hash 2.1.3",2380
]2381
2382
[[package]]2383
name = "unicode-ident"2384
version = "1.0.27"2385
source = "registry+https://github.com/rust-lang/crates.io-index"2386
checksum = "a2c754d6c33795a1c324727428e5a7dedb5b06195f9890bdbcba760d3e246563"2387
2388
[[package]]2389
name = "unicode-segmentation"2390
version = "1.13.3"2391
source = "registry+https://github.com/rust-lang/crates.io-index"2392
checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8"2393
2394
[[package]]2395
name = "unicode-width"2396
version = "0.1.14"2397
source = "registry+https://github.com/rust-lang/crates.io-index"2398
checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af"2399
2400
[[package]]2401
name = "unicode-xid"2402
version = "0.2.6"2403
source = "registry+https://github.com/rust-lang/crates.io-index"2404
checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"2405
2406
[[package]]2407
name = "url"2408
version = "2.5.8"2409
source = "registry+https://github.com/rust-lang/crates.io-index"2410
checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed"2411
dependencies = [2412
"form_urlencoded",2413
"idna",2414
"percent-encoding",2415
"serde",2416
]2417
2418
[[package]]2419
name = "utf8_iter"2420
version = "1.1.0"2421
source = "registry+https://github.com/rust-lang/crates.io-index"2422
checksum = "af3bd9d3e571c26fcce9d033b87ea5ab061b8d2ffe9b7a5675d810d68f03edf0"2423
dependencies = [2424
"utf_types",2425
]2426
2427
[[package]]2428
name = "utf_types"2429
version = "1.0.0"2430
source = "registry+https://github.com/rust-lang/crates.io-index"2431
checksum = "3a3b425286980a367278453f3b6d28cdcb134b574e5a35824a6ff5eebad50bb6"2432
2433
[[package]]2434
name = "version_check"2435
version = "0.9.5"2436
source = "registry+https://github.com/rust-lang/crates.io-index"2437
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"2438
2439
[[package]]2440
name = "walkdir"2441
version = "2.5.0"2442
source = "registry+https://github.com/rust-lang/crates.io-index"2443
checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"2444
dependencies = [2445
"same-file",2446
"winapi-util",2447
]2448
2449
[[package]]2450
name = "wasip2"2451
version = "1.0.4+wasi-0.2.12"2452
source = "registry+https://github.com/rust-lang/crates.io-index"2453
checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487"2454
dependencies = [2455
"wit-bindgen",2456
]2457
2458
[[package]]2459
name = "wasm-bindgen"2460
version = "0.2.130"2461
source = "registry+https://github.com/rust-lang/crates.io-index"2462
checksum = "a0181c14ddd6c7b8b0b0132a5f1ea2f32be0d893cd3ea97b6e3b28886b8a3d1c"2463
dependencies = [2464
"cfg-if",2465
"rustversion",2466
"wasm-bindgen-macro",2467
"wasm-bindgen-shared",2468
]2469
2470
[[package]]2471
name = "wasm-bindgen-futures"2472
version = "0.4.80"2473
source = "registry+https://github.com/rust-lang/crates.io-index"2474
checksum = "5e14e0327cb5368ad60ccb22d04a9827a693c95a926d8d125e9fa39e0baec501"2475
dependencies = [2476
"js-sys",2477
"tokio",2478
"wasm-bindgen",2479
]2480
2481
[[package]]2482
name = "wasm-bindgen-macro"2483
version = "0.2.130"2484
source = "registry+https://github.com/rust-lang/crates.io-index"2485
checksum = "6e931a02a39abdbf66966fc35902b5ed58344750a70885bed4ebb3d8eaf28ed9"2486
dependencies = [2487
"quote",2488
"wasm-bindgen-macro-support",2489
]2490
2491
[[package]]2492
name = "wasm-bindgen-macro-support"2493
version = "0.2.130"2494
source = "registry+https://github.com/rust-lang/crates.io-index"2495
checksum = "2ca4b54280e455bd831e33a6b8e734baf432fe63fbc35c42ac14ce67a043a53a"2496
dependencies = [2497
"bumpalo",2498
"proc-macro2",2499
"quote",2500
"syn 3.0.9",2501
"wasm-bindgen-shared",2502
]2503
2504
[[package]]2505
name = "wasm-bindgen-shared"2506
version = "0.2.130"2507
source = "registry+https://github.com/rust-lang/crates.io-index"2508
checksum = "3b1f9c3798725016c6ee5f2f57869ec0831e8bbc0ab0310a86e787e97f41389e"2509
dependencies = [2510
"unicode-ident",2511
]2512
2513
[[package]]2514
name = "wayland-backend"2515
version = "0.3.17"2516
source = "registry+https://github.com/rust-lang/crates.io-index"2517
checksum = "38a91b4eaddff87b1cd1074985e3713da4af2c49742d1b356b2c01670a67a078"2518
dependencies = [2519
"cc",2520
"downcast-rs",2521
"rustix 1.1.6",2522
"scoped-tls",2523
"smallvec",2524
"wayland-sys",2525
]2526
2527
[[package]]2528
name = "wayland-client"2529
version = "0.31.15"2530
source = "registry+https://github.com/rust-lang/crates.io-index"2531
checksum = "e3c36a0f861ad76d0901f2800b46321410d9f73f2ea88aac0650d86c32688073"2532
dependencies = [2533
"bitflags 2.13.2",2534
"rustix 1.1.6",2535
"wayland-backend",2536
"wayland-scanner",2537
]2538
2539
[[package]]2540
name = "wayland-csd-frame"2541
version = "0.3.0"2542
source = "registry+https://github.com/rust-lang/crates.io-index"2543
checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e"2544
dependencies = [2545
"bitflags 2.13.2",2546
"cursor-icon",2547
"wayland-backend",2548
]2549
2550
[[package]]2551
name = "wayland-cursor"2552
version = "0.31.14"2553
source = "registry+https://github.com/rust-lang/crates.io-index"2554
checksum = "4a52d18780be9b1314328a3de5f930b73d2200112e3849ca6cb11822793fb34d"2555
dependencies = [2556
"rustix 1.1.6",2557
"wayland-client",2558
"xcursor",2559
]2560
2561
[[package]]2562
name = "wayland-protocols"2563
version = "0.32.13"2564
source = "registry+https://github.com/rust-lang/crates.io-index"2565
checksum = "23d0c813de3daa2ed6520af85a3bd49b0e722a3078506899aa9686fea58dc4b6"2566
dependencies = [2567
"bitflags 2.13.2",2568
"wayland-backend",2569
"wayland-client",2570
"wayland-scanner",2571
]2572
2573
[[package]]2574
name = "wayland-protocols-experimental"2575
version = "20250721.0.1"2576
source = "registry+https://github.com/rust-lang/crates.io-index"2577
checksum = "40a1f863128dcaaec790d7b4b396cc9b9a7a079e878e18c47e6c2d2c5a8dcbb1"2578
dependencies = [2579
"bitflags 2.13.2",2580
"wayland-backend",2581
"wayland-client",2582
"wayland-protocols",2583
"wayland-scanner",2584
]2585
2586
[[package]]2587
name = "wayland-protocols-misc"2588
version = "0.3.12"2589
source = "registry+https://github.com/rust-lang/crates.io-index"2590
checksum = "6e9567599ef23e09b8dad6e429e5738d4509dfc46b3b21f32841a304d16b29c8"2591
dependencies = [2592
"bitflags 2.13.2",2593
"wayland-backend",2594
"wayland-client",2595
"wayland-protocols",2596
"wayland-scanner",2597
]2598
2599
[[package]]2600
name = "wayland-protocols-plasma"2601
version = "0.3.12"2602
source = "registry+https://github.com/rust-lang/crates.io-index"2603
checksum = "2b6d8cf1eb2c1c31ed1f5643c88a6e53538129d4af80030c8cabd1f9fa884d91"2604
dependencies = [2605
"bitflags 2.13.2",2606
"wayland-backend",2607
"wayland-client",2608
"wayland-protocols",2609
"wayland-scanner",2610
]2611
2612
[[package]]2613
name = "wayland-protocols-wlr"2614
version = "0.3.12"2615
source = "registry+https://github.com/rust-lang/crates.io-index"2616
checksum = "eb04e52f7836d7c7976c78ca0250d61e33873c34156a2a1fc9474828ec268234"2617
dependencies = [2618
"bitflags 2.13.2",2619
"wayland-backend",2620
"wayland-client",2621
"wayland-protocols",2622
"wayland-scanner",2623
]2624
2625
[[package]]2626
name = "wayland-scanner"2627
version = "0.31.11"2628
source = "registry+https://github.com/rust-lang/crates.io-index"2629
checksum = "338e30461b3a2b67d70eb30a6d89f8e0c93a833e07d2ae89085cd070c4a00ac0"2630
dependencies = [2631
"proc-macro2",2632
"quick-xml",2633
"quote",2634
]2635
2636
[[package]]2637
name = "wayland-sys"2638
version = "0.31.11"2639
source = "registry+https://github.com/rust-lang/crates.io-index"2640
checksum = "d8eab23fefc9e41f8e841df4a9c707e8a8c4ed26e944ef69297184de2785e3be"2641
dependencies = [2642
"dlib",2643
"log",2644
"once_cell",2645
"pkg-config",2646
]2647
2648
[[package]]2649
name = "web-sys"2650
version = "0.3.107"2651
source = "registry+https://github.com/rust-lang/crates.io-index"2652
checksum = "d7d179596ff5ec0f6de4db64d54011bde6289cc49603d3a6e4ce3f329207ab88"2653
dependencies = [2654
"js-sys",2655
"wasm-bindgen",2656
]2657
2658
[[package]]2659
name = "web-time"2660
version = "1.1.0"2661
source = "registry+https://github.com/rust-lang/crates.io-index"2662
checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb"2663
dependencies = [2664
"js-sys",2665
"wasm-bindgen",2666
]2667
2668
[[package]]2669
name = "webbrowser"2670
version = "1.2.6"2671
source = "registry+https://github.com/rust-lang/crates.io-index"2672
checksum = "fe8d20d0214027baf11b8b0cc307c1da7657d8f4db9aa956f7de27a6fb1acbd5"2673
dependencies = [2674
"jni",2675
"log",2676
"ndk-context",2677
"objc2 0.6.5",2678
"objc2-app-kit 0.3.2",2679
"objc2-foundation 0.3.2",2680
"url",2681
"web-sys",2682
]2683
2684
[[package]]2685
name = "wgpu"2686
version = "22.1.0"2687
source = "registry+https://github.com/rust-lang/crates.io-index"2688
checksum = "e1d1c4ba43f80542cf63a0a6ed3134629ae73e8ab51e4b765a67f3aa062eb433"2689
dependencies = [2690
"arrayvec",2691
"cfg_aliases 0.1.1",2692
"document-features",2693
"js-sys",2694
"log",2695
"parking_lot",2696
"profiling",2697
"raw-window-handle",2698
"smallvec",2699
"static_assertions",2700
"wasm-bindgen",2701
"wasm-bindgen-futures",2702
"web-sys",2703
"wgpu-core",2704
"wgpu-hal",2705
"wgpu-types",2706
]2707
2708
[[package]]2709
name = "wgpu-core"2710
version = "22.1.0"2711
source = "registry+https://github.com/rust-lang/crates.io-index"2712
checksum = "0348c840d1051b8e86c3bcd31206080c5e71e5933dabd79be1ce732b0b2f089a"2713
dependencies = [2714
"arrayvec",2715
"bit-vec",2716
"bitflags 2.13.2",2717
"cfg_aliases 0.1.1",2718
"document-features",2719
"indexmap",2720
"log",2721
"naga",2722
"once_cell",2723
"parking_lot",2724
"profiling",2725
"raw-window-handle",2726
"rustc-hash 1.1.0",2727
"smallvec",2728
"thiserror 1.0.69",2729
"wgpu-hal",2730
"wgpu-types",2731
]2732
2733
[[package]]2734
name = "wgpu-hal"2735
version = "22.0.0"2736
source = "registry+https://github.com/rust-lang/crates.io-index"2737
checksum = "f6bbf4b4de8b2a83c0401d9e5ae0080a2792055f25859a02bf9be97952bbed4f"2738
dependencies = [2739
"android_system_properties",2740
"arrayvec",2741
"ash",2742
"bitflags 2.13.2",2743
"cfg_aliases 0.1.1",2744
"core-graphics-types",2745
"glow 0.13.1",2746
"glutin_wgl_sys",2747
"gpu-alloc",2748
"gpu-allocator",2749
"gpu-descriptor",2750
"hassle-rs",2751
"js-sys",2752
"khronos-egl",2753
"libc",2754
"libloading",2755
"log",2756
"metal",2757
"naga",2758
"ndk-sys 0.5.0+25.2.9519653",2759
"objc",2760
"once_cell",2761
"parking_lot",2762
"profiling",2763
"raw-window-handle",2764
"renderdoc-sys",2765
"rustc-hash 1.1.0",2766
"smallvec",2767
"thiserror 1.0.69",2768
"wasm-bindgen",2769
"web-sys",2770
"wgpu-types",2771
"winapi",2772
]2773
2774
[[package]]2775
name = "wgpu-types"2776
version = "22.0.0"2777
source = "registry+https://github.com/rust-lang/crates.io-index"2778
checksum = "bc9d91f0e2c4b51434dfa6db77846f2793149d8e73f800fa2e41f52b8eac3c5d"2779
dependencies = [2780
"bitflags 2.13.2",2781
"js-sys",2782
"web-sys",2783
]2784
2785
[[package]]2786
name = "widestring"2787
version = "1.2.1"2788
source = "registry+https://github.com/rust-lang/crates.io-index"2789
checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471"2790
2791
[[package]]2792
name = "winapi"2793
version = "0.3.9"2794
source = "registry+https://github.com/rust-lang/crates.io-index"2795
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"2796
dependencies = [2797
"winapi-i686-pc-windows-gnu",2798
"winapi-x86_64-pc-windows-gnu",2799
]2800
2801
[[package]]2802
name = "winapi-i686-pc-windows-gnu"2803
version = "0.4.0"2804
source = "registry+https://github.com/rust-lang/crates.io-index"2805
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"2806
2807
[[package]]2808
name = "winapi-util"2809
version = "0.1.11"2810
source = "registry+https://github.com/rust-lang/crates.io-index"2811
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"2812
dependencies = [2813
"windows-sys 0.61.2",2814
]2815
2816
[[package]]2817
name = "winapi-x86_64-pc-windows-gnu"2818
version = "0.4.0"2819
source = "registry+https://github.com/rust-lang/crates.io-index"2820
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"2821
2822
[[package]]2823
name = "windows"2824
version = "0.52.0"2825
source = "registry+https://github.com/rust-lang/crates.io-index"2826
checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be"2827
dependencies = [2828
"windows-core",2829
"windows-targets",2830
]2831
2832
[[package]]2833
name = "windows-core"2834
version = "0.52.0"2835
source = "registry+https://github.com/rust-lang/crates.io-index"2836
checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"2837
dependencies = [2838
"windows-targets",2839
]2840
2841
[[package]]2842
name = "windows-link"2843
version = "0.2.1"2844
source = "registry+https://github.com/rust-lang/crates.io-index"2845
checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"2846
2847
[[package]]2848
name = "windows-sys"2849
version = "0.52.0"2850
source = "registry+https://github.com/rust-lang/crates.io-index"2851
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"2852
dependencies = [2853
"windows-targets",2854
]2855
2856
[[package]]2857
name = "windows-sys"2858
version = "0.59.0"2859
source = "registry+https://github.com/rust-lang/crates.io-index"2860
checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"2861
dependencies = [2862
"windows-targets",2863
]2864
2865
[[package]]2866
name = "windows-sys"2867
version = "0.61.2"2868
source = "registry+https://github.com/rust-lang/crates.io-index"2869
checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"2870
dependencies = [2871
"windows-link",2872
]2873
2874
[[package]]2875
name = "windows-targets"2876
version = "0.52.6"2877
source = "registry+https://github.com/rust-lang/crates.io-index"2878
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"2879
dependencies = [2880
"windows_aarch64_gnullvm",2881
"windows_aarch64_msvc",2882
"windows_i686_gnu",2883
"windows_i686_gnullvm",2884
"windows_i686_msvc",2885
"windows_x86_64_gnu",2886
"windows_x86_64_gnullvm",2887
"windows_x86_64_msvc",2888
]2889
2890
[[package]]2891
name = "windows_aarch64_gnullvm"2892
version = "0.52.6"2893
source = "registry+https://github.com/rust-lang/crates.io-index"2894
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"2895
2896
[[package]]2897
name = "windows_aarch64_msvc"2898
version = "0.52.6"2899
source = "registry+https://github.com/rust-lang/crates.io-index"2900
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"2901
2902
[[package]]2903
name = "windows_i686_gnu"2904
version = "0.52.6"2905
source = "registry+https://github.com/rust-lang/crates.io-index"2906
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"2907
2908
[[package]]2909
name = "windows_i686_gnullvm"2910
version = "0.52.6"2911
source = "registry+https://github.com/rust-lang/crates.io-index"2912
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"2913
2914
[[package]]2915
name = "windows_i686_msvc"2916
version = "0.52.6"2917
source = "registry+https://github.com/rust-lang/crates.io-index"2918
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"2919
2920
[[package]]2921
name = "windows_x86_64_gnu"2922
version = "0.52.6"2923
source = "registry+https://github.com/rust-lang/crates.io-index"2924
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"2925
2926
[[package]]2927
name = "windows_x86_64_gnullvm"2928
version = "0.52.6"2929
source = "registry+https://github.com/rust-lang/crates.io-index"2930
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"2931
2932
[[package]]2933
name = "windows_x86_64_msvc"2934
version = "0.52.6"2935
source = "registry+https://github.com/rust-lang/crates.io-index"2936
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"2937
2938
[[package]]2939
name = "winit"2940
version = "0.30.13"2941
source = "registry+https://github.com/rust-lang/crates.io-index"2942
checksum = "a6755fa58a9f8350bd1e472d4c3fcc25f824ec358933bba33306d0b63df5978d"2943
dependencies = [2944
"ahash",2945
"android-activity",2946
"atomic-waker",2947
"bitflags 2.13.2",2948
"block2",2949
"bytemuck",2950
"calloop 0.13.0",2951
"cfg_aliases 0.2.2",2952
"concurrent-queue",2953
"core-foundation",2954
"core-graphics",2955
"cursor-icon",2956
"dpi",2957
"js-sys",2958
"libc",2959
"memmap2",2960
"ndk",2961
"objc2 0.5.3",2962
"objc2-app-kit 0.2.2",2963
"objc2-foundation 0.2.2",2964
"objc2-ui-kit",2965
"orbclient",2966
"percent-encoding",2967
"pin-project",2968
"raw-window-handle",2969
"redox_syscall 0.4.1",2970
"rustix 0.38.44",2971
"smithay-client-toolkit 0.19.2",2972
"smol_str",2973
"tracing",2974
"unicode-segmentation",2975
"wasm-bindgen",2976
"wasm-bindgen-futures",2977
"wayland-backend",2978
"wayland-client",2979
"wayland-protocols",2980
"wayland-protocols-plasma",2981
"web-sys",2982
"web-time",2983
"windows-sys 0.52.0",2984
"x11-dl",2985
"x11rb",2986
"xkbcommon-dl",2987
]2988
2989
[[package]]2990
name = "winnow"2991
version = "1.0.5"2992
source = "registry+https://github.com/rust-lang/crates.io-index"2993
checksum = "8c3b93199df0ab874cdf0c6a94f0a0dc3423fe41f1cafb62b8bd7b1deb277aef"2994
dependencies = [2995
"memchr",2996
]2997
2998
[[package]]2999
name = "wit-bindgen"3000
version = "0.57.1"3001
source = "registry+https://github.com/rust-lang/crates.io-index"3002
checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e"3003
3004
[[package]]3005
name = "writeable"3006
version = "0.6.4"3007
source = "registry+https://github.com/rust-lang/crates.io-index"3008
checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc"3009
3010
[[package]]3011
name = "x11-dl"3012
version = "2.21.0"3013
source = "registry+https://github.com/rust-lang/crates.io-index"3014
checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f"3015
dependencies = [3016
"libc",3017
"once_cell",3018
"pkg-config",3019
]3020
3021
[[package]]3022
name = "x11rb"3023
version = "0.13.2"3024
source = "registry+https://github.com/rust-lang/crates.io-index"3025
checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414"3026
dependencies = [3027
"as-raw-xcb-connection",3028
"gethostname",3029
"libc",3030
"libloading",3031
"once_cell",3032
"rustix 1.1.6",3033
"x11rb-protocol",3034
]3035
3036
[[package]]3037
name = "x11rb-protocol"3038
version = "0.13.2"3039
source = "registry+https://github.com/rust-lang/crates.io-index"3040
checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd"3041
3042
[[package]]3043
name = "xcursor"3044
version = "0.3.11"3045
source = "registry+https://github.com/rust-lang/crates.io-index"3046
checksum = "163b33ed8786455e2fa5d72f554057ce3f3182425434f756cd39c99839d88e23"3047
3048
[[package]]3049
name = "xkbcommon-dl"3050
version = "0.4.2"3051
source = "registry+https://github.com/rust-lang/crates.io-index"3052
checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5"3053
dependencies = [3054
"bitflags 2.13.2",3055
"dlib",3056
"log",3057
"once_cell",3058
"xkeysym",3059
]3060
3061
[[package]]3062
name = "xkeysym"3063
version = "0.2.1"3064
source = "registry+https://github.com/rust-lang/crates.io-index"3065
checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56"3066
3067
[[package]]3068
name = "xml-rs"3069
version = "0.8.29"3070
source = "registry+https://github.com/rust-lang/crates.io-index"3071
checksum = "e450f9b2ed1dff33c94c12589a87338689467b9c4f5d8a5710bd09a847d2c8a7"3072
3073
[[package]]3074
name = "yoke"3075
version = "0.8.4"3076
source = "registry+https://github.com/rust-lang/crates.io-index"3077
checksum = "417ef3fcf6c300b7dbd25c85531a746931c02ad536f3cf4786ed1e88223340b3"3078
dependencies = [3079
"stable_deref_trait",3080
"yoke-derive",3081
"zerofrom",3082
]3083
3084
[[package]]3085
name = "yoke-derive"3086
version = "0.8.4"3087
source = "registry+https://github.com/rust-lang/crates.io-index"3088
checksum = "ec8ebde2db3681e8c9980cc27822030e68752690ddfa9473e739aeb4dbde6d71"3089
dependencies = [3090
"proc-macro2",3091
"quote",3092
"syn 3.0.9",3093
"synstructure",3094
]3095
3096
[[package]]3097
name = "zerocopy"3098
version = "0.8.63"3099
source = "registry+https://github.com/rust-lang/crates.io-index"3100
checksum = "e5fe1f8f1b06191a00962174c61aa5005e0bb391a6d80d07e24d115c01a92ed8"3101
dependencies = [3102
"zerocopy-derive",3103
]3104
3105
[[package]]3106
name = "zerocopy-derive"3107
version = "0.8.63"3108
source = "registry+https://github.com/rust-lang/crates.io-index"3109
checksum = "863ad3ac83293fb4d740aedbfdc9240dd8d1a50c1099acd76ce80ce7c7230c7f"3110
dependencies = [3111
"proc-macro2",3112
"quote",3113
"syn 2.0.119",3114
]3115
3116
[[package]]3117
name = "zerofrom"3118
version = "0.1.8"3119
source = "registry+https://github.com/rust-lang/crates.io-index"3120
checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272"3121
dependencies = [3122
"zerofrom-derive",3123
]3124
3125
[[package]]3126
name = "zerofrom-derive"3127
version = "0.1.8"3128
source = "registry+https://github.com/rust-lang/crates.io-index"3129
checksum = "f75b4683f6c7f45248d4d64056a24298c6281e0993356d7d1b4a1a962ef10d4a"3130
dependencies = [3131
"proc-macro2",3132
"quote",3133
"syn 3.0.9",3134
"synstructure",3135
]3136
3137
[[package]]3138
name = "zerotrie"3139
version = "0.2.5"3140
source = "registry+https://github.com/rust-lang/crates.io-index"3141
checksum = "4ea269c3bd32f0a32c321907a2ae912ba6f4649bb0fc764a15627e99a7095a3f"3142
dependencies = [3143
"displaydoc",3144
"yoke",3145
"zerofrom",3146
]3147
3148
[[package]]3149
name = "zerovec"3150
version = "0.11.9"3151
source = "registry+https://github.com/rust-lang/crates.io-index"3152
checksum = "f58a2799cfe9a1670c7ea8edbd52ef8edb93cb37a7f83bf31ba9e35d9dae6a40"3153
dependencies = [3154
"yoke",3155
"zerofrom",3156
"zerovec-derive",3157
]3158
3159
[[package]]3160
name = "zerovec-derive"3161
version = "0.11.7"3162
source = "registry+https://github.com/rust-lang/crates.io-index"3163
checksum = "c3743ddbf47738d929cd1ae2e199d40d0162979dfe31aef8ae646d2bf00bf97a"3164
dependencies = [3165
"proc-macro2",3166
"quote",3167
"syn 3.0.9",3168
]3169
3170
[[package]]3171
name = "zlib-rs"3172
version = "0.6.8"3173
source = "registry+https://github.com/rust-lang/crates.io-index"3174
checksum = "b268e58e7c693d7c271f93ffc4ba3b380412554231c85bf61ca7af91042a4112"@@ -0,0 +1,11 @@
1
[package]
2
name = "paperdoll-renderer"
3
version = "0.1.0"
4
edition = "2021"
5
license = "MIT"
6
publish = false
7
description = "Foundation shell for the Paperdoll Renderer. Import and rendering are not implemented."
8
9
[dependencies]
10
eframe = { version = "0.29.1", default-features = false, features = ["default_fonts", "glow", "x11"] }
11
libloading = "0.8"
@@ -0,0 +1,11 @@1
[package]2
name = "paperdoll-renderer"3
version = "0.1.0"4
edition = "2021"5
license = "MIT"6
publish = false7
description = "Foundation shell for the Paperdoll Renderer. Import and rendering are not implemented."8
9
[dependencies]10
eframe = { version = "0.29.1", default-features = false, features = ["default_fonts", "glow", "x11"] }11
libloading = "0.8"@@ -0,0 +1,21 @@
1
MIT License
2
3
Copyright (c) 2026 Tim Falken
4
5
Permission is hereby granted, free of charge, to any person obtaining a copy
6
of this software and associated documentation files (the "Software"), to deal
7
in the Software without restriction, including without limitation the rights
8
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
copies of the Software, and to permit persons to whom the Software is
10
furnished to do so, subject to the following conditions:
11
12
The above copyright notice and this permission notice shall be included in all
13
copies or substantial portions of the Software.
14
15
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
SOFTWARE.
@@ -0,0 +1,21 @@1
MIT License2
3
Copyright (c) 2026 Tim Falken4
5
Permission is hereby granted, free of charge, to any person obtaining a copy6
of this software and associated documentation files (the "Software"), to deal7
in the Software without restriction, including without limitation the rights8
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell9
copies of the Software, and to permit persons to whom the Software is10
furnished to do so, subject to the following conditions:11
12
The above copyright notice and this permission notice shall be included in all13
copies or substantial portions of the Software.14
15
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR16
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,17
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE18
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER19
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,20
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE21
SOFTWARE.@@ -1,3 +1,41 @@
1
# New repo
1
# Paperdoll Renderer
2
2
3
This repo was created by a Cursor cloud agent.
3
Native Rust-projectbasis voor Tim Falkens Paperdoll Renderer. Het programma toont een statusvenster. Het importeert geen modellen en het rendert geen paperdolls. Het ontwerp, inclusief de letterlijke Nederlandse specificatie en de formaatmatrix voor OBJ+MTL+textures, FBX en glTF/GLB, staat in [`design.md`](design.md).
4
5
## Eisen
6
7
- Rust 1.96.0 (vastgezet in `rust-toolchain.toml`; hetzelfde image als de publieke posprint-pipeline, `rust:1.96-bookworm`)
8
- Een X11-display voor het venster
9
- Voor compileren: `pkg-config`, `libxcb1-dev`, `libx11-dev`, `libxkbcommon-dev`, `libxkbcommon-x11-dev`, `libgl1-mesa-dev`
10
- Voor het venster zelf: `libxkbcommon-x11-0`, `libxcb1`, `libx11-6`, `libgl1`. Die laadt eframe pas bij het openen. Ontbreken ze, dan stopt het programma met een melding in plaats van een panic.
11
12
## Lokaal
13
14
```bash
15
cargo test --locked
16
cargo run -- --status
17
cargo run
18
```
19
20
`--status` print de capability-lijst en opent geen venster. Een pad naar een model wordt geweigerd.
21
22
## Wat deze build niet doet
23
24
OBJ+MTL+textures, FBX, glTF/GLB, skeletanimatie, de 3D-attachmenteditor, paperdoll-render en de 2D-preview zijn niet gebouwd. Bestanden onder `tests/fixtures/`, als die er later bijkomen, worden door dit programma niet geladen.
25
26
## BlueGit
27
28
De pipeline staat in `blue-ci-cd.yml`. Tests draaien op merge requests en op pushes naar `master`, `main` en `CI_DEFAULT_BRANCH`. Op een tag-push, na geslaagde tests: AppImage, Ubuntu-pakket, Arch-pakket, Windows-zip, daarna een controle, daarna één release-aanroep.
29
30
Die release-aanroep is de gedocumenteerde BlueGit-API (`POST /repos/$CI_PROJECT_PATH/releases`). Die API maakt de git-tag zelf. Bestaat de tag al, dan antwoordt de huidige BlueGit-code met HTTP 409. `replace: true` wordt op een tag-pipeline geweigerd (HTTP 403). Een tag-pipeline kan de eigen tag dus niet als release vullen. `scripts/ci/release.sh` doet de aanroep toch en faalt bij een niet-2xx-antwoord. Er is vanuit deze basis geen tag en geen release gestart.
31
32
`timfa/legacy-cycles` heeft alleen publieke releases; het pipelinebestand was niet te lezen. De gebruikte YAML komt uit de BlueGit-CI-specificatie en uit de publieke pipelines van `timfa/posprint`, `timfa/minecart-trains` en `timfa/click-tween`.
33
34
Pakketten lokaal, zonder publiceren:
35
36
```bash
37
bash scripts/package/deb.sh
38
bash scripts/package/appimage.sh
39
```
40
41
Op deze machine zijn het `.deb`-pakket en de AppImage gebouwd. `paperdoll-renderer --status` via de AppImage geeft dezelfde status als de gewone binary. Het Arch-pakket heeft `makepkg` nodig en de Windows-zip de MinGW-crosscompiler; die twee builds zijn hier niet gedraaid.
@@ -1,3 +1,41 @@1
# New repo1
# Paperdoll Renderer2
2
3
This repo was created by a Cursor cloud agent.3
Native Rust-projectbasis voor Tim Falkens Paperdoll Renderer. Het programma toont een statusvenster. Het importeert geen modellen en het rendert geen paperdolls. Het ontwerp, inclusief de letterlijke Nederlandse specificatie en de formaatmatrix voor OBJ+MTL+textures, FBX en glTF/GLB, staat in [`design.md`](design.md).4
5
## Eisen6
7
- Rust 1.96.0 (vastgezet in `rust-toolchain.toml`; hetzelfde image als de publieke posprint-pipeline, `rust:1.96-bookworm`)8
- Een X11-display voor het venster9
- Voor compileren: `pkg-config`, `libxcb1-dev`, `libx11-dev`, `libxkbcommon-dev`, `libxkbcommon-x11-dev`, `libgl1-mesa-dev`10
- Voor het venster zelf: `libxkbcommon-x11-0`, `libxcb1`, `libx11-6`, `libgl1`. Die laadt eframe pas bij het openen. Ontbreken ze, dan stopt het programma met een melding in plaats van een panic.11
12
## Lokaal13
14
```bash15
cargo test --locked16
cargo run -- --status17
cargo run18
```19
20
`--status` print de capability-lijst en opent geen venster. Een pad naar een model wordt geweigerd.21
22
## Wat deze build niet doet23
24
OBJ+MTL+textures, FBX, glTF/GLB, skeletanimatie, de 3D-attachmenteditor, paperdoll-render en de 2D-preview zijn niet gebouwd. Bestanden onder `tests/fixtures/`, als die er later bijkomen, worden door dit programma niet geladen.25
26
## BlueGit27
28
De pipeline staat in `blue-ci-cd.yml`. Tests draaien op merge requests en op pushes naar `master`, `main` en `CI_DEFAULT_BRANCH`. Op een tag-push, na geslaagde tests: AppImage, Ubuntu-pakket, Arch-pakket, Windows-zip, daarna een controle, daarna één release-aanroep.29
30
Die release-aanroep is de gedocumenteerde BlueGit-API (`POST /repos/$CI_PROJECT_PATH/releases`). Die API maakt de git-tag zelf. Bestaat de tag al, dan antwoordt de huidige BlueGit-code met HTTP 409. `replace: true` wordt op een tag-pipeline geweigerd (HTTP 403). Een tag-pipeline kan de eigen tag dus niet als release vullen. `scripts/ci/release.sh` doet de aanroep toch en faalt bij een niet-2xx-antwoord. Er is vanuit deze basis geen tag en geen release gestart.31
32
`timfa/legacy-cycles` heeft alleen publieke releases; het pipelinebestand was niet te lezen. De gebruikte YAML komt uit de BlueGit-CI-specificatie en uit de publieke pipelines van `timfa/posprint`, `timfa/minecart-trains` en `timfa/click-tween`.33
34
Pakketten lokaal, zonder publiceren:35
36
```bash37
bash scripts/package/deb.sh38
bash scripts/package/appimage.sh39
```40
41
Op deze machine zijn het `.deb`-pakket en de AppImage gebouwd. `paperdoll-renderer --status` via de AppImage geeft dezelfde status als de gewone binary. Het Arch-pakket heeft `makepkg` nodig en de Windows-zip de MinGW-crosscompiler; die twee builds zijn hier niet gedraaid.@@ -0,0 +1,164 @@
1
# Paperdoll Renderer — BlueGit CI (git.timfalken.com).
2
#
3
# Syntax checked on 6 November 2026 against GET /api/v1/ci/spec,
4
# timfa/bluegit docs/CI.md, and the public pipelines of timfa/posprint,
5
# timfa/minecart-trains and timfa/click-tween. legacy-cycles publishes
6
# releases only; its pipeline file is not public and was not copied.
7
#
8
# Requested graph:
9
# merge request and master/main push -> test
10
# tag push, after tests succeed -> AppImage, Ubuntu package, Arch package,
11
# Windows build, artifact check, then one release publish
12
#
13
# Verified release limit: POST /repos/$CI_PROJECT_PATH/releases creates the
14
# git tag. opPublishRelease returns 409 when that tag already exists.
15
# replace=true is rejected on a tag pipeline (403, checkReplace). scripts/ci/release.sh
16
# still performs the documented call and fails on a non-2xx response. This
17
# file does not create a tag by itself. No release has been started here.
18
#
19
# posprint notes two runner facts used below: jobs start in the checkout
20
# (CI_PROJECT_DIR is not set), and artifact paths are exact files.
21
# Windows is cross-compiled with MinGW, the same reason posprint gives:
22
# no Windows runner on BlueGit.
23
24
stages: [test, package, verify, release]
25
26
variables:
27
CARGO_TERM_COLOR: always
28
RUST_BACKTRACE: "1"
29
CARGO_PROFILE_DEV_DEBUG: "false"
30
CARGO_PROFILE_TEST_DEBUG: "false"
31
32
workflow:
33
rules:
34
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
35
- if: $CI_COMMIT_BRANCH == "master"
36
- if: $CI_COMMIT_BRANCH == "main"
37
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
38
- if: $CI_COMMIT_TAG != ""
39
40
.rust:
41
image: rust:1.96-bookworm
42
timeout: 2h
43
before_script:
44
- export CARGO_HOME="$PWD/cargo-home"
45
- export PATH="$CARGO_HOME/bin:$PATH"
46
- apt-get update -qq
47
- apt-get install -y -qq pkg-config libxcb1-dev libx11-dev libxkbcommon-dev libxkbcommon-x11-dev libgl1-mesa-dev python3
48
49
.on_tag:
50
rules:
51
- if: $CI_COMMIT_TAG != ""
52
53
test:
54
extends: .rust
55
stage: test
56
interruptible: true
57
cache:
58
key: cargo-test
59
paths: [target/, cargo-home/]
60
rules:
61
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
62
- if: $CI_COMMIT_BRANCH == "master"
63
- if: $CI_COMMIT_BRANCH == "main"
64
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
65
- if: $CI_COMMIT_TAG != ""
66
script:
67
- cargo fmt --check
68
- cargo check --workspace --all-targets --locked
69
- cargo clippy --workspace --all-targets --locked -- -D warnings
70
- cargo test --workspace --locked
71
72
package:appimage:
73
extends: [.rust, .on_tag]
74
stage: package
75
needs: [test]
76
interruptible: true
77
cache:
78
key: cargo-linux
79
paths: [target/, cargo-home/]
80
before_script:
81
- export CARGO_HOME="$PWD/cargo-home"
82
- export PATH="$CARGO_HOME/bin:$PATH"
83
- apt-get update -qq
84
- apt-get install -y -qq pkg-config libxcb1-dev libx11-dev libxkbcommon-dev libxkbcommon-x11-dev libgl1-mesa-dev file
85
script:
86
- bash scripts/package/appimage.sh
87
artifacts:
88
paths: [dist/paperdoll-renderer-x86_64.AppImage]
89
expire_in: 30d
90
91
package:ubuntu:
92
extends: [.rust, .on_tag]
93
stage: package
94
needs: [test]
95
interruptible: true
96
cache:
97
key: cargo-linux
98
paths: [target/, cargo-home/]
99
before_script:
100
- export CARGO_HOME="$PWD/cargo-home"
101
- export PATH="$CARGO_HOME/bin:$PATH"
102
- apt-get update -qq
103
- apt-get install -y -qq pkg-config libxcb1-dev libx11-dev libxkbcommon-dev libxkbcommon-x11-dev libgl1-mesa-dev dpkg-dev
104
script:
105
- bash scripts/package/deb.sh
106
artifacts:
107
paths: [dist/paperdoll-renderer_amd64.deb]
108
expire_in: 30d
109
110
package:arch:
111
extends: .on_tag
112
stage: package
113
image: archlinux/archlinux:base-devel
114
timeout: 2h
115
needs: [test]
116
interruptible: true
117
script:
118
- pacman -Syu --noconfirm
119
- pacman -S --noconfirm --needed rust pkgconf libxkbcommon libxcb libx11 libglvnd git
120
- bash scripts/package/arch.sh
121
artifacts:
122
paths: [dist/paperdoll-renderer-x86_64.pkg.tar.zst]
123
expire_in: 30d
124
125
# MinGW cross build. posprint documents this because BlueGit has no Windows runner.
126
package:windows:
127
extends: [.rust, .on_tag]
128
stage: package
129
needs: [test]
130
interruptible: true
131
cache:
132
key: cargo-windows
133
paths: [target/, cargo-home/]
134
before_script:
135
- export CARGO_HOME="$PWD/cargo-home"
136
- export PATH="$CARGO_HOME/bin:$PATH"
137
- apt-get update -qq
138
- apt-get install -y -qq gcc-mingw-w64-x86-64 binutils-mingw-w64-x86-64 zip
139
- rustup target add x86_64-pc-windows-gnu
140
script:
141
- bash scripts/package/windows.sh
142
artifacts:
143
paths: [dist/paperdoll-renderer-windows-x86_64.zip]
144
expire_in: 30d
145
146
verify:packages:
147
stage: verify
148
image: bluegit/base
149
extends: .on_tag
150
needs: [package:appimage, package:ubuntu, package:arch, package:windows]
151
script:
152
- bash scripts/ci/verify-packages.sh
153
artifacts:
154
paths: [dist/SHA256SUMS]
155
expire_in: 30d
156
157
release:
158
stage: release
159
image: bluegit/base
160
extends: .on_tag
161
needs: [verify:packages, package:appimage, package:ubuntu, package:arch, package:windows]
162
resource_group: release
163
script:
164
- bash scripts/ci/release.sh
@@ -0,0 +1,164 @@1
# Paperdoll Renderer — BlueGit CI (git.timfalken.com).2
#3
# Syntax checked on 6 November 2026 against GET /api/v1/ci/spec,4
# timfa/bluegit docs/CI.md, and the public pipelines of timfa/posprint,5
# timfa/minecart-trains and timfa/click-tween. legacy-cycles publishes6
# releases only; its pipeline file is not public and was not copied.7
#8
# Requested graph:9
# merge request and master/main push -> test10
# tag push, after tests succeed -> AppImage, Ubuntu package, Arch package,11
# Windows build, artifact check, then one release publish12
#13
# Verified release limit: POST /repos/$CI_PROJECT_PATH/releases creates the14
# git tag. opPublishRelease returns 409 when that tag already exists.15
# replace=true is rejected on a tag pipeline (403, checkReplace). scripts/ci/release.sh16
# still performs the documented call and fails on a non-2xx response. This17
# file does not create a tag by itself. No release has been started here.18
#19
# posprint notes two runner facts used below: jobs start in the checkout20
# (CI_PROJECT_DIR is not set), and artifact paths are exact files.21
# Windows is cross-compiled with MinGW, the same reason posprint gives:22
# no Windows runner on BlueGit.23
24
stages: [test, package, verify, release]25
26
variables:27
CARGO_TERM_COLOR: always28
RUST_BACKTRACE: "1"29
CARGO_PROFILE_DEV_DEBUG: "false"30
CARGO_PROFILE_TEST_DEBUG: "false"31
32
workflow:33
rules:34
- if: $CI_PIPELINE_SOURCE == "merge_request_event"35
- if: $CI_COMMIT_BRANCH == "master"36
- if: $CI_COMMIT_BRANCH == "main"37
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH38
- if: $CI_COMMIT_TAG != ""39
40
.rust:41
image: rust:1.96-bookworm42
timeout: 2h43
before_script:44
- export CARGO_HOME="$PWD/cargo-home"45
- export PATH="$CARGO_HOME/bin:$PATH"46
- apt-get update -qq47
- apt-get install -y -qq pkg-config libxcb1-dev libx11-dev libxkbcommon-dev libxkbcommon-x11-dev libgl1-mesa-dev python348
49
.on_tag:50
rules:51
- if: $CI_COMMIT_TAG != ""52
53
test:54
extends: .rust55
stage: test56
interruptible: true57
cache:58
key: cargo-test59
paths: [target/, cargo-home/]60
rules:61
- if: $CI_PIPELINE_SOURCE == "merge_request_event"62
- if: $CI_COMMIT_BRANCH == "master"63
- if: $CI_COMMIT_BRANCH == "main"64
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH65
- if: $CI_COMMIT_TAG != ""66
script:67
- cargo fmt --check68
- cargo check --workspace --all-targets --locked69
- cargo clippy --workspace --all-targets --locked -- -D warnings70
- cargo test --workspace --locked71
72
package:appimage:73
extends: [.rust, .on_tag]74
stage: package75
needs: [test]76
interruptible: true77
cache:78
key: cargo-linux79
paths: [target/, cargo-home/]80
before_script:81
- export CARGO_HOME="$PWD/cargo-home"82
- export PATH="$CARGO_HOME/bin:$PATH"83
- apt-get update -qq84
- apt-get install -y -qq pkg-config libxcb1-dev libx11-dev libxkbcommon-dev libxkbcommon-x11-dev libgl1-mesa-dev file85
script:86
- bash scripts/package/appimage.sh87
artifacts:88
paths: [dist/paperdoll-renderer-x86_64.AppImage]89
expire_in: 30d90
91
package:ubuntu:92
extends: [.rust, .on_tag]93
stage: package94
needs: [test]95
interruptible: true96
cache:97
key: cargo-linux98
paths: [target/, cargo-home/]99
before_script:100
- export CARGO_HOME="$PWD/cargo-home"101
- export PATH="$CARGO_HOME/bin:$PATH"102
- apt-get update -qq103
- apt-get install -y -qq pkg-config libxcb1-dev libx11-dev libxkbcommon-dev libxkbcommon-x11-dev libgl1-mesa-dev dpkg-dev104
script:105
- bash scripts/package/deb.sh106
artifacts:107
paths: [dist/paperdoll-renderer_amd64.deb]108
expire_in: 30d109
110
package:arch:111
extends: .on_tag112
stage: package113
image: archlinux/archlinux:base-devel114
timeout: 2h115
needs: [test]116
interruptible: true117
script:118
- pacman -Syu --noconfirm119
- pacman -S --noconfirm --needed rust pkgconf libxkbcommon libxcb libx11 libglvnd git120
- bash scripts/package/arch.sh121
artifacts:122
paths: [dist/paperdoll-renderer-x86_64.pkg.tar.zst]123
expire_in: 30d124
125
# MinGW cross build. posprint documents this because BlueGit has no Windows runner.126
package:windows:127
extends: [.rust, .on_tag]128
stage: package129
needs: [test]130
interruptible: true131
cache:132
key: cargo-windows133
paths: [target/, cargo-home/]134
before_script:135
- export CARGO_HOME="$PWD/cargo-home"136
- export PATH="$CARGO_HOME/bin:$PATH"137
- apt-get update -qq138
- apt-get install -y -qq gcc-mingw-w64-x86-64 binutils-mingw-w64-x86-64 zip139
- rustup target add x86_64-pc-windows-gnu140
script:141
- bash scripts/package/windows.sh142
artifacts:143
paths: [dist/paperdoll-renderer-windows-x86_64.zip]144
expire_in: 30d145
146
verify:packages:147
stage: verify148
image: bluegit/base149
extends: .on_tag150
needs: [package:appimage, package:ubuntu, package:arch, package:windows]151
script:152
- bash scripts/ci/verify-packages.sh153
artifacts:154
paths: [dist/SHA256SUMS]155
expire_in: 30d156
157
release:158
stage: release159
image: bluegit/base160
extends: .on_tag161
needs: [verify:packages, package:appimage, package:ubuntu, package:arch, package:windows]162
resource_group: release163
script:164
- bash scripts/ci/release.sh@@ -0,0 +1,260 @@
1
# Paperdoll Renderer — design
2
3
**Status: design recorded with a foundation shell only.**
4
Prepared 6 November 2026 (Europe/Amsterdam). Requirements originate with Tim Falken. Sections explicitly marked **proposal** remain implementation decisions to validate; the verbatim appendix is authoritative for user intent. The Rust program shipped with this design is the section 12 step 0 shell: it compiles, opens a status window, and tells the truth about what is not built. It does not import models and it does not render paperdolls. Synthetic test bodies, when present under `tests/fixtures/bodies/`, are fixtures for later features; this program does not load them.
5
6
Anonymous HTTP requests to `https://git.timfalken.com/groups/golden-age` and `https://git.timfalken.com/golden-age/paperdoll-renderer` returned 404. BlueGit also answers 404 when a private project is not visible to the caller, so those responses do not prove the private repository is absent. This workspace does not create the group or the repository. The requested BlueGit destination stays group **Golden Age**, slug `golden-age`, repository **Paperdoll Renderer**, slug `paperdoll-renderer`.
7
8
## 1. Product, scope and non-goals
9
10
Build a native Rust desktop asset-authoring application for rendering animated human bodies and bone-attached equipment into aligned 2D paperdoll PNG sequences. A project contains male and female source models, their imported animation inventories, equipment presets, render settings, output paths and output metadata. Either model slot may remain empty while authoring. Missing models must be reported before a render starts, not replaced by invented characters.
11
12
The application has three distinct experiences: a project/model workspace, an interactive **3D attachment editor**, and a **rendered 2D paperdoll preview**. The latter must consume actual exported maps; it must not disguise a 3D viewport as a finished sprite renderer.
13
14
The later game character-renderer/controller is OUT OF SCOPE. The in-tool compositing preview is in scope because it verifies asset compatibility. No bundled commercial models, automatic retargeting, physics-based cloth, equipment deformation/weight painting, game controllers or multiplayer are promised. Equipment is initially rigid geometry attached to bones. Imported skinned equipment can be a later explicitly scoped extension.
15
16
BlueGit destination requested: group **Golden Age**, proposed slug `golden-age`; repository **Paperdoll Renderer**, slug `paperdoll-renderer`. Check existence before creating either. Private visibility is a provisional safe default, not a claim about an existing group's settings. Do not change unrelated group/repository access.
17
18
## 2. Requirements and traceability
19
20
| ID | Requirement | Verification |
21
|---|---|---|
22
| R01 | Rust application with user-selected male/female models | Open/save missing and populated slots; later manual desktop smoke test |
23
| R02 | Discover all supported embedded animation clips | Synthetic licensed fixture inventory, including unnamed/duplicate clips |
24
| R03 | Body and equipment modes | Export body plus isolated equipment from identical scene state |
25
| R04 | Three pitches times twelve yaw positions | Exactly 36 unique orientations; yaw starts facing viewer |
26
| R05 | Initial geometry render at 8x target dimensions and configured FPS | Explicit render manifest and dimension/frame-count tests |
27
| R06 | Edge/detail-guided downsampling | Image fixtures retain thin details better than baseline without alpha fringes |
28
| R07 | Target-resolution diffuse, depth, normal maps | Round-trip decoding, finite normalized normals and shared depth contract |
29
| R08 | Subtle diffuse edge highlights from depth/normals | Deterministic fixture with bounded highlight effect |
30
| R09 | Required filename structure | Golden path examples plus sanitization/collision tests |
31
| R10 | Bone-relative XYZ position and rotation with live orbitable 3D preview | Transform-chain unit tests and manual viewport test |
32
| R11 | Binary equipment presets embedding models and attachment metadata | Round-trip, version/truncation/resource-limit tests |
33
| R12 | Equipment set name lowercase without spaces | Validation; reject reserved body name and path traversal |
34
| R13 | Equipment-only rendering with shinymap | No body occlusion/write contamination; specular fixture |
35
| R14 | Folder plus .ppd manifest describing assets, presets, outputs | Portable relative paths and safe atomic saves |
36
| R15 | 2D looping animation, sex/equipment/clip selection and 36-angle navigation | State-machine and depth-compositing tests |
37
| R16 | Held light-control buttons rotate continuously in degrees | Delta-time tests including key/button release/focus loss |
38
| R17 | Per-feature branch, tests, non-FF master merge, no initial MRs | Two-parent merge topology and CI checks |
39
| R18 | Tag tests gate AppImage, deb, Arch package, Windows build and release | Packaging smoke tests and complete-artifact release gate |
40
| R19 | Minimum import goals OBJ/MTL/textures and FBX; broader support where feasible | Format matrix and fixture-based import tests |
41
42
## 3. Proposed architecture and stack
43
44
**Proposal, not compatibility certification:** use Bevy for windowing, scene graph, skeletal animation, glTF loading and GPU rendering (wgpu), with a compatible bevy_egui integration for authoring panels. Choose and pin compatible published versions when implementation starts; do not guess latest-version APIs or dependency compatibility. Use ordinary Rust libraries with no GUI/GPU requirements for project validation, naming, render schedules, transforms and image processing. Tests for this core must run headlessly.
45
46
A dependency-minimal executable skeleton may precede the full viewport; it must say which capabilities are unimplemented. An application that only prints a placeholder message is not the completed desktop renderer. Rust edition/toolchain must be explicit, version-pinned after confirming installed/build-runner availability. Commit Cargo.lock for reproducibility.
47
48
Proposed workspace boundaries:
49
- `crates/ppd-core`: project types, validation, portable paths, render schedule, filename codec and format versions.
50
- `crates/ppd-import`: import adapters, coordinate normalization, normalized assets and animation discovery.
51
- `crates/ppd-render`: shared camera, scene sampling, offscreen maps and readback.
52
- `crates/ppd-image`: linear-color downsampling, detail extraction, edge highlight and PNG codecs.
53
- `crates/ppd-preview`: deterministic depth compositing and preview/light state independent of UI where possible.
54
- `crates/paperdoll-renderer`: desktop shell, model/preset editors, render progress and preview tabs.
55
- `tests/fixtures`: tiny synthetic or permissively licensed fixtures, with provenance and licenses.
56
- `packaging` and `scripts`: verified platform packaging and CI helpers.
57
58
Do not create empty crates solely to imply completion. Establish boundaries as features land. Rendering jobs operate on immutable validated snapshots so editing a project cannot silently change an active batch. Worker messages report progress and cancellation; UI/GPU ownership stays on the appropriate thread.
59
60
## 4. Import format advice and support matrix
61
62
**Recommendation:** glTF 2.0/GLB is the preferred canonical interchange for animated characters. GLB is convenient for distributing a self-contained body and avoids accidental texture-path breakage. Preserve original sources and conversion/import provenance. OBJ and FBX are minimum product goals, not necessarily native Bevy capabilities. A Bevy glTF loader must not be advertised as an FBX or OBJ loader.
63
64
| Format | Mesh | Materials/textures | Skeleton | Animation | Intended role / status |
65
|---|---|---|---|---|---|
66
| glTF 2.0 .gltf/.glb | Yes | PBR metallic/roughness and referenced/embedded textures | Skins/joints | Node/skeletal clips; morph support must be tested | Preferred character and equipment path; native Bevy glTF adapter planned |
67
| OBJ + MTL + texture files | Yes | MTL subset with explicit conversion and relative textures | No | No skeletal clips | Required static equipment/import preview; cannot by itself satisfy animated body requirement |
68
| FBX ASCII/binary | Yes | Varies; embedded/external textures and legacy material conversion | Commonly | Commonly multiple clips/takes | Required adapter/conversion path with compatibility fixtures; never claim universal FBX fidelity |
69
| Collada .dae | Usually | Adapter-dependent | Possible | Possible | Optional Assimp-backed candidate, not guaranteed until fixtures pass |
70
| PLY / STL | Static geometry | PLY colors possible; STL no conventional textures | No | No | Optional static equipment only; low priority |
71
| .blend | Not a portable interchange contract | Requires Blender/version matching | Possible through export | Possible through export | No direct minimum support; explicit external export to GLB preferred |
72
73
FBX/OBJ adapter decision remains **open**: evaluate Assimp via maintained Rust bindings (e.g. russimp, native Assimp build dependency), dedicated format loaders, or explicit Blender conversion. Assimp offers a broad-format normalization route but its Rust binding/native ABI, packaging, material conversion, skin weights and animation correctness must be proven on Linux AND Windows. A native library must be bundled/licensed correctly or statically linked where permitted. Do not silently require an installed Blender; if used as an optional converter, show the requirement and invoke it only after explicit user selection. Avoid a heavyweight runtime dependency when an in-process adapter passes tests.
74
75
Import normalizes axes, handedness, units, winding, inverse-bind matrices and texture color spaces ONCE, then retains conversion metadata. Detect singular transforms, invalid weights, missing bones/textures and unsupported materials. Imported file paths and embedded archives are untrusted: no traversal, arbitrary script execution or unbounded decompression. Keep parse limits and import failure diagnostics.
76
77
OBJ bodies can be displayed as static geometry, but must not pretend to have a skeleton or the requested animations. A UI must clearly disable unavailable bone/clip features. Separate equipment geometry from body rig; bone matching uses stable joint identity/path, not only an ambiguous display name.
78
79
Format acceptance gate: fixtures cover mesh topology, alpha materials, normal maps, external relative texture paths, one animated skinned body, multiple clips, bone-local transforms, malformed files and missing resources. A green fixture does not certify every exporter dialect.
80
81
## 5. .ppd project and asset ownership
82
83
**Proposal:** `.ppd` is a versioned UTF-8 JSON manifest in a project directory, with `format_version`, project identifier, display name, optional male/female model references, import transforms, animation inventory overrides, equipment preset references, render settings, output locations and generated-set metadata. Keep source references and normalized cache separate. Use project-relative paths by default; importing may copy models plus dependencies into `assets/` after user choice. External references need explicit portability warnings and relinking, never silent data loss.
84
85
Suggested layout: `character.ppd`, `assets/body/`, `assets/equipment/`, `presets/`, `cache/`, `renders/`. The .ppd manifest is not the binary equipment preset. Cache is disposable and content-addressed; source and preset files are not. Save through a temporary sibling plus atomic rename, preserve valid previous state on failure, reject unsupported newer schema versions with a useful message. Unknown fields should not be silently discarded on rewrite without a documented migration policy.
86
87
Validate finite numeric values, dimensions > 0, bounded dimensions and memory estimate, positive FPS, valid clip references, existing model/preset paths and output directories distinct from sources. A missing optional sex slot is a valid project, but cannot render that slot. No absolute-path leakage into exported manifests unless user explicitly chooses external references.
88
89
## 6. Camera, axes, alignment and animation sampling
90
91
Required views: pitches -30, 0, +30 degrees; yaw 0, 30, 60, ..., 330 degrees. **Proposal:** yaw zero means the standardized character front faces the camera, world +Y is up, and positive yaw is defined by a documented right-hand convention. Distinguish camera elevation from model rotation: use orbiting orthographic camera around fixed character origin. Golden orientation fixture must show labelled front/back/left/right to remove ambiguity before production export.
92
93
Use orthographic projection for aligned layering. Shared camera framing, pivot, near/far, canvas size and unit normalization are stored per sex/export set and must match across body/equipment. Determine a stable envelope across selected animations, with configurable margin and equipment allowance. Never independently auto-frame each equipment piece or animation frame. Source-model forward-axis correction is explicit in project import settings.
94
95
**Proposal:** sample looping clips at t=i/FPS for 0 <= i < ceil(duration*FPS), excluding a duplicate terminal sample; validate zero-duration clips and offer a bind/static frame instead. Store actual sample timestamps and duration in output metadata. Root motion is initially in-place with a documented extraction policy; preserve original clips and allow future explicit mode. No interpolation of ordinal frames as though every clip had the same duration.
96
97
The 8x requirement means **8x width AND 8x height**, hence 64x pixel count. FPS controls animation sampling rather than interactive preview performance. Render maps in a bounded streaming pipeline, not all frames in RAM. Estimate disk/GPU/memory cost before starting: frame count times 36 views times map count. Cancellation stops between safe work units and leaves an incomplete marker, never an apparently complete asset set.
98
99
## 7. Export naming and metadata
100
101
Required schema: `<geslacht>-<settype>-<animatienaam>-<pitch>-<yaw>-<maptype>-f<framenummer>.png`.
102
103
**Proposal:** sex tokens `male` and `female`; body set type exactly `body`; equipment name validated as a lowercase slug without spaces, reject reserved `body`. Use deterministic safe animation slugs plus collision registry preserving original names in a companion manifest. Decide delimiter escaping explicitly: negative pitch creates adjacent hyphens, so parse from the known suffix rather than naive splitting. Example `male-body-walk--30-0-diffuse-f000000.png` corresponds to pitch -30/yaw 0/frame 0. A six-digit frame width is a provisional minimum, not a cap; width and naming are stored in metadata.
104
105
The companion output manifest stores original clip IDs/names, name tokens, timestamps, dimensions, FPS, camera matrices/conventions, shared depth range, normal space, alpha mode, specular convention, render settings/version, source fingerprints and completion status. This metadata supplements rather than replaces the required PNG filenames. Output writes use temporary files and explicit overwrite choice. Sanitize names without creating collisions or interpreting slashes as directories.
106
107
## 8. Map contracts and rendering algorithm
108
109
Diffuse is an **unlit base color** suitable for later lighting, not an already lit screenshot. Preserve alpha, use sRGB encoding only at output boundaries and process color in linear light. Transparency outside geometry remains zero; distinguish uncovered pixels from valid near-depth pixels.
110
111
Depth **proposal:** 16-bit grayscale PNG representing linear camera-space depth normalized to one shared near/far interval for all compatible layers. Smaller valid values mean nearer the viewer. Use diffuse alpha/coverage as validity; never interpret the transparent background as the closest surface. No per-frame or per-equipment depth rescaling. Record the exact decode equation in metadata. Depth ordering tests must include equipment in front of and behind different body regions.
112
113
Normals **proposal:** view-space geometric/shading normal, xyz encoded from [-1,1] to [0,1] in RGB PNG, with documented image Y convention; normal space must match the preview light transform. Normalize after interpolation/filtering. Uncovered pixels have alpha zero and a neutral placeholder normal. Include tangent-space source normal maps where supported and explicitly test their conversion; a geometry-normal bake is not automatically full source-material normal fidelity.
114
115
Equipment shinymap **proposal:** grayscale scalar specular strength (0..1), with a documented default exponent/roughness in metadata. Filename token `shiny` is provisional because Tim named the concept but did not mandate a token spelling. Metallic/roughness and Phong materials do not map uniquely to one scalar; expose a conservative conversion/default and retain editable overrides. Do not label it physically exact PBR. Body has diffuse/depth/normal; equipment additionally shiny.
116
117
Pipeline per shared scene sample/view:
118
1. Evaluate skeleton and bone world transforms at the exact sample time.
119
2. Render high-resolution unlit color/coverage and geometry buffers at 8x target dimensions. Depth/normals originate from the actual same surfaces, not image luminance.
120
3. Compute an internal detail map using color gradients plus alpha/depth/normal discontinuities, bounded weights and transparent-neighbor handling. Detail map is intermediate, not a fourth body output map.
121
4. Downsample diffuse with deterministic coverage-aware weighted reconstruction in linear premultiplied color; unpremultiply safely for straight-alpha PNG output. Tune thin-feature retention on fixtures, not on a named but unimplemented algorithm.
122
5. Resolve target-resolution depth/normals from coherent contributing surfaces. Avoid mixing background with foreground or averaging front and back depths into nonphysical geometry. Align the chosen representative/coverage policy across maps. Renormalize normals.
123
6. Add a subtle configurable rim/detail accent to diffuse based on normal/depth discontinuities, never a light-direction bake. Clamp magnitude, preserve alpha; default must be validated visually to avoid double-lighting later.
124
7. Encode all target-resolution PNGs atomically and record checksums/metadata. Test deterministic CPU stages independently from GPU tolerance.
125
126
Equipment pass hides the body from **all color, depth, normal and specular writes**, while still evaluating its rig and animating attachments. The body is not an invisible occluder; otherwise equipment behind it would be missing when layers are recomposed. Equipment self-occludes normally. Every layer must use the same projection and absolute depth contract. Hair/alpha cutout versus true blended transparency is an open fidelity decision; initial opaque/cutout support must be stated rather than promising arbitrary multilayer transparency from a single depth value.
127
128
## 9. Equipment editor and binary presets
129
130
UI selects sex, target skeleton/bone, imported equipment mesh, XYZ translation and XYZ Euler rotation in degrees. **Proposal:** persisted rotation is a quaternion with UI Euler values/order documented; test round-trip and avoid cumulative rotations each frame. Attachment transform is `body_world * animated_bone_world * attachment_local`; clarify inverse-bind usage in importer and test with nonidentity parents. Scale is initially asset import normalization, not an unrequested body-part editor feature.
131
132
Live 3D preview displays body and selected equipment, allows free orbit/zoom and optional animation selection for placement checks. It is separate from the discrete 2D preview. Display a bone tree and highlight unresolved attachments. A preset supports multiple meshes attached to multiple bones, sex flag, stable bone paths, original/import transforms and embedded geometry/material/texture payloads.
133
134
Binary preset **proposal:** magic header, schema version, bounded metadata length and asset count, checksummed entries and compressed payload chunks. Choose a documented serialization/container implementation in the preset feature; do not dump Rust memory layouts. Include rig fingerprint and reject mismatched skeletons with an actionable remapping prompt. Preserve original or normalized embedded asset representation plus license/provenance, protect against decompression bombs and traversal, save atomically. Filename extension for presets remains a proposal; .ppd is reserved for project manifests.
135
136
## 10. Rendered 2D preview
137
138
Select sex, animation and zero or more compatible equipment sets. Validate same project/rig/export contract and sample inventory. Play actual exported frames on a loop with elapsed-time accumulation; FPS and playback speed are explicit. Missing maps/frames show a diagnostic rather than silently using another animation.
139
140
Left/right controls wrap among twelve yaw values. Up/down selects one of three pitch rows with clamping, not cyclic hidden extra angles. The orientation zero/positive direction agrees with export. Changing angle preserves animation time. Holding light buttons rotates azimuth/elevation continuously in degrees per second using delta time; releasing, focus loss or pointer cancellation stops motion. Clamp elevation/wrap azimuth with clear coordinate convention. These controls are continuous even though model view selection is discrete.
141
142
Depth compositor selects the nearest valid surface per pixel from body and chosen equipment, with stable epsilon/tie-break ordering. Chosen pixel supplies diffuse, normal and shiny from the **same layer**. Blend alpha edges using a documented approximation; single-depth compositing cannot reconstruct arbitrary order-dependent translucent surfaces. A simple ambient + diffuse + specular preview proves maps and lighting; it is not the future game controller. Transform the continuous light into the same view space used by each normal map.
143
144
## 11. Development workflow, quality and packaging
145
146
Each feature starts on its own `feature/...` branch from current master. Implement its tests and acceptance criteria, run local checks, commit, then `git merge --no-ff` into master and push. No initial-phase MRs. Keep branch/feature and merge SHAs in the coordinator status file, report completion before the next feature. Setup/design may use `feature/project-design`; establish a baseline master commit first if required to obtain a genuine two-parent merge. Never fabricate a merge on an unborn branch.
147
148
CI filename requested: `blue-ci-cd.yml`. **Unverified infrastructure detail:** do not invent BlueGit YAML syntax. Inspect documented BlueGit runner schema and narrow existing `timfa/posprint` and `legacy-cycles` pipeline/release examples before writing configuration. Respect runner/image selection, artifact retention and release API semantics. No GitLab mirror is requested for this new project.
149
150
Tests run on MR events (future-proof despite no current MRs), master pushes AND tags. Quality gates: `cargo fmt --check`, `cargo check --workspace --all-targets --locked`, `cargo clippy --workspace --all-targets --locked -- -D warnings`, `cargo test --workspace --locked`; feature combinations should be covered explicitly when introduced. Pin toolchain/components and package tooling. Core tests require no GPU; separate GPU integration tests may use a supported software adapter, with explicit results rather than silent skip-as-pass.
151
152
Tag pipeline graph: quality/tests → four packaging jobs → artifact verification → one release publish. A failure of ANY required artifact prevents release. Build Linux x86_64 AppImage, Debian/Ubuntu .deb, Arch .pkg.tar.zst and Windows x86_64 .exe in a .zip. Verify target architecture and contents; packaging a Linux binary into a Windows archive is not a build. Prefer native Windows runner when available, or verified mingw target/toolchain with dependency support. AppImage and distribution packages need desktop integration/icon/license, runtime library audit and version mapping from tag to package version. Include checksums and build provenance; signing is optional future work, never invent signatures.
153
154
Release publication uses documented BlueGit release/artifact API and job-scoped least-privilege credentials; no tokens in source/logs/status. All assets attach only after all outputs pass verification, retries are idempotent and do not delete unrelated releases. Distinguish local packaging smoke tests from a real successful tag/release pipeline. **No tag or release is authorized during setup.** A configured future tag trigger is not permission to create a tag now.
155
156
Verified BlueGit behaviour, inspected 6 November 2026, is recorded in section 15. The configured tag pipeline calls that API. With the API as it exists today, publishing the same tag that started the pipeline is rejected. That limit is part of the design record, not a claim that a release was created.
157
158
## 12. Incremental feature plan and acceptance gates
159
160
0. Foundation/design/CI: group and repo existence checks; private repo; single detailed design.md with verbatim appendix; minimal honest compileable Rust shell; locked dependencies/toolchain; genuine two-parent setup merge; tests and verified CI schema. No claim that rendering/import works. Test packaging scripts locally where possible without publishing.
161
1. Project model and validation: .ppd open/save/new, portable paths, schema/version checks, model slots and render settings; atomic persistence/invalid paths tests.
162
2. Normalized import and animation inventory: glTF/GLB fixtures first, required OBJ+MTL/textures and FBX adapter proof; format-specific truthful UI/errors and skeleton/clip inventories; integration fixture tests before declaring format support.
163
3. Desktop 3D viewport and animation sampling: visible real imported model, orbit, clip controls, source-axis normalization; transform tests and manual visual test.
164
4. Equipment attachments and binary presets: bone tree, sex choice, numeric offsets/rotations, live placement, embedded multi-mesh assets; round-trip and rig mismatch tests.
165
5. Shared batch camera/sampling and raw buffers: 36 views, common framing, 8x geometry output/readback, diffuse/depth/normal alignment; orientation/occlusion fixture before aesthetic postprocessing.
166
6. Production image pipeline: detail-aware downsampling, depth/normal resolve, rim accents, shiny conversion, filename/manifest export, progress/cancel/resume; compare actual output and memory budgets.
167
7. Rendered 2D compositor preview: real exported frames, depth ordering, looping, sex/equipment/clip selection, discrete view controls and continuous held light controls; deterministic state tests and manual lighting test.
168
8. Packaging/hardening: verify all platform packages and install/run behavior, imports with native dependencies, accessibility and failure recovery; actual releases only on later explicit tag authorization.
169
170
Every feature is independently reported and merged non-FF only when its acceptance gate passes. If compatibility or rendering remains untested, name that limitation and do not merge a false completion claim.
171
172
## 13. Open decisions and risks
173
174
- Confirm target resolution/FPS defaults, output color treatment, root-motion policy, front-axis and positive-yaw convention with a labelled fixture before production content.
175
- FBX exporter variants/native Assimp packaging and skeletal animation fidelity are high-risk; prototype early rather than after UI completion.
176
- Eightfold dimensions impose 64x pixels; support tiling or reject unsupported render sizes with estimates, not GPU crashes.
177
- Shared framing/depth/normal contracts are essential; independently normalized equipment maps cannot be depth-composited correctly.
178
- Alpha-blended materials cannot be fully represented by one surface depth; document cutout/opaque MVP and approximation.
179
- Bone attachment supports rigid equipment, not automatic skinning/retargeting; expose that limit.
180
- glTF PBR/FBX legacy materials to a single shinymap is lossy; retain source metadata and editable conversion settings.
181
- Package version mapping, Windows runner/toolchain and BlueGit group runner availability must be verified, not assumed.
182
- Keep model provenance/licensing with embedded presets; importing assets does not grant redistribution rights.
183
184
## 14. Research references and verification limits
185
186
- Bevy project and documentation: https://bevy.org/ (preferred-stack proposal; exact dependency versions and API compatibility still require implementation verification).
187
- Assimp repository: https://github.com/assimp/assimp (candidate broad-format import dependency, not universal file compatibility guarantee).
188
- Rust Assimp binding docs inspected: https://docs.rs/russimp/latest/russimp/ (reported russimp 3.2.1 at inspection; no build/compatibility test performed).
189
- glTF specification reference: https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html (canonical interchange recommendation; implementation must test supported subsets).
190
- BlueGit CI specification: `GET https://git.timfalken.com/api/v1/ci/spec` and `docs/CI.md` in `timfa/bluegit` (file name `blue-ci-cd.yml`, job fields, variables, release API).
191
- Working pipelines read in public repositories: `timfa/posprint` `blue-ci-cd.yml` and `scripts/ci/release.sh`; `timfa/minecart-trains` `blue-ci-cd.yml`; `timfa/click-tween` `blue-ci-cd.yml` and `scripts/release.sh`.
192
- Release implementation read in `timfa/bluegit` `internal/server/ops_ci.go` (`opPublishRelease`) and `internal/server/release_replace.go` (`checkReplace`).
193
194
## 15. Verified BlueGit CI and the release-trigger limit
195
196
Inspected sources, all public on 6 November 2026:
197
198
| Source | What it shows |
199
|---|---|
200
| `GET /api/v1/ci/spec` and `timfa/bluegit` `docs/CI.md` | The pipeline file is `blue-ci-cd.yml`. Jobs may be top-level. `rules` / `only` / `needs` / `artifacts.paths` / `artifacts.expire_in` / `extends` / `resource_group` / `workflow` are real fields. `CI_COMMIT_TAG` is empty on a branch and `CI_COMMIT_BRANCH` is empty on a tag. `CI_JOB_TOKEN` exists only inside a job container. Image presets include `bluegit/base` and `bluegit/rust` (Rust 1.81). Any other image name, such as `rust:1.83-bookworm`, is a normal Docker image. |
201
| `timfa/posprint` `blue-ci-cd.yml` | Tests on merge requests and on `master`. Package jobs use `needs: [test]`. Artifacts are exact file paths, not globs. The release job runs on `master` and calls `POST $CI_API_URL/repos/$CI_PROJECT_PATH/releases` with `Authorization: Bearer $CI_JOB_TOKEN`. Tag pushes are disabled with `if: $CI_COMMIT_TAG != ""` / `when: never`. The comment in that file says tag pipelines must not rebuild old tags. Windows is cross-compiled with MinGW because that comment states there is no Windows runner. |
202
| `timfa/posprint` `scripts/ci/release.sh` | The script says the release API creates the tag itself. It refuses to release when `HEAD` is already tagged. |
203
| `timfa/minecart-trains` `blue-ci-cd.yml` | States the GitLab project used to release on a new tag, and that on BlueGit the release API creates the tag, so tag pushes start no pipeline. |
204
| `timfa/click-tween` `blue-ci-cd.yml` | A tag pipeline may build and verify. The job that publishes the release is manual on `master` and creates the tag through the API. |
205
| `timfa/bluegit` `opPublishRelease` | If the tag already exists and `replace` is not set, the API returns HTTP 409 (`err.tagExists`). `replace: true` is checked by `checkReplace`, which rejects a tag pipeline (`err.replaceRef`, HTTP 403). A tag pipeline therefore cannot attach assets to the tag that started it, and cannot replace that release either. |
206
| `timfa/legacy-cycles` | The project page redirects to releases and says only the releases are public. `GET /api/v1/projects/timfa/legacy-cycles/repository/tree` and the CI file returned 404. The public release assets for v0.0.38 are a Debian package, an Arch `.pkg.tar.zst`, a Windows zip, and Linux tar archives. No AppImage is listed. Its pipeline YAML was not available to copy. |
207
208
Consequences for `blue-ci-cd.yml` in this repository:
209
210
1. Syntax is limited to fields confirmed in the CI spec or in the pipelines above. No GitLab-only keyword is added (`pages`, `spec`, child pipelines, `id_tokens`).
211
2. Tests run for merge-request pipelines, for pushes to `master`, for pushes to `main`, for `CI_DEFAULT_BRANCH`, and for tags. This workspace's default branch is `main`. Tim's existing BlueGit projects use `master`. Covering both avoids a silent skip after the project moves.
212
3. On a tag push the four package jobs run only after `test`, then `verify:packages` checks magic bytes so a Linux executable is not renamed into the Windows zip. `release` needs `verify:packages`, so any failed package skips publication.
213
4. `release` calls the documented POST. The body uses `CI_COMMIT_TAG` and `CI_COMMIT_SHA`, and points each asset at the successful job and exact artifact path. **With today's API that POST returns 409**, because the tag already exists, and `replace: true` is forbidden on a tag pipeline. The job is still the requested publish step; it is not described here as a release that already succeeded. No tag is created by this setup commit.
214
5. Package scripts map a tag `vX.Y.Z` or `X.Y.Z` to package version `X.Y.Z`. Other tag spellings fail the package job instead of inventing a version.
215
6. The Rust image is `rust:1.96-bookworm`. That tag is the one `timfa/posprint` already runs on BlueGit. `rust-toolchain.toml` pins the same compiler, 1.96.0, which was installed here with rustup. The machine default before that pin was 1.83.0. 1.83.0 cannot resolve the current eframe 0.29.1 graph: several transitive crates require edition 2024, which Cargo 1.83 does not parse. `bluegit/rust` is Rust 1.81 on Alpine and is the wrong image for this X11 shell. `bluegit/base` is used for the verify and release jobs, as in posprint.
216
7. posprint states BlueGit does not set `CI_PROJECT_DIR` and that jobs start in the checkout. Scripts use `$PWD`.
217
218
The toolchain is Rust 1.96.0, edition 2021. Edition 2021 remains explicit; the crate does not opt into edition 2024. `Cargo.lock` is committed. `cargo fmt`, `cargo check`, `cargo clippy -D warnings` and `cargo test` are the test job. No GPU test is required for the foundation shell.
219
220
# Appendix A — Tim's original proposal (verbatim)
221
222
The following block preserves the original Dutch text including spelling and filename placeholders. It is not a paraphrase or implementation status.
223
224
```text
225
Ik heb een idee voor een projectje;
226
Een Paperdoll Renderer.
227
228
Het idee;
229
We importeren twee menselijke 3D-modellen; een man en een vrouw. Die hebben een set animaties, zoals lopen, springen, bukken, aanvallen, blokkeren, geraakt worden, etc. (we lezen gewoon alles uit het model)
230
231
Bij renderen hebben we twee modussen: Karaktermodel, en uitrusting (hier later meer over). Als je rendert, dan hebben we 3*12 posities; 3 pitches (-30 graden, 0 graden, +30 graden), en 12 yaw (beginnend met recht naar de camera kijken en dan steeds een stapje ronddraaien tot we alle hoeken hebben). We renderen die naar PNG's met de naam: <geslacht>-<settype>-<animatienaam>-<pitch>-<yaw>-<maptype>-f<framenummer>.png met een vooringestelde (hoge, acht keer de doelresolutie) resolutie en framerate.
232
We pakken dan die hoge resolutie, en maken een detail-map; dat is effectief een edge-detection algoritme. We schalen de paperdoll dan omlaag naar de doelresolutie, en we gebruiken de detail-map om pixels extra gewicht te geven om te kiezen welke kleur we een pixel geven.
233
Daarna maken we een depth-map op de doelresolutie, en een normal map. (de maptypes in de filename zijn dus: diffuse, depth, normal)
234
Als we de normalmap en depthmap hebben, doen we nog een pass over de diffuse om randen een beetje te highlighten. Daarna slaan we de hele set op volgens het afgesproken naamformat (allemaal op de doelresolutie). Dit is is settype=body.
235
236
Daarna hebben we ook equipment. Je kiest een geslacht, en je moet per lichaamsdeel (op de skeleton van het karaktermodel) een 3D-model kunnen importeren, en op de bone kunnen positioneren. Als je alle modellen van een stuk equipment op de juiste positie gezet hebt, kun je dat opslaan als een preset (binary file met de modellen en posities op bones, alsmede een flag voor of het male of female is). Je kunt hem ook renderen; dan kies je een naam voor je equipment. Die naam is de settype; allemaal lowercase, geen spaties toegestaan. Dit rendert dan nogmaals alles, net als bij de body, alleen is de body dan doorzichtig, waardoor je alleen de equipment-modellen tekent. Equipment heeft ook een shinymap; dat is hoeveel specular een pixel moet hebben voor later bij de renderer.
237
238
De bedoeling is dat we die paperdolls later kunnen gebruiken om een renderer te schrijven. Die gebruikt de diffuse maps en laagt met equipments over elkaar; het gebruikt de depth-map om te bepalen welke pixel van welke map (body of equipment) getekent moet worden (soort z-check), en de normal map om bumpmapping en lighting te tekenen. Dat wordt dan deel van een character-renderer en controller.
239
240
Als stap 1 wil ik graag de paperdoll renderer maken. Ik heb nog geen modellen, die moet ik dus later zelf in het programma kunnen selecteren. Voor positioneren op bones zijn XYZ voor relatieve positie en rotatie voldoende voor nu, met dan een live preview waarop je het lichaam ziet, die je kunt roteren (3D model view, niet de gerenderde plaatjes want die zijn er dan nog niet).
241
242
Wanneer je sets maakt, is dat in een .ppd (PaPerDoll) project; een map met een .ppd file die verteld welke modellen gebruikt worden, welke binary files van equipment sets er zijn, en waar gerenderde output staat.
243
Zo kunnen we ook een preview tab maken; kies een geslacht, kies equipments om te layeren, en kies een animatie. Je ziet dan de animatie op loop spelen (de gerenderde 2D paperdolls), en kunt met pijltjes orbiten (boven, midden, onder, en dan voor links en rechts de 12 rotaties). Ook moet je met knopjes die je ingedrukt kan houden de positie van de lichtbron kunnen roteren. Dat gaat in graden, niet in stappen.
244
245
Stappenplan:
246
247
- Maak een groep op BlueGit: `Golden Age`
248
- Maak de repo, Paperdoll Renderer
249
250
- Documenteer alle bovenstaande, incl. letterlijke tekst van mij, zeer gedetailleerd in een enkele design.md
251
- Bouw dan alle features een voor een in Rust. Elke feature op een nieuwe branch, en als die feature af is, niet-FF mergen naar master (Geen MR's tijdens eerste ontwikkelfase) en door naar de volgende feature. Elke feature krijgt een unit test die we in de CI-CD activeren op een merge request (ook al gebruiken we die nog niet) en op een master push. Een tag push krijgt, als tests slagen, ook een build; AppImage, Ubuntu Package, Arch Package, Windows Build, welke we dan als een release pushen.
252
253
Houd me bij elke feature op de hoogte hoe het gaat.
254
```
255
256
# Appendix B — Additional import requirement (verbatim)
257
258
```text
259
Bepaal ook welk 3D-model format goed is; liefst ondersteunen we natuurlijk meerdere. In ieder geval .obj (met mtl en texture) en .fbx, maar hoe meer hoe beter.
260
```
@@ -0,0 +1,260 @@1
# Paperdoll Renderer — design2
3
**Status: design recorded with a foundation shell only.**4
Prepared 6 November 2026 (Europe/Amsterdam). Requirements originate with Tim Falken. Sections explicitly marked **proposal** remain implementation decisions to validate; the verbatim appendix is authoritative for user intent. The Rust program shipped with this design is the section 12 step 0 shell: it compiles, opens a status window, and tells the truth about what is not built. It does not import models and it does not render paperdolls. Synthetic test bodies, when present under `tests/fixtures/bodies/`, are fixtures for later features; this program does not load them.5
6
Anonymous HTTP requests to `https://git.timfalken.com/groups/golden-age` and `https://git.timfalken.com/golden-age/paperdoll-renderer` returned 404. BlueGit also answers 404 when a private project is not visible to the caller, so those responses do not prove the private repository is absent. This workspace does not create the group or the repository. The requested BlueGit destination stays group **Golden Age**, slug `golden-age`, repository **Paperdoll Renderer**, slug `paperdoll-renderer`.7
8
## 1. Product, scope and non-goals9
10
Build a native Rust desktop asset-authoring application for rendering animated human bodies and bone-attached equipment into aligned 2D paperdoll PNG sequences. A project contains male and female source models, their imported animation inventories, equipment presets, render settings, output paths and output metadata. Either model slot may remain empty while authoring. Missing models must be reported before a render starts, not replaced by invented characters.11
12
The application has three distinct experiences: a project/model workspace, an interactive **3D attachment editor**, and a **rendered 2D paperdoll preview**. The latter must consume actual exported maps; it must not disguise a 3D viewport as a finished sprite renderer.13
14
The later game character-renderer/controller is OUT OF SCOPE. The in-tool compositing preview is in scope because it verifies asset compatibility. No bundled commercial models, automatic retargeting, physics-based cloth, equipment deformation/weight painting, game controllers or multiplayer are promised. Equipment is initially rigid geometry attached to bones. Imported skinned equipment can be a later explicitly scoped extension.15
16
BlueGit destination requested: group **Golden Age**, proposed slug `golden-age`; repository **Paperdoll Renderer**, slug `paperdoll-renderer`. Check existence before creating either. Private visibility is a provisional safe default, not a claim about an existing group's settings. Do not change unrelated group/repository access.17
18
## 2. Requirements and traceability19
20
| ID | Requirement | Verification |21
|---|---|---|22
| R01 | Rust application with user-selected male/female models | Open/save missing and populated slots; later manual desktop smoke test |23
| R02 | Discover all supported embedded animation clips | Synthetic licensed fixture inventory, including unnamed/duplicate clips |24
| R03 | Body and equipment modes | Export body plus isolated equipment from identical scene state |25
| R04 | Three pitches times twelve yaw positions | Exactly 36 unique orientations; yaw starts facing viewer |26
| R05 | Initial geometry render at 8x target dimensions and configured FPS | Explicit render manifest and dimension/frame-count tests |27
| R06 | Edge/detail-guided downsampling | Image fixtures retain thin details better than baseline without alpha fringes |28
| R07 | Target-resolution diffuse, depth, normal maps | Round-trip decoding, finite normalized normals and shared depth contract |29
| R08 | Subtle diffuse edge highlights from depth/normals | Deterministic fixture with bounded highlight effect |30
| R09 | Required filename structure | Golden path examples plus sanitization/collision tests |31
| R10 | Bone-relative XYZ position and rotation with live orbitable 3D preview | Transform-chain unit tests and manual viewport test |32
| R11 | Binary equipment presets embedding models and attachment metadata | Round-trip, version/truncation/resource-limit tests |33
| R12 | Equipment set name lowercase without spaces | Validation; reject reserved body name and path traversal |34
| R13 | Equipment-only rendering with shinymap | No body occlusion/write contamination; specular fixture |35
| R14 | Folder plus .ppd manifest describing assets, presets, outputs | Portable relative paths and safe atomic saves |36
| R15 | 2D looping animation, sex/equipment/clip selection and 36-angle navigation | State-machine and depth-compositing tests |37
| R16 | Held light-control buttons rotate continuously in degrees | Delta-time tests including key/button release/focus loss |38
| R17 | Per-feature branch, tests, non-FF master merge, no initial MRs | Two-parent merge topology and CI checks |39
| R18 | Tag tests gate AppImage, deb, Arch package, Windows build and release | Packaging smoke tests and complete-artifact release gate |40
| R19 | Minimum import goals OBJ/MTL/textures and FBX; broader support where feasible | Format matrix and fixture-based import tests |41
42
## 3. Proposed architecture and stack43
44
**Proposal, not compatibility certification:** use Bevy for windowing, scene graph, skeletal animation, glTF loading and GPU rendering (wgpu), with a compatible bevy_egui integration for authoring panels. Choose and pin compatible published versions when implementation starts; do not guess latest-version APIs or dependency compatibility. Use ordinary Rust libraries with no GUI/GPU requirements for project validation, naming, render schedules, transforms and image processing. Tests for this core must run headlessly.45
46
A dependency-minimal executable skeleton may precede the full viewport; it must say which capabilities are unimplemented. An application that only prints a placeholder message is not the completed desktop renderer. Rust edition/toolchain must be explicit, version-pinned after confirming installed/build-runner availability. Commit Cargo.lock for reproducibility.47
48
Proposed workspace boundaries:49
- `crates/ppd-core`: project types, validation, portable paths, render schedule, filename codec and format versions.50
- `crates/ppd-import`: import adapters, coordinate normalization, normalized assets and animation discovery.51
- `crates/ppd-render`: shared camera, scene sampling, offscreen maps and readback.52
- `crates/ppd-image`: linear-color downsampling, detail extraction, edge highlight and PNG codecs.53
- `crates/ppd-preview`: deterministic depth compositing and preview/light state independent of UI where possible.54
- `crates/paperdoll-renderer`: desktop shell, model/preset editors, render progress and preview tabs.55
- `tests/fixtures`: tiny synthetic or permissively licensed fixtures, with provenance and licenses.56
- `packaging` and `scripts`: verified platform packaging and CI helpers.57
58
Do not create empty crates solely to imply completion. Establish boundaries as features land. Rendering jobs operate on immutable validated snapshots so editing a project cannot silently change an active batch. Worker messages report progress and cancellation; UI/GPU ownership stays on the appropriate thread.59
60
## 4. Import format advice and support matrix61
62
**Recommendation:** glTF 2.0/GLB is the preferred canonical interchange for animated characters. GLB is convenient for distributing a self-contained body and avoids accidental texture-path breakage. Preserve original sources and conversion/import provenance. OBJ and FBX are minimum product goals, not necessarily native Bevy capabilities. A Bevy glTF loader must not be advertised as an FBX or OBJ loader.63
64
| Format | Mesh | Materials/textures | Skeleton | Animation | Intended role / status |65
|---|---|---|---|---|---|66
| glTF 2.0 .gltf/.glb | Yes | PBR metallic/roughness and referenced/embedded textures | Skins/joints | Node/skeletal clips; morph support must be tested | Preferred character and equipment path; native Bevy glTF adapter planned |67
| OBJ + MTL + texture files | Yes | MTL subset with explicit conversion and relative textures | No | No skeletal clips | Required static equipment/import preview; cannot by itself satisfy animated body requirement |68
| FBX ASCII/binary | Yes | Varies; embedded/external textures and legacy material conversion | Commonly | Commonly multiple clips/takes | Required adapter/conversion path with compatibility fixtures; never claim universal FBX fidelity |69
| Collada .dae | Usually | Adapter-dependent | Possible | Possible | Optional Assimp-backed candidate, not guaranteed until fixtures pass |70
| PLY / STL | Static geometry | PLY colors possible; STL no conventional textures | No | No | Optional static equipment only; low priority |71
| .blend | Not a portable interchange contract | Requires Blender/version matching | Possible through export | Possible through export | No direct minimum support; explicit external export to GLB preferred |72
73
FBX/OBJ adapter decision remains **open**: evaluate Assimp via maintained Rust bindings (e.g. russimp, native Assimp build dependency), dedicated format loaders, or explicit Blender conversion. Assimp offers a broad-format normalization route but its Rust binding/native ABI, packaging, material conversion, skin weights and animation correctness must be proven on Linux AND Windows. A native library must be bundled/licensed correctly or statically linked where permitted. Do not silently require an installed Blender; if used as an optional converter, show the requirement and invoke it only after explicit user selection. Avoid a heavyweight runtime dependency when an in-process adapter passes tests.74
75
Import normalizes axes, handedness, units, winding, inverse-bind matrices and texture color spaces ONCE, then retains conversion metadata. Detect singular transforms, invalid weights, missing bones/textures and unsupported materials. Imported file paths and embedded archives are untrusted: no traversal, arbitrary script execution or unbounded decompression. Keep parse limits and import failure diagnostics.76
77
OBJ bodies can be displayed as static geometry, but must not pretend to have a skeleton or the requested animations. A UI must clearly disable unavailable bone/clip features. Separate equipment geometry from body rig; bone matching uses stable joint identity/path, not only an ambiguous display name.78
79
Format acceptance gate: fixtures cover mesh topology, alpha materials, normal maps, external relative texture paths, one animated skinned body, multiple clips, bone-local transforms, malformed files and missing resources. A green fixture does not certify every exporter dialect.80
81
## 5. .ppd project and asset ownership82
83
**Proposal:** `.ppd` is a versioned UTF-8 JSON manifest in a project directory, with `format_version`, project identifier, display name, optional male/female model references, import transforms, animation inventory overrides, equipment preset references, render settings, output locations and generated-set metadata. Keep source references and normalized cache separate. Use project-relative paths by default; importing may copy models plus dependencies into `assets/` after user choice. External references need explicit portability warnings and relinking, never silent data loss.84
85
Suggested layout: `character.ppd`, `assets/body/`, `assets/equipment/`, `presets/`, `cache/`, `renders/`. The .ppd manifest is not the binary equipment preset. Cache is disposable and content-addressed; source and preset files are not. Save through a temporary sibling plus atomic rename, preserve valid previous state on failure, reject unsupported newer schema versions with a useful message. Unknown fields should not be silently discarded on rewrite without a documented migration policy.86
87
Validate finite numeric values, dimensions > 0, bounded dimensions and memory estimate, positive FPS, valid clip references, existing model/preset paths and output directories distinct from sources. A missing optional sex slot is a valid project, but cannot render that slot. No absolute-path leakage into exported manifests unless user explicitly chooses external references.88
89
## 6. Camera, axes, alignment and animation sampling90
91
Required views: pitches -30, 0, +30 degrees; yaw 0, 30, 60, ..., 330 degrees. **Proposal:** yaw zero means the standardized character front faces the camera, world +Y is up, and positive yaw is defined by a documented right-hand convention. Distinguish camera elevation from model rotation: use orbiting orthographic camera around fixed character origin. Golden orientation fixture must show labelled front/back/left/right to remove ambiguity before production export.92
93
Use orthographic projection for aligned layering. Shared camera framing, pivot, near/far, canvas size and unit normalization are stored per sex/export set and must match across body/equipment. Determine a stable envelope across selected animations, with configurable margin and equipment allowance. Never independently auto-frame each equipment piece or animation frame. Source-model forward-axis correction is explicit in project import settings.94
95
**Proposal:** sample looping clips at t=i/FPS for 0 <= i < ceil(duration*FPS), excluding a duplicate terminal sample; validate zero-duration clips and offer a bind/static frame instead. Store actual sample timestamps and duration in output metadata. Root motion is initially in-place with a documented extraction policy; preserve original clips and allow future explicit mode. No interpolation of ordinal frames as though every clip had the same duration.96
97
The 8x requirement means **8x width AND 8x height**, hence 64x pixel count. FPS controls animation sampling rather than interactive preview performance. Render maps in a bounded streaming pipeline, not all frames in RAM. Estimate disk/GPU/memory cost before starting: frame count times 36 views times map count. Cancellation stops between safe work units and leaves an incomplete marker, never an apparently complete asset set.98
99
## 7. Export naming and metadata100
101
Required schema: `<geslacht>-<settype>-<animatienaam>-<pitch>-<yaw>-<maptype>-f<framenummer>.png`.102
103
**Proposal:** sex tokens `male` and `female`; body set type exactly `body`; equipment name validated as a lowercase slug without spaces, reject reserved `body`. Use deterministic safe animation slugs plus collision registry preserving original names in a companion manifest. Decide delimiter escaping explicitly: negative pitch creates adjacent hyphens, so parse from the known suffix rather than naive splitting. Example `male-body-walk--30-0-diffuse-f000000.png` corresponds to pitch -30/yaw 0/frame 0. A six-digit frame width is a provisional minimum, not a cap; width and naming are stored in metadata.104
105
The companion output manifest stores original clip IDs/names, name tokens, timestamps, dimensions, FPS, camera matrices/conventions, shared depth range, normal space, alpha mode, specular convention, render settings/version, source fingerprints and completion status. This metadata supplements rather than replaces the required PNG filenames. Output writes use temporary files and explicit overwrite choice. Sanitize names without creating collisions or interpreting slashes as directories.106
107
## 8. Map contracts and rendering algorithm108
109
Diffuse is an **unlit base color** suitable for later lighting, not an already lit screenshot. Preserve alpha, use sRGB encoding only at output boundaries and process color in linear light. Transparency outside geometry remains zero; distinguish uncovered pixels from valid near-depth pixels.110
111
Depth **proposal:** 16-bit grayscale PNG representing linear camera-space depth normalized to one shared near/far interval for all compatible layers. Smaller valid values mean nearer the viewer. Use diffuse alpha/coverage as validity; never interpret the transparent background as the closest surface. No per-frame or per-equipment depth rescaling. Record the exact decode equation in metadata. Depth ordering tests must include equipment in front of and behind different body regions.112
113
Normals **proposal:** view-space geometric/shading normal, xyz encoded from [-1,1] to [0,1] in RGB PNG, with documented image Y convention; normal space must match the preview light transform. Normalize after interpolation/filtering. Uncovered pixels have alpha zero and a neutral placeholder normal. Include tangent-space source normal maps where supported and explicitly test their conversion; a geometry-normal bake is not automatically full source-material normal fidelity.114
115
Equipment shinymap **proposal:** grayscale scalar specular strength (0..1), with a documented default exponent/roughness in metadata. Filename token `shiny` is provisional because Tim named the concept but did not mandate a token spelling. Metallic/roughness and Phong materials do not map uniquely to one scalar; expose a conservative conversion/default and retain editable overrides. Do not label it physically exact PBR. Body has diffuse/depth/normal; equipment additionally shiny.116
117
Pipeline per shared scene sample/view:118
1. Evaluate skeleton and bone world transforms at the exact sample time.119
2. Render high-resolution unlit color/coverage and geometry buffers at 8x target dimensions. Depth/normals originate from the actual same surfaces, not image luminance.120
3. Compute an internal detail map using color gradients plus alpha/depth/normal discontinuities, bounded weights and transparent-neighbor handling. Detail map is intermediate, not a fourth body output map.121
4. Downsample diffuse with deterministic coverage-aware weighted reconstruction in linear premultiplied color; unpremultiply safely for straight-alpha PNG output. Tune thin-feature retention on fixtures, not on a named but unimplemented algorithm.122
5. Resolve target-resolution depth/normals from coherent contributing surfaces. Avoid mixing background with foreground or averaging front and back depths into nonphysical geometry. Align the chosen representative/coverage policy across maps. Renormalize normals.123
6. Add a subtle configurable rim/detail accent to diffuse based on normal/depth discontinuities, never a light-direction bake. Clamp magnitude, preserve alpha; default must be validated visually to avoid double-lighting later.124
7. Encode all target-resolution PNGs atomically and record checksums/metadata. Test deterministic CPU stages independently from GPU tolerance.125
126
Equipment pass hides the body from **all color, depth, normal and specular writes**, while still evaluating its rig and animating attachments. The body is not an invisible occluder; otherwise equipment behind it would be missing when layers are recomposed. Equipment self-occludes normally. Every layer must use the same projection and absolute depth contract. Hair/alpha cutout versus true blended transparency is an open fidelity decision; initial opaque/cutout support must be stated rather than promising arbitrary multilayer transparency from a single depth value.127
128
## 9. Equipment editor and binary presets129
130
UI selects sex, target skeleton/bone, imported equipment mesh, XYZ translation and XYZ Euler rotation in degrees. **Proposal:** persisted rotation is a quaternion with UI Euler values/order documented; test round-trip and avoid cumulative rotations each frame. Attachment transform is `body_world * animated_bone_world * attachment_local`; clarify inverse-bind usage in importer and test with nonidentity parents. Scale is initially asset import normalization, not an unrequested body-part editor feature.131
132
Live 3D preview displays body and selected equipment, allows free orbit/zoom and optional animation selection for placement checks. It is separate from the discrete 2D preview. Display a bone tree and highlight unresolved attachments. A preset supports multiple meshes attached to multiple bones, sex flag, stable bone paths, original/import transforms and embedded geometry/material/texture payloads.133
134
Binary preset **proposal:** magic header, schema version, bounded metadata length and asset count, checksummed entries and compressed payload chunks. Choose a documented serialization/container implementation in the preset feature; do not dump Rust memory layouts. Include rig fingerprint and reject mismatched skeletons with an actionable remapping prompt. Preserve original or normalized embedded asset representation plus license/provenance, protect against decompression bombs and traversal, save atomically. Filename extension for presets remains a proposal; .ppd is reserved for project manifests.135
136
## 10. Rendered 2D preview137
138
Select sex, animation and zero or more compatible equipment sets. Validate same project/rig/export contract and sample inventory. Play actual exported frames on a loop with elapsed-time accumulation; FPS and playback speed are explicit. Missing maps/frames show a diagnostic rather than silently using another animation.139
140
Left/right controls wrap among twelve yaw values. Up/down selects one of three pitch rows with clamping, not cyclic hidden extra angles. The orientation zero/positive direction agrees with export. Changing angle preserves animation time. Holding light buttons rotates azimuth/elevation continuously in degrees per second using delta time; releasing, focus loss or pointer cancellation stops motion. Clamp elevation/wrap azimuth with clear coordinate convention. These controls are continuous even though model view selection is discrete.141
142
Depth compositor selects the nearest valid surface per pixel from body and chosen equipment, with stable epsilon/tie-break ordering. Chosen pixel supplies diffuse, normal and shiny from the **same layer**. Blend alpha edges using a documented approximation; single-depth compositing cannot reconstruct arbitrary order-dependent translucent surfaces. A simple ambient + diffuse + specular preview proves maps and lighting; it is not the future game controller. Transform the continuous light into the same view space used by each normal map.143
144
## 11. Development workflow, quality and packaging145
146
Each feature starts on its own `feature/...` branch from current master. Implement its tests and acceptance criteria, run local checks, commit, then `git merge --no-ff` into master and push. No initial-phase MRs. Keep branch/feature and merge SHAs in the coordinator status file, report completion before the next feature. Setup/design may use `feature/project-design`; establish a baseline master commit first if required to obtain a genuine two-parent merge. Never fabricate a merge on an unborn branch.147
148
CI filename requested: `blue-ci-cd.yml`. **Unverified infrastructure detail:** do not invent BlueGit YAML syntax. Inspect documented BlueGit runner schema and narrow existing `timfa/posprint` and `legacy-cycles` pipeline/release examples before writing configuration. Respect runner/image selection, artifact retention and release API semantics. No GitLab mirror is requested for this new project.149
150
Tests run on MR events (future-proof despite no current MRs), master pushes AND tags. Quality gates: `cargo fmt --check`, `cargo check --workspace --all-targets --locked`, `cargo clippy --workspace --all-targets --locked -- -D warnings`, `cargo test --workspace --locked`; feature combinations should be covered explicitly when introduced. Pin toolchain/components and package tooling. Core tests require no GPU; separate GPU integration tests may use a supported software adapter, with explicit results rather than silent skip-as-pass.151
152
Tag pipeline graph: quality/tests → four packaging jobs → artifact verification → one release publish. A failure of ANY required artifact prevents release. Build Linux x86_64 AppImage, Debian/Ubuntu .deb, Arch .pkg.tar.zst and Windows x86_64 .exe in a .zip. Verify target architecture and contents; packaging a Linux binary into a Windows archive is not a build. Prefer native Windows runner when available, or verified mingw target/toolchain with dependency support. AppImage and distribution packages need desktop integration/icon/license, runtime library audit and version mapping from tag to package version. Include checksums and build provenance; signing is optional future work, never invent signatures.153
154
Release publication uses documented BlueGit release/artifact API and job-scoped least-privilege credentials; no tokens in source/logs/status. All assets attach only after all outputs pass verification, retries are idempotent and do not delete unrelated releases. Distinguish local packaging smoke tests from a real successful tag/release pipeline. **No tag or release is authorized during setup.** A configured future tag trigger is not permission to create a tag now.155
156
Verified BlueGit behaviour, inspected 6 November 2026, is recorded in section 15. The configured tag pipeline calls that API. With the API as it exists today, publishing the same tag that started the pipeline is rejected. That limit is part of the design record, not a claim that a release was created.157
158
## 12. Incremental feature plan and acceptance gates159
160
0. Foundation/design/CI: group and repo existence checks; private repo; single detailed design.md with verbatim appendix; minimal honest compileable Rust shell; locked dependencies/toolchain; genuine two-parent setup merge; tests and verified CI schema. No claim that rendering/import works. Test packaging scripts locally where possible without publishing.161
1. Project model and validation: .ppd open/save/new, portable paths, schema/version checks, model slots and render settings; atomic persistence/invalid paths tests.162
2. Normalized import and animation inventory: glTF/GLB fixtures first, required OBJ+MTL/textures and FBX adapter proof; format-specific truthful UI/errors and skeleton/clip inventories; integration fixture tests before declaring format support.163
3. Desktop 3D viewport and animation sampling: visible real imported model, orbit, clip controls, source-axis normalization; transform tests and manual visual test.164
4. Equipment attachments and binary presets: bone tree, sex choice, numeric offsets/rotations, live placement, embedded multi-mesh assets; round-trip and rig mismatch tests.165
5. Shared batch camera/sampling and raw buffers: 36 views, common framing, 8x geometry output/readback, diffuse/depth/normal alignment; orientation/occlusion fixture before aesthetic postprocessing.166
6. Production image pipeline: detail-aware downsampling, depth/normal resolve, rim accents, shiny conversion, filename/manifest export, progress/cancel/resume; compare actual output and memory budgets.167
7. Rendered 2D compositor preview: real exported frames, depth ordering, looping, sex/equipment/clip selection, discrete view controls and continuous held light controls; deterministic state tests and manual lighting test.168
8. Packaging/hardening: verify all platform packages and install/run behavior, imports with native dependencies, accessibility and failure recovery; actual releases only on later explicit tag authorization.169
170
Every feature is independently reported and merged non-FF only when its acceptance gate passes. If compatibility or rendering remains untested, name that limitation and do not merge a false completion claim.171
172
## 13. Open decisions and risks173
174
- Confirm target resolution/FPS defaults, output color treatment, root-motion policy, front-axis and positive-yaw convention with a labelled fixture before production content.175
- FBX exporter variants/native Assimp packaging and skeletal animation fidelity are high-risk; prototype early rather than after UI completion.176
- Eightfold dimensions impose 64x pixels; support tiling or reject unsupported render sizes with estimates, not GPU crashes.177
- Shared framing/depth/normal contracts are essential; independently normalized equipment maps cannot be depth-composited correctly.178
- Alpha-blended materials cannot be fully represented by one surface depth; document cutout/opaque MVP and approximation.179
- Bone attachment supports rigid equipment, not automatic skinning/retargeting; expose that limit.180
- glTF PBR/FBX legacy materials to a single shinymap is lossy; retain source metadata and editable conversion settings.181
- Package version mapping, Windows runner/toolchain and BlueGit group runner availability must be verified, not assumed.182
- Keep model provenance/licensing with embedded presets; importing assets does not grant redistribution rights.183
184
## 14. Research references and verification limits185
186
- Bevy project and documentation: https://bevy.org/ (preferred-stack proposal; exact dependency versions and API compatibility still require implementation verification).187
- Assimp repository: https://github.com/assimp/assimp (candidate broad-format import dependency, not universal file compatibility guarantee).188
- Rust Assimp binding docs inspected: https://docs.rs/russimp/latest/russimp/ (reported russimp 3.2.1 at inspection; no build/compatibility test performed).189
- glTF specification reference: https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html (canonical interchange recommendation; implementation must test supported subsets).190
- BlueGit CI specification: `GET https://git.timfalken.com/api/v1/ci/spec` and `docs/CI.md` in `timfa/bluegit` (file name `blue-ci-cd.yml`, job fields, variables, release API).191
- Working pipelines read in public repositories: `timfa/posprint` `blue-ci-cd.yml` and `scripts/ci/release.sh`; `timfa/minecart-trains` `blue-ci-cd.yml`; `timfa/click-tween` `blue-ci-cd.yml` and `scripts/release.sh`.192
- Release implementation read in `timfa/bluegit` `internal/server/ops_ci.go` (`opPublishRelease`) and `internal/server/release_replace.go` (`checkReplace`).193
194
## 15. Verified BlueGit CI and the release-trigger limit195
196
Inspected sources, all public on 6 November 2026:197
198
| Source | What it shows |199
|---|---|200
| `GET /api/v1/ci/spec` and `timfa/bluegit` `docs/CI.md` | The pipeline file is `blue-ci-cd.yml`. Jobs may be top-level. `rules` / `only` / `needs` / `artifacts.paths` / `artifacts.expire_in` / `extends` / `resource_group` / `workflow` are real fields. `CI_COMMIT_TAG` is empty on a branch and `CI_COMMIT_BRANCH` is empty on a tag. `CI_JOB_TOKEN` exists only inside a job container. Image presets include `bluegit/base` and `bluegit/rust` (Rust 1.81). Any other image name, such as `rust:1.83-bookworm`, is a normal Docker image. |201
| `timfa/posprint` `blue-ci-cd.yml` | Tests on merge requests and on `master`. Package jobs use `needs: [test]`. Artifacts are exact file paths, not globs. The release job runs on `master` and calls `POST $CI_API_URL/repos/$CI_PROJECT_PATH/releases` with `Authorization: Bearer $CI_JOB_TOKEN`. Tag pushes are disabled with `if: $CI_COMMIT_TAG != ""` / `when: never`. The comment in that file says tag pipelines must not rebuild old tags. Windows is cross-compiled with MinGW because that comment states there is no Windows runner. |202
| `timfa/posprint` `scripts/ci/release.sh` | The script says the release API creates the tag itself. It refuses to release when `HEAD` is already tagged. |203
| `timfa/minecart-trains` `blue-ci-cd.yml` | States the GitLab project used to release on a new tag, and that on BlueGit the release API creates the tag, so tag pushes start no pipeline. |204
| `timfa/click-tween` `blue-ci-cd.yml` | A tag pipeline may build and verify. The job that publishes the release is manual on `master` and creates the tag through the API. |205
| `timfa/bluegit` `opPublishRelease` | If the tag already exists and `replace` is not set, the API returns HTTP 409 (`err.tagExists`). `replace: true` is checked by `checkReplace`, which rejects a tag pipeline (`err.replaceRef`, HTTP 403). A tag pipeline therefore cannot attach assets to the tag that started it, and cannot replace that release either. |206
| `timfa/legacy-cycles` | The project page redirects to releases and says only the releases are public. `GET /api/v1/projects/timfa/legacy-cycles/repository/tree` and the CI file returned 404. The public release assets for v0.0.38 are a Debian package, an Arch `.pkg.tar.zst`, a Windows zip, and Linux tar archives. No AppImage is listed. Its pipeline YAML was not available to copy. |207
208
Consequences for `blue-ci-cd.yml` in this repository:209
210
1. Syntax is limited to fields confirmed in the CI spec or in the pipelines above. No GitLab-only keyword is added (`pages`, `spec`, child pipelines, `id_tokens`).211
2. Tests run for merge-request pipelines, for pushes to `master`, for pushes to `main`, for `CI_DEFAULT_BRANCH`, and for tags. This workspace's default branch is `main`. Tim's existing BlueGit projects use `master`. Covering both avoids a silent skip after the project moves.212
3. On a tag push the four package jobs run only after `test`, then `verify:packages` checks magic bytes so a Linux executable is not renamed into the Windows zip. `release` needs `verify:packages`, so any failed package skips publication.213
4. `release` calls the documented POST. The body uses `CI_COMMIT_TAG` and `CI_COMMIT_SHA`, and points each asset at the successful job and exact artifact path. **With today's API that POST returns 409**, because the tag already exists, and `replace: true` is forbidden on a tag pipeline. The job is still the requested publish step; it is not described here as a release that already succeeded. No tag is created by this setup commit.214
5. Package scripts map a tag `vX.Y.Z` or `X.Y.Z` to package version `X.Y.Z`. Other tag spellings fail the package job instead of inventing a version.215
6. The Rust image is `rust:1.96-bookworm`. That tag is the one `timfa/posprint` already runs on BlueGit. `rust-toolchain.toml` pins the same compiler, 1.96.0, which was installed here with rustup. The machine default before that pin was 1.83.0. 1.83.0 cannot resolve the current eframe 0.29.1 graph: several transitive crates require edition 2024, which Cargo 1.83 does not parse. `bluegit/rust` is Rust 1.81 on Alpine and is the wrong image for this X11 shell. `bluegit/base` is used for the verify and release jobs, as in posprint.216
7. posprint states BlueGit does not set `CI_PROJECT_DIR` and that jobs start in the checkout. Scripts use `$PWD`.217
218
The toolchain is Rust 1.96.0, edition 2021. Edition 2021 remains explicit; the crate does not opt into edition 2024. `Cargo.lock` is committed. `cargo fmt`, `cargo check`, `cargo clippy -D warnings` and `cargo test` are the test job. No GPU test is required for the foundation shell.219
220
# Appendix A — Tim's original proposal (verbatim)221
222
The following block preserves the original Dutch text including spelling and filename placeholders. It is not a paraphrase or implementation status.223
224
```text225
Ik heb een idee voor een projectje;226
Een Paperdoll Renderer.227
228
Het idee;229
We importeren twee menselijke 3D-modellen; een man en een vrouw. Die hebben een set animaties, zoals lopen, springen, bukken, aanvallen, blokkeren, geraakt worden, etc. (we lezen gewoon alles uit het model)230
231
Bij renderen hebben we twee modussen: Karaktermodel, en uitrusting (hier later meer over). Als je rendert, dan hebben we 3*12 posities; 3 pitches (-30 graden, 0 graden, +30 graden), en 12 yaw (beginnend met recht naar de camera kijken en dan steeds een stapje ronddraaien tot we alle hoeken hebben). We renderen die naar PNG's met de naam: <geslacht>-<settype>-<animatienaam>-<pitch>-<yaw>-<maptype>-f<framenummer>.png met een vooringestelde (hoge, acht keer de doelresolutie) resolutie en framerate.232
We pakken dan die hoge resolutie, en maken een detail-map; dat is effectief een edge-detection algoritme. We schalen de paperdoll dan omlaag naar de doelresolutie, en we gebruiken de detail-map om pixels extra gewicht te geven om te kiezen welke kleur we een pixel geven.233
Daarna maken we een depth-map op de doelresolutie, en een normal map. (de maptypes in de filename zijn dus: diffuse, depth, normal)234
Als we de normalmap en depthmap hebben, doen we nog een pass over de diffuse om randen een beetje te highlighten. Daarna slaan we de hele set op volgens het afgesproken naamformat (allemaal op de doelresolutie). Dit is is settype=body.235
236
Daarna hebben we ook equipment. Je kiest een geslacht, en je moet per lichaamsdeel (op de skeleton van het karaktermodel) een 3D-model kunnen importeren, en op de bone kunnen positioneren. Als je alle modellen van een stuk equipment op de juiste positie gezet hebt, kun je dat opslaan als een preset (binary file met de modellen en posities op bones, alsmede een flag voor of het male of female is). Je kunt hem ook renderen; dan kies je een naam voor je equipment. Die naam is de settype; allemaal lowercase, geen spaties toegestaan. Dit rendert dan nogmaals alles, net als bij de body, alleen is de body dan doorzichtig, waardoor je alleen de equipment-modellen tekent. Equipment heeft ook een shinymap; dat is hoeveel specular een pixel moet hebben voor later bij de renderer. 237
238
De bedoeling is dat we die paperdolls later kunnen gebruiken om een renderer te schrijven. Die gebruikt de diffuse maps en laagt met equipments over elkaar; het gebruikt de depth-map om te bepalen welke pixel van welke map (body of equipment) getekent moet worden (soort z-check), en de normal map om bumpmapping en lighting te tekenen. Dat wordt dan deel van een character-renderer en controller.239
240
Als stap 1 wil ik graag de paperdoll renderer maken. Ik heb nog geen modellen, die moet ik dus later zelf in het programma kunnen selecteren. Voor positioneren op bones zijn XYZ voor relatieve positie en rotatie voldoende voor nu, met dan een live preview waarop je het lichaam ziet, die je kunt roteren (3D model view, niet de gerenderde plaatjes want die zijn er dan nog niet).241
242
Wanneer je sets maakt, is dat in een .ppd (PaPerDoll) project; een map met een .ppd file die verteld welke modellen gebruikt worden, welke binary files van equipment sets er zijn, en waar gerenderde output staat.243
Zo kunnen we ook een preview tab maken; kies een geslacht, kies equipments om te layeren, en kies een animatie. Je ziet dan de animatie op loop spelen (de gerenderde 2D paperdolls), en kunt met pijltjes orbiten (boven, midden, onder, en dan voor links en rechts de 12 rotaties). Ook moet je met knopjes die je ingedrukt kan houden de positie van de lichtbron kunnen roteren. Dat gaat in graden, niet in stappen.244
245
Stappenplan:246
247
- Maak een groep op BlueGit: `Golden Age`248
- Maak de repo, Paperdoll Renderer249
250
- Documenteer alle bovenstaande, incl. letterlijke tekst van mij, zeer gedetailleerd in een enkele design.md251
- Bouw dan alle features een voor een in Rust. Elke feature op een nieuwe branch, en als die feature af is, niet-FF mergen naar master (Geen MR's tijdens eerste ontwikkelfase) en door naar de volgende feature. Elke feature krijgt een unit test die we in de CI-CD activeren op een merge request (ook al gebruiken we die nog niet) en op een master push. Een tag push krijgt, als tests slagen, ook een build; AppImage, Ubuntu Package, Arch Package, Windows Build, welke we dan als een release pushen.252
253
Houd me bij elke feature op de hoogte hoe het gaat.254
```255
256
# Appendix B — Additional import requirement (verbatim)257
258
```text259
Bepaal ook welk 3D-model format goed is; liefst ondersteunen we natuurlijk meerdere. In ieder geval .obj (met mtl en texture) en .fbx, maar hoe meer hoe beter.260
```@@ -0,0 +1,32 @@
1
# Packages the foundation shell from the git checkout that invoked makepkg.
2
# PAPERDOLL_PKGVER and REPO_ROOT are set by scripts/package/arch.sh.
3
pkgname=paperdoll-renderer
4
pkgver=0.1.0
5
pkgrel=1
6
pkgdesc='Foundation shell for the Paperdoll Renderer. Import and render are not included.'
7
arch=('x86_64')
8
url='https://git.timfalken.com/golden-age/paperdoll-renderer'
9
license=('MIT')
10
depends=('gcc-libs' 'glibc' 'libxcb' 'libx11' 'libxkbcommon' 'libglvnd')
11
makedepends=('cargo' 'pkgconf')
12
options=('!debug' '!lto')
13
14
pkgver() {
15
printf '%s\n' "${PAPERDOLL_PKGVER:?set PAPERDOLL_PKGVER}"
16
}
17
18
build() {
19
: "${REPO_ROOT:?set REPO_ROOT to the repository root}"
20
export CARGO_HOME="${CARGO_HOME:-$REPO_ROOT/cargo-home}"
21
cargo build --release --locked --manifest-path "$REPO_ROOT/Cargo.toml" --target-dir "$REPO_ROOT/target"
22
}
23
24
package() {
25
: "${REPO_ROOT:?set REPO_ROOT to the repository root}"
26
install -Dm755 "$REPO_ROOT/target/release/paperdoll-renderer" "$pkgdir/usr/bin/paperdoll-renderer"
27
install -Dm644 "$REPO_ROOT/packaging/linux/paperdoll-renderer.desktop" \
28
"$pkgdir/usr/share/applications/paperdoll-renderer.desktop"
29
install -Dm644 "$REPO_ROOT/packaging/linux/icon-64.png" \
30
"$pkgdir/usr/share/icons/hicolor/64x64/apps/paperdoll-renderer.png"
31
install -Dm644 "$REPO_ROOT/LICENSE" "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
32
}
@@ -0,0 +1,32 @@1
# Packages the foundation shell from the git checkout that invoked makepkg.2
# PAPERDOLL_PKGVER and REPO_ROOT are set by scripts/package/arch.sh.3
pkgname=paperdoll-renderer4
pkgver=0.1.05
pkgrel=16
pkgdesc='Foundation shell for the Paperdoll Renderer. Import and render are not included.'7
arch=('x86_64')8
url='https://git.timfalken.com/golden-age/paperdoll-renderer'9
license=('MIT')10
depends=('gcc-libs' 'glibc' 'libxcb' 'libx11' 'libxkbcommon' 'libglvnd')11
makedepends=('cargo' 'pkgconf')12
options=('!debug' '!lto')13
14
pkgver() {15
printf '%s\n' "${PAPERDOLL_PKGVER:?set PAPERDOLL_PKGVER}"16
}17
18
build() {19
: "${REPO_ROOT:?set REPO_ROOT to the repository root}"20
export CARGO_HOME="${CARGO_HOME:-$REPO_ROOT/cargo-home}"21
cargo build --release --locked --manifest-path "$REPO_ROOT/Cargo.toml" --target-dir "$REPO_ROOT/target"22
}23
24
package() {25
: "${REPO_ROOT:?set REPO_ROOT to the repository root}"26
install -Dm755 "$REPO_ROOT/target/release/paperdoll-renderer" "$pkgdir/usr/bin/paperdoll-renderer"27
install -Dm644 "$REPO_ROOT/packaging/linux/paperdoll-renderer.desktop" \28
"$pkgdir/usr/share/applications/paperdoll-renderer.desktop"29
install -Dm644 "$REPO_ROOT/packaging/linux/icon-64.png" \30
"$pkgdir/usr/share/icons/hicolor/64x64/apps/paperdoll-renderer.png"31
install -Dm644 "$REPO_ROOT/LICENSE" "$pkgdir/usr/share/licenses/$pkgname/LICENSE"32
}The contents of this binary file are not shown.
@@ -0,0 +1,10 @@
1
[Desktop Entry]
2
Type=Application
3
Name=Paperdoll Renderer
4
GenericName=Paperdoll foundation shell
5
Comment=Statusvenster van de Paperdoll Renderer-projectbasis. Import en render zijn niet gebouwd.
6
Exec=paperdoll-renderer
7
Icon=paperdoll-renderer
8
Terminal=false
9
Categories=Graphics;
10
StartupNotify=true
@@ -0,0 +1,10 @@1
[Desktop Entry]2
Type=Application3
Name=Paperdoll Renderer4
GenericName=Paperdoll foundation shell5
Comment=Statusvenster van de Paperdoll Renderer-projectbasis. Import en render zijn niet gebouwd.6
Exec=paperdoll-renderer7
Icon=paperdoll-renderer8
Terminal=false9
Categories=Graphics;10
StartupNotify=true@@ -0,0 +1,4 @@
1
[toolchain]
2
channel = "1.96.0"
3
components = ["clippy", "rustfmt"]
4
profile = "minimal"
@@ -0,0 +1,4 @@1
[toolchain]2
channel = "1.96.0"3
components = ["clippy", "rustfmt"]4
profile = "minimal"@@ -0,0 +1,21 @@
1
#!/usr/bin/env bash
2
# Map a git tag or the Cargo.toml version to a package version X.Y.Z.
3
# Tags may be vX.Y.Z or X.Y.Z. Other spellings fail instead of being rewritten.
4
set -euo pipefail
5
6
root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
7
8
if [[ -n "${PACKAGE_VERSION:-}" ]]; then
9
version="$PACKAGE_VERSION"
10
elif [[ -n "${CI_COMMIT_TAG:-}" ]]; then
11
version="${CI_COMMIT_TAG#v}"
12
else
13
version="$(sed -n 's/^version = "\([^"]*\)"/\1/p' "$root/Cargo.toml" | head -n 1)"
14
fi
15
16
if [[ ! "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
17
echo "package version must be X.Y.Z (tag vX.Y.Z or X.Y.Z); got '${CI_COMMIT_TAG:-$version}'" >&2
18
exit 1
19
fi
20
21
printf '%s\n' "$version"
@@ -0,0 +1,21 @@1
#!/usr/bin/env bash2
# Map a git tag or the Cargo.toml version to a package version X.Y.Z.3
# Tags may be vX.Y.Z or X.Y.Z. Other spellings fail instead of being rewritten.4
set -euo pipefail5
6
root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"7
8
if [[ -n "${PACKAGE_VERSION:-}" ]]; then9
version="$PACKAGE_VERSION"10
elif [[ -n "${CI_COMMIT_TAG:-}" ]]; then11
version="${CI_COMMIT_TAG#v}"12
else13
version="$(sed -n 's/^version = "\([^"]*\)"/\1/p' "$root/Cargo.toml" | head -n 1)"14
fi15
16
if [[ ! "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then17
echo "package version must be X.Y.Z (tag vX.Y.Z or X.Y.Z); got '${CI_COMMIT_TAG:-$version}'" >&218
exit 119
fi20
21
printf '%s\n' "$version"@@ -0,0 +1,55 @@
1
#!/usr/bin/env bash
2
# Publish a BlueGit release for the tag that started this pipeline.
3
#
4
# Syntax checked against docs/CI.md and timfa/posprint scripts/ci/release.sh:
5
# POST "$CI_API_URL/repos/$CI_PROJECT_PATH/releases"
6
# Authorization: Bearer $CI_JOB_TOKEN
7
# assets: {job, path, name} where path is an artifact of a successful job
8
# in this pipeline.
9
#
10
# Verified limit (timfa/bluegit internal/server/ops_ci.go opPublishRelease and
11
# release_replace.go checkReplace): if the tag already exists the API returns
12
# HTTP 409 unless replace=true, and replace=true is rejected with HTTP 403 on
13
# a tag pipeline. A pipeline started by pushing the tag therefore cannot
14
# attach these artifacts to that same tag. The script still performs the
15
# documented call and fails when the response is not 2xx. It does not send
16
# replace=true, and it does not invent a second tag.
17
set -euo pipefail
18
19
: "${CI_API_URL:?}" "${CI_JOB_TOKEN:?}" "${CI_COMMIT_SHA:?}" "${CI_PROJECT_PATH:?}" "${CI_COMMIT_TAG:?}"
20
21
root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
22
cd "$root"
23
version="$(bash scripts/ci/package-version.sh)"
24
25
echo "BlueGit release API creates the git tag." >&2
26
echo "This pipeline already runs on tag ${CI_COMMIT_TAG}, so today's API returns 409 (tag exists)." >&2
27
echo "replace=true is refused on a tag pipeline (403). No second tag is created." >&2
28
29
asset() {
30
printf '{"job":"%s","path":"%s","name":"%s"}' "$1" "$2" "$3"
31
}
32
33
assets="$(asset package:appimage dist/paperdoll-renderer-x86_64.AppImage "paperdoll-renderer-${version}-x86_64.AppImage")"
34
assets="${assets},$(asset package:ubuntu dist/paperdoll-renderer_amd64.deb "paperdoll-renderer_${version}_amd64.deb")"
35
assets="${assets},$(asset package:arch dist/paperdoll-renderer-x86_64.pkg.tar.zst "paperdoll-renderer-${version}-1-x86_64.pkg.tar.zst")"
36
assets="${assets},$(asset package:windows dist/paperdoll-renderer-windows-x86_64.zip "paperdoll-renderer-${version}-windows-x86_64.zip")"
37
assets="${assets},$(asset verify:packages dist/SHA256SUMS "paperdoll-renderer-${version}-SHA256SUMS")"
38
39
body="Paperdoll Renderer ${version}.\\n\\nFoundation shell only. Import, skeletal animation, paperdoll rendering and the 2D preview are not in this build.\\n\\n* Linux AppImage: paperdoll-renderer-${version}-x86_64.AppImage\\n* Debian/Ubuntu: paperdoll-renderer_${version}_amd64.deb\\n* Arch: paperdoll-renderer-${version}-1-x86_64.pkg.tar.zst\\n* Windows zip: paperdoll-renderer-${version}-windows-x86_64.zip\\n* SHA256SUMS"
40
41
payload="$(printf '{"tag":"%s","commit":"%s","name":"Paperdoll Renderer %s","body":"%s","assets":[%s]}' \
42
"$CI_COMMIT_TAG" "$CI_COMMIT_SHA" "$version" "$body" "$assets")"
43
44
response="$(mktemp)"
45
code="$(curl -sS -o "$response" -w '%{http_code}' -X POST "$CI_API_URL/repos/$CI_PROJECT_PATH/releases" \
46
-H "Authorization: Bearer $CI_JOB_TOKEN" \
47
-H "Content-Type: application/json" \
48
-d "$payload")" || code=000
49
cat "$response"
50
echo
51
if [[ "$code" != 2* ]]; then
52
echo "Release API returned HTTP ${code}. A 409 on this tag pipeline matches the verified BlueGit limit and is not a published release." >&2
53
exit 1
54
fi
55
echo "release published for ${CI_COMMIT_TAG}"
@@ -0,0 +1,55 @@1
#!/usr/bin/env bash2
# Publish a BlueGit release for the tag that started this pipeline.3
#4
# Syntax checked against docs/CI.md and timfa/posprint scripts/ci/release.sh:5
# POST "$CI_API_URL/repos/$CI_PROJECT_PATH/releases"6
# Authorization: Bearer $CI_JOB_TOKEN7
# assets: {job, path, name} where path is an artifact of a successful job8
# in this pipeline.9
#10
# Verified limit (timfa/bluegit internal/server/ops_ci.go opPublishRelease and11
# release_replace.go checkReplace): if the tag already exists the API returns12
# HTTP 409 unless replace=true, and replace=true is rejected with HTTP 403 on13
# a tag pipeline. A pipeline started by pushing the tag therefore cannot14
# attach these artifacts to that same tag. The script still performs the15
# documented call and fails when the response is not 2xx. It does not send16
# replace=true, and it does not invent a second tag.17
set -euo pipefail18
19
: "${CI_API_URL:?}" "${CI_JOB_TOKEN:?}" "${CI_COMMIT_SHA:?}" "${CI_PROJECT_PATH:?}" "${CI_COMMIT_TAG:?}"20
21
root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"22
cd "$root"23
version="$(bash scripts/ci/package-version.sh)"24
25
echo "BlueGit release API creates the git tag." >&226
echo "This pipeline already runs on tag ${CI_COMMIT_TAG}, so today's API returns 409 (tag exists)." >&227
echo "replace=true is refused on a tag pipeline (403). No second tag is created." >&228
29
asset() {30
printf '{"job":"%s","path":"%s","name":"%s"}' "$1" "$2" "$3"31
}32
33
assets="$(asset package:appimage dist/paperdoll-renderer-x86_64.AppImage "paperdoll-renderer-${version}-x86_64.AppImage")"34
assets="${assets},$(asset package:ubuntu dist/paperdoll-renderer_amd64.deb "paperdoll-renderer_${version}_amd64.deb")"35
assets="${assets},$(asset package:arch dist/paperdoll-renderer-x86_64.pkg.tar.zst "paperdoll-renderer-${version}-1-x86_64.pkg.tar.zst")"36
assets="${assets},$(asset package:windows dist/paperdoll-renderer-windows-x86_64.zip "paperdoll-renderer-${version}-windows-x86_64.zip")"37
assets="${assets},$(asset verify:packages dist/SHA256SUMS "paperdoll-renderer-${version}-SHA256SUMS")"38
39
body="Paperdoll Renderer ${version}.\\n\\nFoundation shell only. Import, skeletal animation, paperdoll rendering and the 2D preview are not in this build.\\n\\n* Linux AppImage: paperdoll-renderer-${version}-x86_64.AppImage\\n* Debian/Ubuntu: paperdoll-renderer_${version}_amd64.deb\\n* Arch: paperdoll-renderer-${version}-1-x86_64.pkg.tar.zst\\n* Windows zip: paperdoll-renderer-${version}-windows-x86_64.zip\\n* SHA256SUMS"40
41
payload="$(printf '{"tag":"%s","commit":"%s","name":"Paperdoll Renderer %s","body":"%s","assets":[%s]}' \42
"$CI_COMMIT_TAG" "$CI_COMMIT_SHA" "$version" "$body" "$assets")"43
44
response="$(mktemp)"45
code="$(curl -sS -o "$response" -w '%{http_code}' -X POST "$CI_API_URL/repos/$CI_PROJECT_PATH/releases" \46
-H "Authorization: Bearer $CI_JOB_TOKEN" \47
-H "Content-Type: application/json" \48
-d "$payload")" || code=00049
cat "$response"50
echo51
if [[ "$code" != 2* ]]; then52
echo "Release API returned HTTP ${code}. A 409 on this tag pipeline matches the verified BlueGit limit and is not a published release." >&253
exit 154
fi55
echo "release published for ${CI_COMMIT_TAG}"@@ -0,0 +1,70 @@
1
#!/usr/bin/env bash
2
# Reject a package that is the wrong kind of file. A Linux executable copied
3
# into the Windows archive must not pass.
4
set -euo pipefail
5
6
root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
7
cd "$root"
8
mkdir -p dist
9
10
appimage="dist/paperdoll-renderer-x86_64.AppImage"
11
deb="dist/paperdoll-renderer_amd64.deb"
12
arch="dist/paperdoll-renderer-x86_64.pkg.tar.zst"
13
windows="dist/paperdoll-renderer-windows-x86_64.zip"
14
15
require_file() {
16
local path="$1"
17
if [[ ! -s "$path" ]]; then
18
echo "missing or empty artifact: $path" >&2
19
exit 1
20
fi
21
}
22
23
magic_prefix() {
24
# Print the first bytes as hex, without spaces.
25
od -An -tx1 -N "$2" "$1" | tr -d ' \n'
26
}
27
28
require_file "$appimage"
29
require_file "$deb"
30
require_file "$arch"
31
require_file "$windows"
32
33
# AppImage 1.9 type 2 images are ELF binaries and contain the AppImage marker.
34
if [[ "$(magic_prefix "$appimage" 4)" != "7f454c46" ]]; then
35
echo "AppImage is not an ELF" >&2
36
exit 1
37
fi
38
if ! grep -a -q "AppImage" "$appimage"; then
39
echo "AppImage marker missing" >&2
40
exit 1
41
fi
42
43
# Debian packages are ar archives.
44
if [[ "$(magic_prefix "$deb" 8)" != "213c617263683e0a" ]]; then
45
echo "deb is not an ar archive" >&2
46
exit 1
47
fi
48
49
# zstd frame magic.
50
if [[ "$(magic_prefix "$arch" 4)" != "28b52ffd" ]]; then
51
echo "Arch package is not zstd" >&2
52
exit 1
53
fi
54
55
# Zip local-file header, a PE executable name, and no ELF header at the start.
56
if [[ "$(magic_prefix "$windows" 4)" != "504b0304" ]]; then
57
echo "Windows artifact is not a zip" >&2
58
exit 1
59
fi
60
if ! grep -a -q "paperdoll-renderer.exe" "$windows"; then
61
echo "Windows zip does not name paperdoll-renderer.exe" >&2
62
exit 1
63
fi
64
if [[ "$(magic_prefix "$windows" 4)" == "7f454c46" ]]; then
65
echo "Windows zip starts with an ELF header" >&2
66
exit 1
67
fi
68
69
sha256sum "$appimage" "$deb" "$arch" "$windows" | tee dist/SHA256SUMS
70
echo "package artifacts verified"
@@ -0,0 +1,70 @@1
#!/usr/bin/env bash2
# Reject a package that is the wrong kind of file. A Linux executable copied3
# into the Windows archive must not pass.4
set -euo pipefail5
6
root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"7
cd "$root"8
mkdir -p dist9
10
appimage="dist/paperdoll-renderer-x86_64.AppImage"11
deb="dist/paperdoll-renderer_amd64.deb"12
arch="dist/paperdoll-renderer-x86_64.pkg.tar.zst"13
windows="dist/paperdoll-renderer-windows-x86_64.zip"14
15
require_file() {16
local path="$1"17
if [[ ! -s "$path" ]]; then18
echo "missing or empty artifact: $path" >&219
exit 120
fi21
}22
23
magic_prefix() {24
# Print the first bytes as hex, without spaces.25
od -An -tx1 -N "$2" "$1" | tr -d ' \n'26
}27
28
require_file "$appimage"29
require_file "$deb"30
require_file "$arch"31
require_file "$windows"32
33
# AppImage 1.9 type 2 images are ELF binaries and contain the AppImage marker.34
if [[ "$(magic_prefix "$appimage" 4)" != "7f454c46" ]]; then35
echo "AppImage is not an ELF" >&236
exit 137
fi38
if ! grep -a -q "AppImage" "$appimage"; then39
echo "AppImage marker missing" >&240
exit 141
fi42
43
# Debian packages are ar archives.44
if [[ "$(magic_prefix "$deb" 8)" != "213c617263683e0a" ]]; then45
echo "deb is not an ar archive" >&246
exit 147
fi48
49
# zstd frame magic.50
if [[ "$(magic_prefix "$arch" 4)" != "28b52ffd" ]]; then51
echo "Arch package is not zstd" >&252
exit 153
fi54
55
# Zip local-file header, a PE executable name, and no ELF header at the start.56
if [[ "$(magic_prefix "$windows" 4)" != "504b0304" ]]; then57
echo "Windows artifact is not a zip" >&258
exit 159
fi60
if ! grep -a -q "paperdoll-renderer.exe" "$windows"; then61
echo "Windows zip does not name paperdoll-renderer.exe" >&262
exit 163
fi64
if [[ "$(magic_prefix "$windows" 4)" == "7f454c46" ]]; then65
echo "Windows zip starts with an ELF header" >&266
exit 167
fi68
69
sha256sum "$appimage" "$deb" "$arch" "$windows" | tee dist/SHA256SUMS70
echo "package artifacts verified"@@ -0,0 +1,49 @@
1
#!/usr/bin/env bash
2
# Build a Linux x86_64 AppImage of the foundation shell.
3
# appimagetool 1.9.1 is pinned. The checksum is of that GitHub release asset.
4
set -euo pipefail
5
6
root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
7
# shellcheck source=scripts/package/common.sh
8
source "$root/scripts/package/common.sh"
9
version="$(bash "$root/scripts/ci/package-version.sh")"
10
build_linux_release "$root"
11
12
tool_dir="${APPIMAGETOOL_DIR:-$root/dist/tools}"
13
tool="$tool_dir/appimagetool-x86_64.AppImage"
14
expected="ed4ce84f0d9caff66f50bcca6ff6f35aae54ce8135408b3fa33abfc3cb384eb0"
15
mkdir -p "$tool_dir"
16
if [[ ! -f "$tool" ]] || [[ "$(sha256sum "$tool" | awk '{print $1}')" != "$expected" ]]; then
17
curl -fL --retry 3 -o "$tool.partial" \
18
"https://github.com/AppImage/appimagetool/releases/download/1.9.1/appimagetool-x86_64.AppImage"
19
echo "${expected} ${tool}.partial" | sha256sum -c -
20
mv "$tool.partial" "$tool"
21
chmod +x "$tool"
22
fi
23
24
stage="$(mktemp -d)"
25
trap 'rm -rf "$stage"' EXIT
26
mkdir -p \
27
"$stage/usr/bin" \
28
"$stage/usr/share/applications" \
29
"$stage/usr/share/icons/hicolor/64x64/apps"
30
install -m 755 "$root/target/release/paperdoll-renderer" "$stage/usr/bin/paperdoll-renderer"
31
install -m 644 "$root/packaging/linux/paperdoll-renderer.desktop" "$stage/paperdoll-renderer.desktop"
32
install -m 644 "$root/packaging/linux/paperdoll-renderer.desktop" "$stage/usr/share/applications/paperdoll-renderer.desktop"
33
install -m 644 "$root/packaging/linux/icon-64.png" "$stage/paperdoll-renderer.png"
34
install -m 644 "$root/packaging/linux/icon-64.png" "$stage/usr/share/icons/hicolor/64x64/apps/paperdoll-renderer.png"
35
install -m 644 "$root/LICENSE" "$stage/LICENSE"
36
cat > "$stage/AppRun" << 'EOF'
37
#!/bin/sh
38
here="$(dirname "$(readlink -f "$0")")"
39
exec "$here/usr/bin/paperdoll-renderer" "$@"
40
EOF
41
chmod +x "$stage/AppRun"
42
43
mkdir -p "$root/dist"
44
export ARCH=x86_64
45
export APPIMAGE_EXTRACT_AND_RUN=1
46
"$tool" "$stage" "$root/dist/paperdoll-renderer-${version}-x86_64.AppImage"
47
cp -f "$root/dist/paperdoll-renderer-${version}-x86_64.AppImage" "$root/dist/paperdoll-renderer-x86_64.AppImage"
48
chmod +x "$root/dist/paperdoll-renderer-x86_64.AppImage"
49
echo "wrote dist/paperdoll-renderer-x86_64.AppImage"
@@ -0,0 +1,49 @@1
#!/usr/bin/env bash2
# Build a Linux x86_64 AppImage of the foundation shell.3
# appimagetool 1.9.1 is pinned. The checksum is of that GitHub release asset.4
set -euo pipefail5
6
root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"7
# shellcheck source=scripts/package/common.sh8
source "$root/scripts/package/common.sh"9
version="$(bash "$root/scripts/ci/package-version.sh")"10
build_linux_release "$root"11
12
tool_dir="${APPIMAGETOOL_DIR:-$root/dist/tools}"13
tool="$tool_dir/appimagetool-x86_64.AppImage"14
expected="ed4ce84f0d9caff66f50bcca6ff6f35aae54ce8135408b3fa33abfc3cb384eb0"15
mkdir -p "$tool_dir"16
if [[ ! -f "$tool" ]] || [[ "$(sha256sum "$tool" | awk '{print $1}')" != "$expected" ]]; then17
curl -fL --retry 3 -o "$tool.partial" \18
"https://github.com/AppImage/appimagetool/releases/download/1.9.1/appimagetool-x86_64.AppImage"19
echo "${expected} ${tool}.partial" | sha256sum -c -20
mv "$tool.partial" "$tool"21
chmod +x "$tool"22
fi23
24
stage="$(mktemp -d)"25
trap 'rm -rf "$stage"' EXIT26
mkdir -p \27
"$stage/usr/bin" \28
"$stage/usr/share/applications" \29
"$stage/usr/share/icons/hicolor/64x64/apps"30
install -m 755 "$root/target/release/paperdoll-renderer" "$stage/usr/bin/paperdoll-renderer"31
install -m 644 "$root/packaging/linux/paperdoll-renderer.desktop" "$stage/paperdoll-renderer.desktop"32
install -m 644 "$root/packaging/linux/paperdoll-renderer.desktop" "$stage/usr/share/applications/paperdoll-renderer.desktop"33
install -m 644 "$root/packaging/linux/icon-64.png" "$stage/paperdoll-renderer.png"34
install -m 644 "$root/packaging/linux/icon-64.png" "$stage/usr/share/icons/hicolor/64x64/apps/paperdoll-renderer.png"35
install -m 644 "$root/LICENSE" "$stage/LICENSE"36
cat > "$stage/AppRun" << 'EOF'37
#!/bin/sh38
here="$(dirname "$(readlink -f "$0")")"39
exec "$here/usr/bin/paperdoll-renderer" "$@"40
EOF41
chmod +x "$stage/AppRun"42
43
mkdir -p "$root/dist"44
export ARCH=x86_6445
export APPIMAGE_EXTRACT_AND_RUN=146
"$tool" "$stage" "$root/dist/paperdoll-renderer-${version}-x86_64.AppImage"47
cp -f "$root/dist/paperdoll-renderer-${version}-x86_64.AppImage" "$root/dist/paperdoll-renderer-x86_64.AppImage"48
chmod +x "$root/dist/paperdoll-renderer-x86_64.AppImage"49
echo "wrote dist/paperdoll-renderer-x86_64.AppImage"@@ -0,0 +1,42 @@
1
#!/usr/bin/env bash
2
# Build an Arch .pkg.tar.zst with makepkg. The package is not installed and
3
# it is not published.
4
set -euo pipefail
5
6
root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
7
if ! command -v makepkg >/dev/null 2>&1; then
8
echo "makepkg is not installed. The Arch package job runs on archlinux/archlinux:base-devel." >&2
9
exit 1
10
fi
11
12
version="$(bash "$root/scripts/ci/package-version.sh")"
13
export REPO_ROOT="$root"
14
export PAPERDOLL_PKGVER="$version"
15
export CARGO_HOME="${CARGO_HOME:-$root/cargo-home}"
16
17
work="$(mktemp -d)"
18
trap 'rm -rf "$work"' EXIT
19
cp "$root/packaging/arch/PKGBUILD" "$work/PKGBUILD"
20
21
run_makepkg() {
22
(cd "$work" && makepkg -f --noconfirm --nodeps)
23
}
24
25
if [[ "$(id -u)" -eq 0 ]]; then
26
if ! id builduser >/dev/null 2>&1; then
27
useradd -m builduser
28
fi
29
chown -R builduser:builduser "$root" "$work"
30
su builduser -c "export REPO_ROOT='$root' PAPERDOLL_PKGVER='$version' CARGO_HOME='$CARGO_HOME' PATH='$PATH'; cd '$work' && makepkg -f --noconfirm --nodeps"
31
else
32
run_makepkg
33
fi
34
35
mapfile -t packages < <(find "$work" -maxdepth 1 -type f -name "paperdoll-renderer-${version}-*-x86_64.pkg.tar.zst" ! -name '*.sig')
36
if [[ "${#packages[@]}" -ne 1 ]]; then
37
echo "expected one Arch package, found ${#packages[@]}" >&2
38
exit 1
39
fi
40
mkdir -p "$root/dist"
41
cp -f "${packages[0]}" "$root/dist/paperdoll-renderer-x86_64.pkg.tar.zst"
42
echo "wrote dist/paperdoll-renderer-x86_64.pkg.tar.zst"
@@ -0,0 +1,42 @@1
#!/usr/bin/env bash2
# Build an Arch .pkg.tar.zst with makepkg. The package is not installed and3
# it is not published.4
set -euo pipefail5
6
root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"7
if ! command -v makepkg >/dev/null 2>&1; then8
echo "makepkg is not installed. The Arch package job runs on archlinux/archlinux:base-devel." >&29
exit 110
fi11
12
version="$(bash "$root/scripts/ci/package-version.sh")"13
export REPO_ROOT="$root"14
export PAPERDOLL_PKGVER="$version"15
export CARGO_HOME="${CARGO_HOME:-$root/cargo-home}"16
17
work="$(mktemp -d)"18
trap 'rm -rf "$work"' EXIT19
cp "$root/packaging/arch/PKGBUILD" "$work/PKGBUILD"20
21
run_makepkg() {22
(cd "$work" && makepkg -f --noconfirm --nodeps)23
}24
25
if [[ "$(id -u)" -eq 0 ]]; then26
if ! id builduser >/dev/null 2>&1; then27
useradd -m builduser28
fi29
chown -R builduser:builduser "$root" "$work"30
su builduser -c "export REPO_ROOT='$root' PAPERDOLL_PKGVER='$version' CARGO_HOME='$CARGO_HOME' PATH='$PATH'; cd '$work' && makepkg -f --noconfirm --nodeps"31
else32
run_makepkg33
fi34
35
mapfile -t packages < <(find "$work" -maxdepth 1 -type f -name "paperdoll-renderer-${version}-*-x86_64.pkg.tar.zst" ! -name '*.sig')36
if [[ "${#packages[@]}" -ne 1 ]]; then37
echo "expected one Arch package, found ${#packages[@]}" >&238
exit 139
fi40
mkdir -p "$root/dist"41
cp -f "${packages[0]}" "$root/dist/paperdoll-renderer-x86_64.pkg.tar.zst"42
echo "wrote dist/paperdoll-renderer-x86_64.pkg.tar.zst"@@ -0,0 +1,9 @@
1
#!/usr/bin/env bash
2
set -euo pipefail
3
4
build_linux_release() {
5
local root="$1"
6
export CARGO_HOME="${CARGO_HOME:-$root/cargo-home}"
7
export PATH="$CARGO_HOME/bin:$PATH"
8
cargo build --release --locked --manifest-path "$root/Cargo.toml" --target-dir "$root/target"
9
}
@@ -0,0 +1,9 @@1
#!/usr/bin/env bash2
set -euo pipefail3
4
build_linux_release() {5
local root="$1"6
export CARGO_HOME="${CARGO_HOME:-$root/cargo-home}"7
export PATH="$CARGO_HOME/bin:$PATH"8
cargo build --release --locked --manifest-path "$root/Cargo.toml" --target-dir "$root/target"9
}@@ -0,0 +1,46 @@
1
#!/usr/bin/env bash
2
# Build a Debian/Ubuntu package of the foundation shell.
3
set -euo pipefail
4
5
root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
6
# shellcheck source=scripts/package/common.sh
7
source "$root/scripts/package/common.sh"
8
version="$(bash "$root/scripts/ci/package-version.sh")"
9
build_linux_release "$root"
10
11
stage="$(mktemp -d)"
12
trap 'rm -rf "$stage"' EXIT
13
mkdir -p \
14
"$stage/DEBIAN" \
15
"$stage/usr/bin" \
16
"$stage/usr/share/applications" \
17
"$stage/usr/share/icons/hicolor/64x64/apps" \
18
"$stage/usr/share/doc/paperdoll-renderer" \
19
"$stage/usr/share/licenses/paperdoll-renderer"
20
21
install -m 755 "$root/target/release/paperdoll-renderer" "$stage/usr/bin/paperdoll-renderer"
22
install -m 644 "$root/packaging/linux/paperdoll-renderer.desktop" "$stage/usr/share/applications/paperdoll-renderer.desktop"
23
install -m 644 "$root/packaging/linux/icon-64.png" "$stage/usr/share/icons/hicolor/64x64/apps/paperdoll-renderer.png"
24
install -m 644 "$root/LICENSE" "$stage/usr/share/licenses/paperdoll-renderer/LICENSE"
25
install -m 644 "$root/LICENSE" "$stage/usr/share/doc/paperdoll-renderer/copyright"
26
27
# Runtime libraries observed from ldd on the glibc build. Versions are the
28
# Debian sonames, not a claim that every Ubuntu release was installed here.
29
cat > "$stage/DEBIAN/control" << EOF
30
Package: paperdoll-renderer
31
Version: ${version}
32
Section: graphics
33
Priority: optional
34
Architecture: amd64
35
Maintainer: Tim Falken
36
Depends: libc6, libgcc-s1, libstdc++6, libxcb1, libx11-6, libxkbcommon0, libxkbcommon-x11-0, libgl1
37
Description: Paperdoll Renderer foundation shell
38
Status window for the Paperdoll Renderer project foundation.
39
Model import and paperdoll rendering are not included.
40
EOF
41
42
mkdir -p "$root/dist"
43
dpkg-deb --root-owner-group --build "$stage" "$root/dist/paperdoll-renderer_${version}_amd64.deb"
44
cp -f "$root/dist/paperdoll-renderer_${version}_amd64.deb" "$root/dist/paperdoll-renderer_amd64.deb"
45
dpkg-deb --info "$root/dist/paperdoll-renderer_amd64.deb"
46
echo "wrote dist/paperdoll-renderer_amd64.deb"
@@ -0,0 +1,46 @@1
#!/usr/bin/env bash2
# Build a Debian/Ubuntu package of the foundation shell.3
set -euo pipefail4
5
root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"6
# shellcheck source=scripts/package/common.sh7
source "$root/scripts/package/common.sh"8
version="$(bash "$root/scripts/ci/package-version.sh")"9
build_linux_release "$root"10
11
stage="$(mktemp -d)"12
trap 'rm -rf "$stage"' EXIT13
mkdir -p \14
"$stage/DEBIAN" \15
"$stage/usr/bin" \16
"$stage/usr/share/applications" \17
"$stage/usr/share/icons/hicolor/64x64/apps" \18
"$stage/usr/share/doc/paperdoll-renderer" \19
"$stage/usr/share/licenses/paperdoll-renderer"20
21
install -m 755 "$root/target/release/paperdoll-renderer" "$stage/usr/bin/paperdoll-renderer"22
install -m 644 "$root/packaging/linux/paperdoll-renderer.desktop" "$stage/usr/share/applications/paperdoll-renderer.desktop"23
install -m 644 "$root/packaging/linux/icon-64.png" "$stage/usr/share/icons/hicolor/64x64/apps/paperdoll-renderer.png"24
install -m 644 "$root/LICENSE" "$stage/usr/share/licenses/paperdoll-renderer/LICENSE"25
install -m 644 "$root/LICENSE" "$stage/usr/share/doc/paperdoll-renderer/copyright"26
27
# Runtime libraries observed from ldd on the glibc build. Versions are the28
# Debian sonames, not a claim that every Ubuntu release was installed here.29
cat > "$stage/DEBIAN/control" << EOF30
Package: paperdoll-renderer31
Version: ${version}32
Section: graphics33
Priority: optional34
Architecture: amd6435
Maintainer: Tim Falken36
Depends: libc6, libgcc-s1, libstdc++6, libxcb1, libx11-6, libxkbcommon0, libxkbcommon-x11-0, libgl137
Description: Paperdoll Renderer foundation shell38
Status window for the Paperdoll Renderer project foundation.39
Model import and paperdoll rendering are not included.40
EOF41
42
mkdir -p "$root/dist"43
dpkg-deb --root-owner-group --build "$stage" "$root/dist/paperdoll-renderer_${version}_amd64.deb"44
cp -f "$root/dist/paperdoll-renderer_${version}_amd64.deb" "$root/dist/paperdoll-renderer_amd64.deb"45
dpkg-deb --info "$root/dist/paperdoll-renderer_amd64.deb"46
echo "wrote dist/paperdoll-renderer_amd64.deb"@@ -0,0 +1,47 @@
1
#!/usr/bin/env bash
2
# Cross-compile the foundation shell for Windows x86_64 with MinGW.
3
# posprint uses this route and states that BlueGit has no Windows runner.
4
# This script packages the .exe in a zip. It does not run the Windows binary.
5
set -euo pipefail
6
7
root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
8
version="$(bash "$root/scripts/ci/package-version.sh")"
9
export CARGO_HOME="${CARGO_HOME:-$root/cargo-home}"
10
export PATH="$CARGO_HOME/bin:$PATH"
11
12
if ! command -v x86_64-w64-mingw32-gcc >/dev/null 2>&1; then
13
echo "x86_64-w64-mingw32-gcc is not installed" >&2
14
exit 1
15
fi
16
rustup target add x86_64-pc-windows-gnu
17
cargo build --release --locked --target x86_64-pc-windows-gnu --manifest-path "$root/Cargo.toml"
18
19
exe="$root/target/x86_64-pc-windows-gnu/release/paperdoll-renderer.exe"
20
if [[ ! -s "$exe" ]]; then
21
echo "Windows executable was not produced" >&2
22
exit 1
23
fi
24
# PE magic. Refuse to zip an ELF if the linker targeted the wrong OS.
25
if ! od -An -tx1 -N 2 "$exe" | grep -q "4d 5a"; then
26
echo "paperdoll-renderer.exe does not start with MZ" >&2
27
exit 1
28
fi
29
30
stage="$(mktemp -d)"
31
trap 'rm -rf "$stage"' EXIT
32
install -m 644 "$exe" "$stage/paperdoll-renderer.exe"
33
install -m 644 "$root/LICENSE" "$stage/LICENSE.txt"
34
printf '%s\n' "Paperdoll Renderer ${version}" "Foundation shell. Import and render are not included." \
35
> "$stage/README.txt"
36
37
mkdir -p "$root/dist"
38
rm -f "$root/dist/paperdoll-renderer-${version}-windows-x86_64.zip" \
39
"$root/dist/paperdoll-renderer-windows-x86_64.zip"
40
(
41
cd "$stage"
42
zip -r "$root/dist/paperdoll-renderer-${version}-windows-x86_64.zip" \
43
paperdoll-renderer.exe LICENSE.txt README.txt
44
)
45
cp -f "$root/dist/paperdoll-renderer-${version}-windows-x86_64.zip" \
46
"$root/dist/paperdoll-renderer-windows-x86_64.zip"
47
echo "wrote dist/paperdoll-renderer-windows-x86_64.zip"
@@ -0,0 +1,47 @@1
#!/usr/bin/env bash2
# Cross-compile the foundation shell for Windows x86_64 with MinGW.3
# posprint uses this route and states that BlueGit has no Windows runner.4
# This script packages the .exe in a zip. It does not run the Windows binary.5
set -euo pipefail6
7
root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"8
version="$(bash "$root/scripts/ci/package-version.sh")"9
export CARGO_HOME="${CARGO_HOME:-$root/cargo-home}"10
export PATH="$CARGO_HOME/bin:$PATH"11
12
if ! command -v x86_64-w64-mingw32-gcc >/dev/null 2>&1; then13
echo "x86_64-w64-mingw32-gcc is not installed" >&214
exit 115
fi16
rustup target add x86_64-pc-windows-gnu17
cargo build --release --locked --target x86_64-pc-windows-gnu --manifest-path "$root/Cargo.toml"18
19
exe="$root/target/x86_64-pc-windows-gnu/release/paperdoll-renderer.exe"20
if [[ ! -s "$exe" ]]; then21
echo "Windows executable was not produced" >&222
exit 123
fi24
# PE magic. Refuse to zip an ELF if the linker targeted the wrong OS.25
if ! od -An -tx1 -N 2 "$exe" | grep -q "4d 5a"; then26
echo "paperdoll-renderer.exe does not start with MZ" >&227
exit 128
fi29
30
stage="$(mktemp -d)"31
trap 'rm -rf "$stage"' EXIT32
install -m 644 "$exe" "$stage/paperdoll-renderer.exe"33
install -m 644 "$root/LICENSE" "$stage/LICENSE.txt"34
printf '%s\n' "Paperdoll Renderer ${version}" "Foundation shell. Import and render are not included." \35
> "$stage/README.txt"36
37
mkdir -p "$root/dist"38
rm -f "$root/dist/paperdoll-renderer-${version}-windows-x86_64.zip" \39
"$root/dist/paperdoll-renderer-windows-x86_64.zip"40
(41
cd "$stage"42
zip -r "$root/dist/paperdoll-renderer-${version}-windows-x86_64.zip" \43
paperdoll-renderer.exe LICENSE.txt README.txt44
)45
cp -f "$root/dist/paperdoll-renderer-${version}-windows-x86_64.zip" \46
"$root/dist/paperdoll-renderer-windows-x86_64.zip"47
echo "wrote dist/paperdoll-renderer-windows-x86_64.zip"@@ -0,0 +1,272 @@
1
//! Honest capability report for the foundation shell.
2
//!
3
//! Later features add import, animation, rendering and preview. Until those
4
//! features land, this module must keep reporting them as not built.
5
6
/// Product capability named by the design.
7
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
8
pub enum Capability {
9
ProjectShell,
10
ObjMtlTextures,
11
Fbx,
12
GltfGlb,
13
SkeletalAnimation,
14
AttachmentEditor,
15
PaperdollRender,
16
Preview2d,
17
}
18
19
/// Whether this build actually contains the capability.
20
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
21
pub enum Availability {
22
Present,
23
NotBuilt,
24
}
25
26
/// What the process should do with the command line it received.
27
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
28
pub enum CliRequest {
29
OpenWindow,
30
PrintStatus,
31
PrintHelp,
32
}
33
34
/// Rejected command line. A model path is rejected on purpose: accepting one
35
/// would look like import support.
36
#[derive(Debug, Clone, PartialEq, Eq)]
37
pub enum CliError {
38
UnknownArgument(String),
39
}
40
41
const CAPABILITIES: [Capability; 8] = [
42
Capability::ProjectShell,
43
Capability::ObjMtlTextures,
44
Capability::Fbx,
45
Capability::GltfGlb,
46
Capability::SkeletalAnimation,
47
Capability::AttachmentEditor,
48
Capability::PaperdollRender,
49
Capability::Preview2d,
50
];
51
52
pub fn capabilities() -> &'static [Capability] {
53
&CAPABILITIES
54
}
55
56
pub fn availability(capability: Capability) -> Availability {
57
match capability {
58
Capability::ProjectShell => Availability::Present,
59
Capability::ObjMtlTextures
60
| Capability::Fbx
61
| Capability::GltfGlb
62
| Capability::SkeletalAnimation
63
| Capability::AttachmentEditor
64
| Capability::PaperdollRender
65
| Capability::Preview2d => Availability::NotBuilt,
66
}
67
}
68
69
pub fn machine_key(capability: Capability) -> &'static str {
70
match capability {
71
Capability::ProjectShell => "project_shell",
72
Capability::ObjMtlTextures => "obj_mtl_textures",
73
Capability::Fbx => "fbx",
74
Capability::GltfGlb => "gltf_glb",
75
Capability::SkeletalAnimation => "skeletal_animation",
76
Capability::AttachmentEditor => "attachment_editor",
77
Capability::PaperdollRender => "paperdoll_render",
78
Capability::Preview2d => "preview_2d",
79
}
80
}
81
82
pub fn machine_state(availability: Availability) -> &'static str {
83
match availability {
84
Availability::Present => "present",
85
Availability::NotBuilt => "not_built",
86
}
87
}
88
89
pub fn dutch_label(capability: Capability) -> &'static str {
90
match capability {
91
Capability::ProjectShell => "projectschil",
92
Capability::ObjMtlTextures => "OBJ + MTL + textures",
93
Capability::Fbx => "FBX",
94
Capability::GltfGlb => "glTF/GLB",
95
Capability::SkeletalAnimation => "skeletanimatie",
96
Capability::AttachmentEditor => "3D-attachmenteditor",
97
Capability::PaperdollRender => "paperdoll-render",
98
Capability::Preview2d => "2D-preview",
99
}
100
}
101
102
pub fn dutch_state(availability: Availability) -> &'static str {
103
match availability {
104
Availability::Present => "aanwezig",
105
Availability::NotBuilt => "niet gebouwd",
106
}
107
}
108
109
pub fn dutch_summary() -> &'static str {
110
"Deze build opent alleen dit statusvenster. OBJ+MTL+textures, FBX, glTF/GLB, skeletanimatie, de attachment-editor, paperdoll-render en de 2D-preview zijn niet gebouwd. Synthetische testassets, als ze in de repository staan, worden door dit programma niet geladen."
111
}
112
113
/// Stable status text shared by `--status` and the window.
114
pub fn report() -> String {
115
let mut lines = Vec::with_capacity(2 + CAPABILITIES.len());
116
lines.push("name: Paperdoll Renderer".to_string());
117
lines.push("phase: foundation".to_string());
118
for capability in CAPABILITIES {
119
lines.push(format!(
120
"{}: {}",
121
machine_key(capability),
122
machine_state(availability(capability))
123
));
124
}
125
lines.join("\n")
126
}
127
128
/// Shared libraries the X11 window loads. `ldd` does not list them: eframe
129
/// opens them at runtime. A missing one panics inside that loader, so the
130
/// shell checks first.
131
pub const LINUX_WINDOW_LIBRARIES: &[&str] = &[
132
"libxkbcommon-x11.so.0",
133
"libxkbcommon.so.0",
134
"libxcb.so.1",
135
"libX11.so.6",
136
"libGL.so.1",
137
];
138
139
pub fn missing_library_message(missing: &[&str]) -> String {
140
format!(
141
"het statusvenster kan niet openen; deze bibliotheken ontbreken: {}. Import en render zijn niet gebouwd.",
142
missing.join(", ")
143
)
144
}
145
146
#[cfg(target_os = "linux")]
147
pub fn missing_window_libraries() -> Vec<&'static str> {
148
LINUX_WINDOW_LIBRARIES
149
.iter()
150
.copied()
151
.filter(|name| {
152
// Safety: `name` is a nul-free soname literal. A missing library
153
// returns Err; no symbol from the library is called.
154
unsafe { libloading::Library::new(name).is_err() }
155
})
156
.collect()
157
}
158
159
pub fn help_text() -> &'static str {
160
"\
161
Paperdoll Renderer — projectbasis
162
163
Gebruik:
164
paperdoll-renderer open het statusvenster
165
paperdoll-renderer --status print de status en sluit
166
paperdoll-renderer --help toon deze tekst
167
168
Een modelpad wordt niet geaccepteerd. Import en render zijn niet gebouwd."
169
}
170
171
pub fn parse_cli<'a, I>(args: I) -> Result<CliRequest, CliError>
172
where
173
I: IntoIterator<Item = &'a str>,
174
{
175
let mut request = CliRequest::OpenWindow;
176
for arg in args {
177
match arg {
178
"--help" | "-h" => request = CliRequest::PrintHelp,
179
"--status" => {
180
if request != CliRequest::PrintHelp {
181
request = CliRequest::PrintStatus;
182
}
183
}
184
other => {
185
return Err(CliError::UnknownArgument(other.to_string()));
186
}
187
}
188
}
189
Ok(request)
190
}
191
192
#[cfg(test)]
193
mod tests {
194
use super::*;
195
196
#[test]
197
fn only_the_project_shell_is_present() {
198
assert_eq!(
199
availability(Capability::ProjectShell),
200
Availability::Present
201
);
202
for capability in capabilities() {
203
if *capability == Capability::ProjectShell {
204
continue;
205
}
206
assert_eq!(
207
availability(*capability),
208
Availability::NotBuilt,
209
"{capability:?} must stay not built in the foundation"
210
);
211
}
212
}
213
214
#[test]
215
fn status_report_names_every_format_as_not_built() {
216
let report = report();
217
assert!(report.starts_with("name: Paperdoll Renderer\nphase: foundation\n"));
218
for key in [
219
"obj_mtl_textures",
220
"fbx",
221
"gltf_glb",
222
"skeletal_animation",
223
"attachment_editor",
224
"paperdoll_render",
225
"preview_2d",
226
] {
227
assert!(
228
report.contains(&format!("{key}: not_built")),
229
"missing {key} in {report}"
230
);
231
assert!(
232
!report.contains(&format!("{key}: present")),
233
"{key} must not be reported as present"
234
);
235
}
236
assert!(report.contains("project_shell: present"));
237
let summary = dutch_summary();
238
assert!(summary.contains("niet gebouwd"));
239
assert!(summary.contains("niet geladen"));
240
let lower = summary.to_lowercase();
241
assert!(!lower.contains("import werkt"));
242
assert!(!lower.contains("render werkt"));
243
}
244
245
#[test]
246
fn cli_opens_a_window_or_prints_status_and_rejects_model_paths() {
247
assert_eq!(parse_cli(std::iter::empty()), Ok(CliRequest::OpenWindow));
248
assert_eq!(parse_cli(["--status"]), Ok(CliRequest::PrintStatus));
249
assert_eq!(parse_cli(["--help"]), Ok(CliRequest::PrintHelp));
250
assert_eq!(parse_cli(["-h", "--status"]), Ok(CliRequest::PrintHelp));
251
assert_eq!(
252
parse_cli(["tests/fixtures/bodies/test-body-male.glb"]),
253
Err(CliError::UnknownArgument(
254
"tests/fixtures/bodies/test-body-male.glb".to_string()
255
))
256
);
257
assert_eq!(
258
parse_cli(["--status", "--render"]),
259
Err(CliError::UnknownArgument("--render".to_string()))
260
);
261
assert!(help_text().contains("niet gebouwd"));
262
}
263
264
#[test]
265
fn missing_library_message_names_the_library_and_does_not_claim_import() {
266
let message = missing_library_message(&["libxkbcommon-x11.so.0"]);
267
assert!(message.contains("libxkbcommon-x11.so.0"));
268
assert!(message.contains("niet gebouwd"));
269
assert!(!message.to_lowercase().contains("import werkt"));
270
assert!(!LINUX_WINDOW_LIBRARIES.is_empty());
271
}
272
}
@@ -0,0 +1,272 @@1
//! Honest capability report for the foundation shell.2
//!3
//! Later features add import, animation, rendering and preview. Until those4
//! features land, this module must keep reporting them as not built.5
6
/// Product capability named by the design.7
#[derive(Debug, Clone, Copy, PartialEq, Eq)]8
pub enum Capability {9
ProjectShell,10
ObjMtlTextures,11
Fbx,12
GltfGlb,13
SkeletalAnimation,14
AttachmentEditor,15
PaperdollRender,16
Preview2d,17
}18
19
/// Whether this build actually contains the capability.20
#[derive(Debug, Clone, Copy, PartialEq, Eq)]21
pub enum Availability {22
Present,23
NotBuilt,24
}25
26
/// What the process should do with the command line it received.27
#[derive(Debug, Clone, Copy, PartialEq, Eq)]28
pub enum CliRequest {29
OpenWindow,30
PrintStatus,31
PrintHelp,32
}33
34
/// Rejected command line. A model path is rejected on purpose: accepting one35
/// would look like import support.36
#[derive(Debug, Clone, PartialEq, Eq)]37
pub enum CliError {38
UnknownArgument(String),39
}40
41
const CAPABILITIES: [Capability; 8] = [42
Capability::ProjectShell,43
Capability::ObjMtlTextures,44
Capability::Fbx,45
Capability::GltfGlb,46
Capability::SkeletalAnimation,47
Capability::AttachmentEditor,48
Capability::PaperdollRender,49
Capability::Preview2d,50
];51
52
pub fn capabilities() -> &'static [Capability] {53
&CAPABILITIES54
}55
56
pub fn availability(capability: Capability) -> Availability {57
match capability {58
Capability::ProjectShell => Availability::Present,59
Capability::ObjMtlTextures60
| Capability::Fbx61
| Capability::GltfGlb62
| Capability::SkeletalAnimation63
| Capability::AttachmentEditor64
| Capability::PaperdollRender65
| Capability::Preview2d => Availability::NotBuilt,66
}67
}68
69
pub fn machine_key(capability: Capability) -> &'static str {70
match capability {71
Capability::ProjectShell => "project_shell",72
Capability::ObjMtlTextures => "obj_mtl_textures",73
Capability::Fbx => "fbx",74
Capability::GltfGlb => "gltf_glb",75
Capability::SkeletalAnimation => "skeletal_animation",76
Capability::AttachmentEditor => "attachment_editor",77
Capability::PaperdollRender => "paperdoll_render",78
Capability::Preview2d => "preview_2d",79
}80
}81
82
pub fn machine_state(availability: Availability) -> &'static str {83
match availability {84
Availability::Present => "present",85
Availability::NotBuilt => "not_built",86
}87
}88
89
pub fn dutch_label(capability: Capability) -> &'static str {90
match capability {91
Capability::ProjectShell => "projectschil",92
Capability::ObjMtlTextures => "OBJ + MTL + textures",93
Capability::Fbx => "FBX",94
Capability::GltfGlb => "glTF/GLB",95
Capability::SkeletalAnimation => "skeletanimatie",96
Capability::AttachmentEditor => "3D-attachmenteditor",97
Capability::PaperdollRender => "paperdoll-render",98
Capability::Preview2d => "2D-preview",99
}100
}101
102
pub fn dutch_state(availability: Availability) -> &'static str {103
match availability {104
Availability::Present => "aanwezig",105
Availability::NotBuilt => "niet gebouwd",106
}107
}108
109
pub fn dutch_summary() -> &'static str {110
"Deze build opent alleen dit statusvenster. OBJ+MTL+textures, FBX, glTF/GLB, skeletanimatie, de attachment-editor, paperdoll-render en de 2D-preview zijn niet gebouwd. Synthetische testassets, als ze in de repository staan, worden door dit programma niet geladen."111
}112
113
/// Stable status text shared by `--status` and the window.114
pub fn report() -> String {115
let mut lines = Vec::with_capacity(2 + CAPABILITIES.len());116
lines.push("name: Paperdoll Renderer".to_string());117
lines.push("phase: foundation".to_string());118
for capability in CAPABILITIES {119
lines.push(format!(120
"{}: {}",121
machine_key(capability),122
machine_state(availability(capability))123
));124
}125
lines.join("\n")126
}127
128
/// Shared libraries the X11 window loads. `ldd` does not list them: eframe129
/// opens them at runtime. A missing one panics inside that loader, so the130
/// shell checks first.131
pub const LINUX_WINDOW_LIBRARIES: &[&str] = &[132
"libxkbcommon-x11.so.0",133
"libxkbcommon.so.0",134
"libxcb.so.1",135
"libX11.so.6",136
"libGL.so.1",137
];138
139
pub fn missing_library_message(missing: &[&str]) -> String {140
format!(141
"het statusvenster kan niet openen; deze bibliotheken ontbreken: {}. Import en render zijn niet gebouwd.",142
missing.join(", ")143
)144
}145
146
#[cfg(target_os = "linux")]147
pub fn missing_window_libraries() -> Vec<&'static str> {148
LINUX_WINDOW_LIBRARIES149
.iter()150
.copied()151
.filter(|name| {152
// Safety: `name` is a nul-free soname literal. A missing library153
// returns Err; no symbol from the library is called.154
unsafe { libloading::Library::new(name).is_err() }155
})156
.collect()157
}158
159
pub fn help_text() -> &'static str {160
"\161
Paperdoll Renderer — projectbasis162
163
Gebruik:164
paperdoll-renderer open het statusvenster165
paperdoll-renderer --status print de status en sluit166
paperdoll-renderer --help toon deze tekst167
168
Een modelpad wordt niet geaccepteerd. Import en render zijn niet gebouwd."169
}170
171
pub fn parse_cli<'a, I>(args: I) -> Result<CliRequest, CliError>172
where173
I: IntoIterator<Item = &'a str>,174
{175
let mut request = CliRequest::OpenWindow;176
for arg in args {177
match arg {178
"--help" | "-h" => request = CliRequest::PrintHelp,179
"--status" => {180
if request != CliRequest::PrintHelp {181
request = CliRequest::PrintStatus;182
}183
}184
other => {185
return Err(CliError::UnknownArgument(other.to_string()));186
}187
}188
}189
Ok(request)190
}191
192
#[cfg(test)]193
mod tests {194
use super::*;195
196
#[test]197
fn only_the_project_shell_is_present() {198
assert_eq!(199
availability(Capability::ProjectShell),200
Availability::Present201
);202
for capability in capabilities() {203
if *capability == Capability::ProjectShell {204
continue;205
}206
assert_eq!(207
availability(*capability),208
Availability::NotBuilt,209
"{capability:?} must stay not built in the foundation"210
);211
}212
}213
214
#[test]215
fn status_report_names_every_format_as_not_built() {216
let report = report();217
assert!(report.starts_with("name: Paperdoll Renderer\nphase: foundation\n"));218
for key in [219
"obj_mtl_textures",220
"fbx",221
"gltf_glb",222
"skeletal_animation",223
"attachment_editor",224
"paperdoll_render",225
"preview_2d",226
] {227
assert!(228
report.contains(&format!("{key}: not_built")),229
"missing {key} in {report}"230
);231
assert!(232
!report.contains(&format!("{key}: present")),233
"{key} must not be reported as present"234
);235
}236
assert!(report.contains("project_shell: present"));237
let summary = dutch_summary();238
assert!(summary.contains("niet gebouwd"));239
assert!(summary.contains("niet geladen"));240
let lower = summary.to_lowercase();241
assert!(!lower.contains("import werkt"));242
assert!(!lower.contains("render werkt"));243
}244
245
#[test]246
fn cli_opens_a_window_or_prints_status_and_rejects_model_paths() {247
assert_eq!(parse_cli(std::iter::empty()), Ok(CliRequest::OpenWindow));248
assert_eq!(parse_cli(["--status"]), Ok(CliRequest::PrintStatus));249
assert_eq!(parse_cli(["--help"]), Ok(CliRequest::PrintHelp));250
assert_eq!(parse_cli(["-h", "--status"]), Ok(CliRequest::PrintHelp));251
assert_eq!(252
parse_cli(["tests/fixtures/bodies/test-body-male.glb"]),253
Err(CliError::UnknownArgument(254
"tests/fixtures/bodies/test-body-male.glb".to_string()255
))256
);257
assert_eq!(258
parse_cli(["--status", "--render"]),259
Err(CliError::UnknownArgument("--render".to_string()))260
);261
assert!(help_text().contains("niet gebouwd"));262
}263
264
#[test]265
fn missing_library_message_names_the_library_and_does_not_claim_import() {266
let message = missing_library_message(&["libxkbcommon-x11.so.0"]);267
assert!(message.contains("libxkbcommon-x11.so.0"));268
assert!(message.contains("niet gebouwd"));269
assert!(!message.to_lowercase().contains("import werkt"));270
assert!(!LINUX_WINDOW_LIBRARIES.is_empty());271
}272
}@@ -0,0 +1,6 @@
1
//! Foundation library for the Paperdoll Renderer shell.
2
//!
3
//! This crate reports which product capabilities exist. It does not import
4
//! models and it does not render paperdolls.
5
6
pub mod foundation;
@@ -0,0 +1,6 @@1
//! Foundation library for the Paperdoll Renderer shell.2
//!3
//! This crate reports which product capabilities exist. It does not import4
//! models and it does not render paperdolls.5
6
pub mod foundation;@@ -0,0 +1,106 @@
1
//! Desktop status shell for the Paperdoll Renderer foundation.
2
//!
3
//! The window lists what this build does not do. It is not a 3D viewport and
4
//! it is not a paperdoll preview.
5
6
use std::process::ExitCode;
7
8
use eframe::egui;
9
use paperdoll_renderer::foundation::{
10
availability, capabilities, dutch_label, dutch_state, dutch_summary, help_text, parse_cli,
11
report, CliError, CliRequest,
12
};
13
14
fn main() -> ExitCode {
15
let args: Vec<String> = std::env::args().skip(1).collect();
16
let borrowed: Vec<&str> = args.iter().map(String::as_str).collect();
17
match parse_cli(borrowed) {
18
Ok(CliRequest::PrintHelp) => {
19
println!("{}", help_text());
20
ExitCode::SUCCESS
21
}
22
Ok(CliRequest::PrintStatus) => {
23
println!("{}", report());
24
ExitCode::SUCCESS
25
}
26
Ok(CliRequest::OpenWindow) => {
27
if let Some(message) = window_preflight() {
28
eprintln!("paperdoll-renderer: {message}");
29
return ExitCode::from(1);
30
}
31
match run_window() {
32
Ok(()) => ExitCode::SUCCESS,
33
Err(err) => {
34
eprintln!("paperdoll-renderer: het statusvenster openen is mislukt: {err}");
35
ExitCode::from(1)
36
}
37
}
38
}
39
Err(CliError::UnknownArgument(arg)) => {
40
eprintln!("paperdoll-renderer: onbekend argument '{arg}'.");
41
eprintln!("Import en render zijn niet gebouwd. Gebruik --help.");
42
ExitCode::from(2)
43
}
44
}
45
}
46
47
fn window_preflight() -> Option<String> {
48
#[cfg(target_os = "linux")]
49
{
50
let missing = paperdoll_renderer::foundation::missing_window_libraries();
51
if missing.is_empty() {
52
None
53
} else {
54
Some(paperdoll_renderer::foundation::missing_library_message(
55
&missing,
56
))
57
}
58
}
59
#[cfg(not(target_os = "linux"))]
60
{
61
None
62
}
63
}
64
65
fn run_window() -> eframe::Result<()> {
66
let options = eframe::NativeOptions {
67
viewport: egui::ViewportBuilder::default()
68
.with_title("Paperdoll Renderer")
69
.with_inner_size([480.0, 560.0])
70
.with_min_inner_size([320.0, 280.0]),
71
..Default::default()
72
};
73
eframe::run_native(
74
"Paperdoll Renderer",
75
options,
76
Box::new(|_creation| Ok(Box::new(StatusApp))),
77
)
78
}
79
80
struct StatusApp;
81
82
impl eframe::App for StatusApp {
83
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
84
egui::CentralPanel::default().show(ctx, |ui| {
85
egui::ScrollArea::vertical().show(ui, |ui| {
86
ui.heading("Paperdoll Renderer");
87
ui.label("Projectbasis. Nog geen paperdoll-renderer.");
88
ui.add_space(8.0);
89
ui.label(dutch_summary());
90
ui.add_space(12.0);
91
ui.strong("Status van deze build");
92
for capability in capabilities() {
93
ui.label(format!(
94
"{}: {}",
95
dutch_label(*capability),
96
dutch_state(availability(*capability))
97
));
98
}
99
ui.add_space(12.0);
100
if ui.button("Sluiten").clicked() {
101
ctx.send_viewport_cmd(egui::ViewportCommand::Close);
102
}
103
});
104
});
105
}
106
}
@@ -0,0 +1,106 @@1
//! Desktop status shell for the Paperdoll Renderer foundation.2
//!3
//! The window lists what this build does not do. It is not a 3D viewport and4
//! it is not a paperdoll preview.5
6
use std::process::ExitCode;7
8
use eframe::egui;9
use paperdoll_renderer::foundation::{10
availability, capabilities, dutch_label, dutch_state, dutch_summary, help_text, parse_cli,11
report, CliError, CliRequest,12
};13
14
fn main() -> ExitCode {15
let args: Vec<String> = std::env::args().skip(1).collect();16
let borrowed: Vec<&str> = args.iter().map(String::as_str).collect();17
match parse_cli(borrowed) {18
Ok(CliRequest::PrintHelp) => {19
println!("{}", help_text());20
ExitCode::SUCCESS21
}22
Ok(CliRequest::PrintStatus) => {23
println!("{}", report());24
ExitCode::SUCCESS25
}26
Ok(CliRequest::OpenWindow) => {27
if let Some(message) = window_preflight() {28
eprintln!("paperdoll-renderer: {message}");29
return ExitCode::from(1);30
}31
match run_window() {32
Ok(()) => ExitCode::SUCCESS,33
Err(err) => {34
eprintln!("paperdoll-renderer: het statusvenster openen is mislukt: {err}");35
ExitCode::from(1)36
}37
}38
}39
Err(CliError::UnknownArgument(arg)) => {40
eprintln!("paperdoll-renderer: onbekend argument '{arg}'.");41
eprintln!("Import en render zijn niet gebouwd. Gebruik --help.");42
ExitCode::from(2)43
}44
}45
}46
47
fn window_preflight() -> Option<String> {48
#[cfg(target_os = "linux")]49
{50
let missing = paperdoll_renderer::foundation::missing_window_libraries();51
if missing.is_empty() {52
None53
} else {54
Some(paperdoll_renderer::foundation::missing_library_message(55
&missing,56
))57
}58
}59
#[cfg(not(target_os = "linux"))]60
{61
None62
}63
}64
65
fn run_window() -> eframe::Result<()> {66
let options = eframe::NativeOptions {67
viewport: egui::ViewportBuilder::default()68
.with_title("Paperdoll Renderer")69
.with_inner_size([480.0, 560.0])70
.with_min_inner_size([320.0, 280.0]),71
..Default::default()72
};73
eframe::run_native(74
"Paperdoll Renderer",75
options,76
Box::new(|_creation| Ok(Box::new(StatusApp))),77
)78
}79
80
struct StatusApp;81
82
impl eframe::App for StatusApp {83
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {84
egui::CentralPanel::default().show(ctx, |ui| {85
egui::ScrollArea::vertical().show(ui, |ui| {86
ui.heading("Paperdoll Renderer");87
ui.label("Projectbasis. Nog geen paperdoll-renderer.");88
ui.add_space(8.0);89
ui.label(dutch_summary());90
ui.add_space(12.0);91
ui.strong("Status van deze build");92
for capability in capabilities() {93
ui.label(format!(94
"{}: {}",95
dutch_label(*capability),96
dutch_state(availability(*capability))97
));98
}99
ui.add_space(12.0);100
if ui.button("Sluiten").clicked() {101
ctx.send_viewport_cmd(egui::ViewportCommand::Close);102
}103
});104
});105
}106
}