diff --git a/drape_frontend/render_state_extension.cpp b/drape_frontend/render_state_extension.cpp index edb98ffdd5..04a9d69fa3 100644 --- a/drape_frontend/render_state_extension.cpp +++ b/drape_frontend/render_state_extension.cpp @@ -1,9 +1,24 @@ #include "drape_frontend/render_state_extension.hpp" -#include +#include namespace df { +std::array, static_cast(DepthLayer::LayersCount)> kStateExtensions = { + make_unique_dp(DepthLayer::GeometryLayer), + make_unique_dp(DepthLayer::Geometry3dLayer), + make_unique_dp(DepthLayer::UserLineLayer), + make_unique_dp(DepthLayer::OverlayLayer), + make_unique_dp(DepthLayer::LocalAdsMarkLayer), + make_unique_dp(DepthLayer::TransitSchemeLayer), + make_unique_dp(DepthLayer::UserMarkLayer), + make_unique_dp(DepthLayer::NavigationLayer), + make_unique_dp(DepthLayer::RoutingBottomMarkLayer), + make_unique_dp(DepthLayer::RoutingMarkLayer), + make_unique_dp(DepthLayer::SearchMarkLayer), + make_unique_dp(DepthLayer::GuiLayer) +}; + RenderStateExtension::RenderStateExtension(DepthLayer depthLayer) : m_depthLayer(depthLayer) {} @@ -25,14 +40,8 @@ bool RenderStateExtension::Equal(ref_ptr other) co // static ref_ptr RenderStateExtensionFactory::Get(DepthLayer depthLayer) { - static std::vector> m_states; - if (m_states.empty()) - { - m_states.reserve(static_cast(DepthLayer::LayersCount)); - for (size_t i = 0; i < static_cast(DepthLayer::LayersCount); ++i) - m_states.emplace_back(make_unique_dp(static_cast(i))); - } - return make_ref(m_states[static_cast(depthLayer)]); + ASSERT_LESS(static_cast(depthLayer), kStateExtensions.size(), ()); + return make_ref(kStateExtensions[static_cast(depthLayer)]); } DepthLayer GetDepthLayer(dp::RenderState const & state)