This guide covers OpenQ4 display/window settings for end users, including multi-monitor behavior and modern fullscreen/window handling.
- Press
Alt+Enterto toggle fullscreen/windowed mode (fast path usesvid_restart partial). - Run
listDisplaysin the console to list monitor indices forr_screen. - On SDL3 builds, run
listDisplayModes [displayIndex]to list available exclusive fullscreen modes. - After changing video cvars, run
vid_restart(orvid_restart partialfor quick window/fullscreen transitions).
| Setting | Default | What it does |
|---|---|---|
r_fullscreen |
1 |
1 = fullscreen, 0 = windowed. |
r_fullscreenDesktop |
1 |
1 = native desktop fullscreen (recommended). 0 = exclusive fullscreen using r_mode/r_custom*. |
r_borderless |
0 |
Borderless window mode when r_fullscreen 0. |
r_windowWidth |
1280 |
Windowed width. |
r_windowHeight |
720 |
Windowed height. |
win_xpos |
(auto) | Window X position (updated automatically when you move the window). |
win_ypos |
(auto) | Window Y position (updated automatically when you move the window). |
r_mode |
3 |
Preset mode index. Use -1 for custom width/height. |
r_customWidth |
720 |
Custom width used when r_mode -1. |
r_customHeight |
486 |
Custom height used when r_mode -1. |
r_displayRefresh |
0 |
Requested fullscreen refresh rate (0 = default/driver choice). |
r_screen |
-1 |
SDL3 monitor target (-1 auto/current, 0..N explicit index). |
| Setting | Default | What it does |
|---|---|---|
r_multiSamples |
0 |
MSAA sample count for the main scene render target (0, 2, 4, 8, 16; 0 = off). |
r_postAA |
0 |
Post AA mode (0 = off, 1 = official SMAA 1x using the medium preset). |
r_msaaAlphaToCoverage |
1 |
Enables alpha-to-coverage for perforated/alpha-tested materials when MSAA is active. Helps foliage/fences look cleaner. |
r_msaaResolveDepth |
0 |
Also resolves depth during MSAA resolve. Usually leave this off unless debugging a depth-dependent edge case. |
r_multiSamples value guide:
0: disabled (fastest, most aliasing).2: low-cost MSAA uplift for modest GPUs.4: recommended default quality/performance balance.8: high quality, noticeably higher GPU cost.16: enthusiast/high-end setting where supported.1usually provides no meaningful benefit and is not recommended.
Notes:
r_multiSamplesis hardware-limited and may be clamped by the driver/GPU.- Changing
r_multiSamplesshould be followed byvid_restart. r_postAA,r_msaaAlphaToCoverage, andr_msaaResolveDepthcan be changed at runtime, but avid_restartis still safe if behavior looks stale.
- Default behavior is desktop-native fullscreen (
r_fullscreenDesktop 1): fullscreen matches your current desktop resolution and does not change Windows display mode. - For exclusive fullscreen (explicit mode switch), set
r_fullscreenDesktop 0. In this mode,r_mode/r_customWidth/r_customHeightcontrol the requested fullscreen resolution.
Notes:
- When
r_fullscreenDesktop 1,r_modeandr_custom*are ignored for fullscreen sizing (they still exist for legacy configs and exclusive mode). - Use
listDisplayModesto see what your monitor actually supports in exclusive mode.
- When windowed (
r_fullscreen 0,r_borderless 0), resizing updatesr_windowWidth/r_windowHeightautomatically. - Moving the window updates
win_xpos/win_yposautomatically. - When switching fullscreen -> windowed, OpenQ4 restores the last remembered windowed size/position (it should not come back as a fullscreen-sized window).
- If you unplug/rearrange monitors and the saved window position becomes off-screen, OpenQ4 will recover by clamping/recentering the window back onto a valid display.
- If you set
r_screento an explicit display index (0..N), window placement is constrained to that display's usable area. Withr_screen -1, placement is respected unless it becomes invalid/off-screen. - SDL3 tip: hold
Shiftwhile resizing to snap the window aspect ratio to common targets (4:3, 16:9, 16:10, 21:9, etc.).
r_aspectRatiois deprecated/ignored. Aspect ratio and FOV behavior are derived automatically from the current render size, so the game follows any aspect ratio without manual selection.- Weapon gameplay zoom uses the same gameplay FOV conversion path as normal view FOV, so authored weapon zoom values keep consistent framing/magnification across aspect ratios.
- In multiplayer, zoomed first-person view suppresses view bob while scoped so reticle tracking stays stable during movement.
- Scope GUI yaw tracking for zoom overlays follows the weapon/player view axis path, improving scope alignment while turning.
These settings control first-person viewmodel rendering (the weapon on screen). They are client-side tuning controls and are not gameplay/network authority cvars.
| Setting | Default | What it does |
|---|---|---|
cl_gunfov |
0 |
View-weapon FOV override (0 = follow current view FOV). |
cl_gunfov_adjust |
1 |
Aspect policy for cl_gunfov: 1 keeps classic 4:3-style weapon framing across screen ratios, 0 uses direct viewport-based FOV conversion. |
cl_gun_x |
0 |
Client weapon X/right offset. |
cl_gun_y |
0 |
Client weapon Y/forward offset. |
cl_gun_z |
0 |
Client weapon Z/up offset. |
Notes:
cl_gunfovvalues above0are clamped to a safe range internally for weapon projection.- Weapon projection is handled in renderer weapon-depth path, so narrow/wide aspect changes are handled consistently.
cl_gun_x/y/zare additive with legacyg_gunX/Y/Zoffsets. Prefercl_gun_*for user config.
This controls 2D UI layout behavior (menu, HUD, console, loading/initializing screens):
| Setting | Default | What it does |
|---|---|---|
ui_aspectCorrection |
1 |
1 keeps classic 4:3-style correction for all 2D UI. 0 stretches 2D UI to the full 2D draw region. |
When the render surface spans multiple monitors:
- 2D elements (console, HUD, menus, loading/initializing UI) are constrained to the primary display region.
- 2D aspect behavior inside that region is controlled by
ui_aspectCorrection. - Menu cursor mapping follows the same 2D region so mouse interaction stays aligned.
3D world rendering is unchanged by these UI cvars.
seta r_screen -1
seta r_fullscreenDesktop 1
seta r_fullscreen 1
seta r_multiSamples 4
seta r_postAA 1
seta r_msaaAlphaToCoverage 1
seta ui_aspectCorrection 1
vid_restartseta r_fullscreen 0
seta r_borderless 1
seta r_screen 1
vid_restartseta r_fullscreen 1
seta r_fullscreenDesktop 0
seta r_mode -1
seta r_customWidth 2560
seta r_customHeight 1440
vid_restartseta ui_aspectCorrection 0seta cl_gunfov 90
seta cl_gunfov_adjust 1
seta cl_gun_z -1.15seta cl_gunfov 0
seta cl_gun_x 0.5
seta cl_gun_y -0.5
seta cl_gun_z -0.5seta r_multiSamples 2
seta r_postAA 1
seta r_msaaAlphaToCoverage 1
vid_restartseta r_multiSamples 8
seta r_postAA 1
seta r_msaaAlphaToCoverage 1
vid_restart- If a display change does not apply, run
vid_restart. - If monitor targeting looks wrong, run
listDisplays, then setr_screento the correct index and restart video. - If UI appears too centered/boxed on wide displays, set
ui_aspectCorrection 0. - If the window opens off-screen after a monitor change, set
r_screenexplicitly to the target monitor and restart video; OpenQ4 will also attempt to recover automatically. - If AA settings seem unchanged, check values with
r_multiSamples,r_postAA, andr_msaaAlphaToCoverage, then runvid_restart. - If enabling
r_postAA 1turns the 3D viewport black on an older build, setr_postAA 0, runvid_restart, and attachopenq4.logplus the output ofgfxInfo. Current builds use a three-pass GLSL SMAA path and should no longer hit the old feedback-loop failure. RenderDoc capture is not yet supported on the current OpenQ4 renderer.