MCPcopy Create free account
hub / github.com/comaps/comaps / ResolveTileKeys

Method ResolveTileKeys

libs/drape_frontend/frontend_renderer.cpp:2218–2267  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2216}
2217
2218TTilesCollection FrontendRenderer::ResolveTileKeys(ScreenBase const & screen)
2219{
2220 m2::RectD rect = screen.ClipRect();
2221 double const vs = VisualParams::Instance().GetVisualScale();
2222 double const extension = vs * dp::kScreenPixelRectExtension * screen.GetScale();
2223 rect.Inflate(extension, extension);
2224 int const dataZoomLevel = ClipTileZoomByMaxDataZoom(GetCurrentZoom());
2225
2226 m_notFinishedTiles.clear();
2227
2228 // Request new tiles.
2229 TTilesCollection tiles;
2230 /// @todo Introduce small_set class based on buffer_vector.
2231 buffer_vector<TileKey, 8> tilesToDelete;
2232 auto const result = CalcTilesCoverage(rect, dataZoomLevel, [this, &rect, &tiles, &tilesToDelete](int tileX, int tileY)
2233 {
2234 TileKey const key(tileX, tileY, GetCurrentZoom());
2235 if (rect.IsIntersect(key.GetGlobalRect()))
2236 {
2237 tiles.insert(key);
2238 m_notFinishedTiles.insert(key);
2239 }
2240 else
2241 {
2242 tilesToDelete.push_back(key);
2243 }
2244 });
2245
2246 // Remove old tiles.
2247 auto removePredicate = [this, &result, &tilesToDelete](drape_ptr<RenderGroup> const & group)
2248 {
2249 TileKey const & key = group->GetTileKey();
2250 return key.m_zoomLevel == GetCurrentZoom() &&
2251 (key.m_x < result.m_minTileX || key.m_x >= result.m_maxTileX || key.m_y < result.m_minTileY ||
2252 key.m_y >= result.m_maxTileY || base::IsExist(tilesToDelete, key));
2253 };
2254 for (RenderLayer & layer : m_layers)
2255 layer.m_isDirty |= RemoveGroups(removePredicate, layer.m_renderGroups, make_ref(m_overlayTree));
2256
2257 RemoveRenderGroupsLater([this](drape_ptr<RenderGroup> const & group)
2258 { return group->GetTileKey().m_zoomLevel != GetCurrentZoom(); });
2259
2260 m_trafficRenderer->OnUpdateViewport(result, GetCurrentZoom(), tilesToDelete);
2261
2262#if defined(DRAPE_MEASURER_BENCHMARK) && defined(GENERATING_STATISTIC)
2263 DrapeMeasurer::Instance().StartScenePreparing();
2264#endif
2265
2266 return tiles;
2267}
2268
2269void FrontendRenderer::OnContextDestroy()
2270{

Callers

nothing calls this directly

Calls 15

CalcTilesCoverageFunction · 0.85
IsExistFunction · 0.85
RemoveGroupsFunction · 0.85
make_refFunction · 0.85
GetVisualScaleMethod · 0.80
OnUpdateViewportMethod · 0.80
StartScenePreparingMethod · 0.80
GetScaleMethod · 0.45
InflateMethod · 0.45
clearMethod · 0.45
IsIntersectMethod · 0.45

Tested by

no test coverage detected