26 std::size_t h1 = std::hash<const void*>{}(key.
mesh);
27 std::size_t h2 = std::hash<const void*>{}(key.
material);
28 return h1 ^ (h2 << 1);
46 const std::vector<VertexAttribute>& attributes,
52 const std::string& name =
"") = 0;
62 const glm::mat4& light_space_matrix,
63 const std::vector<DirectionalLight>& directional_lights,
64 const std::vector<std::pair<Transform3D, SpotLight>>& spot_lights) = 0;
80 std::unordered_map<std::string, std::vector<MeshInstance3D>>
_meshes;
81 std::unordered_map<std::string, std::vector<Material>>
_materials;
GpuBufferType
GpuBuffer Abstract class.
Definition: base_struct.h:29
GpuBuffer Abstract class.
Definition: base_struct.h:46
Definition: renderer.h:33
std::shared_ptr< GpuBuffer > instance_buffer
Definition: renderer.h:100
std::unordered_map< std::string, std::vector< MeshInstance3D > > _meshes
Definition: renderer.h:80
int width
Definition: renderer.h:98
virtual void begin_render_target()=0
std::unique_ptr< Shader > _environment_shader
Definition: renderer.h:92
std::unordered_map< const MeshInstance3D *, RenderBatch > shadow_batches
Definition: renderer.h:104
virtual void end_environment_pass()=0
virtual bool initialize(int width, int height, SDL_Window *window)=0
virtual std::shared_ptr< GpuVertexLayout > create_vertex_layout(const GpuBuffer *vertex_buffer, const GpuBuffer *index_buffer, const std::vector< VertexAttribute > &attributes, uint32_t stride)=0
virtual void begin_environment_pass()=0
std::unique_ptr< Shader > _shadow_shader
Definition: renderer.h:91
virtual void swap_chain()=0
size_t max_instances
Definition: renderer.h:106
virtual void resize(int width, int height)=0
virtual void add_to_render_batch(const Transform3D &transform, const MeshRef &mesh_ref, const MaterialRef &mat_ref)=0
std::unordered_map< std::string, std::vector< Material > > _materials
Definition: renderer.h:81
virtual void end_render_target()=0
virtual void begin_shadow_pass()=0
virtual void render_environment_pass(const Camera3D &camera)=0
virtual Uint32 load_texture_from_raw_data(const unsigned char *data, int width, int height, int channels=4, const std::string &name="")=0
SDL_Window * _window
Definition: renderer.h:88
virtual void render_shadow_pass(const glm::mat4 &light_space_matrix)=0
int height
Definition: renderer.h:98
virtual Uint32 load_texture_from_file(const std::string &path)=0
void register_material(const char *name, const Material &material)
Definition: renderer.h:83
std::unordered_map< std::string, Uint32 > _textures
Definition: renderer.h:79
std::unordered_map< MeshMaterialKey, RenderBatch, MeshMaterialKeyHash > _instanced_batches
Definition: renderer.h:102
virtual void begin_frame()=0
virtual ~Renderer()=default
virtual std::shared_ptr< GpuBuffer > allocate_gpu_buffer(GpuBufferType type)=0
std::unique_ptr< Shader > _default_shader
Definition: renderer.h:90
virtual void end_shadow_pass()=0
std::shared_ptr< Framebuffer > shadow_map_fbo
Definition: renderer.h:96
virtual Uint32 load_texture_from_memory(const unsigned char *buffer, size_t size, const std::string &name="")=0
virtual void add_to_shadow_batch(const Transform3D &transform, const MeshRef &mesh_ref)=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
WorldEnvironment * _world_environment
Definition: renderer.h:94
3D Camera
Definition: components.h:80
Definition: components.h:152
Definition: components.h:41
Definition: components.h:29
Definition: renderer.h:24
std::size_t operator()(const MeshMaterialKey &key) const
Definition: renderer.h:25
Definition: renderer.h:15
bool operator==(const MeshMaterialKey &other) const
Definition: renderer.h:19
const Material * material
Definition: renderer.h:17
const MeshInstance3D * mesh
Definition: renderer.h:16
Definition: components.h:148
std::vector< glm::mat4 > model_matrices
Definition: renderer.h:8
const MeshInstance3D * mesh
Definition: renderer.h:6
void clear()
Definition: renderer.h:10
const Material * material
Definition: renderer.h:7
Definition: base_struct.h:201