Golias Engine
A C++ 20 'game engine' built with SDL3 with wide platform support.
Public Member Functions | Public Attributes | Protected Attributes | List of all members
Renderer Class Referenceabstract

#include <renderer.h>

Inheritance diagram for Renderer:
OpenGLRenderer

Public Member Functions

virtual ~Renderer ()=default
 
virtual bool initialize (int width, int height, SDL_Window *window)=0
 
virtual void resize (int width, int height)=0
 
virtual void cleanup ()=0
 
virtual std::shared_ptr< GpuBufferallocate_gpu_buffer (GpuBufferType type)=0
 
virtual std::shared_ptr< GpuVertexLayoutcreate_vertex_layout (const GpuBuffer *vertex_buffer, const GpuBuffer *index_buffer, const std::vector< VertexAttribute > &attributes, uint32_t stride)=0
 
virtual Uint32 load_texture_from_file (const std::string &path)=0
 
virtual Uint32 load_texture_from_memory (const unsigned char *buffer, size_t size, const std::string &name="")=0
 
virtual Uint32 load_texture_from_raw_data (const unsigned char *data, int width, int height, int channels=4, const std::string &name="")=0
 
virtual void begin_frame ()=0
 
virtual void begin_shadow_pass ()=0
 
virtual void render_shadow_pass (const glm::mat4 &light_space_matrix)=0
 
virtual void end_shadow_pass ()=0
 
virtual void begin_render_target ()=0
 
virtual 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)=0
 
virtual void end_render_target ()=0
 
virtual void begin_environment_pass ()=0
 
virtual void render_environment_pass (const Camera3D &camera)=0
 
virtual void end_environment_pass ()=0
 
virtual void add_to_render_batch (const Transform3D &transform, const MeshRef &mesh_ref, const MaterialRef &mat_ref)=0
 
virtual void add_to_shadow_batch (const Transform3D &transform, const MeshRef &mesh_ref)=0
 
virtual void swap_chain ()=0
 
void register_material (const char *name, const Material &material)
 

Public Attributes

std::unordered_map< std::string, Uint32 > _textures
 
std::unordered_map< std::string, std::vector< MeshInstance3D > > _meshes
 
std::unordered_map< std::string, std::vector< Material > > _materials
 

Protected Attributes

SDL_Window * _window = nullptr
 
std::unique_ptr< Shader_default_shader = nullptr
 
std::unique_ptr< Shader_shadow_shader = nullptr
 
std::unique_ptr< Shader_environment_shader = nullptr
 
WorldEnvironment_world_environment = nullptr
 
std::shared_ptr< Framebuffershadow_map_fbo = nullptr
 
int width = 0
 
int height = 0
 
std::shared_ptr< GpuBufferinstance_buffer
 
std::unordered_map< MeshMaterialKey, RenderBatch, MeshMaterialKeyHash_instanced_batches
 
std::unordered_map< const MeshInstance3D *, RenderBatchshadow_batches
 
size_t max_instances = 1000
 

Constructor & Destructor Documentation

◆ ~Renderer()

virtual Renderer::~Renderer ( )
virtualdefault

Member Function Documentation

◆ add_to_render_batch()

virtual void Renderer::add_to_render_batch ( const Transform3D transform,
const MeshRef mesh_ref,
const MaterialRef mat_ref 
)
pure virtual

Implemented in OpenGLRenderer.

◆ add_to_shadow_batch()

virtual void Renderer::add_to_shadow_batch ( const Transform3D transform,
const MeshRef mesh_ref 
)
pure virtual

Implemented in OpenGLRenderer.

◆ allocate_gpu_buffer()

virtual std::shared_ptr<GpuBuffer> Renderer::allocate_gpu_buffer ( GpuBufferType  type)
pure virtual

Implemented in OpenGLRenderer.

◆ begin_environment_pass()

virtual void Renderer::begin_environment_pass ( )
pure virtual

Implemented in OpenGLRenderer.

◆ begin_frame()

virtual void Renderer::begin_frame ( )
pure virtual

Implemented in OpenGLRenderer.

◆ begin_render_target()

virtual void Renderer::begin_render_target ( )
pure virtual

Implemented in OpenGLRenderer.

