Ember
A C++ 20 'game engine' built with SDL3 with wide platform support.
engine.h
Go to the documentation of this file.
1 #pragma once
2 
4 #include "core/io/file_system.h"
5 #include "core/time_manager.h"
6 
7 
31 
32 class Renderer;
33 class OpenglShader;
34 class OpenglRenderer;
35 
36 class Engine {
37 
38 public:
39  struct {
40  int width = 0;
41  int height = 0;
42  const char* title = "[EMBER_ENGINE] - Window";
43  const SDL_DisplayMode* data = nullptr;
44  bool bFullscreen = false;
45  int bbWidth = 0, bbHeight = 0; // backbuffer
46  SDL_Window* window{};
47  } Window;
48 
49  struct {
50  SDL_AudioDeviceID device_id = 0;
51  SDL_AudioSpec spec{};
52  float global_volume = 1.f;
53  } Audio;
54 
56 
57  void ResizeWindow(int w, int h) const;
58 
59  Renderer* GetRenderer() const;
60 
62 
63  TimeManager* GetTimeManager() const;
64 
71  void Shutdown();
72 
73 
114  bool Initialize(const char* title, int width, int height, RendererType type, Uint64 flags = 0);
115 
116 
117 private:
118  Renderer* _renderer = nullptr;
119  InputManager* _input_manager = nullptr;
120  TimeManager* _time_manager = nullptr;
121 
122 
148  Renderer* CreateRenderer(SDL_Window* window, int view_width, int view_height, RendererType type);
149 
169  Renderer* CreateRendererGL(SDL_Window* window, int view_width, int view_height);
170 
171  /*
172  @brief Create a renderer instance internally
173  - Backend `Metal`
174  TODO: implement metal
175 
176  * * api
177 
178  */
179  Renderer* CreateRendererMTL(SDL_Window* window, int view_width, int view_height);
180 };
181 
182 
183 extern std::unique_ptr<Engine> GEngine;
184 
185 extern ma_engine audio_engine;
Definition: engine.h:36
Ember_VFS VirtualFileSystem
Definition: engine.h:55
struct Engine::@0 Window
SDL_Window * window
Definition: engine.h:46
float global_volume
Definition: engine.h:52
struct Engine::@1 Audio
SDL_AudioSpec spec
Definition: engine.h:51
void Shutdown()
Deinitialize Window, Renderer and modules.
Definition: engine.cpp:171
void ResizeWindow(int w, int h) const
Definition: engine.cpp:195
int bbWidth
Definition: engine.h:45
SDL_AudioDeviceID device_id
Definition: engine.h:50
int width
Definition: engine.h:40
TimeManager * GetTimeManager() const
Definition: engine.cpp:209
InputManager * GetInputManager() const
Definition: engine.cpp:205
Renderer * GetRenderer() const
Definition: engine.cpp:202
int bbHeight
Definition: engine.h:45
const SDL_DisplayMode * data
Definition: engine.h:43
const char * title
Definition: engine.h:42
bool Initialize(const char *title, int width, int height, RendererType type, Uint64 flags=0)
Initialize SDL window, renderer and modules.
Definition: engine.cpp:33
int height
Definition: engine.h:41
bool bFullscreen
Definition: engine.h:44
Definition: input_manager.h:20
Definition: ember_gl.h:24
Opengl Shader implementation.
Definition: shader_gl.h:19
Renderer struct.
Definition: ember_core.h:28
Definition: time_manager.h:4
ma_engine audio_engine
Definition: engine.cpp:11
std::unique_ptr< Engine > GEngine
Definition: engine.cpp:9
RendererType
Backend OpenGL or Metal
Definition: engine.h:30
@ METAL
Definition: engine.h:30
@ OPENGL
Definition: engine.h:30
Definition: file_system.h:33