From 63e13263db417910288854d2ccfce6b11283aaaa Mon Sep 17 00:00:00 2001 From: "r.kuznetsov" Date: Thu, 20 Aug 2015 14:32:36 +0300 Subject: [PATCH] Fixed route rendering on Android --- map/bookmark_manager.cpp | 2 -- render/route_renderer.cpp | 8 +++++++- render/route_shape.cpp | 8 ++------ render/route_shape.hpp | 9 +++++++++ 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/map/bookmark_manager.cpp b/map/bookmark_manager.cpp index d44ef51fd4..1808432f10 100644 --- a/map/bookmark_manager.cpp +++ b/map/bookmark_manager.cpp @@ -164,7 +164,6 @@ void BookmarkManager::DrawCategory(BookmarkCategory const * cat, PaintOverlayEve void BookmarkManager::ClearItems() { - ResetRouteTrack(); for_each(m_categories.begin(), m_categories.end(), DeleteFunctor()); m_categories.clear(); } @@ -465,7 +464,6 @@ void BookmarkManager::ResetScreen() { // Delete display lists for all tracks for_each(m_categories.begin(), m_categories.end(), dlDeleteFn); - m_routeRenderer->Clear(); m_bmScreen = 0; } } diff --git a/render/route_renderer.cpp b/render/route_renderer.cpp index 78c01f6943..5b35c4fea2 100644 --- a/render/route_renderer.cpp +++ b/render/route_renderer.cpp @@ -243,6 +243,9 @@ 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; + RouteShape::PrepareGeometry(routePolyline, m_routeData); m_turns = turns; @@ -251,7 +254,6 @@ void RouteRenderer::Setup(m2::PolylineD const & routePolyline, vector co m_distanceFromBegin = 0.0; m_polyline = routePolyline; - m_needClear = true; m_waitForConstruction = true; } @@ -331,12 +333,16 @@ void RouteRenderer::ClearRoute(graphics::Screen * dlScreen) m_arrowBorders.clear(); m_routeSegments.clear(); m_arrowBuffer.Clear(); + m_routeData.Clear(); } void RouteRenderer::PrepareToShutdown() { DestroyDisplayLists(); + m_arrowBorders.clear(); + m_routeSegments.clear(); + if (!m_routeData.m_geometry.empty()) m_waitForConstruction = true; } diff --git a/render/route_shape.cpp b/render/route_shape.cpp index ad162606d5..2b66dc1b42 100644 --- a/render/route_shape.cpp +++ b/render/route_shape.cpp @@ -105,11 +105,7 @@ private: class ArrowDataHolder { public: - ArrowDataHolder(ArrowsBuffer & data) - : m_data(data) - { - m_data.Clear(); - } + ArrowDataHolder(ArrowsBuffer & data) : m_data(data) {} void Check(){} uint16_t GetIndexCounter() const { return m_data.m_indexCounter; } @@ -463,7 +459,7 @@ void RouteShape::PrepareGeometry(m2::PolylineD const & polyline, RouteData & out ASSERT_LESS(1, path.size(), ()); RouteDataHolder holder(output); - output.m_length = GenerateGeometry(path, true /* isRoute */, 1.0 /* depth */, holder); + output.m_length = GenerateGeometry(path, true /* isRoute */, 1.0 /* lengthScalar */, holder); ASSERT_EQUAL(output.m_geometry.size(), output.m_boundingBoxes.size(), ()); } diff --git a/render/route_shape.hpp b/render/route_shape.hpp index 2312f78fb7..4152210848 100644 --- a/render/route_shape.hpp +++ b/render/route_shape.hpp @@ -34,6 +34,15 @@ struct RouteData vector> m_geometry; vector m_boundingBoxes; vector m_joinsBounds; + + RouteData() : m_length(0) {} + + void Clear() + { + m_geometry.clear(); + m_boundingBoxes.clear(); + m_joinsBounds.clear(); + } }; struct ArrowsBuffer