[PR #392] [CLOSED] feat: advertise comprehensive display modes (ultrawide, 16:10, 3:2) #439

Closed
opened 2026-10-15 13:00:34 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/games-on-whales/wolf/pull/392
Author: @JBailes
Created: 4/14/2026
Status: ❌ Closed

Base: stable ← Head: feat/comprehensive-display-modes


📝 Commits (2)

  • 4c6bb4b feat: advertise comprehensive display modes (ultrawide, 16:10, 3:2)
  • 14c64a5 Committing clang-format changes

📊 Changes

1 file changed (+79 additions, -24 deletions)

View changed files

📝 src/moonlight-server/state/data-structures.hpp (+79 -24)

📄 Description

Summary

  • Expands the hard-coded DISPLAY_CONFIGURATIONS list in state/data-structures.hpp from 16:9-only (720p/1080p/1440p/2160p/8K) to a comprehensive catalog covering 16:9, 16:10, 3:2, 21:9, 32:9, and 4:3/5:4.
  • Replaces the static literal with a small generator lambda that crosses each resolution with 30/60/90/120 Hz (plus 144/165/240 Hz for heights ≤ 1440p).

Motivation

Moonlight clients build their resolution dropdown — and, on Moonlight-Qt, gate the "custom resolution" input — against the server's advertised <SupportedDisplayMode> list. Users with:

  • Ultrawide (2560x1080, 3440x1440, 3840x1600, 5120x2160)
  • Super-ultrawide (3840x1080, 5120x1440, 7680x2160)
  • 16:10 (2560x1600, 2880x1800, 1920x1200, 3840x2400, …)
  • 3:2 laptops — Framework 13 (2256x1504), Surface, MBP-style (3000x2000, 3240x2160, 2560x1700)

could not stream at their native resolution, even though the rest of the pipeline already supports it.

Why this is safe

The /launch handler (rest/endpoints.hpp:376-379), session plumbing (sessions/common.cpp:35-37), and waylanddisplaysrc invocation (streaming/streaming.cpp:98-106) all pass client-requested WxH through verbatim with no validation or clamping. The advertised list is the only gate. This change is purely a protocol-advertising expansion — no pipeline behavior changes.

Strict clients (e.g. Nintendo Switch Moonlight) that refuse non-advertised modes now see a wider set too, per the existing comment in data-structures.hpp.

Test plan

  • cmake build succeeds
  • GET /serverinfo returns the new modes in <SupportedDisplayMode>
  • Moonlight-Qt shows ultrawide / 3:2 modes in its resolution dropdown (or accepts them as custom)
  • Streaming at a non-16:9 mode (e.g. 2256x1504@60, 3440x1440@120) launches and renders correctly
  • Existing 16:9 modes still work unchanged

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/games-on-whales/wolf/pull/392 **Author:** [@JBailes](https://github.com/JBailes) **Created:** 4/14/2026 **Status:** ❌ Closed **Base:** `stable` ← **Head:** `feat/comprehensive-display-modes` --- ### 📝 Commits (2) - [`4c6bb4b`](https://github.com/games-on-whales/wolf/commit/4c6bb4bd61eadf81d0de1c1ba1f00271e2b85f9f) feat: advertise comprehensive display modes (ultrawide, 16:10, 3:2) - [`14c64a5`](https://github.com/games-on-whales/wolf/commit/14c64a5491414d1e89334de5d12eeef56d3139d3) Committing clang-format changes ### 📊 Changes **1 file changed** (+79 additions, -24 deletions) <details> <summary>View changed files</summary> 📝 `src/moonlight-server/state/data-structures.hpp` (+79 -24) </details> ### 📄 Description ## Summary - Expands the hard-coded `DISPLAY_CONFIGURATIONS` list in `state/data-structures.hpp` from 16:9-only (720p/1080p/1440p/2160p/8K) to a comprehensive catalog covering 16:9, 16:10, 3:2, 21:9, 32:9, and 4:3/5:4. - Replaces the static literal with a small generator lambda that crosses each resolution with 30/60/90/120 Hz (plus 144/165/240 Hz for heights ≤ 1440p). ## Motivation Moonlight clients build their resolution dropdown — and, on Moonlight-Qt, gate the "custom resolution" input — against the server's advertised `<SupportedDisplayMode>` list. Users with: - **Ultrawide** (2560x1080, 3440x1440, 3840x1600, 5120x2160) - **Super-ultrawide** (3840x1080, 5120x1440, 7680x2160) - **16:10** (2560x1600, 2880x1800, 1920x1200, 3840x2400, …) - **3:2 laptops** — Framework 13 (**2256x1504**), Surface, MBP-style (3000x2000, 3240x2160, 2560x1700) could not stream at their native resolution, even though the rest of the pipeline already supports it. ## Why this is safe The `/launch` handler (`rest/endpoints.hpp:376-379`), session plumbing (`sessions/common.cpp:35-37`), and `waylanddisplaysrc` invocation (`streaming/streaming.cpp:98-106`) all pass client-requested `WxH` through verbatim with no validation or clamping. The advertised list is the only gate. This change is purely a protocol-advertising expansion — no pipeline behavior changes. Strict clients (e.g. Nintendo Switch Moonlight) that refuse non-advertised modes now see a wider set too, per the existing comment in `data-structures.hpp`. ## Test plan - [ ] `cmake` build succeeds - [ ] `GET /serverinfo` returns the new modes in `<SupportedDisplayMode>` - [ ] Moonlight-Qt shows ultrawide / 3:2 modes in its resolution dropdown (or accepts them as custom) - [ ] Streaming at a non-16:9 mode (e.g. 2256x1504@60, 3440x1440@120) launches and renders correctly - [ ] Existing 16:9 modes still work unchanged --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
bsakaguchi 2026-10-15 13:00:34 +00:00
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
games-on-whales/wolf#439
No description provided.