Cleaning up shutdown

This commit is contained in:
Confideo-IOM
2026-08-17 21:44:00 +01:00
parent 139fb149b2
commit 282243a16b
89 changed files with 2112 additions and 855 deletions
@@ -16,7 +16,8 @@ class HydraBufferManager : public HydraObject
HydraID CreateGPUBuffer(std::string buffer_name,
uint32_t buffer_size_bytes,
uint32_t binding,
HYDRA_BUFFER_TYPE buffer_type);
HYDRA_BUFFER_TYPE buffer_type);
void DeleteBuffer(HydraID buffer_id);
void UpdatePartialBuffer(HydraID buffer_id, uint32_t start, uint32_t size, void *data);
void UpdateWholeBuffer(HydraID buffer_id, void* data);
@@ -6,6 +6,8 @@
#include "../task/buffer/HydraCreateUnBoundTextureTask.hpp"
#include "../task/renderer/HydraCreateCascadeShadowFrameBuffer.hpp"
#include "../task/renderer/HydraCreateShadowFrameBuffer.hpp"
#include "../task/renderer/HydraDeleteShadowFrameBufferTask.hpp"
#include "../ecs/components/HydraDirectionalShadowSourceComponent.h"
void HydraShadowBufferManager::Initialise()
{
@@ -118,17 +120,42 @@ void HydraShadowBufferManager::UpdatePointShadow(HydraID shadow_id, HydraPointSh
}
}
void HydraShadowBufferManager::RemoveDirectionalShadow(HydraID shadow_id)
void HydraShadowBufferManager::DeleteDirectionalShadow(HydraID shadow_id)
{
HydraECS* ecs = GetEngine()->ECS();
HydraTaskScheduler* task_scheduler = GetEngine()->TaskScheduler();
HydraDirectionalShadowSourceComponent shadow_comp = m_directional_shadow_buffer[shadow_id];
HydraID delete_frame_buffer_task_id = task_scheduler->CreateTask<HydraDeleteShadowFrameBufferTask>(HydraThreadAffinity::Render);
HydraDeleteShadowFrameBufferTask *fb_task = static_cast<HydraDeleteShadowFrameBufferTask *>(task_scheduler->GetTask(delete_frame_buffer_task_id));
fb_task->Initialise(shadow_comp.shadow_texture_id, shadow_comp.frame_buffer_id);
task_scheduler->WaitForTask(delete_frame_buffer_task_id);
}
void HydraShadowBufferManager::RemoveSpotShadow(HydraID shadow_id)
void HydraShadowBufferManager::DeleteSpotShadow(HydraID shadow_id)
{
HydraECS* ecs = GetEngine()->ECS();
HydraTaskScheduler* task_scheduler = GetEngine()->TaskScheduler();
HydraSpotShadowSourceComponent shadow_comp = m_spot_shadow_buffer[shadow_id];
HydraID delete_frame_buffer_task_id = task_scheduler->CreateTask<HydraDeleteShadowFrameBufferTask>(HydraThreadAffinity::Render);
HydraDeleteShadowFrameBufferTask *fb_task = static_cast<HydraDeleteShadowFrameBufferTask *>(task_scheduler->GetTask(delete_frame_buffer_task_id));
fb_task->Initialise(shadow_comp.shadow_texture_id, shadow_comp.frame_buffer_id);
task_scheduler->WaitForTask(delete_frame_buffer_task_id);
}
void HydraShadowBufferManager::RemovePointShadow(HydraID shadow_id)
void HydraShadowBufferManager::DeletePointShadow(HydraID shadow_id)
{
HydraECS* ecs = GetEngine()->ECS();
HydraTaskScheduler* task_scheduler = GetEngine()->TaskScheduler();
HydraPointShadowSourceComponent shadow_comp = m_point_shadow_buffer[shadow_id];
HydraID delete_frame_buffer_task_id = task_scheduler->CreateTask<HydraDeleteShadowFrameBufferTask>(HydraThreadAffinity::Render);
HydraDeleteShadowFrameBufferTask *fb_task = static_cast<HydraDeleteShadowFrameBufferTask *>(task_scheduler->GetTask(delete_frame_buffer_task_id));
fb_task->Initialise(shadow_comp.shadow_texture_id, shadow_comp.frame_buffer_id);
task_scheduler->WaitForTask(delete_frame_buffer_task_id);
}
void HydraShadowBufferManager::UpdateShadowBuffer()
@@ -23,9 +23,9 @@ class HydraShadowBufferManager : public HydraObject
void UpdateSpotShadow(HydraID shadow_id, HydraSpotShadowSourceComponent shadow);
void UpdatePointShadow(HydraID shadow_id, HydraPointShadowSourceComponent shadow);
void RemoveDirectionalShadow(HydraID shadow_id);
void RemoveSpotShadow(HydraID shadow_id);
void RemovePointShadow(HydraID shadow_id);
void DeleteDirectionalShadow(HydraID shadow_id);
void DeleteSpotShadow(HydraID shadow_id);
void DeletePointShadow(HydraID shadow_id);
void UpdateShadowBuffer();
private:
@@ -195,8 +195,7 @@ HydraID HydraTextureBufferManager::CreateTexture(std::string texture_name,
glCreateTextures(GL_TEXTURE_2D, 1, &gl_tex_id);
glBindTexture(GL_TEXTURE_2D, gl_tex_id);
glTextureStorage2D(gl_tex_id,1+ mip_levels, internal_format, width, height);
glTextureStorage2D(gl_tex_id,1+ mip_levels, internal_format, width, height);
if (data != nullptr)
{
glTextureSubImage2D(
@@ -264,4 +263,5 @@ void HydraTextureBufferManager::DeleteTexture(HydraID texture_id)
{
UnbindTexture(m_bindless_texture_ids[texture_id]);
}
glDeleteTextures(1, &m_textures[texture_id].gl_tex_id);
}