Spot works

This commit is contained in:
Confideo-IOM
2026-08-06 21:11:33 +01:00
parent 6d7d7571b5
commit f9b696f9e8
61 changed files with 701 additions and 418 deletions
+21 -5
View File
@@ -13,6 +13,7 @@
#include "../buffer/HydraTextureBufferManager.h"
#include "../buffer/HydraMaterialBufferManager.h"
#include "../buffer/HydraLightBufferManager.h"
#include "../buffer/HydraShadowBufferManager.h"
#include "../ecs/HydraECS.h"
#include "../ecs/systems/HydraTransformSystem.h"
@@ -54,6 +55,7 @@
#include "../task/ecs/HydraInitialiseComponentsTask.hpp"
#include "../task/buffer/HydraShutdownBufferManagerTask.hpp"
#include "../task/buffer/HydraInitialiseTextureManagerTask.hpp"
#include "../task/buffer/HydraInitialiseShadowBufferTask.hpp"
#include "../task/actor/HydraUpdatePlayerTask.h"
#include "../task/renderer/HydraEndRenderTask.hpp"
@@ -149,6 +151,11 @@ HydraLightBufferManager *const HydraEngine::LightBufferManager()
return m_light_buffer_manager;
}
HydraShadowBufferManager *const HydraEngine::ShadowBufferManager()
{
return m_shadow_buffer_manager;
}
void HydraEngine::PossessPlayer(HydraID actor_id)
{
m_possessed_actor_id = actor_id;
@@ -187,6 +194,7 @@ void HydraEngine::_CreateManagers()
m_texture_buffer_manager = new HydraTextureBufferManager();
m_material_buffer_manager = new HydraMaterialBufferManager();
m_light_buffer_manager = new HydraLightBufferManager();
m_shadow_buffer_manager = new HydraShadowBufferManager();
}
void HydraEngine::_InitialiseManagers()
@@ -208,6 +216,9 @@ void HydraEngine::_InitialiseManagers()
m_material_buffer_manager->Intialise();
m_light_buffer_manager->Initialise();
HydraID create_shadow_buffer_task_id = m_task_scheduler->CreateTask<HydraInitialiseShadowBufferTask>(HydraThreadAffinity::Render);
m_task_scheduler->WaitForTask(create_shadow_buffer_task_id);
}
void HydraEngine::_InitialiseSystems()
@@ -277,7 +288,6 @@ void HydraEngine::_InitialiseSystems()
m_task_scheduler->StartTask(update_trans_id);
m_task_scheduler->StartTask(update_mat_id);
m_task_scheduler->WaitForBarrier(posUpdateBarrierID);
HydraID update_light_id = m_task_scheduler->CreateTask<HydraUpdateSystemTask>(HydraThreadAffinity::General);
@@ -285,16 +295,22 @@ void HydraEngine::_InitialiseSystems()
update_light_task->Initialise(m_delta_t, m_light_system);
m_task_scheduler->WaitForTask(update_light_id);
HydraID update_shadow_id = m_task_scheduler->CreateTask<HydraUpdateSystemTask>(HydraThreadAffinity::General);
HydraID shadow_barrier = m_task_scheduler->CreateBarrier();
HydraID update_shadow_id = m_task_scheduler->CreateTask<HydraUpdateSystemTask>(HydraThreadAffinity::General, shadow_barrier);
HydraUpdateSystemTask* update_shadow_task = static_cast<HydraUpdateSystemTask*>(m_task_scheduler->GetTask(update_shadow_id));
update_shadow_task->Initialise(m_delta_t, m_directional_shadow_system);
m_task_scheduler->WaitForTask(update_shadow_id);
HydraID update_spot_shadow_id = m_task_scheduler->CreateTask<HydraUpdateSystemTask>(HydraThreadAffinity::General);
HydraID update_spot_shadow_id = m_task_scheduler->CreateTask<HydraUpdateSystemTask>(HydraThreadAffinity::General, shadow_barrier);
HydraUpdateSystemTask* update_spot_shadow_task = static_cast<HydraUpdateSystemTask*>(m_task_scheduler->GetTask(update_spot_shadow_id));
update_spot_shadow_task->Initialise(m_delta_t, m_spot_shadow_system);
m_task_scheduler->WaitForTask(update_spot_shadow_id);
m_task_scheduler->StartTask(update_shadow_id);
m_task_scheduler->StartTask(update_spot_shadow_id);
m_task_scheduler->WaitForBarrier(shadow_barrier);
m_shadow_buffer_manager->UpdateShadowBuffer();
}
void HydraEngine::_GameLoop()
+3 -1
View File
@@ -27,6 +27,7 @@ class HydraLightBufferManager;
class HydraLightSystem;
class HydraDirectionalShadowSourceSystem;
class HydraSpotShadowSourceSystem;
class HydraShadowBufferManager;
class CLASS_DEFINE HydraEngine : public HydraObject
{
@@ -58,6 +59,7 @@ public:
HydraTextureBufferManager* const TextureBufferManager();
HydraMaterialBufferManager* const MaterialBufferManager();
HydraLightBufferManager* const LightBufferManager();
HydraShadowBufferManager* const ShadowBufferManager();
void PossessPlayer(HydraID actor_id);
HydraID GetPossessedPlayer();
float GetDeltaT();
@@ -88,7 +90,7 @@ private:
HydraTextureBufferManager* m_texture_buffer_manager = nullptr;
HydraMaterialBufferManager* m_material_buffer_manager = nullptr;
HydraLightBufferManager* m_light_buffer_manager = nullptr;
HydraShadowBufferManager* m_shadow_buffer_manager = nullptr;
std::shared_ptr<HydraMeshSystem> m_mesh_system;
std::shared_ptr<HydraTransformSystem> m_transform_system;
std::shared_ptr<HydraRenderSystem> m_render_system;