-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEngine.cpp
More file actions
70 lines (54 loc) · 2.13 KB
/
Engine.cpp
File metadata and controls
70 lines (54 loc) · 2.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include "stdafx.h"
#include "Engine.h"
#include "Window/Window.h"
#include "frameData.h"
#include "Util/jsonUtil.h"
#include "Graphics/DX11.h"
#include "Graphics/DX12.h"
#include <nlohmann/json.hpp>
namespace {
constexpr std::string_view gConfigFilePath = "../engineConfig.json";
}
RF::Engine::Engine(const RF::EngineCreationParams& params) {
RF::WindowCreationParams windowParams;
windowParams.hInstance = params.hInstance;
windowParams.cmdShow = params.cmdShow;
windowParams.engine = this;
windowParams.windowProc = params.windowProc;
LoadConfigFile(windowParams);
mWindow = std::make_unique<RF::Window>();
mWindow->Init(windowParams);
switch (mGraphicsAPI) {
case GraphicsAPI::DirectX11:
mRenderer = std::make_unique<RF::DX11>();
break;
case GraphicsAPI::DirectX12:
mRenderer = std::make_unique<RF::DX12>();
break;
}
mRenderer->Init(mWindow->GetHWND(), windowParams.width, windowParams.height);
}
void RF::Engine::Update(const FrameData& frameData) { frameData; }
void RF::Engine::Render(const FrameData& frameData) {
mRenderer->Render(frameData);
}
void RF::Engine::Shutdown() {}
void RF::Engine::OnResize(const unsigned int width, const unsigned int height) {
mWindow->SetSize(width, height);
}
void RF::Engine::LoadConfigFile(RF::WindowCreationParams& windowParams) {
auto json = RF::Json::Parse(static_cast<std::string>(gConfigFilePath));
auto windowSettingsJson = RF::Json::TryGet<nlohmann::json>(json, "windowSettings", {});
if (windowSettingsJson.empty()) {
return;
}
auto windowSizeJson = RF::Json::TryGet<nlohmann::json>(windowSettingsJson, "windowSize", {});
if (!windowSettingsJson.empty()) {
windowParams.width = RF::Json::TryGet(windowSizeJson, "width", windowParams.width);
windowParams.height = RF::Json::TryGet(windowSizeJson, "height", windowParams.height);
}
std::string title = RF::Json::TryGet(windowSettingsJson, "title", std::string("RuneForge"));
windowParams.title = std::wstring(title.begin(), title.end());
windowParams.isFullScreen = RF::Json::TryGet(windowSettingsJson, "startInFullscreen", false);
windowParams.isResizable = RF::Json::TryGet(windowSettingsJson, "isResizable", true);
}