Addressed the problem with DPI inside the engine

Addressed the problem with DPI inside the engine

diff --git a/src/engine/GPURenderer/r_glimp.cpp b/src/engine/GPURenderer/r_glimp.cpp
index a38594a..38f5f1c 100644
--- a/src/engine/GPURenderer/r_glimp.cpp
+++ b/src/engine/GPURenderer/r_glimp.cpp
@@ -128,7 +128,6 @@ static sint GLimp_CompareModes( const void* a, const void* b )
     }
 }
 
-
 /*
 ===============
 GLimp_DetectAvailableModes
@@ -149,6 +148,7 @@ static void GLimp_DetectAvailableModes( void )
         CL_RefPrintf( PRINT_WARNING, "Couldn't get window display index, no resolutions detected: %s\n", SDL_GetError() );
         return;
     }
+    
     numSDLModes = SDL_GetNumDisplayModes( display );
     
     if( SDL_GetWindowDisplayMode( SDL_window, &windowMode ) < 0 || numSDLModes <= 0 )
@@ -389,6 +389,39 @@ static void GLimp_ClearProcAddresses( void )
 
 /*
 ===============
+GLimp_GetDPIScale
+===============
+*/
+static float32 GLimp_GetDPIScale( sint display )
+{
+    float32 scale = 1.0f;
+    
+    pointer driver = SDL_GetCurrentVideoDriver();
+    
+    if( !::strcmp( driver, "windows" ) )
+    {
+        float32 ddpi;
+        
+        if( !SDL_GetDisplayDPI( display, &ddpi, nullptr, nullptr ) )
+        {
+            scale = ddpi / 96.0f;
+        }
+    }
+    else if( !::strcmp( driver, "x11" ) )
+    {
+        float32 ddpi;
+        
+        if( !SDL_GetDisplayDPI( display, &ddpi, nullptr, nullptr ) )
+        {
+            scale = ::roundf( ddpi / 96.0f );
+        }
+    }
+
+    return scale;
+}
+
+/*
+===============
 GLimp_SetMode
 ===============
 */
@@ -679,6 +712,8 @@ static sint GLimp_SetMode( sint mode, bool fullscreen, bool noborder, bool fixed
             }
         }
         
+        glConfig.displayScale = GLimp_GetDPIScale( display );
+        
         SDL_SetWindowIcon( SDL_window, icon );
         
         if( !fixedFunction )
@@ -786,7 +821,6 @@ static sint GLimp_SetMode( sint mode, bool fullscreen, bool noborder, bool fixed
         return RSERR_UNKNOWN;
     }
     
