Fullscreen toggle (F11) at runtime, with borderless or exclusive mode in Graphics preferences #919

Closed
opened 2026-10-21 18:03:13 +00:00 by sky_line · 1 comment
Owner

Fullscreen today is only a hidden FullScreen debug setting, read when the window is created (it needs a restart). There is no menu item, keybind or preferences option. Also, after any native dialog (file picker, alerts), LLWindowSDL::afterDialog() turns fullscreen off instead of restoring it, so the viewer stays windowed.

Proposal

  • Toggle at runtime, no restart. A View > Fullscreen menu item, and a rebindable keyboard command with F11 as the default. The FullScreen setting is kept, so the choice is remembered at the next start.
  • Two modes, selectable in Preferences > Graphics:
    • Borderless: a desktop-sized window, the same as the desktop resolution. Alt-tab and overlays are instant.
    • Exclusive: on Windows, Vulkan's VK_EXT_full_screen_exclusive with application-controlled acquire and release. On Linux, the closest equivalent (a direct, unredirected fullscreen surface; check what X11 and Wayland compositors actually give through SDL3).
    • Default: whichever performs best on the running platform and driver, decided from measurement (frame time, pacing and latency), not assumption. On Windows, exclusive usually allows independent flip with fewer compositor copies; recent Windows also promotes borderless to independent flip in many cases. Linux compositors behave differently again. Record what was measured.
  • Toggling is a swapchain resize/recreate. The window and Vulkan surface are not rebuilt unless exclusive mode requires it. Keep the existing resize path and the frame pacing.
  • Fix afterDialog() so it restores fullscreen after a dialog.
  • Keep the existing Windows 11 24H2 workaround (window size from the desktop mode), or replace it if runtime switching makes it unnecessary.
  • Multiple monitors: fullscreen goes to the monitor the window is on. Leaving fullscreen restores the previous window position and size.

Verify

  • F11 and the menu item toggle both ways, with no restart, on Windows and Linux.
  • Both modes work and can be switched in Graphics preferences; the default is the measured best.
  • Alt-tab, minimise and dialogs behave, and fullscreen survives native dialogs.
  • No device loss or swapchain errors when toggling repeatedly.
  • Frame pacing is unchanged or better than windowed.
Fullscreen today is only a hidden `FullScreen` debug setting, read when the window is created (it needs a restart). There is no menu item, keybind or preferences option. Also, after any native dialog (file picker, alerts), `LLWindowSDL::afterDialog()` turns fullscreen off instead of restoring it, so the viewer stays windowed. ## Proposal - **Toggle at runtime, no restart.** A **View > Fullscreen** menu item, and a rebindable keyboard command with **F11** as the default. The `FullScreen` setting is kept, so the choice is remembered at the next start. - **Two modes, selectable in Preferences > Graphics:** - **Borderless:** a desktop-sized window, the same as the desktop resolution. Alt-tab and overlays are instant. - **Exclusive:** on Windows, Vulkan's `VK_EXT_full_screen_exclusive` with application-controlled acquire and release. On Linux, the closest equivalent (a direct, unredirected fullscreen surface; check what X11 and Wayland compositors actually give through SDL3). - **Default:** whichever performs best on the running platform and driver, decided from measurement (frame time, pacing and latency), not assumption. On Windows, exclusive usually allows independent flip with fewer compositor copies; recent Windows also promotes borderless to independent flip in many cases. Linux compositors behave differently again. Record what was measured. - **Toggling is a swapchain resize/recreate.** The window and Vulkan surface are not rebuilt unless exclusive mode requires it. Keep the existing resize path and the frame pacing. - **Fix `afterDialog()`** so it restores fullscreen after a dialog. - **Keep the existing Windows 11 24H2 workaround** (window size from the desktop mode), or replace it if runtime switching makes it unnecessary. - **Multiple monitors:** fullscreen goes to the monitor the window is on. Leaving fullscreen restores the previous window position and size. ## Verify - F11 and the menu item toggle both ways, with no restart, on Windows and Linux. - Both modes work and can be switched in Graphics preferences; the default is the measured best. - Alt-tab, minimise and dialogs behave, and fullscreen survives native dialogs. - No device loss or swapchain errors when toggling repeatedly. - Frame pacing is unchanged or better than windowed.
sky_line added this to the Slipstream project 2026-10-21 18:03:13 +00:00
Author
Owner

Fixed in 1.4.1 (176e8efc71). Reopen if you still see it.

Fixed in 1.4.1 (176e8efc71). Reopen if you still see it.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
sky_line/Slipstream#919
No description provided.