Screen consumer enhancements: flexible aspect ratio, mipmaps, multi-display spanning#1718
Screen consumer enhancements: flexible aspect ratio, mipmaps, multi-display spanning#1718gmeisel01 wants to merge 2 commits into
Conversation
…display spanning, always-on-top
|
@gmeisel01 how are the brightness and saturation boost different from the same mixer commands? https://github.com/CasparCG/help/wiki/AMCP-Protocol#mixer-commands |
|
When I first envisioned this feature, the intent was to provide independent calibration control per screen consumer — as opposed to the mixer which operates at the channel level affecting all destinations equally. In a scenario with multiple screen consumers on separate outputs that distinction is meaningful. Upon further reflection however, the correct approach to driving large LED walls across multiple GPU outputs — whether through NVIDIA Mosaic or Windows extended desktop — is to present them as a single unified pixel space to avoid any tearing at output boundaries. That means a single screen consumer with a single shader, which makes the per-consumer argument moot. With that in mind you're right — brightness and saturation duplicate what the mixer is already providing. They were removed in the latest commit. |
Screen Consumer Enhancements
This PR adds several improvements to the screen consumer that have been
requested by the community across multiple open issues, plus a bug fix
for non-standard canvas sizes.
Bug Fix — GL Viewport for Non-Standard Canvas Sizes
When
<width>and<height>are configured to a non-standard size(ultra-wide, LED wall, multi-display span), the GL render target was
initialized to the channel's native format dimensions rather than the
configured window size. Content was rendered at native resolution and
simply stretched to fill the larger window rather than rendered at full
canvas resolution.
Fix: Set the initial
glViewporttoscreen_width_ x screen_height_— the actual configured window dimensions.
Note: For non-standard canvas sizes the channel
<video-mode>mustalso reference a custom resolution defined in
<video-modes>. Withoutthis the mixer itself operates at the native format width regardless of
the screen consumer window size. See the updated
casparcg.configreference comments for documentation and a complete working example.
Addresses: #487, #619, #995, #1284
New Configuration Options
<aspect-ratio>— Extended to accept:4:3,16:93840:1080,5760:10803.555defaultor empty — auto-derives from format square dimensions<always-on-top>— Keeps the output window above all other windows.Addresses #995.
<borderless>— Removes window chrome for clean fullscreen spanningacross displays without requiring OS-level display spanning solutions.
<x>/<y>/<width>/<height>— Full position and sizecontrol in both windowed and fullscreen modes, including multi-display
spanning via explicit position + size. Addresses #487, #1284.
<brightness-boost>— Per-consumer linear brightness multiplier(default 1.0).
<saturation-boost>— Per-consumer linear saturation multiplier(default 1.0).
<enable-mipmaps>— Enables mipmapping for improved quality whencontent is displayed significantly smaller than its native resolution.
<gpu-texture>— GPU texture strategy for reduced CPU-GPU transferoverhead on supported hardware.
Updated casparcg.config Reference
The
<screen>and<video-modes>sections in the reference config havebeen updated to document:
48000 / fps) with examplesTesting
Tested on: