58 lines
2.5 KiB
C++
58 lines
2.5 KiB
C++
#include "HydraMaterialSystem.h"
|
|
#include "../../engine/HydraEngine.h"
|
|
#include "../HydraECS.h"
|
|
#include "../components/HydraMaterialComponent.h"
|
|
|
|
#include "../../buffer/HydraMaterialBufferManager.h"
|
|
#include "../../buffer/HydraTextureBufferManager.h"
|
|
|
|
#include "../../scheduler/HydraTaskScheduler.h"
|
|
#include "../../task/buffer/HydraCreateGPUBufferTask.hpp"
|
|
#include "../../task/buffer/HydraUpdateWholeGPUBufferTask.hpp"
|
|
#include "../../actor/HydraActorManager.h"
|
|
|
|
|
|
|
|
void HydraMaterialSystem::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("MaterialBuffer", 1, MAX_MATERIALS * sizeof(HydraMaterialBuffer), &m_material_buffer_id, HYDRA_BUFFER_TYPE::HYDRA_SSBO_BUFFER);
|
|
task_scheduler->WaitForTask(create_gpu_buffer_task_id);
|
|
|
|
create_gpu_buffer_task_id = task_scheduler->CreateTask<HydraCreateGPUBufferTask>(HydraThreadAffinity::Render);
|
|
task = static_cast<HydraCreateGPUBufferTask *>(task_scheduler->GetTask(create_gpu_buffer_task_id));
|
|
task->Intialise("TextureBuffer", 1, MAX_TEXTURES * sizeof(uint64_t), &m_texture_buffer_id, HYDRA_BUFFER_TYPE::HYDRA_SSBO_BUFFER);
|
|
task_scheduler->WaitForTask(create_gpu_buffer_task_id);
|
|
}
|
|
|
|
void HydraMaterialSystem::InitialiseComponent(HydraID entity_id)
|
|
{
|
|
}
|
|
|
|
void HydraMaterialSystem::UpdateSystem(float delta_t_seconds)
|
|
{
|
|
_WriteToGPU();
|
|
}
|
|
|
|
|
|
void HydraMaterialSystem::_WriteToGPU()
|
|
{
|
|
void* buffer = GetEngine()->MaterialBufferManager()->GetMaterialBuffer();
|
|
|
|
HydraTaskScheduler *task_scheduler = GetEngine()->TaskScheduler();
|
|
|
|
HydraID update_buffer_task_id = task_scheduler->CreateTask<HydraUpdateWholeGPUBufferTask>(HydraThreadAffinity::Render);
|
|
HydraUpdateWholeGPUBufferTask *task = static_cast<HydraUpdateWholeGPUBufferTask *>(task_scheduler->GetTask(update_buffer_task_id));
|
|
task->Intialise(m_material_buffer_id, buffer);
|
|
task_scheduler->WaitForTask(update_buffer_task_id);
|
|
|
|
buffer = GetEngine()->TextureBufferManager()->GetTextureBuffer();
|
|
update_buffer_task_id = task_scheduler->CreateTask<HydraUpdateWholeGPUBufferTask>(HydraThreadAffinity::Render);
|
|
task = static_cast<HydraUpdateWholeGPUBufferTask *>(task_scheduler->GetTask(update_buffer_task_id));
|
|
task->Intialise(m_texture_buffer_id, buffer);
|
|
task_scheduler->WaitForTask(update_buffer_task_id);
|
|
}
|