#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(HydraThreadAffinity::Render); HydraCreateGPUBufferTask *task = static_cast(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(HydraThreadAffinity::Render); task = static_cast(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(HydraThreadAffinity::Render); HydraUpdateWholeGPUBufferTask *task = static_cast(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(HydraThreadAffinity::Render); task = static_cast(task_scheduler->GetTask(update_buffer_task_id)); task->Intialise(m_texture_buffer_id, buffer); task_scheduler->WaitForTask(update_buffer_task_id); }