#include "HydraMeshSystem.h" #include "../HydraECS.h" #include "../../engine/HydraEngine.h" #include "../components/HydraMeshComponent.h" #include "../../buffer/HydraBufferManager.h" #include "../../scheduler/HydraTaskScheduler.h" #include "../../task/buffer/HydraCreateVertexBufferTask.hpp" #include "../../task/buffer/HydraUpdateVertexBufferTask.hpp" #include "../../mesh/HydraMeshManager.h" void HydraMeshSystem::Initialise() { } void HydraMeshSystem::InitialiseComponent(HydraID entity_id) { HydraECS* ecs = GetEngine()->ECS(); HydraBufferManager *buffer_manager = GetEngine()->BufferManager(); HydraMeshComponent& mesh_comp = ecs->GetComponent(entity_id); HydraMeshManager* mesh_man = GetEngine()->MeshManager(); HydraMesh* mesh = mesh_man->GetMesh(mesh_comp.mesh_id); uint32_t vertex_buffer_size = sizeof(StandardVertex) * mesh->vertexes.size(); uint32_t index_buffer_size = sizeof(uint32_t) * mesh->indexes.size(); uint32_t triangle_count = mesh->indexes.size();// / 3; HydraTaskScheduler *task_scheduler = GetEngine()->TaskScheduler(); //Create VAO and Vertex Buffer storage HydraID create_vertex_task_id = task_scheduler->CreateTask(HydraThreadAffinity::Render); HydraCreateVertexBufferTask *vertex_task = static_cast(task_scheduler->GetTask(create_vertex_task_id)); vertex_task->Intialise(vertex_buffer_size, index_buffer_size, triangle_count, &mesh_comp.vertex_buffer_id); task_scheduler->WaitForTask(create_vertex_task_id); //Update vertex buffer HydraID update_buffer_task_id = task_scheduler->CreateTask(HydraThreadAffinity::Render); HydraUpdateVertexBufferTask *vertex_update_task = static_cast(task_scheduler->GetTask(update_buffer_task_id)); vertex_update_task->Intialise(mesh_comp.vertex_buffer_id, &mesh->vertexes[0], &mesh->indexes[0]); task_scheduler->WaitForTask(update_buffer_task_id); }