Cleaning up shutdown
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user