Golias Engine
A C++ 20 'game engine' built with SDL3 with wide platform support.
ogl_renderer.h
Go to the documentation of this file.
1 #pragma once
2 #include "ogl_struct.h"
3 
4 class OpenGLRenderer final : public Renderer {
5 
6 
7 public:
8  ~OpenGLRenderer() override;
9 
10  bool initialize(int w, int h, SDL_Window* window) override;
11 
12  std::shared_ptr<GpuBuffer> allocate_gpu_buffer(GpuBufferType type) override;
13 
14  std::shared_ptr<GpuVertexLayout> create_vertex_layout(
15  const GpuBuffer* vertex_buffer,
16  const GpuBuffer* index_buffer,
17  const std::vector<VertexAttribute>& attributes,
18  uint32_t stride) override;
19 
20  Uint32 load_texture_from_file(const std::string& path) override;
21 
22  Uint32 load_texture_from_memory(const unsigned char* buffer, size_t size, const std::string& name = "") override;
23 
24  Uint32 load_texture_from_raw_data(const unsigned char* data, int w, int h, int channels = 4, const std::string& name = "") override;
25 
26  void begin_frame() override;
27 
28  void begin_shadow_pass() override;
29 
30  void render_shadow_pass(const glm::mat4& light_space_matrix) override;
31 
32  void end_shadow_pass() override;
33 
34  void begin_render_target() override;
35 
36  void render_main_target(const Camera3D& camera,
37  const Transform3D& camera_transform,
38  const glm::mat4& light_space_matrix,
39  const std::vector<DirectionalLight>& directional_lights,
40  const std::vector<std::pair<Transform3D, SpotLight>>& spot_lights) override;
41 
42  void end_render_target() override;
43 
44  void begin_environment_pass() override;
45  void render_environment_pass(const Camera3D& camera) override;
46  void end_environment_pass() override;
47 
48  void add_to_render_batch(const Transform3D& transform, const MeshRef& mesh_ref, const MaterialRef& mat_ref) override;
49 
50  void add_to_shadow_batch(const Transform3D& transform, const MeshRef& mesh_ref) override;
51 
52  void resize(int w, int h) override;
53 
54  void cleanup() override;
55 
56  void swap_chain() override;
57 
58 private:
59  SDL_GLContext _context = nullptr;
60 
61  GLuint create_gl_texture(const unsigned char* data, int w, int h, int channels);
62 
63  WorldEnvironment* create_skybox_from_atlas(const std::string& atlas_path,
65  float brightness = 1.0f);
66 
67 
68  void setup_instance_matrix_attribute(GpuVertexLayout* vao);
69 
70 
71  void setup_lights(const std::vector<DirectionalLight>& directional_lights,
72  const std::vector<std::pair<Transform3D, SpotLight>>& spot_lights);
73 
74 };
GpuBufferType
GpuBuffer Abstract class.
Definition: base_struct.h:29
CubemapOrientation
Definition: base_struct.h:4
GpuBuffer Abstract class.
Definition: base_struct.h:46
Definition: base_struct.h:76
Definition: ogl_renderer.h:4
std::shared_ptr< GpuBuffer > allocate_gpu_buffer(GpuBufferType type) override
Definition: ogl_renderer.cpp:481
void cleanup() override
Definition: ogl_renderer.cpp:707
void resize(int w, int h) override
Definition: ogl_renderer.cpp:701
void render_shadow_pass(const glm::mat4 &light_space_matrix) override
Definition: ogl_renderer.cpp:561
void render_environment_pass(const Camera3D &camera) override
Definition: ogl_renderer.cpp:661
void begin_environment_pass() override
Definition: ogl_renderer.cpp:655
Uint32 load_texture_from_memory(const unsigned char *buffer, size_t size, const std::string &name="") override
Definition: ogl_renderer.cpp:510
Uint32 load_texture_from_raw_data(const unsigned char *data, int w, int h, int channels=4, const std::string &name="") override
Definition: ogl_renderer.cpp:531
bool initialize(int w, int h, SDL_Window *window) override
Definition: ogl_renderer.cpp:365
void add_to_render_batch(const Transform3D &transform, const MeshRef &mesh_ref, const MaterialRef &mat_ref) override
Definition: ogl_renderer.cpp:686
void begin_shadow_pass() override
Definition: ogl_renderer.cpp:554
void end_environment_pass() override
Definition: ogl_renderer.cpp:682
void add_to_shadow_batch(const Transform3D &transform, const MeshRef &mesh_ref) override
Definition: ogl_renderer.cpp:695
void end_render_target() override
Definition: ogl_renderer.cpp:651
~OpenGLRenderer() override
Definition: ogl_renderer.cpp:360
Uint32 load_texture_from_file(const std::string &path) override
Definition: ogl_renderer.cpp:491
std::shared_ptr< GpuVertexLayout > create_vertex_layout(const GpuBuffer *vertex_buffer, const GpuBuffer *index_buffer, const std::vector< VertexAttribute > &attributes, uint32_t stride) override
Definition: ogl_renderer.cpp:485
void begin_frame() override
Definition: ogl_renderer.cpp:544
void end_shadow_pass() override
Definition: ogl_renderer.cpp:584
void render_main_target(const Camera3D &camera, const Transform3D &camera_transform, const glm::mat4 &light_space_matrix, const std::vector< DirectionalLight > &directional_lights, const std::vector< std::pair< Transform3D, SpotLight >> &spot_lights) override
Definition: ogl_renderer.cpp:597
void begin_render_target() override
Definition: ogl_renderer.cpp:590
void swap_chain() override
Definition: ogl_renderer.cpp:722
Definition: renderer.h:33
3D Camera
Definition: components.h:80
Definition: components.h:152
Definition: components.h:148
Represents material properties for 3D rendering.
Definition: components.h:10
Definition: base_struct.h:201