acdream/memory/project_linux_graphical.md
2026-07-27 12:00:10 +02:00

65 lines
2.7 KiB
Markdown

# Modern Runtime Linux graphical continuation
## Current checkpoint
Slice L0 completed at
`66f114b258c0c37b51a7c0e04ca0d6441f4b1699`.
The same `AcDream.App` now builds and publishes for `linux-x64`; there is no
Linux gameplay or renderer fork.
Canonical seams:
- `AcDream.Runtime.Platform.ApplicationPathSet` owns XDG/Windows config, data,
cache, plugin, screenshot, and diagnostic paths for graphical and headless
hosts.
- `AcDream.App.Platform.GraphicalHostPlatformServices` owns one startup OS,
architecture, RID, native-dependency manifest, path set, and pacing factory.
- `PlatformFramePacingWaiterFactory` selects the existing Windows
high-resolution waitable timer or Linux
`LinuxMonotonicFramePacingWaiter`.
- Linux waiting uses absolute `CLOCK_MONOTONIC` +
`clock_nanosleep(TIMER_ABSTIME)`, retries `EINTR`, does not busy-spin, and
rejects use after disposal.
- Windows legacy `%LOCALAPPDATA%\acdream\settings.json` and
`keybinds.json` are copied only when the new roaming destination is absent.
- bundled plugins are read beside the binary; user plugins are read from the
portable data root. A successful bundled ID wins; a failed load does not
reserve the ID.
Exact L0 evidence:
- Windows: Runtime 415, Headless 67, UI 543, App 3,736 / 3 skips, complete
Release 8,799 / 5 skips.
- native Ubuntu/WSL: Runtime 415, Headless 67, UI 543, 14 L0 App tests.
- exact framework-dependent `linux-x64` publish contains executable, managed
closure, GLFW, OpenAL Soft, cimgui, shaders, and smoke plugin/manifest;
direct `ldd` has no unresolved dependency.
- closeout:
`docs/research/2026-07-27-slice-l0-platform-services.md`.
Rollback:
```text
git revert 66f114b258c0c37b51a7c0e04ca0d6441f4b1699
```
## Next work — L1
Do not claim Linux graphical support merely from publish success. L1 must:
1. start the exact package under the available X11 and Wayland sessions;
2. capture OS/display/compositor/GPU/driver/OpenGL vendor, renderer, version,
mandatory extensions, swap interval, refresh, DPI, and audio backend before
renderer construction;
3. create the OpenGL 4.3 core context and reject missing bindless texture or
shader draw parameters with one actionable report;
4. validate GLFW window/input callbacks, relative mouse/focus, framebuffer
sizing, clipboard, and monitor facts;
5. initialize OpenAL fail-open exactly as current Windows behavior permits;
6. render a packaged smoke scene, capture a screenshot, and close with zero
GL/OpenAL/window debt.
Historical test-only issue: two installed-DAT App tests still hard-code
`C:\Turbine\Asheron's Call`. They are not production blockers, but clean them
before claiming the complete App test suite on a clean Linux runner.