◆ begin_shadow_pass()

virtual void Renderer::begin_shadow_pass ( )
pure virtual

Implemented in OpenGLRenderer.

◆ cleanup()

virtual void Renderer::cleanup ( )
pure virtual

Implemented in OpenGLRenderer.

◆ create_vertex_layout()

virtual std::shared_ptr<GpuVertexLayout> Renderer::create_vertex_layout ( const GpuBuffer vertex_buffer,
const GpuBuffer index_buffer,
const std::vector< VertexAttribute > &  attributes,
uint32_t  stride 
)
pure virtual

Implemented in OpenGLRenderer.

◆ end_environment_pass()

virtual void Renderer::end_environment_pass ( )
pure virtual

Implemented in OpenGLRenderer.

◆ end_render_target()

virtual void Renderer::end_render_target ( )
pure virtual

Implemented in OpenGLRenderer.

◆ end_shadow_pass()

virtual void Renderer::end_shadow_pass ( )
pure virtual

Implemented in OpenGLRenderer.

◆ initialize()

virtual bool Renderer::initialize ( int  width,
int  height,
SDL_Window *  window 
)
pure virtual

Implemented in OpenGLRenderer.

◆ load_texture_from_file()

virtual Uint32 Renderer::load_texture_from_file ( const std::string &  path)
pure virtual

Implemented in OpenGLRenderer.

◆ load_texture_from_memory()

virtual Uint32 Renderer::load_texture_from_memory ( const unsigned char *  buffer,
size_t  size,
const std::string &  name = "" 
)
pure virtual

Implemented in OpenGLRenderer.

◆ load_texture_from_raw_data()

virtual Uint32 Renderer::load_texture_from_raw_data ( const unsigned char *  data,
int  width,
int  height,
int  channels = 4,
const std::string &  name = "" 
)
pure virtual

Implemented in OpenGLRenderer.

◆ register_material()

void Renderer::register_material ( const char *  name,
const Material material 
)
inline

◆ render_environment_pass()

virtual void Renderer::render_environment_pass ( const Camera3D camera)
pure virtual

Implemented in OpenGLRenderer.

◆ render_main_target()

virtual void Renderer::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 
)
pure virtual

Implemented in OpenGLRenderer.

◆ render_shadow_pass()

virtual void Renderer::render_shadow_pass ( const glm::mat4 &  light_space_matrix)
pure virtual

Implemented in OpenGLRenderer.

◆ resize()

virtual void Renderer::resize ( int  width,
int  height 
)
pure virtual

Implemented in OpenGLRenderer.

◆ swap_chain()

virtual void Renderer::swap_chain ( )
pure virtual

Implemented in OpenGLRenderer.

Member Data Documentation

◆ _default_shader

std::unique_ptr<Shader> Renderer::_default_shader = nullptr
protected

◆ _environment_shader

std::unique_ptr<Shader> Renderer::_environment_shader = nullptr
protected

◆ _instanced_batches

std::unordered_map<MeshMaterialKey, RenderBatch, MeshMaterialKeyHash> Renderer::_instanced_batches
protected

◆ _materials

std::unordered_map<std::string, std::vector<Material> > Renderer::_materials

◆ _meshes

std::unordered_map<std::string, std::vector<MeshInstance3D> > Renderer::_meshes

◆ _shadow_shader

std::unique_ptr<Shader> Renderer::_shadow_shader = nullptr
protected

◆ _textures

std::unordered_map<std::string, Uint32> Renderer::_textures

◆ _window

SDL_Window* Renderer::_window = nullptr
protected

◆ _world_environment

WorldEnvironment* Renderer::_world_environment = nullptr
protected

◆ height

int Renderer::height = 0
protected

◆ instance_buffer

std::shared_ptr<GpuBuffer> Renderer::instance_buffer
protected

◆ max_instances

size_t Renderer::max_instances = 1000
protected

◆ shadow_batches

std::unordered_map<const MeshInstance3D*, RenderBatch> Renderer::shadow_batches
protected

◆ shadow_map_fbo

std::shared_ptr<Framebuffer> Renderer::shadow_map_fbo = nullptr
protected

◆ width

int Renderer::width = 0
protected

The documentation for this class was generated from the following file: