diff --git a/render/route_renderer.cpp b/render/route_renderer.cpp index 2828c7af12..66ef6d0bd2 100644 --- a/render/route_renderer.cpp +++ b/render/route_renderer.cpp @@ -230,7 +230,8 @@ RouteRenderer::RouteRenderer() : m_endOfRouteDisplayList(nullptr) , m_arrowDisplayList(nullptr) , m_distanceFromBegin(0.0) - , m_needClear(false) + , m_needClearGraphics(false) + , m_needClearData(false) , m_waitForConstruction(false) {} @@ -244,7 +245,7 @@ RouteRenderer::~RouteRenderer() void RouteRenderer::Setup(m2::PolylineD const & routePolyline, vector const & turns, graphics::Color const & color) { if (!m_routeData.m_geometry.empty()) - m_needClear = true; + m_needClearGraphics = true; RouteShape::PrepareGeometry(routePolyline, m_routeData); @@ -315,7 +316,7 @@ void RouteRenderer::ConstructRoute(graphics::Screen * dlScreen) dlScreen->setDisplayList(nullptr); } -void RouteRenderer::ClearRoute(graphics::Screen * dlScreen) +void RouteRenderer::ClearRouteGraphics(graphics::Screen * dlScreen) { for (RouteGraphics & graphics : m_routeGraphics) { @@ -333,6 +334,10 @@ void RouteRenderer::ClearRoute(graphics::Screen * dlScreen) m_arrowBorders.clear(); m_routeSegments.clear(); m_arrowBuffer.Clear(); +} + +void RouteRenderer::ClearRouteData() +{ m_routeData.Clear(); } @@ -389,10 +394,16 @@ void RouteRenderer::InterpolateByZoom(ScreenBase const & screen, float & halfWid void RouteRenderer::Render(graphics::Screen * dlScreen, ScreenBase const & screen) { // clearing - if (m_needClear) + if (m_needClearData) { - ClearRoute(dlScreen); - m_needClear = false; + ClearRouteData(); + m_needClearData = false; + } + + if (m_needClearGraphics) + { + ClearRouteGraphics(dlScreen); + m_needClearGraphics = false; } // construction @@ -512,7 +523,8 @@ bool RouteRenderer::RecacheArrows() void RouteRenderer::Clear() { - m_needClear = true; + m_needClearGraphics = true; + m_needClearData = true; m_distanceFromBegin = 0.0; } diff --git a/render/route_renderer.hpp b/render/route_renderer.hpp index b75f223069..07494c58b7 100644 --- a/render/route_renderer.hpp +++ b/render/route_renderer.hpp @@ -73,7 +73,8 @@ public: private: void ConstructRoute(graphics::Screen * dlScreen); - void ClearRoute(graphics::Screen * dlScreen); + void ClearRouteGraphics(graphics::Screen * dlScreen); + void ClearRouteData(); void InterpolateByZoom(ScreenBase const & screen, float & halfWidth, float & alpha, double & zoom) const; void CalculateArrowBorders(m2::RectD const & clipRect, double arrowLength, double scale, double arrowTextureWidth, double joinsBoundsScalar, @@ -118,7 +119,8 @@ private: vector m_arrowBorders; vector m_routeSegments; - bool m_needClear; + bool m_needClearGraphics; + bool m_needClearData; bool m_waitForConstruction; };