| 1 | # Paperdoll Renderer |
| 2 | |
| 3 | Native Rust-schil voor Tim Falkens Paperdoll Renderer. Het venster maakt en bewaart een projectmap met één `character.ppd`: paden voor een mannelijk en vrouwelijk model, paden naar equipment-presets, en een uitvoermap, allemaal relatief aan die projectmap. Het importeert die modellen niet 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 modelpad op de opdrachtregel wordt geweigerd. In het venster vullen Nieuw, Open en Opslaan een projectmap. Kies daarna bestanden in die map; de opgeslagen paden blijven relatief. |
| 21 | |
| 22 | ## Testlichamen |
| 23 | |
| 24 | `tests/fixtures/bodies/` bevat twee procedurele GLB-bestanden, man en vrouw, elk met een skeleton en de clips `walk` en `attack`. Ze zijn CC0, duidelijk als testasset gelabeld, en geen definitieve karakters. Opnieuw maken: |
| 25 | |
| 26 | ```bash |
| 27 | python3 scripts/generate_test_bodies.py |
| 28 | ``` |
| 29 | |
| 30 | `cargo test --locked` controleert of de bestanden leesbaar zijn, het skeleton en beide clips bevatten, en nog gelijk zijn aan de generator. Het venster laadt ze niet. |
| 31 | |
| 32 | ## Wat deze build niet doet |
| 33 | |
| 34 | 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. |
| 35 | |
| 36 | ## BlueGit |
| 37 | |
| 38 | 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 het release-script. |
| 39 | |
| 40 | Dat script publiceert niet. De publieke BlueGit-routes kunnen artifacts niet aan een bestaande tag of release hangen. `POST /api/v1/repos/{owner}/{repo}/releases` maakt de tag zelf (HTTP 409 als die er al is). `replace: true` is op een tag-pipeline HTTP 403. `scripts/ci/release.sh` doet geen van beide en stopt met exit 3 (`release-blocked: no-attach-endpoint`). De volgorde blijft een tag-push. De ontbrekende serverroute staat in `design.md`. Er is geen tag en geen release gestart. |
| 41 | |
| 42 | `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`. |
| 43 | |
| 44 | Pakketten lokaal, zonder publiceren: |
| 45 | |
| 46 | ```bash |
| 47 | bash scripts/package/deb.sh |
| 48 | bash scripts/package/appimage.sh |
| 49 | ``` |
| 50 | |
| 51 | 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. |