From 274174fed60a75cd57efd526c2eb09d74aa0f86e Mon Sep 17 00:00:00 2001 From: "r.kuznetsov" Date: Fri, 7 Aug 2015 19:02:53 +0300 Subject: [PATCH] Fixed crash in new route rendering on Android --- map/framework.cpp | 4 +++- render/route_renderer.cpp | 5 +++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/map/framework.cpp b/map/framework.cpp index d8cad58503..707f884189 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -659,7 +659,6 @@ bool Framework::AddBookmarksFile(string const & filePath) void Framework::PrepareToShutdown() { #ifndef USE_DRAPE - m_bmManager.PrepareToShutdown(); SetRenderPolicy(0); #else m_drapeEngine.Destroy(); @@ -1525,6 +1524,9 @@ bool Framework::GetDistanceAndAzimut(m2::PointD const & point, #ifndef USE_DRAPE void Framework::SetRenderPolicy(RenderPolicy * renderPolicy) { + if (renderPolicy == nullptr) + m_bmManager.PrepareToShutdown(); + m_bmManager.ResetScreen(); m_guiController->ResetRenderParams(); m_renderPolicy.reset(); diff --git a/render/route_renderer.cpp b/render/route_renderer.cpp index 58441e338f..584e379d0a 100644 --- a/render/route_renderer.cpp +++ b/render/route_renderer.cpp @@ -269,17 +269,17 @@ void RouteRenderer::ConstructRoute(graphics::Screen * dlScreen) // storages size_t vbSize = m_routeData.m_geometry.size() * sizeof(graphics::gl::RouteVertex); size_t ibSize = m_routeData.m_indices.size() * sizeof(unsigned short); + ASSERT_NOT_EQUAL(vbSize, 0, ()); + ASSERT_NOT_EQUAL(ibSize, 0, ()); m_storage = graphics::gl::Storage(vbSize, ibSize); void * vbPtr = m_storage.m_vertices->lock(); memcpy(vbPtr, m_routeData.m_geometry.data(), vbSize); - m_routeData.m_geometry.clear(); m_storage.m_vertices->unlock(); void * ibPtr = m_storage.m_indices->lock(); memcpy(ibPtr, m_routeData.m_indices.data(), ibSize); m_storage.m_indices->unlock(); - m_routeData.m_indices.clear(); size_t const arrowBufferSize = m_turns.size() * 500; m_arrowsStorage = graphics::gl::Storage(arrowBufferSize * sizeof(graphics::gl::RouteVertex), @@ -319,6 +319,7 @@ void RouteRenderer::ClearRoute(graphics::Screen * dlScreen) void RouteRenderer::PrepareToShutdown() { DestroyDisplayLists(); + m_waitForConstruction = true; } void RouteRenderer::DestroyDisplayLists()