Studio: verify & harden Windows runtime (project open, PlayMode, asset paths)

Goal

Follow-up to #119 (closed) (closed). #119 (closed) got the Studio + CLI building, launching, and releasing on Windows (the editor UI renders under Wine on D3D12, full SDK now ships CLI + Studio). This issue tracks verifying and hardening the actual Windows runtime — the parts #119 (closed) did not verify beyond first paint.

Verified so far (in #119 (closed))

  • Studio compiles for x86_64-windows-gnu and the editor UI renders (Wine/D3D12), with a clean shutdown.
  • GPU backend prefers Vulkan, falls back to D3D12/Metal (studio/Main.zig initBackend).
  • Cross-platform DynLib loader added (studio/scene-view/DynLib.zig) — std.DynLib has no Windows support in Zig 0.16.
  • CI compile-checks the full Windows Studio; Windows release ships CLI + Studio.

Not yet verified / to do

  • Open a real project on Windows: asset scan, scene view with content, inspector, save/load scenes.
  • PlayMode on Windows: editor/build/PlayBuild.zig compiles a libturian_play.dll via a zig subprocess, then DynLib loads it. End-to-end path (build → dlopen → resolve symbols → run/stop) is untested on Windows.
  • CLI on Windows: turian-cli new-project / build end-to-end (game build via GameBuild/codegen).
  • Input handling: keyboard/mouse/gamepad in the editor and in Play (only a static screenshot was captured so far).
  • POSIX path-assumption audit across studio/ + editor/. Known concrete issue: editor/build/codegen/BuildZigCodegen.zig:441 hardcodes lib/{target}/libsnd.so (should resolve .dll/.lib on Windows). Asset paths mostly rely on /→canonical normalization (CodegenShared/PlayBuild replaceOwned("\\","/")) but need a pass.
  • 3D viewport on Windows without Vulkan: the viewport (GpuRenderer) is SPIRV-only, so it shows "unavailable" on the D3D12 fallback. Needs DXIL shaders (or a shader-cross step) to work on Vulkan-less Windows machines. This is a sizeable rendering task — split into its own issue if it grows.

Testing notes

  • Real Windows 10/11 testing (primary).
  • Linux + Wine cross-check: build zig build -Dtarget=x86_64-windows-gnu -Dno-test, run the .exe under Wine. TURIAN_CAPTURE_AFTER_MS + TURIAN_CAPTURE_QUIT give one-shot screenshots. Note: Wine's ws2_32 rejects SO_REUSE_UNICASTPORT, so the debug server can't bind under Wine (works on real Windows 10+).

Acceptance

  • Project open, scene edit + save, asset import, PlayMode, and CLI game build all work on Windows 10/11.
  • No POSIX-only path assumptions remain in the studio/editor runtime paths.