6#include <glm/detail/type_mat.hpp>
9#include "hellfire/ecs/CameraComponent.h"
10#include "../shader/Shader.h"
11#include "hellfire/ecs/LightComponent.h"
19 const glm::mat4 &model,
20 const glm::mat4 &view,
21 const glm::mat4 &projection,
23 shader.set_transform_matrices(model, view, projection);
28 const glm::mat4 &view,
29 const glm::mat4 &projection,
31 shader.set_view_projection(view, projection);
41 if (
const auto* light_component = light_entity->get_component<LightComponent>()) {
42 light_component->upload_to_shader(shader, i);
51 const auto* light_component = light_entity->get_component<
LightComponent>();
52 if (light_component) {
53 light_component->upload_to_shader(shader, i);
61 if (camera_transform) {
62 shader.set_camera_position(camera_transform->get_world_position());
68 return mesh && mesh->get_index_count() > 0;
void set_time(const float time) const
void set_light_counts(const int directional_lights, const int point_lights) const
Entity & get_owner() const
void update_gpu_buffer() const
~InstancedRenderableComponent() override
void update_instance(size_t index, const InstanceData &instance)
void reserve_instances(size_t count)
InstancedRenderableComponent(std::shared_ptr< Mesh > mesh, size_t max_instances=1000)
std::shared_ptr< Material > material_
std::shared_ptr< Material > get_material() const
void add_instance(const InstanceData &instance)
InstancedRenderableComponent()=default
size_t get_max_instances() const
void unbind_instance_buffers()
void setup_instanced_vertex_attributes()
void set_material(std::shared_ptr< Material > material)
std::shared_ptr< Mesh > get_mesh() const
void enable_instance_attributes()
const std::vector< InstanceData > & get_instances() const
void add_instances(const std::vector< InstanceData > &instances)
void setup_instance_buffers()
std::vector< InstanceData > instances_
void bind_instance_buffers()
void set_mesh(std::shared_ptr< Mesh > mesh)
size_t get_instance_count() const
void disable_instance_attributes()
std::shared_ptr< Mesh > mesh_
void set_instances(const std::vector< InstanceData > &instances)
bool vertex_attributes_setup_
Entity * directional_light_entities[4]
int num_directional_lights
CameraComponent * camera_component
Entity * point_light_entities[8]
static void set_view_projection_uniforms(Shader &shader, const glm::mat4 &view, const glm::mat4 &projection, float time=0.0f)
static bool is_valid_mesh(const std::shared_ptr< Mesh > &mesh)
static void set_standard_uniforms(Shader &shader, const glm::mat4 &model, const glm::mat4 &view, const glm::mat4 &projection, float time=0.0f)
static void upload_lights_to_shader(Shader &shader, OGLRendererContext &renderer_context)
InstanceData(const glm::mat4 &t=glm::mat4(1.0f), const glm::vec3 &c=glm::vec3(1.0f), float s=1.0f)