Skip to content
This repository was archived by the owner on Jul 18, 2023. It is now read-only.

Commit d239d87

Browse files
authored
Debug Display Issue #13 (#14)
fix #13
1 parent d682ebe commit d239d87

File tree

4 files changed

+44
-24
lines changed

4 files changed

+44
-24
lines changed

Core/DebugDisplay.h

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
#pragma once
2+
#include <functional>
23
#include "SMath.h"
34
#include "Object.h"
45
#include "FontRenderer.h"
56

67
namespace Snowing::Scene
78
{
9+
810
template <
911
typename TFontRenderer,
1012
typename TFont,
@@ -13,9 +15,8 @@ namespace Snowing::Scene
1315
typename TGraphics,
1416
typename TBuffer,
1517
typename TEngine,
16-
typename TWindow,
17-
typename TDataGetter>
18-
class DebugDisplayInterface final : public Object
18+
typename TWindow>
19+
class DebugDisplayInterface final : public Object
1920
{
2021
private:
2122
const Math::Coordinate2DRect screenCoord_ =
@@ -39,18 +40,22 @@ namespace Snowing::Scene
3940

4041
const std::map<wchar_t, Math::Vec2f> &fix_;
4142
const std::wstring title_;
42-
typename std::decay<TDataGetter>::type getter_;
43+
std::function<std::wstring()> getter_;
44+
45+
constexpr static size_t MaxLines = 100;
46+
47+
static inline bool lineNums_[MaxLines];
48+
size_t lineNum_;
4349

4450
public:
45-
template <typename WString,typename TDataGetter>
51+
template <typename WString>
4652
DebugDisplayInterface(
4753
TEffect *effect,
4854
TTech *tech,
4955
const TFont *font,
5056
const std::map<wchar_t, Math::Vec2f> *fix,
5157
WString &&title,
52-
TDataGetter&& dataGetter,
53-
size_t lineNum) :
58+
const std::function<std::wstring()>& dataGetter) :
5459
fr_{
5560
&TGraphics::Get().MainContext(),
5661
effect,
@@ -62,9 +67,22 @@ namespace Snowing::Scene
6267
font_ { *font },
6368
fix_ { *fix },
6469
title_ { std::forward<WString>(title) },
65-
getter_{ std::forward<TDataGetter>(dataGetter) }
70+
getter_{ dataGetter }
71+
{
72+
for (lineNum_ = 0; lineNum_ < 100; ++lineNum_)
73+
{
74+
if (!lineNums_[lineNum_])
75+
{
76+
lineNums_[lineNum_] = true;
77+
break;
78+
}
79+
}
80+
box_.y -= 12.0f * lineNum_;
81+
}
82+
83+
~DebugDisplayInterface()
6684
{
67-
box_.y -= 12.0f * lineNum;
85+
lineNums_[lineNum_] = false;
6886
}
6987

7088
DebugDisplayInterface(DebugDisplayInterface&&) = delete;
@@ -76,7 +94,7 @@ namespace Snowing::Scene
7694
{
7795
const std::wstring s =
7896
title_ + L":" +
79-
To<std::wstring>(getter_());
97+
getter_();
8098

8199
Graphics::FontSprite::SetString(
82100
s,
@@ -98,5 +116,13 @@ namespace Snowing::Scene
98116

99117
return true;
100118
}
119+
120+
static const inline std::function<std::wstring()> FrameTimeGetter = [] {
121+
return To<std::wstring>(TEngine::Get().DeltaTime() * 1000);
122+
};
123+
124+
static const inline std::function<std::wstring()> FPSGetter = [] {
125+
return To<std::wstring>(1 / TEngine::Get().DeltaTime());
126+
};
101127
};
102128
}

Snowing.sln

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ EndProject
1010
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{21DD2D80-0749-4059-8515-34EFEF24DEBD}"
1111
ProjectSection(SolutionItems) = preProject
1212
License.md = License.md
13-
README.md = README.md
13+
Readme.md = Readme.md
1414
EndProjectSection
1515
EndProject
1616
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestWindowsInput", "TestWindowsInput\TestWindowsInput.vcxproj", "{AABB5086-262E-4DBE-AAD6-EFF23211272C}"

TestWindows/ObjectTest.cpp

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -416,18 +416,14 @@ static void TestDebugDisplay(Math::Vec2<int> size)
416416
&Graphics::Device::MainContext(),
417417
&Graphics::Device::MainRenderTarget());
418418

419-
auto timeShow = [] {
420-
return Engine::Get().DeltaTime() * 1000;
421-
};
422-
423-
auto fpsShow = [] {
424-
return 1 / Engine::Get().DeltaTime();
425-
};
419+
426420

427421
std::map<wchar_t, Math::Vec2f> fix{};
428422

429-
g.Emplace<Scene::DebugDisplay<decltype(timeShow)>>(&eff, &tech1, &font, &fix, L"Time", timeShow, 0);
430-
g.Emplace<Scene::DebugDisplay<decltype(fpsShow)>>(&eff, &tech1, &font, &fix, L"FPS", fpsShow, 1);
423+
g.Emplace<Scene::DebugDisplay>(
424+
&eff, &tech1, &font, &fix, L"Time", Scene::DebugDisplay::FrameTimeGetter);
425+
g.Emplace<Scene::DebugDisplay>(
426+
&eff, &tech1, &font, &fix, L"FPS", Scene::DebugDisplay::FPSGetter);
431427
g.Emplace<Scene::VirtualTask>(0.5f, [] {Engine::Get().Exit(); });
432428

433429
Engine::Get().RunObject(g);

WindowsImpl/Impls.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,17 +65,15 @@ namespace Snowing::Scene
6565
using TextMenuItem = TextMenuItemInterface<
6666
Graphics::FontRenderer<>>;
6767

68-
template <typename TDataGetter>
6968
using DebugDisplay = DebugDisplayInterface <
70-
Graphics::FontRenderer<Graphics::Sprite,Graphics::SpriteSheet,64>,
69+
Graphics::FontRenderer<Graphics::Sprite, Graphics::SpriteSheet, 64>,
7170
Graphics::Font,
7271
Graphics::Effect,
7372
Graphics::EffectTech,
7473
Graphics::Device,
7574
Graphics::Buffer,
7675
Engine,
77-
Graphics::Window,
78-
TDataGetter>;
76+
Graphics::Window>;
7977

8078
using RenderTargetCleaner = RenderTargetCleanerInterface<
8179
Graphics::RenderTarget,

0 commit comments

Comments
 (0)