From 98cce2272f95c6adf16728cb83538d25062404b2 Mon Sep 17 00:00:00 2001 From: John-Michael Mulesa Date: Mon, 21 Sep 2026 18:30:10 -0400 Subject: [PATCH] Refresh glConfig window and UI viewport sizes when the GL context is set up glConfig.vidWidth/vidHeight and the uiViewport rect were only refreshed in GLimp_SwapBuffers, so anything that ran between GLimp_Init or GLimp_SetScreenParms and the first present of a new mode laid itself out from the previous mode's numbers. Pull the refresh into SDL3_SyncGLConfigWindowDimensions() and call it from all three places. The Vulkan backend already refreshes these at init. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_017RU1i6R3gN4cdKRELGiCEc --- src/renderer/OpenGL/gl_ContextSDL3.cpp | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/renderer/OpenGL/gl_ContextSDL3.cpp b/src/renderer/OpenGL/gl_ContextSDL3.cpp index 42bf4bb9d..78934b2fd 100644 --- a/src/renderer/OpenGL/gl_ContextSDL3.cpp +++ b/src/renderer/OpenGL/gl_ContextSDL3.cpp @@ -98,6 +98,17 @@ static void SDL3_WindowParmsFromGlimpParms(const glimpParms_t &src, renderWindow dst.multiSamples = src.multiSamples; } +static void SDL3_SyncGLConfigWindowDimensions( const renderModuleWindowInfo_t &windowInfo ) { + if ( windowInfo.pixelWidth > 0 && windowInfo.pixelHeight > 0 ) { + glConfig.vidWidth = windowInfo.pixelWidth; + glConfig.vidHeight = windowInfo.pixelHeight; + } + glConfig.uiViewportX = windowInfo.uiViewportX; + glConfig.uiViewportY = windowInfo.uiViewportY; + glConfig.uiViewportWidth = windowInfo.uiViewportWidth; + glConfig.uiViewportHeight = windowInfo.uiViewportHeight; +} + static bool SDL3_EnsureGLContextCurrent(const char *operation) { if (!s_glWindow || !s_glContext) { return false; @@ -489,6 +500,7 @@ bool GLimp_Init(glimpParms_t parms) { s_glWindowServices->RefreshNativeWindowHandles(&windowInfo); s_glHDC = windowInfo.nativeDisplayHandle; + SDL3_SyncGLConfigWindowDimensions(windowInfo); SDL3_LoadWGLExtensions(); if (r_swapInterval.IsModified()) { r_swapInterval.ClearModified(); @@ -525,6 +537,7 @@ bool GLimp_SetScreenParms(glimpParms_t parms) { renderModuleWindowInfo_t windowInfo; windowServices->RefreshNativeWindowHandles(&windowInfo); s_glHDC = windowInfo.nativeDisplayHandle; + SDL3_SyncGLConfigWindowDimensions(windowInfo); r_swapInterval.SetModified(); if (r_swapInterval.IsModified()) { r_swapInterval.ClearModified(); @@ -575,14 +588,7 @@ void GLimp_SwapBuffers(void) { if (s_glWindow && s_glWindowServices != NULL && s_glWindowServices->RefreshNativeWindowHandles != NULL) { renderModuleWindowInfo_t windowInfo; s_glWindowServices->RefreshNativeWindowHandles(&windowInfo); - if (windowInfo.pixelWidth > 0 && windowInfo.pixelHeight > 0) { - glConfig.vidWidth = windowInfo.pixelWidth; - glConfig.vidHeight = windowInfo.pixelHeight; - } - glConfig.uiViewportX = windowInfo.uiViewportX; - glConfig.uiViewportY = windowInfo.uiViewportY; - glConfig.uiViewportWidth = windowInfo.uiViewportWidth; - glConfig.uiViewportHeight = windowInfo.uiViewportHeight; + SDL3_SyncGLConfigWindowDimensions(windowInfo); } R_RendererMetrics_EndPresentPhase(RENDERER_PRESENT_WINDOW_STATE, windowBegin);