Golias Engine
A C++ 20 'game engine' built with SDL3 with wide platform support.
project_config.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "core/io/file_system.h"
4 
5 
13 enum class Backend {
22 
28  VK_FORWARD,
29 
33  DIRECTX12,
34 
38  METAL,
39 
43  AUTO
44 };
45 
52  PORTRAIT,
54 };
55 
63 enum class AspectRatio {
64  NONE,
65  KEEP,
66  EXPAND,
67 };
68 
76 enum class ViewportMode { VIEWPORT, CANVAS };
77 
83 enum class TextureFiltering {
84  LINEAR,
85  NEAREST
86 };
87 
92 struct Viewport {
93  int width = 640;
94  int height = 320;
95  float scale = 1.0f;
96 
99 
100  bool load(const tinyxml2::XMLElement* root);
101 };
102 
107 struct Environment {
108  glm::vec4 clear_color = {0.0f, 0.0f, 0.0f, 1.0f};
109 
110  bool load(const tinyxml2::XMLElement* root);
111 };
112 
117 struct Application {
118  const char* name = "Ember Engine - Window";
119  const char* version = "1.0";
120  const char* package_name = "com.ember.engine.app"; // identifier
121  const char* icon_path = "res/icon.png";
122  const char* description = "EEngine";
123  int max_fps = 60;
124 
125  bool is_fullscreen = false;
126  bool is_resizable = true;
127 
128  bool load(const tinyxml2::XMLElement* root);
129 };
130 
135 struct Performance {
136  bool is_multithreaded = false;
137  int physics_fps = 60;
138  int worker_threads = -1; // Default to -1 (auto-detect based on CPU cores)
139 
140  bool load(const tinyxml2::XMLElement* root);
141 };
142 
150 
151  bool load(const tinyxml2::XMLElement* root);
152 
153  [[nodiscard]] const char* get_backend_str() const;
154 };
155 
156 enum class WindowMode { WINDOWED,
157  MAXIMIZED,
158  MINIMIZED,
159  FULLSCREEN
160 };
161 
166 struct Window {
167  int width = 1280;
168  int height = 720;
169 
171 
172  float dpi_scale = 1.0f;
173 
174  bool load(const tinyxml2::XMLElement* root);
175 };
176 
181 struct EngineConfig {
182 
183  bool is_debug = false;
184 
186 
188 
189  bool load();
190 
191  const char* get_orientation_str() const;
192 
194 
196 
198 
200 
202 
203  Window& get_window();
204 
205  bool is_vsync() const;
206 
207  void set_vsync(bool enabled);
208 
209 private:
210  Application _app;
211 
212  Environment _environment;
213 
214  Viewport _viewport;
215 
216  RendererDevice _renderer_device;
217 
218  Performance _performance;
219 
220  Window _window;
221 
222  bool _is_vsync_enabled = true;
223 
224  tinyxml2::XMLDocument _doc = {};
225 };
ViewportMode
Viewport rendering mode.
Definition: project_config.h:76
Orientation
Device orientation options.
Definition: project_config.h:50
AspectRatio
How the viewport handles aspect ratio.
Definition: project_config.h:63
Backend
Supported rendering backends for the engine.
Definition: project_config.h:13
@ LANDSCAPE_RIGHT
Landscape mode with home button on the right.
@ PORTRAIT
Landscape mode with home button on the left.
@ PORTRAIT_UPSIDE_DOWN
Portrait mode with home button at the bottom.
@ KEEP
No aspect ratio handling.
@ EXPAND
Maintain aspect ratio, adding black bars if necessary.
@ GL_COMPATIBILITY
OpenGL-based compatibility profile.
@ METAL
Metal backend (macOS + iOS).
@ VK_FORWARD
Vulkan-based high-performance profile.
@ DIRECTX12
DirectX 12 backend (Windows + Xbox).
@ AUTO
Automatically choose the best backend for the platform.
TextureFiltering
Texture filtering modes.
Definition: project_config.h:83
@ LINEAR
Smooth filtering.
@ NEAREST
Pixelated filtering.
WindowMode
Definition: project_config.h:156
@ MAXIMIZED
Windowed mode.
@ MINIMIZED
Maximized mode.
@ FULLSCREEN
Minimized mode.
Application metadata and window settings.
Definition: project_config.h:117
const char * name
Definition: project_config.h:118
const char * version
Definition: project_config.h:119
const char * description
Definition: project_config.h:122
int max_fps
Definition: project_config.h:123
bool is_fullscreen
Definition: project_config.h:125
bool load(const tinyxml2::XMLElement *root)
Definition: project_config.cpp:86
const char * package_name
Definition: project_config.h:120
bool is_resizable
Definition: project_config.h:126
const char * icon_path
Definition: project_config.h:121
Engine configuration loaded from project.xml.
Definition: project_config.h:181
bool is_vsync() const
Definition: project_config.cpp:364
RendererDevice & get_renderer_device()
Definition: project_config.cpp:340
Orientation orientation
Definition: project_config.h:185
Environment & get_environment()
Definition: project_config.cpp:352
Viewport & get_viewport()
Definition: project_config.cpp:356
void set_vsync(bool enabled)
Definition: project_config.cpp:368
Application & get_application()
Definition: project_config.cpp:348
const char * get_orientation_str() const
Definition: project_config.cpp:154
Window & get_window()
Definition: project_config.cpp:360
TextureFiltering texture_filtering
Definition: project_config.h:187
bool is_debug
Definition: project_config.h:183
Performance & get_performance()
Definition: project_config.cpp:344
bool load()
Definition: project_config.cpp:272
Environment settings such as clear color.
Definition: project_config.h:107
glm::vec4 clear_color
Definition: project_config.h:108
bool load(const tinyxml2::XMLElement *root)
Definition: project_config.cpp:54
Performance-related settings.
Definition: project_config.h:135
bool load(const tinyxml2::XMLElement *root)
Definition: project_config.cpp:172
int physics_fps
Definition: project_config.h:137
bool is_multithreaded
Definition: project_config.h:136
int worker_threads
Definition: project_config.h:138
Renderer device settings.
Definition: project_config.h:147
bool load(const tinyxml2::XMLElement *root)
Definition: project_config.cpp:202
TextureFiltering texture_filtering
Definition: project_config.h:149
const char * get_backend_str() const
Definition: project_config.cpp:245
Backend backend
Definition: project_config.h:148
Viewport configuration settings.
Definition: project_config.h:92
int width
Definition: project_config.h:93
AspectRatio aspect_ratio
Definition: project_config.h:98
bool load(const tinyxml2::XMLElement *root)
Definition: project_config.cpp:6
float scale
Definition: project_config.h:95
int height
Definition: project_config.h:94
ViewportMode mode
Definition: project_config.h:97
Window configuration settings.
Definition: project_config.h:166
float dpi_scale
Definition: project_config.h:172
bool load(const tinyxml2::XMLElement *root)
Definition: project_config.cpp:265
WindowMode window_mode
Definition: project_config.h:170
int height
Definition: project_config.h:168
int width
Definition: project_config.h:167