initial commit
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
#include "HydraLightSystem.h"
|
||||
#include "../../engine/HydraEngine.h"
|
||||
#include "../HydraECS.h"
|
||||
#include "../components/HydraLightComponent.h"
|
||||
#include "../components/HydraPositionComponent.h"
|
||||
#include "../../buffer/HydraLightBufferManager.h"
|
||||
#include "../../buffer/HydraLightBuffer.h"
|
||||
|
||||
#include "../../scheduler/HydraTaskScheduler.h"
|
||||
#include "../../task/buffer/HydraCreateGPUBufferTask.hpp"
|
||||
#include "../../task/buffer/HydraUpdatePartialGPUBufferTask.hpp"
|
||||
#include "../../actor/HydraActorManager.h"
|
||||
#include <GLMIncludes.h>
|
||||
|
||||
void HydraLightSystem::Initialise()
|
||||
{
|
||||
HydraTaskScheduler *task_scheduler = GetEngine()->TaskScheduler();
|
||||
HydraID create_gpu_buffer_task_id = task_scheduler->CreateTask<HydraCreateGPUBufferTask>(HydraThreadAffinity::Render);
|
||||
HydraCreateGPUBufferTask *task = static_cast<HydraCreateGPUBufferTask *>(task_scheduler->GetTask(create_gpu_buffer_task_id));
|
||||
task->Intialise("LightBuffer", 1, MAX_LIGHTS * sizeof(HydraLightComponent), &m_light_buffer_id, HYDRA_BUFFER_TYPE::HYDRA_SSBO_BUFFER);
|
||||
task_scheduler->WaitForTask(create_gpu_buffer_task_id);
|
||||
}
|
||||
|
||||
uint32_t HydraLightSystem::GetLightCount()
|
||||
{
|
||||
return m_lights.size();
|
||||
}
|
||||
|
||||
void HydraLightSystem::InitialiseComponent(HydraID entity_id)
|
||||
{
|
||||
HydraLightBufferManager *light_man = GetEngine()->LightBufferManager();
|
||||
uint32_t light_count = light_man->GetLightCount();
|
||||
HydraECS *ecs = GetEngine()->ECS();
|
||||
|
||||
HydraPositionComponent &pos_comp = ecs->GetComponent<HydraPositionComponent>(entity_id);
|
||||
HydraLightComponent &light_comp = ecs->GetComponent<HydraLightComponent>(entity_id);
|
||||
|
||||
m_lights.push_back(light_comp);
|
||||
}
|
||||
|
||||
void HydraLightSystem::UpdateSystem(float delta_t_seconds)
|
||||
{
|
||||
_WriteToGPU();
|
||||
}
|
||||
|
||||
void HydraLightSystem::_WriteToGPU()
|
||||
{
|
||||
void *buffer = static_cast<void *>(m_lights.data());
|
||||
HydraTaskScheduler *task_scheduler = GetEngine()->TaskScheduler();
|
||||
|
||||
HydraID update_buffer_task_id = task_scheduler->CreateTask<HydraUpdatePartialGPUBufferTask>(HydraThreadAffinity::Render);
|
||||
HydraUpdatePartialGPUBufferTask *task = static_cast<HydraUpdatePartialGPUBufferTask *>(task_scheduler->GetTask(update_buffer_task_id));
|
||||
task->Intialise(m_light_buffer_id, 0, sizeof(HydraLightComponent) * m_lights.size(), buffer);
|
||||
task_scheduler->WaitForTask(update_buffer_task_id);
|
||||
}
|
||||
Reference in New Issue
Block a user