From b6ab3ba1b319d45fe753ac70aa45b87309604fca Mon Sep 17 00:00:00 2001 From: SirLynix Date: Thu, 12 May 2022 23:09:40 +0200 Subject: [PATCH] Graphics: Add light type --- include/Nazara/Graphics/DirectionalLight.inl | 2 ++ include/Nazara/Graphics/Enums.hpp | 2 ++ include/Nazara/Graphics/Light.hpp | 4 +++- include/Nazara/Graphics/Light.inl | 10 ++++++++-- include/Nazara/Graphics/PointLight.inl | 2 ++ include/Nazara/Graphics/SpotLight.inl | 2 ++ 6 files changed, 19 insertions(+), 3 deletions(-) diff --git a/include/Nazara/Graphics/DirectionalLight.inl b/include/Nazara/Graphics/DirectionalLight.inl index 40f0a48e9..2a5ee4138 100644 --- a/include/Nazara/Graphics/DirectionalLight.inl +++ b/include/Nazara/Graphics/DirectionalLight.inl @@ -3,12 +3,14 @@ // For conditions of distribution and use, see copyright notice in Config.hpp #include +#include #include #include namespace Nz { inline DirectionalLight::DirectionalLight() : + Light(SafeCast(BasicLightType::Directional)), m_color(Color::White), m_ambientFactor(0.2f), m_diffuseFactor(1.f) diff --git a/include/Nazara/Graphics/Enums.hpp b/include/Nazara/Graphics/Enums.hpp index 3566afc28..0ba6941ec 100644 --- a/include/Nazara/Graphics/Enums.hpp +++ b/include/Nazara/Graphics/Enums.hpp @@ -21,6 +21,8 @@ namespace Nz Max = Spot }; + constexpr std::size_t BasicLightTypeCount = UnderlyingCast(BasicLightType::Max) + 1; + enum class BasicRenderElement { SpriteChain = 0, diff --git a/include/Nazara/Graphics/Light.hpp b/include/Nazara/Graphics/Light.hpp index 61f751dfb..74cf74319 100644 --- a/include/Nazara/Graphics/Light.hpp +++ b/include/Nazara/Graphics/Light.hpp @@ -24,7 +24,7 @@ namespace Nz class NAZARA_GRAPHICS_API Light { public: - inline Light(); + inline Light(UInt8 lightType); Light(const Light&) = delete; Light(Light&&) noexcept = default; virtual ~Light(); @@ -34,6 +34,7 @@ namespace Nz virtual void FillLightData(void* data) const = 0; inline const BoundingVolumef& GetBoundingVolume() const; + inline UInt8 GetLightType() const; virtual void UpdateTransform(const Vector3f& position, const Quaternionf& rotation, const Vector3f& scale) = 0; @@ -47,6 +48,7 @@ namespace Nz private: BoundingVolumef m_boundingVolume; + UInt8 m_lightType; }; } diff --git a/include/Nazara/Graphics/Light.inl b/include/Nazara/Graphics/Light.inl index 2680e37a8..7a34eb78b 100644 --- a/include/Nazara/Graphics/Light.inl +++ b/include/Nazara/Graphics/Light.inl @@ -8,8 +8,9 @@ namespace Nz { - inline Light::Light() : - m_boundingVolume(BoundingVolumef::Null()) + inline Light::Light(UInt8 lightType) : + m_boundingVolume(BoundingVolumef::Null()), + m_lightType(lightType) { } @@ -18,6 +19,11 @@ namespace Nz return m_boundingVolume; } + inline UInt8 Light::GetLightType() const + { + return m_lightType; + } + inline void Light::UpdateBoundingVolume(const BoundingVolumef& boundingVolume) { m_boundingVolume = boundingVolume; diff --git a/include/Nazara/Graphics/PointLight.inl b/include/Nazara/Graphics/PointLight.inl index a054667ff..240a7edc6 100644 --- a/include/Nazara/Graphics/PointLight.inl +++ b/include/Nazara/Graphics/PointLight.inl @@ -3,12 +3,14 @@ // For conditions of distribution and use, see copyright notice in Config.hpp #include +#include #include #include namespace Nz { inline PointLight::PointLight() : + Light(SafeCast(BasicLightType::Point)), m_color(Color::White), m_position(Vector3f::Zero()), m_ambientFactor(0.2f), diff --git a/include/Nazara/Graphics/SpotLight.inl b/include/Nazara/Graphics/SpotLight.inl index c96120d3a..b664679a2 100644 --- a/include/Nazara/Graphics/SpotLight.inl +++ b/include/Nazara/Graphics/SpotLight.inl @@ -3,12 +3,14 @@ // For conditions of distribution and use, see copyright notice in Config.hpp #include +#include #include #include namespace Nz { inline SpotLight::SpotLight() : + Light(SafeCast(BasicLightType::Spot)), m_color(Color::White), m_position(Vector3f::Zero()), m_ambientFactor(0.2f),