#ifndef HYDRASHADOWBUFFERMANAGER #define HYDRASHADOWBUFFERMANAGER #include "../engine/HydraObject.h" #include "HydraShadowBuffer.h" #include "../ecs/components/HydraDirectionalShadowSourceComponent.h" #include "../ecs/components/HydraSpotShadowSourceComponent.h" #include "../ecs/components/HydraPointShadowSourceComponent.h" #include #include class HydraShadowBufferManager : public HydraObject { public: void Initialise(); void Shutdown(); HydraID AddDirectionalShadow(HydraDirectionalShadowSourceComponent& shadow); HydraID AddSpotShadow(HydraSpotShadowSourceComponent& shadow); HydraID AddPointShadow(HydraPointShadowSourceComponent& shadow); void UpdateDirectionalShadow(HydraID shadow_id, HydraDirectionalShadowSourceComponent shadow); void UpdateSpotShadow(HydraID shadow_id, HydraSpotShadowSourceComponent shadow); void UpdatePointShadow(HydraID shadow_id, HydraPointShadowSourceComponent shadow); void DeleteDirectionalShadow(HydraID shadow_id); void DeleteSpotShadow(HydraID shadow_id); void DeletePointShadow(HydraID shadow_id); void UpdateShadowBuffer(); private: std::vector m_directional_shadow_buffer; std::vector m_spot_shadow_buffer; std::vector m_point_shadow_buffer; std::queue m_available_dir; std::queue m_available_spot; std::queue m_available_point; uint32_t m_directional_shadow_buffer_id; uint32_t m_spot_shadow_buffer_id; uint32_t m_point_shadow_buffer_id; std::mutex m_mutex; }; #endif /* HYDRASHADOWBUFFERMANAGER */