diff --git a/Sources/Overload/OvCore/src/OvCore/ECS/Components/CReflectionProbe.cpp b/Sources/Overload/OvCore/src/OvCore/ECS/Components/CReflectionProbe.cpp index d3c885a4..0b6c2cd7 100644 --- a/Sources/Overload/OvCore/src/OvCore/ECS/Components/CReflectionProbe.cpp +++ b/Sources/Overload/OvCore/src/OvCore/ECS/Components/CReflectionProbe.cpp @@ -110,7 +110,7 @@ float OvCore::ECS::Components::CReflectionProbe::GetBrightness() const void OvCore::ECS::Components::CReflectionProbe::SetCubemapResolution(uint32_t p_resolution) { OVASSERT(p_resolution > 0, "Cubemap resolution must be greater than 0"); - OVASSERT((p_resolution & (p_resolution - 1)) == 0 > 0, "Cubemap resolution must be a power of 2"); + OVASSERT((p_resolution & (p_resolution - 1)) == 0, "Cubemap resolution must be a power of 2"); if (p_resolution != m_resolution) { @@ -198,11 +198,8 @@ void OvCore::ECS::Components::CReflectionProbe::OnDeserialize(tinyxml2::XMLDocum { using namespace OvCore::Helpers; - // Not ideal, but avoids garbage value from overriding the current resolution. - if (p_node->FirstChildElement("resolution")) - { - m_resolution = Serializer::DeserializeInt(p_doc, p_node, "resolution"); - } + const uint32_t previousResolution = m_resolution; + const ECaptureSpeed previousCaptureSpeed = m_captureSpeed; Serializer::DeserializeUint32(p_doc, p_node, "refresh_mode", reinterpret_cast(m_refreshMode)); Serializer::DeserializeUint32(p_doc, p_node, "capture_speed", reinterpret_cast(m_captureSpeed)); @@ -214,6 +211,21 @@ void OvCore::ECS::Components::CReflectionProbe::OnDeserialize(tinyxml2::XMLDocum Serializer::DeserializeBoolean(p_doc, p_node, "box_projection", m_boxProjection); m_captureFaceIndex = 0; + + // Validate resolution (must be power of 2) + if (m_resolution == 0 || (m_resolution & (m_resolution - 1)) != 0) + { + m_resolution = previousResolution; // Restore previous valid value + } + + // Reallocate resources if resolution or double buffering requirements changed + const bool resolutionChanged = m_resolution != previousResolution; + const bool doubleBufferingChanged = RequiresDoubleBuffering(m_captureSpeed) != RequiresDoubleBuffering(previousCaptureSpeed); + + if (resolutionChanged || doubleBufferingChanged) + { + _AllocateResources(); + } } void OvCore::ECS::Components::CReflectionProbe::OnInspector(OvUI::Internal::WidgetContainer& p_root) diff --git a/Sources/Overload/OvCore/src/OvCore/SceneSystem/Scene.cpp b/Sources/Overload/OvCore/src/OvCore/SceneSystem/Scene.cpp index 2d1eb0c9..281ba68b 100644 --- a/Sources/Overload/OvCore/src/OvCore/SceneSystem/Scene.cpp +++ b/Sources/Overload/OvCore/src/OvCore/SceneSystem/Scene.cpp @@ -85,7 +85,7 @@ void OvCore::SceneSystem::Scene::AddDefaultSkysphere() void OvCore::SceneSystem::Scene::AddDefaultAtmosphere() { - auto& atmosphere = CreateActor("Atmoshpere"); + auto& atmosphere = CreateActor("Atmosphere"); auto& materialRenderer = atmosphere.AddComponent(); auto& modelRenderer = atmosphere.AddComponent(); modelRenderer.SetFrustumBehaviour(ECS::Components::CModelRenderer::EFrustumBehaviour::DISABLED);