diff --git a/installer/common/SampleInstaller.nsh b/installer/common/SampleInstaller.nsh index 505802d..bb6a47a 100644 --- a/installer/common/SampleInstaller.nsh +++ b/installer/common/SampleInstaller.nsh @@ -180,6 +180,11 @@ Section "${SAMPLE_DISPLAY_NAME}" SecApp FileWrite $0 ' "icon": "icon_${SAMPLE_SLUG}.png",$\r$\n' FileWrite $0 ' "icon_3d": "icon_sbs_${SAMPLE_SLUG}.png",$\r$\n' FileWrite $0 ' "icon_3d_layout": "sbs-lr",$\r$\n' + ; Unity/engine apps gate their render on the main window being SHOWN, so the + ; shell must launch them SW_SHOWMINNOACTIVE (not SW_HIDE) and they read + ; xrGetWorkspaceTileSizeDXR for tile size. Opt-in flag consumed by the shell's + ; per-app show mode (displayxr-shell-pvt#80). All Unity samples are engine-gated. + FileWrite $0 ' "engine_render_gated": true,$\r$\n' ${WordReplace} "$INSTDIR" "\" "/" "+" $1 FileWrite $0 ' "exe_path": "$1/${APP_EXE}"$\r$\n' FileWrite $0 '}$\r$\n' diff --git a/samples/desktop-avatar/Assets/DemoWindowController.cs b/samples/desktop-avatar/Assets/DemoWindowController.cs index 9a47fe7..e418111 100644 --- a/samples/desktop-avatar/Assets/DemoWindowController.cs +++ b/samples/desktop-avatar/Assets/DemoWindowController.cs @@ -104,6 +104,14 @@ void Update() #if UNITY_STANDALONE_WIN if (Application.isEditor) return; + // Workspace-tile mode (#225): the shell/runtime owns the window — it + // syncs the hidden window to the tile's 3D-window pixel rect so Kooima + // (from the tile pose) matches the render aspect (this is what every + // other tile app gets for free). Restoring/persisting our own portrait + // size here overrides that cell-resize and mismatches Kooima → the whole + // scene stretches. So this window-chrome policy is inert as a tile. + if (DisplayXRNative.displayxr_is_shell_mode() != 0) return; + // Remember / restore window size AND position across launches (the split // persists separately in TigerSpeechBubble). On the first valid frame, // restore the last-saved size + position; thereafter, track changes in