diff --git a/src/porting.cpp b/src/porting.cpp
index e99d084261804964bb5c967257c7c77bfd7cb155..8a685539b20d13cbaee599d3b01706a905ee3c85 100644
--- a/src/porting.cpp
+++ b/src/porting.cpp
@@ -647,7 +647,8 @@ const char *getVideoDriverFriendlyName(irr::video::E_DRIVER_TYPE type)
 
 #ifndef __ANDROID__
 #ifdef XORG_USED
-float getDisplayDensity()
+
+static float calcDisplayDensity()
 {
 	const char* current_display = getenv("DISPLAY");
 
@@ -665,7 +666,7 @@ float getDisplayDensity()
 
 				XCloseDisplay(x11display);
 
-				return (std::max(dpi_height,dpi_width) / 96.0);
+				return std::max(dpi_height,dpi_width) / 96.0;
 			}
 		}
 
@@ -673,6 +674,14 @@ float getDisplayDensity()
 	return g_settings->getFloat("screen_dpi")/96.0;
 }
 
+
+float getDisplayDensity()
+{
+	static float cached_display_density = calcDisplayDensity();
+	return cached_display_density;
+}
+
+
 #else
 float getDisplayDensity()
 {