Point lights

This commit is contained in:
Confideo-IOM
2026-08-28 16:36:25 +01:00
parent 30538ae7ab
commit e3d37e3f8a
60 changed files with 458 additions and 184 deletions
@@ -16,58 +16,22 @@
void HydraMaterialSystem::Initialise()
{
HydraTaskScheduler *task_scheduler = GetEngine()->TaskScheduler();
HydraID create_gpu_buffer_task_id = task_scheduler->CreateTask<HydraCreateGPUBufferTask>(HydraThreadAffinity::Render);
HydraCreateGPUBufferTask *task = static_cast<HydraCreateGPUBufferTask *>(task_scheduler->GetTask(create_gpu_buffer_task_id));
task->Intialise("MaterialBuffer", 1, MAX_MATERIALS * sizeof(HydraMaterialBuffer), &m_material_buffer_id, HYDRA_BUFFER_TYPE::HYDRA_SSBO_BUFFER);
task_scheduler->WaitForTask(create_gpu_buffer_task_id);
create_gpu_buffer_task_id = task_scheduler->CreateTask<HydraCreateGPUBufferTask>(HydraThreadAffinity::Render);
task = static_cast<HydraCreateGPUBufferTask *>(task_scheduler->GetTask(create_gpu_buffer_task_id));
task->Intialise("TextureBuffer", 1, MAX_TEXTURES * sizeof(uint64_t), &m_texture_buffer_id, HYDRA_BUFFER_TYPE::HYDRA_SSBO_BUFFER);
task_scheduler->WaitForTask(create_gpu_buffer_task_id);
}
void HydraMaterialSystem::InitialiseComponent(HydraID entity_id)
{
}
void HydraMaterialSystem::FreeSystemResources()
{
HydraTaskScheduler *task_scheduler = GetEngine()->TaskScheduler();
HydraID delete_gpu_buffer_task_id = task_scheduler->CreateTask<HydraDeleteGPUBufferTask>(HydraThreadAffinity::Render);
HydraDeleteGPUBufferTask *task = static_cast<HydraDeleteGPUBufferTask *>(task_scheduler->GetTask(delete_gpu_buffer_task_id));
task->Intialise(m_material_buffer_id);
task_scheduler->WaitForTask(delete_gpu_buffer_task_id);
delete_gpu_buffer_task_id = task_scheduler->CreateTask<HydraDeleteGPUBufferTask>(HydraThreadAffinity::Render);
task = static_cast<HydraDeleteGPUBufferTask *>(task_scheduler->GetTask(delete_gpu_buffer_task_id));
task->Intialise(m_texture_buffer_id);
task_scheduler->WaitForTask(delete_gpu_buffer_task_id);
}
void HydraMaterialSystem::UpdateSystem(float delta_t_seconds)
{
_WriteToGPU();
GetEngine()->MaterialBufferManager()->UpdateBuffer();
}
void HydraMaterialSystem::_WriteToGPU()
void HydraMaterialSystem::DestroyComponent(HydraID entity_id)
{
void* buffer = GetEngine()->MaterialBufferManager()->GetMaterialBuffer();
HydraTaskScheduler *task_scheduler = GetEngine()->TaskScheduler();
HydraID update_buffer_task_id = task_scheduler->CreateTask<HydraUpdateWholeGPUBufferTask>(HydraThreadAffinity::Render);
HydraUpdateWholeGPUBufferTask *task = static_cast<HydraUpdateWholeGPUBufferTask *>(task_scheduler->GetTask(update_buffer_task_id));
task->Intialise(m_material_buffer_id, buffer);
task_scheduler->WaitForTask(update_buffer_task_id);
buffer = GetEngine()->TextureBufferManager()->GetTextureBuffer();
update_buffer_task_id = task_scheduler->CreateTask<HydraUpdateWholeGPUBufferTask>(HydraThreadAffinity::Render);
task = static_cast<HydraUpdateWholeGPUBufferTask *>(task_scheduler->GetTask(update_buffer_task_id));
task->Intialise(m_texture_buffer_id, buffer);
task_scheduler->WaitForTask(update_buffer_task_id);
HydraMaterialComponent mat_comp = GetEngine()->ECS()->GetComponent<HydraMaterialComponent>(entity_id);
GetEngine()->MaterialBufferManager()->DeleteMaterial(mat_comp.material_id);
}
@@ -14,9 +14,11 @@ class HydraMaterialSystem : public HydraSystem
public:
void Initialise() override;
void InitialiseComponent(HydraID entity_id) override;
protected:
void FreeSystemResources() override;
virtual void UpdateSystem(float delta_t_seconds);
void DestroyComponent(HydraID entity_id) override;
private:
void _WriteToGPU();
HydraID m_material_buffer_id = INVALID_HYDRA_ID;
@@ -8,6 +8,7 @@
#include "../../task/physics/HydraGetPhysicsUpdatesTask.hpp"
#include "../../task/physics/HydraStepPhysicsTask.h"
#include "../../task/physics/HydraSetPhysicsLinearVelocity.hpp"
#include "../../task/physics/HydraDeletePhysicsObjectTask.h"
#include "../../ecs/HydraECS.h"
#include "../../ecs/components/HydraPhysicsComponent.h"
#include "../../ecs/components/HydraPositionComponent.h"
@@ -86,12 +87,27 @@ void HydraPhysicsSystem::InitialiseComponent(HydraID entity_id)
set_task->Initialise(body_id, pos_comp.position, glm::quat(pos_comp.orientation));
task_scheduler->WaitForTask(task_id);
phys_comp.initialised = true;
DebugLog("PHYSICS CREATED:" + std::to_string(entity_id) + "\n");
}
void HydraPhysicsSystem::DestroyComponent(HydraID entity_id)
{
HydraTaskScheduler *task_scheduler = GetEngine()->TaskScheduler();
HydraPhysicsComponent& phys_comp = GetEngine()->ECS()->GetComponent<HydraPhysicsComponent>(entity_id);
if(phys_comp.initialised)
{
HydraID task_id = task_scheduler->CreateTask<HydraDeletePhysicsObjectTask>(HydraThreadAffinity::Physics);
HydraDeletePhysicsObjectTask *task = static_cast<HydraDeletePhysicsObjectTask *>(task_scheduler->GetTask(task_id));
task->Initialise(phys_comp.body_id);
task_scheduler->WaitForTask(task_id);
}
else
{
std::cout << "here";
}
DebugLog("PHYSICS DELETED:" + std::to_string(entity_id) + "\n");
}
void HydraPhysicsSystem::UpdateSystem(float delta_t_seconds)
@@ -101,6 +117,7 @@ void HydraPhysicsSystem::UpdateSystem(float delta_t_seconds)
{
HydraID entity_id = m_bodies_to_set_transform.front();
m_bodies_to_set_transform.pop();
HydraPhysicsComponent& phys_comp = GetEngine()->ECS()->GetComponent<HydraPhysicsComponent>(entity_id);
HydraPositionComponent& pos_comp = GetEngine()->ECS()->GetComponent<HydraPositionComponent>(entity_id);
@@ -68,7 +68,6 @@ void HydraPointShadowSourceSystem::_UpdateShadowMap(HydraID entity_id)
float view_size = 4.0f;
float view_near = 0.1f;
float view_far = 100.0f;
glm::vec3 camera_pos = GetEngine()->Camera()->GetPosition();
@@ -0,0 +1,16 @@
#ifndef HYDRASHADOWCASTERSYSTEM
#define HYDRASHADOWCASTERSYSTEM
#include "../../engine/HydraObject.h"
#include "../HydraSystem.h"
#include <GLMIncludes.h>
#include <queue>
class HydraShadowCasterSystem : public HydraSystem
{
public:
protected:
void UpdateSystem(float delta_t_seconds) override {}
};
#endif /* HYDRASHADOWCASTERSYSTEM */