@@ -917,6 +917,7 @@ const FieldParse InGameUI::s_fieldParseTable[] =
917917 { " RenderFpsBold" , INI ::parseBool, nullptr , offsetof ( InGameUI, m_renderFpsBold ) },
918918 { " RenderFpsPosition" , INI ::parseCoord2D, nullptr , offsetof ( InGameUI, m_renderFpsPosition ) },
919919 { " RenderFpsColor" , INI ::parseColorInt, nullptr , offsetof ( InGameUI, m_renderFpsColor ) },
920+ { " RenderFpsLowColor" , INI ::parseColorInt, nullptr , offsetof ( InGameUI, m_renderFpsLowColor ) },
920921 { " RenderFpsLimitColor" , INI ::parseColorInt, nullptr , offsetof ( InGameUI, m_renderFpsLimitColor ) },
921922 { " RenderFpsDropColor" , INI ::parseColorInt, nullptr , offsetof ( InGameUI, m_renderFpsDropColor ) },
922923 { " RenderFpsRefreshMs" , INI ::parseUnsignedInt, nullptr , offsetof ( InGameUI, m_renderFpsRefreshMs ) },
@@ -1163,17 +1164,20 @@ InGameUI::InGameUI()
11631164 m_lastNetworkLatencyFrames = ~0u ;
11641165
11651166 m_renderFpsString = nullptr ;
1167+ m_renderFpsLowString = nullptr ;
11661168 m_renderFpsLimitString = nullptr ;
11671169 m_renderFpsFont = " Tahoma" ;
11681170 m_renderFpsPointSize = TheGlobalData->m_renderFpsFontSize ;
11691171 m_renderFpsBold = TRUE ;
11701172 m_renderFpsPosition.x = kHudAnchorX ;
11711173 m_renderFpsPosition.y = kHudAnchorY ;
11721174 m_renderFpsColor = GameMakeColor ( 255 , 255 , 0 , 255 );
1175+ m_renderFpsLowColor = GameMakeColor ( 180 , 170 , 120 , 255 );
11731176 m_renderFpsLimitColor = GameMakeColor (119 , 119 , 119 , 255 );
11741177 m_renderFpsDropColor = GameMakeColor ( 0 , 0 , 0 , 255 );
11751178 m_renderFpsRefreshMs = 1000 ;
11761179 m_lastRenderFps = ~0u ;
1180+ m_lastRenderFpsLow = ~0u ;
11771181 m_lastRenderFpsLimit = ~0u ;
11781182 m_lastRenderFpsUpdateMs = 0u ;
11791183
@@ -2272,6 +2276,8 @@ void InGameUI::freeCustomUiResources()
22722276 m_networkLatencyString = nullptr ;
22732277 TheDisplayStringManager->freeDisplayString (m_renderFpsString);
22742278 m_renderFpsString = nullptr ;
2279+ TheDisplayStringManager->freeDisplayString (m_renderFpsLowString);
2280+ m_renderFpsLowString = nullptr ;
22752281 TheDisplayStringManager->freeDisplayString (m_renderFpsLimitString);
22762282 m_renderFpsLimitString = nullptr ;
22772283 TheDisplayStringManager->freeDisplayString (m_systemTimeString);
@@ -6041,6 +6047,12 @@ void InGameUI::refreshRenderFpsResources()
60416047 m_lastRenderFpsUpdateMs = 0u ;
60426048 }
60436049
6050+ if (!m_renderFpsLowString)
6051+ {
6052+ m_renderFpsLowString = TheDisplayStringManager->newDisplayString ();
6053+ m_lastRenderFpsLow = ~0u ;
6054+ }
6055+
60446056 if (!m_renderFpsLimitString)
60456057 {
60466058 m_renderFpsLimitString = TheDisplayStringManager->newDisplayString ();
@@ -6051,6 +6063,7 @@ void InGameUI::refreshRenderFpsResources()
60516063 Int adjustedRenderFpsFontSize = TheGlobalLanguageData->adjustFontSize (m_renderFpsPointSize);
60526064 GameFont *fpsFont = TheWindowManager->winFindFont (m_renderFpsFont, adjustedRenderFpsFontSize, m_renderFpsBold);
60536065 m_renderFpsString->setFont (fpsFont);
6066+ m_renderFpsLowString->setFont (fpsFont);
60546067 m_renderFpsLimitString->setFont (fpsFont);
60556068
60566069 if (m_renderFpsPointSize > 0 )
@@ -6163,6 +6176,15 @@ void InGameUI::updateRenderFpsString()
61636176 m_renderFpsString->setText (fpsStr);
61646177 m_lastRenderFps = renderFps;
61656178 }
6179+
6180+ const UnsignedInt renderFpsLow = (UnsignedInt)(TheDisplay->getLow1PercentFPS () + 0 .5f );
6181+ if (renderFpsLow != m_lastRenderFpsLow)
6182+ {
6183+ UnicodeString fpsLowStr;
6184+ fpsLowStr.format (L" (%u)" , renderFpsLow);
6185+ m_renderFpsLowString->setText (fpsLowStr);
6186+ m_lastRenderFpsLow = renderFpsLow;
6187+ }
61666188}
61676189
61686190void InGameUI::drawNetworkLatency (Int &x, Int &y)
@@ -6229,14 +6251,20 @@ void InGameUI::drawRenderFps(Int &x, Int &y)
62296251 const Int drawY = kHudAnchorY + y;
62306252
62316253 m_renderFpsString->draw (kHudAnchorX + x, drawY, m_renderFpsColor, m_renderFpsDropColor);
6232- x += m_renderFpsString->getWidth ();
6254+ x += m_renderFpsString->getWidth () + kHudGapPx / 2 ;
6255+ m_renderFpsLowString->draw (kHudAnchorX + x, drawY, m_renderFpsLowColor, m_renderFpsDropColor);
6256+ x += m_renderFpsLowString->getWidth () + kHudGapPx / 2 ;
62336257 m_renderFpsLimitString->draw (kHudAnchorX + x, drawY, m_renderFpsLimitColor, m_renderFpsDropColor);
62346258 x += m_renderFpsLimitString->getWidth () + kHudGapPx ;
62356259 }
62366260 else
62376261 {
6238- m_renderFpsString->draw (m_renderFpsPosition.x , m_renderFpsPosition.y , m_renderFpsColor, m_renderFpsDropColor);
6239- m_renderFpsLimitString->draw (m_renderFpsPosition.x + m_renderFpsString->getWidth (), m_renderFpsPosition.y , m_renderFpsLimitColor, m_renderFpsDropColor);
6262+ Int currentX = m_renderFpsPosition.x ;
6263+ m_renderFpsString->draw (currentX, m_renderFpsPosition.y , m_renderFpsColor, m_renderFpsDropColor);
6264+ currentX += m_renderFpsString->getWidth () + kHudGapPx / 2 ;
6265+ m_renderFpsLowString->draw (currentX, m_renderFpsPosition.y , m_renderFpsLowColor, m_renderFpsDropColor);
6266+ currentX += m_renderFpsLowString->getWidth () + kHudGapPx / 2 ;
6267+ m_renderFpsLimitString->draw (currentX, m_renderFpsPosition.y , m_renderFpsLimitColor, m_renderFpsDropColor);
62406268 }
62416269}
62426270
0 commit comments