uhexen2 icon indicating copy to clipboard operation
uhexen2 copied to clipboard

Upcoming libsdl2-2.23 and HiDPI

Open sjnewbury opened this issue 3 years ago • 1 comments

The upcoming release of SDL2 has reworked the HiDPI support and doesn't need the manual scaling_factor adjustment anymore. I've inlined a tested patch to the sdl2.patch which removes it, but that does mean it will only work with subsequent SDL releases. My thinking is this doesn't matter too much since SDL2 support is still optional and it could just be noted that HiDPI support requires libsdl2-2.23 or greater going forwards.. Maybe it would be better to check for the SDL2 version?

--- ./patches/sdl2.patch~       2022-06-23 10:33:59.000000000 +0100
+++ ./patches/sdl2.patch        2022-06-23 10:44:12.101013273 +0100
@@ -78,7 +78,7 @@
 +#if SDLQUAKE == 2
 +      int display_index;
 +      SDL_DisplayMode desktop_mode;
-+      int screen_w, screen_h, scaling_factor = 100;
++      int screen_w, screen_h;
 +#endif
  
        in_mode_set = true;
@@ -91,7 +91,7 @@
        // setup the attributes
        if (bpp >= 32)
        {
-@@ -452,6 +479,81 @@ static qboolean VID_SetMode (int modenum)
+@@ -452,6 +479,72 @@ static qboolean VID_SetMode (int modenum)
  
        Con_SafePrintf ("Requested mode %d: %dx%dx%d\n", modenum, modelist[modenum].width, modelist[mo
  
@@ -113,11 +113,6 @@
 +                      SDL_GetWindowSize(window, &screen_w, &screen_h);
 +                      SDL_GL_GetDrawableSize(window, &drawable_w, &drawable_h);
 +
-+                      scaling_factor = (100 * drawable_w) / screen_w;
-+
-+                      if (scaling_factor != 100)
-+                              Con_Printf ("High DPI scaling in effect! (%d%%)\n", scaling_factor);
-+
 +                      if (screen_w == desktop_mode.w && screen_h == desktop_mode.h)
 +                      {
 +                              flags = SDL_WINDOW_FULLSCREEN_DESKTOP;
@@ -148,10 +143,6 @@
 +              // Now that we have the fullscreen flags, set them
 +              SDL_SetWindowFullscreen(window, flags);
 +
-+      // Modify mode with real width and height
-+      modelist[modenum].width = modelist[modenum].width * scaling_factor / 100;
-+      modelist[modenum].height = modelist[modenum].height * scaling_factor / 100;
-+
 +      glcontext = SDL_GL_CreateContext(window);
 +      if (!glcontext)
 +      {
@@ -173,7 +164,7 @@
        VID_SetIcon();
  
        screen = SDL_SetVideoMode (modelist[modenum].width, modelist[modenum].height, bpp, flags);
-@@ -473,9 +575,13 @@ static qboolean VID_SetMode (int modenum)
+@@ -473,9 +566,13 @@ static qboolean VID_SetMode (int modenum)


sjnewbury avatar Jun 23 '22 10:06 sjnewbury

Maybe it would be better to check for the SDL2 version?

Possibly, yes

sezero avatar Jun 23 '22 10:06 sezero