-    
     if( !SDL_window )
     {
         CL_RefPrintf( PRINT_ALL, "Couldn't get a visual\n" );
@@ -810,15 +844,6 @@ static bool GLimp_StartDriverAndSetMode( sint mode, bool fullscreen, bool nobord
 {
     rserr_t err;
     SDL_DisplayMode modeSDL;
-    sint num_displays, dpy;
-    
-    if( fullscreen && cvarSystem->VariableIntegerValue( "in_nograb" ) )
-    {
-        CL_RefPrintf( PRINT_DEVELOPER, "Fullscreen not allowed with in_nograb 1\n" );
-        cvarSystem->Set( "r_fullscreen", "0" );
-        r_fullscreen->modified = false;
-        fullscreen = false;
-    }
     
     if( !SDL_WasInit( SDL_INIT_VIDEO ) )
     {
@@ -835,62 +860,12 @@ static bool GLimp_StartDriverAndSetMode( sint mode, bool fullscreen, bool nobord
         cvarSystem->Set( "r_sdlDriver", driverName );
     }
     
-    num_displays = SDL_GetNumVideoDisplays();
-    
-    CL_RefPrintf( PRINT_DEVELOPER, "See %d displays.\n", num_displays );
-    
-    for( dpy = 0; dpy < num_displays; dpy++ )
+    if( fullscreen && cvarSystem->VariableIntegerValue( "in_nograb" ) )
     {
-        const sint num_modes = SDL_GetNumDisplayModes( dpy );
-        SDL_Rect rect = { 0, 0, 0, 0 };
-        float32 ddpi, hdpi, vdpi;
-        sint m;
-        
-        SDL_GetDisplayBounds( dpy, &rect );
-        CL_RefPrintf( PRINT_DEVELOPER, "%d: \"%s\" (%dx%d, (%d, %d)), %d modes.\n", dpy, SDL_GetDisplayName( dpy ), rect.w, rect.h, rect.x, rect.y, num_modes );
-        
-        if( SDL_GetDisplayDPI( dpy, &ddpi, &hdpi, &vdpi ) == -1 )
-        {
-            Com_Error( ERR_DROP, " DPI: failed to query (%s)\n", SDL_GetError() );
-        }
-        else
-        {
-            CL_RefPrintf( PRINT_DEVELOPER, "DPI: ddpi=%f; hdpi=%f; vdpi=%f\n", ddpi, hdpi, vdpi );
-        }
-        
-        if( SDL_GetCurrentDisplayMode( dpy, &modeSDL ) == -1 )
-        {
-            Com_Error( ERR_DROP, " CURRENT: failed to query (%s)\n", SDL_GetError() );
-        }
-        else
-        {
-            CL_RefPrintf( PRINT_DEVELOPER, "CURRENT", &modeSDL );
-        }
-        
-        if( SDL_GetDesktopDisplayMode( dpy, &modeSDL ) == -1 )
-        {
-            Com_Error( ERR_DROP, " DESKTOP: failed to query (%s)\n", SDL_GetError() );
-        }
-        else
-        {
-            CL_RefPrintf( PRINT_DEVELOPER, "DESKTOP", &modeSDL );
-        }
-        
-        for( m = 0; m < num_modes; m++ )
-        {
-            if( SDL_GetDisplayMode( dpy, m, &modeSDL ) == -1 )
-            {
-                Com_Error( ERR_DROP, " MODE %d: failed to query (%s)\n", m, SDL_GetError() );
-            }
-            else
-            {
-                valueType prefix[64];
-                snprintf( prefix, sizeof( prefix ), " MODE %d", m );
-                CL_RefPrintf( PRINT_DEVELOPER, prefix, &modeSDL );
-            }
-        }
-        
-        CL_RefPrintf( PRINT_DEVELOPER, "\n" );
+        CL_RefPrintf( PRINT_DEVELOPER, "Fullscreen not allowed with in_nograb 1\n" );
+        cvarSystem->Set( "r_fullscreen", "0" );
+        r_fullscreen->modified = false;
+        fullscreen = false;
     }
     
     if( r_stereoEnabled->integer )
diff --git a/src/engine/GPURenderer/r_init.cpp b/src/engine/GPURenderer/r_init.cpp
index 62cb5c3..45536ec 100644
--- a/src/engine/GPURenderer/r_init.cpp
+++ b/src/engine/GPURenderer/r_init.cpp
@@ -1152,14 +1152,10 @@ void GfxInfo_f( void )
         "fullscreen"
     };
     
-    if( !r_verbose->integer )
-    {
-        return;
-    }
-    
     CL_RefPrintf( PRINT_ALL, "GL_VENDOR: %s\n", glConfig.vendor_string );
     CL_RefPrintf( PRINT_ALL, "GL_RENDERER: %s\n", glConfig.renderer_string );
     CL_RefPrintf( PRINT_ALL, "GL_VERSION: %s\n", glConfig.version_string );
+    
 #ifdef _DEBUG
     if( qglGetStringi )
     {
@@ -1181,6 +1177,7 @@ void GfxInfo_f( void )
     CL_RefPrintf( PRINT_ALL, "GL_MAX_TEXTURE_IMAGE_UNITS: %d\n", glConfig.numTextureUnits );
     CL_RefPrintf( PRINT_ALL, "PIXELFORMAT: color(%d-bits) Z(%d-bit) stencil(%d-bits)\n", glConfig.colorBits, glConfig.depthBits, glConfig.stencilBits );
     CL_RefPrintf( PRINT_ALL, "MODE: %d, %d x %d %s hz:", r_mode->integer, glConfig.vidWidth, glConfig.vidHeight, fsstrings[r_fullscreen->integer == 1] );
+    
     if( glConfig.displayFrequency )
     {
         CL_RefPrintf( PRINT_ALL, "%d\n", glConfig.displayFrequency );
@@ -1189,6 +1186,9 @@ void GfxInfo_f( void )
     {
         CL_RefPrintf( PRINT_ALL, "N/A\n" );
     }
+    
+    CL_RefPrintf( PRINT_ALL, "Display Scale: %d%%\n", ( sint )glConfig.displayScale * 100 );
+    
     if( glConfig.deviceSupportsGamma )
     {
         CL_RefPrintf( PRINT_ALL, "GAMMA: hardware w/ %d overbright bits\n", tr.overbrightBits );
@@ -1592,7 +1592,11 @@ void R_Init( void )
         CL_RefPrintf( PRINT_ALL, "glGetError() = 0x%x\n", err );
         
     // print info
-    GfxInfo_f();
+    if( !r_verbose )
+    {
+        GfxInfo_f();
+    }
+    
     CL_RefPrintf( PRINT_ALL, "----- finished R_Init -----\n" );
 }
 
diff --git a/src/engine/GPURenderer/r_types.hpp b/src/engine/GPURenderer/r_types.hpp
index 93a1506..58b7c89 100644
--- a/src/engine/GPURenderer/r_types.hpp
+++ b/src/engine/GPURenderer/r_types.hpp
@@ -215,6 +215,7 @@ typedef struct
     // normal screens should be 4/3, but wide aspect monitors may be 16/9
     float32					windowAspect;
     float32					displayAspect;
+    float32					displayScale;
     
     sint						displayFrequency;
     

GitHub
sha: c91a9d4d

© GrangerHub. All rights reserved. Tremulous © Darklegion Development. Granger by err-overflow and MoP licensed CC-BY-SA-2.5