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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user