Split improvemnts before tess shader
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
#include "../../engine/HydraEngine.h"
|
||||
#include "../../actor/HydraActorManager.h"
|
||||
#include "../../task/HydraTask.h"
|
||||
#include "../../scheduler/HydraTaskScheduler.h"
|
||||
#include "../../ecs/HydraECS.h"
|
||||
#include "../../ecs/components/HydraPositionComponent.h"
|
||||
#include "../../ecs/components/HydraMeshComponent.h"
|
||||
@@ -14,31 +15,44 @@
|
||||
#include "../../buffer/HydraMaterialBuffer.h"
|
||||
#include "../../mesh/HydraMeshManager.h"
|
||||
#include "../../mesh/HydraMesh.h"
|
||||
#include "../../task/planet/HydraCheckPlanetResolutionTask.hpp"
|
||||
|
||||
void HydraPlanetActor::FixedTick(float delta_t)
|
||||
{
|
||||
HydraID player_id = GetEngine()->GetPossessedPlayer();
|
||||
HydraPositionComponent pos_comp = GetEngine()->ECS()->GetComponent<HydraPositionComponent>(player_id);
|
||||
HydraActorManager* actor_manager = GetEngine()->ActorManager();
|
||||
HydraECS* ecs = GetEngine()->ECS();
|
||||
HydraTaskScheduler* task_scheduler = GetEngine()->TaskScheduler();
|
||||
if(task_scheduler->BarrierComplete(m_update_barrier))
|
||||
{
|
||||
|
||||
HydraPlanetQuadActor* quad0 = static_cast<HydraPlanetQuadActor*>(actor_manager->GetActor(m_quads[0]));
|
||||
HydraPlanetQuadActor* quad1 = static_cast<HydraPlanetQuadActor*>(actor_manager->GetActor(m_quads[1]));
|
||||
HydraPlanetQuadActor* quad2 = static_cast<HydraPlanetQuadActor*>(actor_manager->GetActor(m_quads[2]));
|
||||
HydraPlanetQuadActor* quad3 = static_cast<HydraPlanetQuadActor*>(actor_manager->GetActor(m_quads[3]));
|
||||
HydraPlanetQuadActor* quad4 = static_cast<HydraPlanetQuadActor*>(actor_manager->GetActor(m_quads[4]));
|
||||
HydraPlanetQuadActor* quad5 = static_cast<HydraPlanetQuadActor*>(actor_manager->GetActor(m_quads[5]));
|
||||
m_update_barrier = task_scheduler->CreateBarrier();
|
||||
HydraID task_id = task_scheduler->CreateTask<HydraCheckPlanetResolutionTask>(HydraThreadAffinity::General, m_update_barrier);
|
||||
HydraCheckPlanetResolutionTask* task = static_cast<HydraCheckPlanetResolutionTask*>(task_scheduler->GetTask(task_id));
|
||||
task->Initialise(m_quads);
|
||||
task_scheduler->StartTask(task_id);
|
||||
// HydraID player_id = GetEngine()->GetPossessedPlayer();
|
||||
// HydraPositionComponent pos_comp = GetEngine()->ECS()->GetComponent<HydraPositionComponent>(player_id);
|
||||
// HydraActorManager* actor_manager = GetEngine()->ActorManager();
|
||||
// HydraECS* ecs = GetEngine()->ECS();
|
||||
|
||||
quad0->CheckResolution(pos_comp.position);
|
||||
quad1->CheckResolution(pos_comp.position);
|
||||
quad2->CheckResolution(pos_comp.position);
|
||||
quad3->CheckResolution(pos_comp.position);
|
||||
quad4->CheckResolution(pos_comp.position);
|
||||
quad5->CheckResolution(pos_comp.position);
|
||||
// HydraPlanetQuadActor* quad0 = static_cast<HydraPlanetQuadActor*>(actor_manager->GetActor(m_quads[0]));
|
||||
// HydraPlanetQuadActor* quad1 = static_cast<HydraPlanetQuadActor*>(actor_manager->GetActor(m_quads[1]));
|
||||
// HydraPlanetQuadActor* quad2 = static_cast<HydraPlanetQuadActor*>(actor_manager->GetActor(m_quads[2]));
|
||||
// HydraPlanetQuadActor* quad3 = static_cast<HydraPlanetQuadActor*>(actor_manager->GetActor(m_quads[3]));
|
||||
// HydraPlanetQuadActor* quad4 = static_cast<HydraPlanetQuadActor*>(actor_manager->GetActor(m_quads[4]));
|
||||
// HydraPlanetQuadActor* quad5 = static_cast<HydraPlanetQuadActor*>(actor_manager->GetActor(m_quads[5]));
|
||||
|
||||
// quad0->CheckResolution(pos_comp.position);
|
||||
// quad1->CheckResolution(pos_comp.position);
|
||||
// quad2->CheckResolution(pos_comp.position);
|
||||
// quad3->CheckResolution(pos_comp.position);
|
||||
// quad4->CheckResolution(pos_comp.position);
|
||||
// quad5->CheckResolution(pos_comp.position);
|
||||
}
|
||||
}
|
||||
|
||||
void HydraPlanetActor::InitialiseComponents()
|
||||
{
|
||||
m_quads.resize(6);
|
||||
m_update_barrier = GetEngine()->TaskScheduler()->CreateBarrier();
|
||||
// HydraECS* ecs = GetEngine()->ECS();
|
||||
// HydraID entity_id = ecs->CreateEntity();
|
||||
_CreatePosition();
|
||||
|
||||
@@ -11,7 +11,8 @@ class CLASS_DEFINE HydraPlanetActor : public HydraActor
|
||||
HydraID m_material_component = INVALID_HYDRA_ID;
|
||||
HydraID m_position_component = INVALID_HYDRA_ID;
|
||||
HydraID m_mesh_component = INVALID_HYDRA_ID;
|
||||
HydraID m_quads[6];
|
||||
std::vector<HydraID> m_quads;
|
||||
HydraID m_update_barrier = INVALID_HYDRA_ID;
|
||||
protected:
|
||||
void _CreatePosition();
|
||||
void _CreateMesh();
|
||||
|
||||
@@ -58,8 +58,8 @@ void HydraPlanetQuadActor::CheckResolution(glm::dvec3 player_position)
|
||||
double distance_to_quad = glm::length(player_position - m_centre);
|
||||
|
||||
// might need to bias this so it splits sooner and merges later
|
||||
if (distance_to_quad < m_quad_dimension)
|
||||
{
|
||||
if ((distance_to_quad < m_quad_dimension)&& (m_quad_dimension > 64))
|
||||
{
|
||||
should_split = true;
|
||||
}
|
||||
if(distance_to_quad > m_quad_dimension * 1.1f)
|
||||
@@ -111,6 +111,7 @@ HydraPlanetQuadActor::~HydraPlanetQuadActor()
|
||||
{
|
||||
GetEngine()->ActorManager()->DeleteActor(m_center_actor);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void HydraPlanetQuadActor::_MergeQuads()
|
||||
@@ -129,8 +130,8 @@ glm::vec3 HydraPlanetQuadActor::_ProjectSphere(glm::dvec4 vert_in, glm::dmat4 tr
|
||||
fnl.SetFractalType(FastNoiseLite::FractalType::FractalType_Ridged);
|
||||
fnl.SetSeed(341411);
|
||||
fnl.SetFrequency(0.00009);
|
||||
fnl.SetFractalOctaves(8);
|
||||
|
||||
fnl.SetFractalOctaves(15);
|
||||
fnl.SetFractalLacunarity(2.1);
|
||||
float noise = fnl.GetNoise(vert.x, vert.y, vert.z);
|
||||
|
||||
vert = glm::normalize(vert) * ((m_planet_diameter / 2.0) + (noise * 500.0f));
|
||||
@@ -154,7 +155,9 @@ glm::dvec3 HydraPlanetQuadActor::_ProjectCentre(glm::vec3 vert_in, glm::dmat4 tr
|
||||
fnl.SetFractalType(FastNoiseLite::FractalType::FractalType_Ridged);
|
||||
fnl.SetSeed(341411);
|
||||
fnl.SetFrequency(0.00009);
|
||||
fnl.SetFractalOctaves(8);
|
||||
fnl.SetFractalOctaves(15);
|
||||
fnl.SetFractalLacunarity(2.1);
|
||||
|
||||
|
||||
float noise = fnl.GetNoise(vert.x, vert.y, vert.z);
|
||||
|
||||
@@ -204,7 +207,7 @@ void HydraPlanetQuadActor::_CreateMesh()
|
||||
HydraMeshManager *mesh_manager = GetEngine()->MeshManager();
|
||||
HydraID mesh_id = mesh_manager->CreateMesh();
|
||||
HydraMesh *mesh = mesh_manager->GetMesh(mesh_id);
|
||||
|
||||
|
||||
HydraMaterialComponent mat_comp = GetEngine()->ECS()->GetComponent<HydraMaterialComponent>(GetID());
|
||||
HydraPositionComponent pos_comp = GetEngine()->ECS()->GetComponent<HydraPositionComponent>(GetID());
|
||||
|
||||
@@ -325,11 +328,12 @@ void HydraPlanetQuadActor::_CreateMesh()
|
||||
mesh_comp.mesh_state = HYDRA_STATE::Waiting;
|
||||
|
||||
ecs->AddComponent<HydraMeshComponent>(GetID(), mesh_comp);
|
||||
HydraRenderableComponent& render_comp = GetEngine()->ECS()->GetComponent<HydraRenderableComponent>(GetID());
|
||||
render_comp.active = true;
|
||||
}
|
||||
|
||||
void HydraPlanetQuadActor::_CreateMaterial()
|
||||
{
|
||||
|
||||
HydraEngine *engine = GetEngine();
|
||||
std::string filename = std::string(texture_base) + std::string("/DesignArea/DesignArea_Albedo_white.png");
|
||||
|
||||
@@ -374,4 +378,5 @@ void HydraPlanetQuadActor::_CreateRenderableComponent()
|
||||
render_comp.renderable_types.set((uint32_t)HYDRA_RENDERABLE_TYPE::HYDRA_SHADOW_CASTER, true);
|
||||
ecs->AddComponent<HydraRenderableComponent>(GetID(), render_comp);
|
||||
ecs->AddComponent<HydraShadowCasterComponent>(GetID(), shad_caster);
|
||||
render_comp.active = false;
|
||||
}
|
||||
|
||||
@@ -51,6 +51,7 @@ void HydraMeshManager::DeleteMesh(HydraID mesh_id)
|
||||
if(mesh_id < m_meshes.size())
|
||||
{
|
||||
m_meshes[mesh_id].vertexes.clear();
|
||||
m_meshes[mesh_id].indexes.clear();
|
||||
m_meshes[mesh_id].mesh_id = INVALID_HYDRA_ID;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,16 +12,16 @@
|
||||
#include <iostream>
|
||||
#include <GLMIncludes.h>
|
||||
|
||||
void HydraRenderStage::Initialise(std::string vertex_shader_file,
|
||||
std::string fragment_shader_file,
|
||||
std::string geometry_shader_file,
|
||||
HydraShaderBinding shader_binding,
|
||||
uint32_t framebuffer_id,
|
||||
std::vector<uint32_t> textures,
|
||||
bool enable_culling,
|
||||
uint32_t cull_face,
|
||||
bool depth_enable,
|
||||
HYDRA_RENDERABLE_TYPE renderable_type)
|
||||
void HydraRenderStage::Initialise(std::string vertex_shader_file,
|
||||
std::string fragment_shader_file,
|
||||
std::string geometry_shader_file,
|
||||
HydraShaderBinding shader_binding,
|
||||
uint32_t framebuffer_id,
|
||||
std::vector<uint32_t> textures,
|
||||
bool enable_culling,
|
||||
uint32_t cull_face,
|
||||
bool depth_enable,
|
||||
HYDRA_RENDERABLE_TYPE renderable_type)
|
||||
{
|
||||
m_framebuffer_id = framebuffer_id;
|
||||
m_renderable_type = static_cast<uint32_t>(renderable_type);
|
||||
@@ -31,17 +31,17 @@ void HydraRenderStage::Initialise(std::string vertex_shader_file,
|
||||
m_cull = enable_culling;
|
||||
m_program = glCreateProgram();
|
||||
m_cull_face = cull_face;
|
||||
if(vertex_shader_file.length() > 0)
|
||||
if (vertex_shader_file.length() > 0)
|
||||
{
|
||||
m_vertex_shader = _LoadShader(vertex_shader_file, GL_VERTEX_SHADER);
|
||||
m_vertex_shader = _LoadShader(vertex_shader_file, GL_VERTEX_SHADER);
|
||||
glAttachShader(m_program, m_vertex_shader);
|
||||
}
|
||||
if(fragment_shader_file.length() > 0)
|
||||
if (fragment_shader_file.length() > 0)
|
||||
{
|
||||
m_fragment_shader = _LoadShader(fragment_shader_file, GL_FRAGMENT_SHADER);
|
||||
glAttachShader(m_program, m_fragment_shader);
|
||||
}
|
||||
if(geometry_shader_file.length() > 0)
|
||||
if (geometry_shader_file.length() > 0)
|
||||
{
|
||||
m_geometry_shader = _LoadShader(geometry_shader_file, GL_GEOMETRY_SHADER);
|
||||
glAttachShader(m_program, m_geometry_shader);
|
||||
@@ -49,23 +49,24 @@ void HydraRenderStage::Initialise(std::string vertex_shader_file,
|
||||
glLinkProgram(m_program);
|
||||
|
||||
int success;
|
||||
glGetProgramiv(m_program, GL_LINK_STATUS, &success);
|
||||
glGetProgramiv(m_program, GL_LINK_STATUS, &success);
|
||||
|
||||
if (!success) {
|
||||
// 2. Get the log length (optional but recommended)
|
||||
int logLength;
|
||||
glGetProgramiv(m_program, GL_INFO_LOG_LENGTH, &logLength);
|
||||
|
||||
// 3. Retrieve and print the error log
|
||||
char* infoLog = new char[logLength];
|
||||
glGetProgramInfoLog(m_program, logLength, NULL, infoLog);
|
||||
|
||||
std::cout << "ERROR::SHADER::PROGRAM::LINKING_FAILED\n" << infoLog << std::endl;
|
||||
|
||||
// 4. Clean up allocated memory
|
||||
delete[] infoLog;
|
||||
}
|
||||
if (!success)
|
||||
{
|
||||
// 2. Get the log length (optional but recommended)
|
||||
int logLength;
|
||||
glGetProgramiv(m_program, GL_INFO_LOG_LENGTH, &logLength);
|
||||
|
||||
// 3. Retrieve and print the error log
|
||||
char *infoLog = new char[logLength];
|
||||
glGetProgramInfoLog(m_program, logLength, NULL, infoLog);
|
||||
|
||||
std::cout << "ERROR::SHADER::PROGRAM::LINKING_FAILED\n"
|
||||
<< infoLog << std::endl;
|
||||
|
||||
// 4. Clean up allocated memory
|
||||
delete[] infoLog;
|
||||
}
|
||||
}
|
||||
|
||||
void HydraRenderStage::ShutDown()
|
||||
@@ -75,22 +76,22 @@ void HydraRenderStage::ShutDown()
|
||||
glDeleteProgram(m_program);
|
||||
}
|
||||
|
||||
void HydraRenderStage::Render(std::set<HydraID>& entities, uint32_t framebuffer_id)
|
||||
void HydraRenderStage::Render(std::set<HydraID> &entities, uint32_t framebuffer_id)
|
||||
{
|
||||
HydraECS* ecs = GetEngine()->ECS();
|
||||
if(framebuffer_id != INVALID_HYDRA_ID)
|
||||
HydraECS *ecs = GetEngine()->ECS();
|
||||
if (framebuffer_id != INVALID_HYDRA_ID)
|
||||
{
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer_id);
|
||||
}
|
||||
//glDrawBuffers(m_rb_attachments.size(), &m_rb_attachments[0]);
|
||||
HydraVertexBufferManager* vert_buffer_mananger = GetEngine()->VertexBufferManager();
|
||||
// glDrawBuffers(m_rb_attachments.size(), &m_rb_attachments[0]);
|
||||
HydraVertexBufferManager *vert_buffer_mananger = GetEngine()->VertexBufferManager();
|
||||
glUseProgram(m_program);
|
||||
_BindBuffers();
|
||||
_BindTextures();
|
||||
HydraSignature signature = {};
|
||||
signature.set(m_renderable_type, true);
|
||||
|
||||
if(m_cull)
|
||||
|
||||
if (m_cull)
|
||||
{
|
||||
glEnable(GL_CULL_FACE);
|
||||
glCullFace(m_cull_face);
|
||||
@@ -100,31 +101,34 @@ void HydraRenderStage::Render(std::set<HydraID>& entities, uint32_t framebuffer_
|
||||
glDisable(GL_CULL_FACE);
|
||||
}
|
||||
|
||||
if(m_depth_enable)
|
||||
if (m_depth_enable)
|
||||
{
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
}
|
||||
else
|
||||
{
|
||||
{
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
}
|
||||
|
||||
for(const auto& entity_id : entities )
|
||||
for (const auto &entity_id : entities)
|
||||
{
|
||||
HydraRenderableComponent render_comp = ecs->GetComponent<HydraRenderableComponent>(entity_id);
|
||||
if(((render_comp.renderable_types & signature) == signature) && (render_comp.active))
|
||||
if (((render_comp.renderable_types & signature) == signature) && (render_comp.active))
|
||||
{
|
||||
HydraMeshComponent mesh_comp = ecs->GetComponent<HydraMeshComponent>(entity_id);
|
||||
if(mesh_comp.mesh_state == HYDRA_STATE::Ready)
|
||||
if (ecs->HasComponent<HydraMeshComponent>(entity_id))
|
||||
{
|
||||
HydraVertexBuffer& vertex_buffer = vert_buffer_mananger->GetVertexBuffer(mesh_comp.vertex_buffer_id);
|
||||
HydraMeshComponent mesh_comp = ecs->GetComponent<HydraMeshComponent>(entity_id);
|
||||
if (mesh_comp.mesh_state == HYDRA_STATE::Ready)
|
||||
{
|
||||
HydraVertexBuffer &vertex_buffer = vert_buffer_mananger->GetVertexBuffer(mesh_comp.vertex_buffer_id);
|
||||
|
||||
glBindVertexArray(vertex_buffer.vao);
|
||||
glDrawElements(GL_TRIANGLES, vertex_buffer.triangle_count, GL_UNSIGNED_INT, (void*)0 );
|
||||
glBindVertexArray(0);
|
||||
glBindVertexArray(vertex_buffer.vao);
|
||||
glDrawElements(GL_TRIANGLES, vertex_buffer.triangle_count, GL_UNSIGNED_INT, (void *)0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
glBindVertexArray(0);
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||
}
|
||||
|
||||
@@ -134,10 +138,10 @@ void HydraRenderStage::Render(std::set<HydraID> &entities)
|
||||
}
|
||||
|
||||
uint32_t HydraRenderStage::_LoadShader(std::string filename, uint32_t shader_type)
|
||||
{
|
||||
{
|
||||
|
||||
std::string shader_source = _LoadShaderSource(filename);
|
||||
const char* src = shader_source.c_str();
|
||||
const char *src = shader_source.c_str();
|
||||
GLuint shader = glCreateShader(shader_type);
|
||||
int length = shader_source.length();
|
||||
int success;
|
||||
@@ -146,59 +150,57 @@ uint32_t HydraRenderStage::_LoadShader(std::string filename, uint32_t shader_typ
|
||||
glShaderSource(shader, 1, &src, &length);
|
||||
glCompileShader(shader);
|
||||
glGetShaderiv(shader, GL_COMPILE_STATUS, &success);
|
||||
if(!success)
|
||||
if (!success)
|
||||
{
|
||||
glGetShaderInfoLog(shader, 512, NULL, infoLog);
|
||||
std::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\n" << infoLog << std::endl;
|
||||
std::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\n"
|
||||
<< infoLog << std::endl;
|
||||
};
|
||||
|
||||
return shader;
|
||||
}
|
||||
|
||||
std::string HydraRenderStage::_LoadShaderSource(std::string filename)
|
||||
{
|
||||
{
|
||||
std::ifstream file(filename);
|
||||
if (!file.is_open()) {
|
||||
if (!file.is_open())
|
||||
{
|
||||
std::cerr << "Failed to open shader file: " << filename << std::endl;
|
||||
return "";
|
||||
}
|
||||
std::stringstream buffer;
|
||||
buffer << file.rdbuf();
|
||||
return buffer.str();
|
||||
|
||||
}
|
||||
|
||||
void HydraRenderStage::_BindBuffers()
|
||||
{
|
||||
HydraBufferManager* buffer_manager = GetEngine()->BufferManager();
|
||||
HydraBufferManager *buffer_manager = GetEngine()->BufferManager();
|
||||
|
||||
for(uint32_t bind_idx = 0; bind_idx <m_shader_binding.block_name.size(); bind_idx++)
|
||||
for (uint32_t bind_idx = 0; bind_idx < m_shader_binding.block_name.size(); bind_idx++)
|
||||
{
|
||||
HydraBuffer buffer = buffer_manager->GetBuffer(m_shader_binding.buffer_id[bind_idx]);
|
||||
|
||||
switch(m_shader_binding.buffer_type[bind_idx])
|
||||
{
|
||||
case HYDRA_BUFFER_TYPE::HYDRA_SSBO_BUFFER:
|
||||
{
|
||||
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, m_shader_binding.binding_point[bind_idx], buffer.gpu_buffer_id);
|
||||
break;
|
||||
}
|
||||
case HYDRA_BUFFER_TYPE::HYDRA_UBO_BUFFER:
|
||||
{
|
||||
glBindBufferBase(GL_UNIFORM_BUFFER, m_shader_binding.binding_point[bind_idx], buffer.gpu_buffer_id);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
switch (m_shader_binding.buffer_type[bind_idx])
|
||||
{
|
||||
case HYDRA_BUFFER_TYPE::HYDRA_SSBO_BUFFER:
|
||||
{
|
||||
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, m_shader_binding.binding_point[bind_idx], buffer.gpu_buffer_id);
|
||||
break;
|
||||
}
|
||||
case HYDRA_BUFFER_TYPE::HYDRA_UBO_BUFFER:
|
||||
{
|
||||
glBindBufferBase(GL_UNIFORM_BUFFER, m_shader_binding.binding_point[bind_idx], buffer.gpu_buffer_id);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void HydraRenderStage::_BindTextures()
|
||||
{
|
||||
uint32_t active_texture = 0;
|
||||
for(auto texture:m_textures)
|
||||
for (auto texture : m_textures)
|
||||
{
|
||||
glBindTexture(GL_TEXTURE_2D, texture);
|
||||
glActiveTexture(GL_TEXTURE0 + active_texture);
|
||||
|
||||
@@ -66,27 +66,22 @@ void HydraTaskScheduler::Shutdown()
|
||||
|
||||
HydraID HydraTaskScheduler::_SaveTask(HydraTask *task)
|
||||
{
|
||||
|
||||
if (m_avaialble_task_ids.size() > 0)
|
||||
{
|
||||
HydraID id = m_avaialble_task_ids.front();
|
||||
m_avaialble_task_ids.pop_front();
|
||||
|
||||
if(id > m_tasks.size())
|
||||
{
|
||||
DebugLog("INVALID TASK");
|
||||
}
|
||||
task->m_taskID = id;
|
||||
|
||||
m_tasks[id] = task;
|
||||
|
||||
return id;
|
||||
}
|
||||
else
|
||||
{
|
||||
DebugLog("Create Task Fail");
|
||||
}
|
||||
|
||||
return INVALID_HYDRA_ID;
|
||||
}
|
||||
|
||||
@@ -135,6 +130,19 @@ void HydraTaskScheduler::ProcessTask()
|
||||
}
|
||||
}
|
||||
|
||||
bool HydraTaskScheduler::BarrierComplete(HydraID barrierID)
|
||||
{
|
||||
if(barrierID < m_barriers.size())
|
||||
{
|
||||
if(m_barriers[barrierID]->reference_count > 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
_CompleteBarrier(barrierID);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void HydraTaskScheduler::_NotifyThread(std::thread::id thread_id)
|
||||
{
|
||||
HydraThread *thread = nullptr;
|
||||
|
||||
@@ -71,7 +71,7 @@ public:
|
||||
void NotifyStart(HydraID taskID);
|
||||
void NotifyComplete(HydraID taskID);
|
||||
void ProcessTask();
|
||||
|
||||
bool BarrierComplete(HydraID barrierID);
|
||||
void DeleteTask(HydraID taskID);
|
||||
};
|
||||
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
#ifndef HYDRACHECKPLANETRESOLUTIONTASK
|
||||
#define HYDRACHECKPLANETRESOLUTIONTASK
|
||||
|
||||
|
||||
#include "../HydraTask.h"
|
||||
#include "../../pipeline/HydraPipeline.h"
|
||||
#include "../../engine/HydraEngine.h"
|
||||
#include "../../ecs/HydraECS.h"
|
||||
#include "../../ecs/components/HydraPositionComponent.h"
|
||||
#include "../../actor/PlanetActor/HydraPlanetQuadActor.h"
|
||||
#include "../../actor/HydraActorManager.h"
|
||||
#include <vector>
|
||||
|
||||
|
||||
class HydraCheckPlanetResolutionTask : public HydraTask
|
||||
{
|
||||
private:
|
||||
|
||||
protected:
|
||||
std::vector<HydraID> m_quads;
|
||||
public:
|
||||
virtual void Process() override
|
||||
{
|
||||
HydraID player_id = GetEngine()->GetPossessedPlayer();
|
||||
HydraPositionComponent pos_comp = GetEngine()->ECS()->GetComponent<HydraPositionComponent>(player_id);
|
||||
HydraActorManager* actor_manager = GetEngine()->ActorManager();
|
||||
HydraECS* ecs = GetEngine()->ECS();
|
||||
|
||||
HydraPlanetQuadActor* quad0 = static_cast<HydraPlanetQuadActor*>(actor_manager->GetActor(m_quads[0]));
|
||||
HydraPlanetQuadActor* quad1 = static_cast<HydraPlanetQuadActor*>(actor_manager->GetActor(m_quads[1]));
|
||||
HydraPlanetQuadActor* quad2 = static_cast<HydraPlanetQuadActor*>(actor_manager->GetActor(m_quads[2]));
|
||||
HydraPlanetQuadActor* quad3 = static_cast<HydraPlanetQuadActor*>(actor_manager->GetActor(m_quads[3]));
|
||||
HydraPlanetQuadActor* quad4 = static_cast<HydraPlanetQuadActor*>(actor_manager->GetActor(m_quads[4]));
|
||||
HydraPlanetQuadActor* quad5 = static_cast<HydraPlanetQuadActor*>(actor_manager->GetActor(m_quads[5]));
|
||||
|
||||
quad0->CheckResolution(pos_comp.position);
|
||||
quad1->CheckResolution(pos_comp.position);
|
||||
quad2->CheckResolution(pos_comp.position);
|
||||
quad3->CheckResolution(pos_comp.position);
|
||||
quad4->CheckResolution(pos_comp.position);
|
||||
quad5->CheckResolution(pos_comp.position);
|
||||
}
|
||||
void Initialise(std::vector<HydraID> quads)
|
||||
{
|
||||
m_quads = quads;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
#endif /* HYDRACHECKPLANETRESOLUTIONTASK */
|
||||
Reference in New Issue
Block a user