Skip to content

Commit e431474

Browse files
authored
Make frame graph scale accordingly to resolution (#3593)
1 parent eb66fa2 commit e431474

File tree

5 files changed

+41
-20
lines changed

5 files changed

+41
-20
lines changed

Client/core/CChat.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1117,6 +1117,11 @@ void CChat::SetCharacterLimit(int charLimit)
11171117
m_iCharacterLimit = charLimit;
11181118
}
11191119

1120+
float CChat::GetChatBottomPosition() const noexcept
1121+
{
1122+
return m_vecBackgroundSize.fY;
1123+
}
1124+
11201125
CChatLine::CChatLine()
11211126
{
11221127
m_bActive = false;

Client/core/CChat.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,8 @@ class CChat
207207
constexpr int GetDefaultCharacterLimit() const { return m_iDefaultCharacterLimit; }
208208
constexpr int GetMaxCharacterLimit() const { return m_iMaxCharacterLimit; }
209209

210+
float GetChatBottomPosition() const noexcept;
211+
210212
private:
211213
void LoadCVars();
212214

Client/core/CGUI.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,11 @@ CChat* CLocalGUI::GetChat()
449449
return m_pChat;
450450
}
451451

452+
float CLocalGUI::GetChatBottomPosition() const noexcept
453+
{
454+
return m_pChat->GetChatBottomPosition();
455+
}
456+
452457
CDebugView* CLocalGUI::GetDebugView()
453458
{
454459
return m_pDebugView;

Client/core/CGUI.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ class CLocalGUI : public CSingleton<CLocalGUI>
6868
bool IsMainMenuVisible();
6969

7070
CChat* GetChat();
71+
float GetChatBottomPosition() const noexcept;
7172
void SetChatBoxVisible(bool bVisible, bool bInputBlocked = true);
7273
bool IsChatBoxVisible();
7374
bool IsChatBoxInputBlocked();

Client/core/CGraphStats.cpp

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@
1212

1313
namespace
1414
{
15-
#define GRAPHSTAT_HISTORY_SIZE 256
16-
1715
struct SGraphStatLine
1816
{
1917
TIMEUS prevData;
@@ -113,6 +111,11 @@ void CGraphStats::AddTimingPoint(const char* szName)
113111
if (!IsEnabled())
114112
return;
115113

114+
CGraphicsInterface* pGraphics = g_pCore->GetGraphics();
115+
116+
std::uint32_t viewportWidth = pGraphics->GetViewportWidth();
117+
std::uint32_t sizeX = viewportWidth / 4; // one quarter of screen width
118+
116119
// Start of next frame?
117120
if (szName[0] == 0)
118121
{
@@ -133,7 +136,7 @@ void CGraphStats::AddTimingPoint(const char* szName)
133136
for (int i = 0; i < Dups; i++)
134137
{
135138
pLine->iDataPos++;
136-
if (pLine->iDataPos > GRAPHSTAT_HISTORY_SIZE - 1)
139+
if (pLine->iDataPos > sizeX - 1)
137140
pLine->iDataPos = 0;
138141
pLine->dataHistory[pLine->iDataPos] = Data;
139142
}
@@ -153,7 +156,7 @@ void CGraphStats::AddTimingPoint(const char* szName)
153156
// Add new line
154157
MapSet(m_LineList, szName, SGraphStatLine());
155158
pLine = MapFind(m_LineList, szName);
156-
pLine->dataHistory.resize(GRAPHSTAT_HISTORY_SIZE);
159+
pLine->dataHistory.resize(sizeX);
157160
memset(&pLine->dataHistory[0], 0, pLine->dataHistory.size());
158161
pLine->iDataPos = 0;
159162
pLine->prevData = 0;
@@ -179,7 +182,7 @@ void CGraphStats::AddTimingPoint(const char* szName)
179182

180183
// Inc position
181184
pLine->iDataPos++;
182-
if (pLine->iDataPos > GRAPHSTAT_HISTORY_SIZE - 1)
185+
if (pLine->iDataPos > sizeX - 1)
183186
pLine->iDataPos = 0;
184187

185188
// Insert data point
@@ -199,44 +202,49 @@ void CGraphStats::Draw()
199202
return;
200203

201204
CGraphicsInterface* pGraphics = g_pCore->GetGraphics();
205+
CLocalGUI* pLocalGUI = g_pCore->GetLocalGUI();
206+
207+
std::uint32_t viewportWidth = pGraphics->GetViewportWidth(); // get width of current resolution
208+
std::uint32_t viewportHeight = pGraphics->GetViewportHeight(); // get height of current resolution
209+
std::uint32_t originX = 10; // offset the graph by 10 pixels from left side of screen
210+
std::uint32_t originY = pLocalGUI->GetChatBottomPosition(); // get chat bottom screen position
211+
std::uint32_t sizeX = viewportWidth / 4; // set the width of graph to 1/4 of current resolution
212+
std::uint32_t sizeY = viewportHeight / 4; // set the height of graph to 1/4 of current resolution
213+
std::uint32_t rangeY = 100; // 100ms
214+
215+
originY = originY + sizeY + 30; // add graph height plus a little gap to the overall Y position
202216

203-
uint uiViewportHeight = pGraphics->GetViewportHeight();
204-
uint uiOriginX = 10;
205-
uint uiOriginY = std::min<int>(500, uiViewportHeight - 10);
206-
uint uiSizeX = GRAPHSTAT_HISTORY_SIZE;
207-
uint uiSizeY = 150;
208-
uint uiRangeY = 100; // 100ms
209-
float fLineScale = 1 / 1000.f / uiRangeY * uiSizeY;
217+
float fLineScale = 1 / 1000.f / rangeY * sizeY;
210218
float fLineHeight = pGraphics->GetDXFontHeight();
211219

212220
// Backgroung box
213-
pGraphics->DrawRectQueued(uiOriginX, uiOriginY - uiSizeY, uiSizeX, uiSizeY, SColorRGBA(0, 0, 0, 128), true);
221+
pGraphics->DrawRectQueued(originX, originY - sizeY, sizeX, sizeY, SColorRGBA(0, 0, 0, 128), true);
214222

215223
// Draw data lines
216-
float fLabelX = uiOriginX + uiSizeX + 22;
217-
float fLabelY = uiOriginY - m_LineList.size() * fLineHeight;
224+
float fLabelX = originX + sizeX + 22;
225+
float fLabelY = originY - m_LineList.size() * fLineHeight;
218226
for (const auto& dataLine : m_LineList)
219227
{
220228
const SGraphStatLine& line = dataLine.second;
221229
int iDataPos = line.iDataPos;
222230
int iDataPosPrev = iDataPos;
223231

224-
for (int i = uiSizeX - 1; i > 0; i--)
232+
for (int i = sizeX - 1; i > 0; i--)
225233
{
226234
float fY0 = line.dataHistory[iDataPos] * fLineScale;
227235
float fY1 = line.dataHistory[iDataPosPrev] * fLineScale;
228236

229237
iDataPosPrev = iDataPos;
230238
iDataPos--;
231239
if (iDataPos == -1)
232-
iDataPos = GRAPHSTAT_HISTORY_SIZE - 1;
240+
iDataPos = sizeX - 1;
233241

234-
pGraphics->DrawLineQueued(uiOriginX + i - 1, uiOriginY - fY0, uiOriginX + i, uiOriginY - fY1, 1, line.color, true);
242+
pGraphics->DrawLineQueued(originX + i - 1, originY - fY0, originX + i, originY - fY1, 1, line.color, true);
235243

236-
if (i == uiSizeX - 1)
244+
if (i == sizeX - 1)
237245
{
238246
// Line from graph to label
239-
pGraphics->DrawLineQueued(uiOriginX + i - 1, uiOriginY - fY0, fLabelX - 2, fLabelY + fLineHeight / 2, 1, line.color, true);
247+
pGraphics->DrawLineQueued(originX + i - 1, originY - fY0, fLabelX - 2, fLabelY + fLineHeight / 2, 1, line.color, true);
240248
}
241249
}
242250

0 commit comments

Comments
 (0)