#include "drape_frontend/render_state.hpp" #include namespace df { RenderState::RenderState(DepthLayer depthLayer) : m_depthLayer(depthLayer) {} bool RenderState::Less(ref_ptr other) const { ASSERT(dynamic_cast(other.get()) != nullptr, ()); auto const renderState = static_cast(other.get()); return m_depthLayer < renderState->m_depthLayer; } bool RenderState::Equal(ref_ptr other) const { ASSERT(dynamic_cast(other.get()) != nullptr, ()); auto const renderState = static_cast(other.get()); return m_depthLayer == renderState->m_depthLayer; } // static ref_ptr RenderStateFactory::Get(RenderState::DepthLayer depthLayer) { static std::vector> m_states; if (m_states.empty()) { m_states.reserve(RenderState::LayersCount); for (size_t i = 0; i < RenderState::LayersCount; ++i) m_states.emplace_back(make_unique_dp(static_cast(i))); } return make_ref(m_states[static_cast(depthLayer)]); } RenderState::DepthLayer GetDepthLayer(dp::GLState const & state) { return state.GetRenderState()->GetDepthLayer(); } dp::GLState CreateGLState(int gpuProgramIndex, RenderState::DepthLayer depthLayer) { return dp::GLState(gpuProgramIndex, RenderStateFactory::Get(depthLayer)); } } // namespace df