Cleanup
This commit is contained in:
@@ -4,7 +4,9 @@
|
||||
#include "../task/buffer/HydraUpdateWholeGPUBufferTask.hpp"
|
||||
#include "../task/buffer/HydraUpdatePartialGPUBufferTask.hpp"
|
||||
#include "../task/buffer/HydraCreateUnBoundTextureTask.hpp"
|
||||
#include "../task/buffer/HydraDeleteGPUBufferTask.hpp"
|
||||
#include "../task/renderer/HydraCreateCascadeShadowFrameBuffer.hpp"
|
||||
#include "../task/renderer/HydraCreateCubemapShadowFrameBuffer.hpp"
|
||||
#include "../task/renderer/HydraCreateShadowFrameBuffer.hpp"
|
||||
#include "../task/renderer/HydraDeleteShadowFrameBufferTask.hpp"
|
||||
#include "../ecs/components/HydraDirectionalShadowSourceComponent.h"
|
||||
@@ -52,9 +54,24 @@ void HydraShadowBufferManager::Initialise()
|
||||
}
|
||||
void HydraShadowBufferManager::Shutdown()
|
||||
{
|
||||
|
||||
HydraTaskScheduler *task_scheduler = GetEngine()->TaskScheduler();
|
||||
|
||||
uint32_t delete_gpu_buffer_task_id = task_scheduler->CreateTask<HydraDeleteGPUBufferTask>(HydraThreadAffinity::Render);
|
||||
HydraDeleteGPUBufferTask *point_task = static_cast<HydraDeleteGPUBufferTask *>(task_scheduler->GetTask(delete_gpu_buffer_task_id));
|
||||
point_task->Intialise(m_point_shadow_buffer_id);
|
||||
task_scheduler->WaitForTask(delete_gpu_buffer_task_id);
|
||||
|
||||
delete_gpu_buffer_task_id = task_scheduler->CreateTask<HydraDeleteGPUBufferTask>(HydraThreadAffinity::Render);
|
||||
HydraDeleteGPUBufferTask *dir_task = static_cast<HydraDeleteGPUBufferTask *>(task_scheduler->GetTask(delete_gpu_buffer_task_id));
|
||||
dir_task->Intialise(m_directional_shadow_buffer_id);
|
||||
task_scheduler->WaitForTask(delete_gpu_buffer_task_id);
|
||||
|
||||
delete_gpu_buffer_task_id = task_scheduler->CreateTask<HydraDeleteGPUBufferTask>(HydraThreadAffinity::Render);
|
||||
HydraDeleteGPUBufferTask *spot_task = static_cast<HydraDeleteGPUBufferTask *>(task_scheduler->GetTask(delete_gpu_buffer_task_id));
|
||||
spot_task->Intialise(m_point_shadow_buffer_id);
|
||||
task_scheduler->WaitForTask(delete_gpu_buffer_task_id);
|
||||
}
|
||||
HydraID HydraShadowBufferManager::AddDirectionalShadow(HydraDirectionalShadowSourceComponent shadow)
|
||||
HydraID HydraShadowBufferManager::AddDirectionalShadow(HydraDirectionalShadowSourceComponent& shadow)
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(m_mutex);
|
||||
if(m_available_dir.size() == 0)
|
||||
@@ -65,9 +82,27 @@ HydraID HydraShadowBufferManager::AddDirectionalShadow(HydraDirectionalShadowSou
|
||||
HydraID shadow_id = m_available_dir.front();
|
||||
shadow.shadow_id = shadow_id;
|
||||
m_directional_shadow_buffer[shadow_id] = shadow;
|
||||
|
||||
HydraEngine *engine = GetEngine();
|
||||
HydraECS *ecs = engine->ECS();
|
||||
|
||||
HydraTaskScheduler *task_scheduler = GetEngine()->TaskScheduler();
|
||||
|
||||
uint32_t depth_texture_id = 0;
|
||||
uint32_t frame_buffer_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(&depth_texture_id, &frame_buffer_id);
|
||||
|
||||
task_scheduler->WaitForTask(create_framebuffer_task_id);
|
||||
shadow.shadow_texture_id = depth_texture_id;
|
||||
shadow.frame_buffer_id = frame_buffer_id;
|
||||
|
||||
return shadow_id;
|
||||
}
|
||||
HydraID HydraShadowBufferManager::AddSpotShadow(HydraSpotShadowSourceComponent shadow)
|
||||
HydraID HydraShadowBufferManager::AddSpotShadow(HydraSpotShadowSourceComponent& shadow)
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(m_mutex);
|
||||
if(m_available_spot.size() == 0)
|
||||
@@ -77,10 +112,26 @@ HydraID HydraShadowBufferManager::AddSpotShadow(HydraSpotShadowSourceComponent s
|
||||
|
||||
HydraID shadow_id = m_available_spot.front();
|
||||
m_spot_shadow_buffer[shadow_id] = shadow;
|
||||
|
||||
HydraEngine *engine = GetEngine();
|
||||
HydraECS *ecs = engine->ECS();
|
||||
|
||||
HydraTaskScheduler *task_scheduler = GetEngine()->TaskScheduler();
|
||||
|
||||
uint32_t depth_texture_id = 0;
|
||||
uint32_t frame_buffer_id = 0;
|
||||
HydraID create_framebuffer_task_id = task_scheduler->CreateTask<HydraCreateShadowFrameBuffer>(HydraThreadAffinity::Render);
|
||||
HydraCreateShadowFrameBuffer *fb_task = static_cast<HydraCreateShadowFrameBuffer *>(task_scheduler->GetTask(create_framebuffer_task_id));
|
||||
fb_task->Initialise(&depth_texture_id, &frame_buffer_id);
|
||||
|
||||
task_scheduler->WaitForTask(create_framebuffer_task_id);
|
||||
shadow.shadow_texture_id = depth_texture_id;
|
||||
shadow.frame_buffer_id = frame_buffer_id;
|
||||
|
||||
return shadow_id;
|
||||
}
|
||||
|
||||
HydraID HydraShadowBufferManager::AddPointShadow(HydraPointShadowSourceComponent shadow)
|
||||
HydraID HydraShadowBufferManager::AddPointShadow(HydraPointShadowSourceComponent& shadow)
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(m_mutex);
|
||||
if(m_available_point.size() == 0)
|
||||
@@ -90,6 +141,24 @@ HydraID HydraShadowBufferManager::AddPointShadow(HydraPointShadowSourceComponent
|
||||
|
||||
HydraID shadow_id = m_available_point.front();
|
||||
m_point_shadow_buffer[shadow_id] = shadow;
|
||||
|
||||
HydraEngine *engine = GetEngine();
|
||||
HydraECS *ecs = engine->ECS();
|
||||
|
||||
|
||||
|
||||
HydraTaskScheduler *task_scheduler = GetEngine()->TaskScheduler();
|
||||
|
||||
uint32_t depth_texture_id = 0;
|
||||
uint32_t frame_buffer_id = 0;
|
||||
HydraID create_framebuffer_task_id = task_scheduler->CreateTask<HydraCreateCubemapShadowFrameBuffer>(HydraThreadAffinity::Render);
|
||||
HydraCreateCubemapShadowFrameBuffer *fb_task = static_cast<HydraCreateCubemapShadowFrameBuffer *>(task_scheduler->GetTask(create_framebuffer_task_id));
|
||||
fb_task->Initialise( &depth_texture_id, &frame_buffer_id);
|
||||
|
||||
task_scheduler->WaitForTask(create_framebuffer_task_id);
|
||||
shadow.shadow_texture_id = depth_texture_id;
|
||||
shadow.frame_buffer_id = frame_buffer_id;
|
||||
|
||||
return shadow_id;
|
||||
}
|
||||
|
||||
@@ -131,6 +200,7 @@ void HydraShadowBufferManager::DeleteDirectionalShadow(HydraID shadow_id)
|
||||
|
||||
fb_task->Initialise(shadow_comp.shadow_texture_id, shadow_comp.frame_buffer_id);
|
||||
task_scheduler->WaitForTask(delete_frame_buffer_task_id);
|
||||
m_available_dir.push(shadow_id);
|
||||
}
|
||||
void HydraShadowBufferManager::DeleteSpotShadow(HydraID shadow_id)
|
||||
{
|
||||
@@ -143,6 +213,7 @@ void HydraShadowBufferManager::DeleteSpotShadow(HydraID shadow_id)
|
||||
|
||||
fb_task->Initialise(shadow_comp.shadow_texture_id, shadow_comp.frame_buffer_id);
|
||||
task_scheduler->WaitForTask(delete_frame_buffer_task_id);
|
||||
m_available_spot.push(shadow_id);
|
||||
}
|
||||
|
||||
void HydraShadowBufferManager::DeletePointShadow(HydraID shadow_id)
|
||||
@@ -156,6 +227,7 @@ void HydraShadowBufferManager::DeletePointShadow(HydraID shadow_id)
|
||||
|
||||
fb_task->Initialise(shadow_comp.shadow_texture_id, shadow_comp.frame_buffer_id);
|
||||
task_scheduler->WaitForTask(delete_frame_buffer_task_id);
|
||||
m_available_point.push(shadow_id);
|
||||
}
|
||||
|
||||
void HydraShadowBufferManager::UpdateShadowBuffer()
|
||||
|
||||
Reference in New Issue
Block a user