45 lines
2.0 KiB
C++
45 lines
2.0 KiB
C++
#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<HydraMeshComponent>(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<HydraCreateVertexBufferTask>(HydraThreadAffinity::Render);
|
|
HydraCreateVertexBufferTask *vertex_task = static_cast<HydraCreateVertexBufferTask *>(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<HydraUpdateVertexBufferTask>(HydraThreadAffinity::Render);
|
|
HydraUpdateVertexBufferTask *vertex_update_task = static_cast<HydraUpdateVertexBufferTask *>(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);
|
|
|
|
}
|