]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - vid_sdl.c
README.md: various doc adjustments
[xonotic/darkplaces.git] / vid_sdl.c
index 5c7721a9687d17218ada1be6ae443cfeb70d2955..11868087460cb021753c97bc82a5f442ee2fc742 100644 (file)
--- a/vid_sdl.c
+++ b/vid_sdl.c
@@ -1480,8 +1480,12 @@ static void VID_SetVsync_c(cvar_t *var)
 
        if (!context)
                return;
+/*
+Can't check first: on Wayland SDL_GL_GetSwapInterval() may initially return 0 when vsync is on.
+On Xorg it returns the correct value.
        if (SDL_GL_GetSwapInterval() == vsyncwanted)
                return;
+*/
 
        if (SDL_GL_SetSwapInterval(vsyncwanted) >= 0)
                Con_DPrintf("Vsync %s\n", vsyncwanted ? "activated" : "deactivated");
@@ -1489,6 +1493,12 @@ static void VID_SetVsync_c(cvar_t *var)
                Con_Printf(CON_ERROR "ERROR: can't %s vsync because %s\n", vsyncwanted ? "activate" : "deactivate", SDL_GetError());
 }
 
+static void VID_SetHints_c(cvar_t *var)
+{
+       SDL_SetHint(SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH,     vid_mouse_clickthrough.integer     ? "1" : "0");
+       SDL_SetHint(SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS, vid_minimize_on_focus_loss.integer ? "1" : "0");
+}
+
 void VID_Init (void)
 {
        SDL_version version;
@@ -1519,6 +1529,8 @@ void VID_Init (void)
        Cvar_RegisterCallback(&vid_resizable,              VID_ChangeDisplay_c);
        Cvar_RegisterCallback(&vid_borderless,             VID_ChangeDisplay_c);
        Cvar_RegisterCallback(&vid_vsync,                  VID_SetVsync_c);
+       Cvar_RegisterCallback(&vid_mouse_clickthrough,     VID_SetHints_c);
+       Cvar_RegisterCallback(&vid_minimize_on_focus_loss, VID_SetHints_c);
 
        if (SDL_Init(SDL_INIT_VIDEO) < 0)
                Sys_Error ("Failed to init SDL video subsystem: %s", SDL_GetError());
@@ -1714,9 +1726,13 @@ static qbool VID_InitModeGL(viddef_mode_t *mode)
 #endif
        }
 
+       // DPI scaling prevents use of the native resolution, causing blurry rendering
+       // and/or mouse cursor problems, so we need to opt-out.
+#ifdef WIN32
+       SDL_SetHint(SDL_HINT_WINDOWS_DPI_AWARENESS, "1");
+#endif
 
-       if (vid_mouse_clickthrough.integer)
-               SDL_SetHint(SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH, "1");
+       VID_SetHints_c(NULL);
 
        SDL_GL_SetAttribute (SDL_GL_DOUBLEBUFFER, 1);
        SDL_GL_SetAttribute (SDL_GL_RED_SIZE, 8);