Cleaning up shutdown
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
#include "../../task/buffer/HydraUpdateWholeGPUBufferTask.hpp"
|
||||
#include "../../task/buffer/HydraUpdatePartialGPUBufferTask.hpp"
|
||||
#include "../../task/buffer/HydraCreateUnBoundTextureTask.hpp"
|
||||
#include "../../task/buffer/HydraDeleteTextureTask.hpp"
|
||||
#include "../../task/renderer/HydraCreateCascadeShadowFrameBuffer.hpp"
|
||||
#include "../../task/renderer/HydraCreateShadowFrameBuffer.hpp"
|
||||
#include "../../actor/HydraActorManager.h"
|
||||
@@ -42,10 +43,15 @@ void HydraDirectionalShadowSourceSystem::InitialiseComponent(HydraID entity_id)
|
||||
light_comp.shadow_caster = 1;
|
||||
shadow_comp.shadow_id = shadow_id;
|
||||
_InitialiseShadowMap(entity_id);
|
||||
}
|
||||
|
||||
// m_shadow_actor_id = GetEngine()->ActorManager()->CreateActor<HydraTestCubeActor>();
|
||||
// GetEngine()->ActorManager()->InitialiseActor(m_shadow_actor_id);
|
||||
// GetEngine()->ActorManager()->SetPosition(m_shadow_actor_id, glm::dvec3(0, 0, 0));
|
||||
void HydraDirectionalShadowSourceSystem::DestroyComponent(HydraID entity_id)
|
||||
{
|
||||
HydraEngine *engine = GetEngine();
|
||||
HydraECS *ecs = engine->ECS();
|
||||
HydraDirectionalShadowSourceComponent& shadow_comp = ecs->GetComponent<HydraDirectionalShadowSourceComponent>(entity_id);
|
||||
GetEngine()->ShadowBufferManager()->DeleteDirectionalShadow(shadow_comp.shadow_id);
|
||||
|
||||
}
|
||||
|
||||
void HydraDirectionalShadowSourceSystem::UpdateSystem(float delta_t_seconds)
|
||||
@@ -119,7 +125,7 @@ void HydraDirectionalShadowSourceSystem::_InitialiseShadowMap(HydraID entity_id)
|
||||
uint32_t depth_texture_id = 0;
|
||||
HydraID create_framebuffer_task_id = task_scheduler->CreateTask<HydraCreateCascadeShadowFrameBuffer>(HydraThreadAffinity::Render);
|
||||
HydraCreateCascadeShadowFrameBuffer *fb_task = static_cast<HydraCreateCascadeShadowFrameBuffer *>(task_scheduler->GetTask(create_framebuffer_task_id));
|
||||
fb_task->Initialise(&shad_comp.shadow_texture_id, &depth_texture_id, &shad_comp.frame_buffer_id);
|
||||
fb_task->Initialise(&depth_texture_id, &shad_comp.frame_buffer_id);
|
||||
|
||||
task_scheduler->WaitForTask(create_framebuffer_task_id);
|
||||
shad_comp.shadow_texture_id = depth_texture_id;
|
||||
|
||||
@@ -14,9 +14,11 @@ class HydraDirectionalShadowSourceSystem : public HydraSystem
|
||||
virtual void Initialise() override;
|
||||
protected:
|
||||
void InitialiseComponent(HydraID entity_id) override;
|
||||
void DestroyComponent(HydraID entity_id) override;
|
||||
void UpdateSystem(float delta_t_seconds) override;
|
||||
private:
|
||||
void _UpdateShadowMap(HydraID entity_id);
|
||||
|
||||
void _InitialiseShadowMap(HydraID entity_id);
|
||||
HydraID m_shadow_actor_id = INVALID_HYDRA_ID;
|
||||
std::mutex m_mutex;
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
|
||||
#include "../../scheduler/HydraTaskScheduler.h"
|
||||
#include "../../task/buffer/HydraCreateGPUBufferTask.hpp"
|
||||
#include "../../task/buffer/HydraDeleteGPUBufferTask.hpp"
|
||||
#include "../../task/buffer/HydraUpdatePartialGPUBufferTask.hpp"
|
||||
#include "../../actor/HydraActorManager.h"
|
||||
#include <GLMIncludes.h>
|
||||
@@ -38,6 +39,15 @@ void HydraLightSystem::InitialiseComponent(HydraID entity_id)
|
||||
m_lights.push_back(light_comp);
|
||||
}
|
||||
|
||||
void HydraLightSystem::FreeSystemResources()
|
||||
{
|
||||
HydraTaskScheduler *task_scheduler = GetEngine()->TaskScheduler();
|
||||
HydraID delete_gpu_buffer_task_id = task_scheduler->CreateTask<HydraDeleteGPUBufferTask>(HydraThreadAffinity::Render);
|
||||
HydraDeleteGPUBufferTask *task = static_cast<HydraDeleteGPUBufferTask *>(task_scheduler->GetTask(delete_gpu_buffer_task_id));
|
||||
task->Intialise(m_light_buffer_id);
|
||||
task_scheduler->WaitForTask(delete_gpu_buffer_task_id);
|
||||
}
|
||||
|
||||
void HydraLightSystem::UpdateSystem(float delta_t_seconds)
|
||||
{
|
||||
_WriteToGPU();
|
||||
|
||||
@@ -17,6 +17,7 @@ class HydraLightSystem : public HydraSystem
|
||||
uint32_t GetLightCount();
|
||||
protected:
|
||||
void InitialiseComponent(HydraID entity_id) override;
|
||||
void FreeSystemResources() override;
|
||||
virtual void UpdateSystem(float delta_t_seconds);
|
||||
private:
|
||||
void _WriteToGPU();
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
|
||||
#include "../../scheduler/HydraTaskScheduler.h"
|
||||
#include "../../task/buffer/HydraCreateGPUBufferTask.hpp"
|
||||
#include "../../task/buffer/HydraDeleteGPUBufferTask.hpp"
|
||||
#include "../../task/buffer/HydraUpdateWholeGPUBufferTask.hpp"
|
||||
#include "../../actor/HydraActorManager.h"
|
||||
|
||||
@@ -32,6 +33,21 @@ void HydraMaterialSystem::InitialiseComponent(HydraID entity_id)
|
||||
{
|
||||
}
|
||||
|
||||
void HydraMaterialSystem::FreeSystemResources()
|
||||
{
|
||||
HydraTaskScheduler *task_scheduler = GetEngine()->TaskScheduler();
|
||||
|
||||
HydraID delete_gpu_buffer_task_id = task_scheduler->CreateTask<HydraDeleteGPUBufferTask>(HydraThreadAffinity::Render);
|
||||
HydraDeleteGPUBufferTask *task = static_cast<HydraDeleteGPUBufferTask *>(task_scheduler->GetTask(delete_gpu_buffer_task_id));
|
||||
task->Intialise(m_material_buffer_id);
|
||||
task_scheduler->WaitForTask(delete_gpu_buffer_task_id);
|
||||
|
||||
delete_gpu_buffer_task_id = task_scheduler->CreateTask<HydraDeleteGPUBufferTask>(HydraThreadAffinity::Render);
|
||||
task = static_cast<HydraDeleteGPUBufferTask *>(task_scheduler->GetTask(delete_gpu_buffer_task_id));
|
||||
task->Intialise(m_texture_buffer_id);
|
||||
task_scheduler->WaitForTask(delete_gpu_buffer_task_id);
|
||||
}
|
||||
|
||||
void HydraMaterialSystem::UpdateSystem(float delta_t_seconds)
|
||||
{
|
||||
_WriteToGPU();
|
||||
|
||||
@@ -15,7 +15,10 @@ class HydraMaterialSystem : public HydraSystem
|
||||
void Initialise() override;
|
||||
protected:
|
||||
void InitialiseComponent(HydraID entity_id) override;
|
||||
void FreeSystemResources() override;
|
||||
virtual void UpdateSystem(float delta_t_seconds);
|
||||
|
||||
|
||||
private:
|
||||
void _WriteToGPU();
|
||||
HydraID m_material_buffer_id = INVALID_HYDRA_ID;
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#include "../../buffer/HydraBufferManager.h"
|
||||
#include "../../scheduler/HydraTaskScheduler.h"
|
||||
#include "../../task/buffer/HydraCreateVertexBufferTask.hpp"
|
||||
|
||||
#include "../../task/buffer/HydraDeleteVertexBufferTask.hpp"
|
||||
#include "../../task/buffer/HydraUpdateVertexBufferTask.hpp"
|
||||
#include "../../mesh/HydraMeshManager.h"
|
||||
void HydraMeshSystem::Initialise()
|
||||
@@ -13,6 +13,8 @@ void HydraMeshSystem::Initialise()
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
void HydraMeshSystem::InitialiseComponent(HydraID entity_id)
|
||||
{
|
||||
HydraECS* ecs = GetEngine()->ECS();
|
||||
@@ -42,3 +44,19 @@ void HydraMeshSystem::InitialiseComponent(HydraID entity_id)
|
||||
task_scheduler->WaitForTask(update_buffer_task_id);
|
||||
mesh_comp.mesh_state = HYDRA_STATE::Ready;
|
||||
}
|
||||
|
||||
void HydraMeshSystem::DestroyComponent(HydraID entity_id)
|
||||
{
|
||||
HydraECS* ecs = GetEngine()->ECS();
|
||||
HydraTaskScheduler *task_scheduler = GetEngine()->TaskScheduler();
|
||||
|
||||
HydraBufferManager *buffer_manager = GetEngine()->BufferManager();
|
||||
HydraMeshComponent mesh_comp = ecs->GetComponent<HydraMeshComponent>(entity_id);
|
||||
|
||||
HydraID delete_vertex_task_id = task_scheduler->CreateTask<HydraDeleteVertexBufferTask>(HydraThreadAffinity::Render);
|
||||
HydraDeleteVertexBufferTask *vertex_task = static_cast<HydraDeleteVertexBufferTask *>(task_scheduler->GetTask(delete_vertex_task_id));
|
||||
vertex_task->Intialise(mesh_comp.vertex_buffer_id);
|
||||
task_scheduler->WaitForTask(delete_vertex_task_id);
|
||||
|
||||
GetEngine()->MeshManager()->DeleteMesh(mesh_comp.mesh_id);
|
||||
}
|
||||
|
||||
@@ -11,8 +11,11 @@ class HydraMeshSystem : public HydraSystem
|
||||
public:
|
||||
|
||||
void Initialise() override;
|
||||
|
||||
protected:
|
||||
void InitialiseComponent(HydraID entity_id) override;
|
||||
void DestroyComponent(HydraID entity_id) override;
|
||||
|
||||
virtual void UpdateSystem(float delta_t_seconds){}
|
||||
};
|
||||
|
||||
|
||||
@@ -49,6 +49,14 @@ void HydraPointShadowSourceSystem::UpdateSystem(float delta_t_seconds)
|
||||
}
|
||||
}
|
||||
|
||||
void HydraPointShadowSourceSystem::DestroyComponent(HydraID entity_id)
|
||||
{
|
||||
HydraEngine *engine = GetEngine();
|
||||
HydraECS *ecs = engine->ECS();
|
||||
HydraPointShadowSourceComponent& shadow_comp = ecs->GetComponent<HydraPointShadowSourceComponent>(entity_id);
|
||||
GetEngine()->ShadowBufferManager()->DeletePointShadow(shadow_comp.shadow_id);
|
||||
}
|
||||
|
||||
void HydraPointShadowSourceSystem::_UpdateShadowMap(HydraID entity_id)
|
||||
{
|
||||
HydraEngine *engine = GetEngine();
|
||||
|
||||
@@ -16,6 +16,7 @@ class HydraPointShadowSourceSystem : public HydraSystem
|
||||
protected:
|
||||
void InitialiseComponent(HydraID entity_id) override;
|
||||
void UpdateSystem(float delta_t_seconds) override;
|
||||
void DestroyComponent(HydraID entity_id) override;
|
||||
private:
|
||||
void _UpdateShadowMap(HydraID entity_id);
|
||||
void _InitialiseShadowMap(HydraID entity_id);
|
||||
|
||||
@@ -56,6 +56,14 @@ void HydraSpotShadowSourceSystem::UpdateSystem(float delta_t_seconds)
|
||||
|
||||
}
|
||||
|
||||
void HydraSpotShadowSourceSystem::DestroyComponent(HydraID entity_id)
|
||||
{
|
||||
HydraEngine *engine = GetEngine();
|
||||
HydraECS *ecs = engine->ECS();
|
||||
HydraSpotShadowSourceComponent& shadow_comp = ecs->GetComponent<HydraSpotShadowSourceComponent>(entity_id);
|
||||
GetEngine()->ShadowBufferManager()->DeleteSpotShadow(shadow_comp.shadow_id);
|
||||
}
|
||||
|
||||
void HydraSpotShadowSourceSystem::_UpdateShadowMap(HydraID entity_id)
|
||||
{
|
||||
HydraEngine *engine = GetEngine();
|
||||
|
||||
@@ -17,6 +17,7 @@ class HydraSpotShadowSourceSystem : public HydraSystem
|
||||
protected:
|
||||
void InitialiseComponent(HydraID entity_id) override;
|
||||
void UpdateSystem(float delta_t_seconds) override;
|
||||
void DestroyComponent(HydraID entity_id) override;
|
||||
private:
|
||||
void _UpdateShadowMap(HydraID entity_id);
|
||||
void _InitialiseShadowMap(HydraID entity_id);
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "../components/HydraPositionComponent.h"
|
||||
#include "../../scheduler/HydraTaskScheduler.h"
|
||||
#include "../../task/buffer/HydraCreateGPUBufferTask.hpp"
|
||||
#include "../../task/buffer/HydraDeleteGPUBufferTask.hpp"
|
||||
#include "../../task/buffer/HydraUpdateWholeGPUBufferTask.hpp"
|
||||
#include "../../actor/HydraActorManager.h"
|
||||
|
||||
@@ -27,6 +28,16 @@ void HydraTransformSystem::Initialise()
|
||||
m_model_matrix.resize(MAX_ACTORS);
|
||||
}
|
||||
|
||||
void HydraTransformSystem::FreeSystemResources()
|
||||
{
|
||||
HydraTaskScheduler *task_scheduler = GetEngine()->TaskScheduler();
|
||||
|
||||
HydraID delete_gpu_buffer_task_id = task_scheduler->CreateTask<HydraDeleteGPUBufferTask>(HydraThreadAffinity::Render);
|
||||
HydraDeleteGPUBufferTask *task = static_cast<HydraDeleteGPUBufferTask *>(task_scheduler->GetTask(delete_gpu_buffer_task_id));
|
||||
task->Intialise(m_transform_buffer_id);
|
||||
task_scheduler->WaitForTask(delete_gpu_buffer_task_id);
|
||||
}
|
||||
|
||||
void HydraTransformSystem::UpdateSystem(float delta_t_seconds)
|
||||
{
|
||||
HydraECS *ecs = GetEngine()->ECS();
|
||||
|
||||
@@ -15,6 +15,7 @@ class HydraTransformSystem : public HydraSystem
|
||||
|
||||
virtual void UpdateSystem(float delta_t_seconds) override;
|
||||
void InitialiseComponent(HydraID actor_id) override;
|
||||
void FreeSystemResources() override;
|
||||
private:
|
||||
void _UpdateChild(HydraID parent_id, HydraID actor_id, glm::mat4 parent_transform);
|
||||
void _WriteToGPU();
|
||||
|
||||
Reference in New Issue
Block a user