diff --git a/map/screen_coverage.cpp b/map/screen_coverage.cpp index 50dde17cea..c3e120127f 100644 --- a/map/screen_coverage.cpp +++ b/map/screen_coverage.cpp @@ -304,22 +304,6 @@ void ScreenCoverage::SetScreen(ScreenBase const & screen) Tiler::RectInfo nr = newRects[i]; //LOG(LDEBUG, ("UVRLOG : NewRect add s=", nr.m_tileScale, " x=", nr.m_x, " y=", nr.m_y, " m_SequenceID=", GetSequenceID())); - Tiler::RectInfo cr[4] = - { - Tiler::RectInfo(nr.m_tileScale + 1, nr.m_x * 2, nr.m_y * 2), - Tiler::RectInfo(nr.m_tileScale + 1, nr.m_x * 2 + 1, nr.m_y * 2), - Tiler::RectInfo(nr.m_tileScale + 1, nr.m_x * 2 + 1, nr.m_y * 2 + 1), - Tiler::RectInfo(nr.m_tileScale + 1, nr.m_x * 2, nr.m_y * 2 + 1) - }; - - int childTilesToDraw = 4; - - for (int i = 0; i < 4; ++i) - if (drawnTiles.count(cr[i]) || !m_screen.GlobalRect().IsIntersect(m2::AnyRectD(cr[i].m_rect))) - --childTilesToDraw; - -// if (m_tiler.isLeaf(nr) || (childTilesToDraw > 1)) - int const step = GetPlatform().PreCachingDepth() - 1; if ((nr.m_tileScale == m_tiler.tileScale() - step) @@ -372,10 +356,9 @@ void ScreenCoverage::SetScreen(ScreenBase const & screen) core::CommandsQueue::Chain chain; - chain.addCommand(bind(&TileRenderer::RemoveActiveTile, + chain.addCommand(bind(&TileRenderer::CacheActiveTile, m_tileRenderer, - ri, - GetSequenceID())); + ri)); if (curNewTile == newRectsCount - 1) chain.addCommand(bind(&CoverageGenerator::AddFinishSequenceTask, diff --git a/map/tile_renderer.cpp b/map/tile_renderer.cpp index 9d2731ac32..f5720d1e1b 100644 --- a/map/tile_renderer.cpp +++ b/map/tile_renderer.cpp @@ -344,6 +344,16 @@ Tile const * TileRenderer::GetTile(const Tiler::RectInfo & rectInfo) { TileStructuresLockGuard lock(m_tileCache, m_tileSet); + CacheActiveTile(rectInfo); + + if (m_tileCache.HasTile(rectInfo)) + return &m_tileCache.GetTile(rectInfo); + + return NULL; +} + +void TileRenderer::CacheActiveTile(Tiler::RectInfo const & rectInfo) +{ if (m_tileSet.HasTile(rectInfo)) { ASSERT(!m_tileCache.HasTile(rectInfo), ("")); @@ -360,11 +370,6 @@ Tile const * TileRenderer::GetTile(const Tiler::RectInfo & rectInfo) m_tileSet.RemoveTile(rectInfo); } - - if (m_tileCache.HasTile(rectInfo)) - return &m_tileCache.GetTile(rectInfo); - - return NULL; } void TileRenderer::WaitForEmptyAndFinished() diff --git a/map/tile_renderer.hpp b/map/tile_renderer.hpp index b54caf2322..62a52761a6 100644 --- a/map/tile_renderer.hpp +++ b/map/tile_renderer.hpp @@ -105,6 +105,8 @@ public: TileCache & GetTileCache(); /// get tile from render if tile already rendered, otherwise return NULL Tile const * GetTile(Tiler::RectInfo const & rectInfo); + /// Move active tile to cache if tile alrady rendered + void CacheActiveTile(Tiler::RectInfo const & rectInfo); /// wait on a condition variable for an empty queue. void WaitForEmptyAndFinished();