Fullscreen spans all monitors when capturing All Displays - #289
Conversation
|
Interesting, I guess it doesn't say that in Microsoft's docs so AI couldn't know but you can pass NULL HMONITOR and that will capture all desktops (it's already what ShaderGlass defaults to). So to handle multi-monitor output all that's needed is to make the window span all screens (you can kinda resize it manually even now but can't make fully borderless). |
371abd8 to
3c0abf5
Compare
|
Thanks for the feedback @mausimus! Reworked as you suggested. Dropped the multi-monitor compositor - "All Displays" (NULL HMONITOR) already captures every screen and ShaderGlass::Initialize already applies the virtual-screen offset, so the only change needed was making Fullscreen span all monitors. Now a single commit: when "All Displays" is active, ToggleBorderless sizes to SM_X/Y/CX/CYVIRTUALSCREEN; otherwise unchanged. Down to ShaderWindow.cpp + a one-line MANUAL.html note. Builds clean on Release|x64. |
The previous approach added a custom multi-monitor compositor, but capturing
all desktops already works in ShaderGlass via a NULL HMONITOR ("All Displays").
The only missing piece was making the borderless/Fullscreen window span the
whole virtual desktop instead of just the nearest monitor, which this does.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
3c0abf5 to
68a9891
Compare
|
Ok I tried it and it does work, some people have indeed asked for this feature. The issues I have are:
|
|
Hello, yes, that makes sense. My use case is slightly different from most Shaderglass users, as I use particular shaders to reduce eye strain, where multi-display spanning makes more sense. I'll get the PR updated accordingly. |
Add an Output menu checkbox so multi-monitor fullscreen is opt-in and only applies when All Displays capture is active, keeping single-monitor fullscreen as the default. Co-authored-by: Cursor <cursoragent@cursor.com>
|
Hello, I've updated the PR. What changed
How to use it Input → Desktop → All Displays Happy to adjust anything if you'd like it handled differently. |
Summary
Makes Fullscreen (Ctrl+Shift+G) span the entire virtual desktop (all monitors) when capturing All Displays, instead of only the nearest monitor.
Motivation
ShaderGlass already captures every connected monitor via the existing "All Displays" input (NULL
HMONITOR), and applies the correct virtual-screen offset for Glass alignment. The only gap was Fullscreen:ToggleBorderlessusedMonitorFromWindowand so only ever covered one monitor, leaving no way to span the overlay across all displays.What changed
ToggleBorderless— when "All Displays" is the active capture (capture API, no window, NULL monitor, not image/device), sizes the borderless window toSM_XVIRTUALSCREEN / SM_YVIRTUALSCREEN / SM_CXVIRTUALSCREEN / SM_CYVIRTUALSCREEN. All other capture modes are unchanged (still nearest monitor).SaveProfile— persists the "All Displays" selection by writingCaptureDesktop "All Displays"for the NULL-monitor case.LoadProfilealready matches that name, so the selection (and its menu checkmark) is restored on load instead of falling through to nothing selected. Only applies on Win10 2004+/Win11 where the NULL-monitor entry exists; never for image/device/window captures.MANUAL.html— one-line note documenting the behaviour.How to use
Single-monitor, window, and file capture behaviour is unchanged.