Ember
A C++ 20 'game engine' built with SDL3 with wide platform support.
ember_core.h
Go to the documentation of this file.
1 #pragma once
2 
4 #include "core/engine_structs.h"
5 
6 #pragma region OPENGL/ES
7 
8 #include "core/renderer/mesh.h"
10 
11 #pragma endregion
12 
13 #pragma region METAL
14 
15 
16 #pragma endregion
17 
18 #include "core/audio/ember_audio.h"
19 #include "core/ember_utils.h"
20 #include "core/system_info.h"
21 
22 
28 class Renderer {
29 public:
30  virtual ~Renderer() = default;
31 
32  Renderer() = default;
33 
34  SDL_Window* window = nullptr;
35 
36  int viewport[2] = {480, 270};
37 
39 
40  virtual Shader* GetDefaultShader() = 0;
41 
42  virtual Shader* GetTextShader() = 0;
43 
44  virtual void Initialize() = 0;
45 
46  virtual void Flush() = 0;
47 
48  virtual void FlushText() = 0;
72  virtual Texture LoadTexture(const std::string& file_path) = 0;
73 
94  virtual Font LoadFont(const std::string& file_path, int font_size) = 0;
95 
114  virtual void UnloadFont(const Font& font) = 0;
115 
134  virtual void UnloadTexture(const Texture& texture) = 0;
135 
145  virtual void ClearBackground(const Color& color) = 0;
146 
189  virtual void BeginDrawing(const glm::mat4& view_projection = 0) = 0;
190 
199  virtual void EndDrawing() = 0;
200 
253  virtual void DrawText(const Font& font, const std::string& text, const Transform2D& transform, Color color, float font_size,
254  const ShaderEffect& shader_effect = {}, float kerning = 0.0f) = 0;
255 
256 
286  virtual void DrawTexture(const Texture& texture, const Transform2D& transform, glm::vec2 size,
287  const Color& color = {255, 255, 255, 255}) = 0;
339  virtual void DrawTextureEx(const Texture& texture, const ember::Rectangle& source, const ember::Rectangle& dest,
340  glm::vec2 origin, float rotation, float zIndex = 0.0f, const Color& color = {255, 255, 255, 255}) = 0;
341 
369  virtual void DrawLine(glm::vec3 start, glm::vec3 end, const Color& color, float thickness = 1.0f) = 0;
370 
371  virtual void DrawTriangleFilled(glm::vec3 p0, glm::vec3 p1, glm::vec3 p2, const Color& color) = 0;
372 
373  virtual void DrawTriangle(glm::vec3 p0, glm::vec3 p1, glm::vec3 p2, const Color& color) = 0;
374 
375  virtual void DrawCircle(glm::vec3 position, float radius, const Color& color, int segments = 32) = 0;
376 
377  virtual void DrawCircleFilled(glm::vec3 position, float radius, const Color& color, int segments = 32) = 0;
378 
379 
402  virtual void DrawRect(const Transform2D& transform, glm::vec2 size, const Color& color, float thickness = 1.f) = 0;
403 
428  virtual void DrawRectFilled(const Transform2D& transform, glm::vec2 size, const Color& color, float thickness = 1.f) = 0;
429 
465  virtual void BeginMode2D(const Camera2D& camera) = 0;
466 
478  virtual void EndMode2D() = 0;
479 
490  virtual void BeginCanvas() = 0;
491 
509  virtual void EndCanvas() = 0;
510 
511  virtual void Resize(int view_width, int view_height) = 0;
512 
513  /*
514  @brief Set the current context
515  - Opengl `SDL_GLContext`
516  - Metal `MTLDevice`
517 
518  */
519  virtual void SetContext(const void* ctx) = 0;
520 
521  /*
522  @brief Get the current context
523  - dynamic Cast to `SDL_GLContext` or `MTLDevice`
524  */
525  virtual void* GetContext() = 0;
526 
527  virtual void Destroy() = 0;
528 
529 private:
530  virtual float BindTexture(Uint32 slot = 0) = 0;
531 
532  virtual void Submit(const Transform2D& transform, glm::vec2 size, glm::vec4 color, Uint32 slot = UINT32_MAX) = 0;
533 };
Renderer struct.
Definition: ember_core.h:28
virtual void BeginDrawing(const glm::mat4 &view_projection=0)=0
Starting of the drawing procedure.
virtual void DrawRect(const Transform2D &transform, glm::vec2 size, const Color &color, float thickness=1.f)=0
Draw rectangle.
int viewport[2]
Definition: ember_core.h:36
virtual void BeginMode2D(const Camera2D &camera)=0
Begin 2D mode.
virtual void Resize(int view_width, int view_height)=0
virtual void EndMode2D()=0
End 2D mode.
virtual void ClearBackground(const Color &color)=0
Window background color.
virtual void EndDrawing()=0
End of the drawing procedure (swap buffers)
virtual void DrawRectFilled(const Transform2D &transform, glm::vec2 size, const Color &color, float thickness=1.f)=0
Draw rectangle filled.
virtual Font LoadFont(const std::string &file_path, int font_size)=0
Load a TTF font on GPU given a file path.
Renderer()=default
virtual Texture LoadTexture(const std::string &file_path)=0
Load a texture on GPU given a file path.
virtual void Destroy()=0
virtual void DrawTextureEx(const Texture &texture, const ember::Rectangle &source, const ember::Rectangle &dest, glm::vec2 origin, float rotation, float zIndex=0.0f, const Color &color={255, 255, 255, 255})=0
Draw Texture quad extended.
virtual void DrawTexture(const Texture &texture, const Transform2D &transform, glm::vec2 size, const Color &color={255, 255, 255, 255})=0
Draw Texture quad at given Rectangle source.
virtual void DrawTriangleFilled(glm::vec3 p0, glm::vec3 p1, glm::vec3 p2, const Color &color)=0
virtual void BeginCanvas()=0
Begin Canvas Procedure.
SDL_Window * window
Definition: ember_core.h:34
virtual void Flush()=0
virtual Shader * GetTextShader()=0
virtual void Initialize()=0
virtual void DrawTriangle(glm::vec3 p0, glm::vec3 p1, glm::vec3 p2, const Color &color)=0
virtual void SetContext(const void *ctx)=0
virtual void EndCanvas()=0
End Canvas Procedure.
virtual Shader * GetDefaultShader()=0
virtual void UnloadTexture(const Texture &texture)=0
Unload the Texture from GPU (cleanup)
virtual void FlushText()=0
virtual void DrawCircle(glm::vec3 position, float radius, const Color &color, int segments=32)=0
virtual void UnloadFont(const Font &font)=0
Unload the Font from CPU/GPU (cleanup)
virtual void DrawLine(glm::vec3 start, glm::vec3 end, const Color &color, float thickness=1.0f)=0
Draw Lines between two points.
virtual void DrawText(const Font &font, const std::string &text, const Transform2D &transform, Color color, float font_size, const ShaderEffect &shader_effect={}, float kerning=0.0f)=0
Draw glyphs given a Loaded Font and text.
virtual void * GetContext()=0
virtual ~Renderer()=default
RendererType type
Definition: ember_core.h:38
virtual void DrawCircleFilled(glm::vec3 position, float radius, const Color &color, int segments=32)=0
Definition: shader.h:5
Shader Abstract class.
Definition: shader.h:44
RendererType
Backend OpenGL or Metal
Definition: engine.h:30
@ OPENGL
Definition: engine.h:30
Camera2D component.
Definition: camera.h:14
Definition: engine_structs.h:34
Definition: engine_structs.h:54
Definition: engine_structs.h:12
Definition: transform.h:6
Definition: engine_structs.h:24