Spot works

This commit is contained in:
Confideo-IOM
2026-08-06 21:11:33 +01:00
parent 6d7d7571b5
commit f9b696f9e8
61 changed files with 701 additions and 418 deletions
@@ -13,6 +13,8 @@
#include "../ecs/systems/HydraRenderSystem.h"
#include "../ecs/systems/HydraDirectionalShadowSourceSystem.h"
#include "../ecs/components/HydraDirectionalShadowSourceComponent.h"
#include "../ecs/systems/HydraSpotShadowSourceSystem.h"
#include "../ecs/components/HydraSpotShadowSourceComponent.h"
#include "../mesh/StandardVertex.h"
#include "../actor/HydraActorManager.h"
#include "../actor/HydraOutputActor.h"
@@ -95,12 +97,12 @@ void HydraDeferredPipeline::_UpdateUBO()
buffer_manager->UpdateWholeBuffer(m_per_frame_output_ubo, &output_ubo);
glBindBuffer(GL_UNIFORM_BUFFER, m_per_frame_output_ubo);
std::shared_ptr<HydraDirectionalShadowSourceSystem> sys = GetEngine()->ECS()->GetSystem<HydraDirectionalShadowSourceSystem>();
std::shared_ptr<HydraSpotShadowSourceSystem> sys = GetEngine()->ECS()->GetSystem<HydraSpotShadowSourceSystem>();
HydraID texture_id = 0;
if(sys->Entities.size() > 0)
{
auto it = sys->Entities.begin();
HydraDirectionalShadowSourceComponent shad_comp = GetEngine()->ECS()->GetComponent<HydraDirectionalShadowSourceComponent>(*it);
HydraSpotShadowSourceComponent shad_comp = GetEngine()->ECS()->GetComponent<HydraSpotShadowSourceComponent>(*it);
texture_id = shad_comp.shadow_texture_id;
}
TextureDebugUBO texture_ubo = {};
@@ -233,6 +235,8 @@ void HydraDeferredPipeline::_CreateOutputRenderStage()
HydraID tex_buffer_id = buffer_manager->FindBuffer("TextureBuffer");
HydraID output_texture_buffer_id = buffer_manager->FindBuffer("DeferredOutputTextureUBO");
HydraID light_buffer_id = buffer_manager->FindBuffer("LightBuffer");
HydraID directional_shadow_buffer_id = buffer_manager->FindBuffer("DirectionalShadowBuffer");
HydraID spot_shadow_buffer_id = buffer_manager->FindBuffer("SpotShadowBuffer");
HydraShaderBinding shader_binding = {};
shader_binding.block_name.push_back("position_buffer");
@@ -240,7 +244,6 @@ void HydraDeferredPipeline::_CreateOutputRenderStage()
shader_binding.buffer_id.push_back(pos_buffer_id);
shader_binding.buffer_type.push_back(HYDRA_BUFFER_TYPE::HYDRA_SSBO_BUFFER);
shader_binding.block_name.push_back("texture_buffer");
shader_binding.binding_point.push_back(3);
shader_binding.buffer_id.push_back(tex_buffer_id);
@@ -260,7 +263,17 @@ void HydraDeferredPipeline::_CreateOutputRenderStage()
shader_binding.binding_point.push_back(4);
shader_binding.buffer_id.push_back(light_buffer_id);
shader_binding.buffer_type.push_back(HYDRA_BUFFER_TYPE::HYDRA_SSBO_BUFFER);
shader_binding.block_name.push_back("directional_shadow_buffer");
shader_binding.binding_point.push_back(5);
shader_binding.buffer_id.push_back(directional_shadow_buffer_id);
shader_binding.buffer_type.push_back(HYDRA_BUFFER_TYPE::HYDRA_SSBO_BUFFER);
shader_binding.block_name.push_back("spot_shadow_buffer");
shader_binding.binding_point.push_back(6);
shader_binding.buffer_id.push_back(spot_shadow_buffer_id);
shader_binding.buffer_type.push_back(HYDRA_BUFFER_TYPE::HYDRA_SSBO_BUFFER);
render_stage->Initialise(shader_path + "deferred_output_shader.vert",
shader_path + "deferred_output_shader.frag", "",
shader_binding,