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

2.7 KiB

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:

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.