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

Method InvalidateRect

libs/drape_frontend/frontend_renderer.cpp:1106–1144  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1104}
1105
1106void FrontendRenderer::InvalidateRect(m2::RectD const & gRect)
1107{
1108 ScreenBase const screen = m_userEventStream.GetCurrentScreen();
1109 m2::RectD rect = gRect;
1110 if (rect.Intersect(screen.ClipRect()))
1111 {
1112 // Find tiles to invalidate.
1113 TTilesCollection tiles;
1114 int const dataZoomLevel = ClipTileZoomByMaxDataZoom(GetCurrentZoom());
1115 CalcTilesCoverage(rect, dataZoomLevel, [this, &rect, &tiles](int tileX, int tileY)
1116 {
1117 TileKey const key(tileX, tileY, GetCurrentZoom());
1118 if (rect.IsIntersect(key.GetGlobalRect()))
1119 tiles.insert(key);
1120 });
1121
1122 // Remove tiles to invalidate from screen.
1123 auto eraseFunction = [&tiles](drape_ptr<RenderGroup> const & group)
1124 { return tiles.find(group->GetTileKey()) != tiles.end(); };
1125 for (RenderLayer & layer : m_layers)
1126 {
1127 RemoveGroups(eraseFunction, layer.m_renderGroups, make_ref(m_overlayTree));
1128 layer.m_isDirty = true;
1129 }
1130
1131 // Remove tiles to invalidate from backend renderer.
1132 BaseBlockingMessage::Blocker blocker;
1133 m_commutator->PostMessage(ThreadsCommutator::ResourceUploadThread,
1134 make_unique_dp<InvalidateReadManagerRectMessage>(blocker, tiles), MessagePriority::High);
1135 blocker.Wait();
1136
1137 // Request new tiles.
1138 m_lastReadedModelView = screen;
1139 m_requestedTiles->Set(screen, m_isIsometry || screen.isPerspective(), m_forceUpdateScene, m_forceUpdateUserMarks,
1140 ResolveTileKeys(screen));
1141 m_commutator->PostMessage(ThreadsCommutator::ResourceUploadThread, make_unique_dp<UpdateReadManagerMessage>(),
1142 MessagePriority::UberHighSingleton);
1143 }
1144}
1145
1146void FrontendRenderer::OnResize(ScreenBase const & screen)
1147{

Callers

nothing calls this directly

Calls 15

CalcTilesCoverageFunction · 0.85
RemoveGroupsFunction · 0.85
make_refFunction · 0.85
GetCurrentScreenMethod · 0.80
isPerspectiveMethod · 0.80
IntersectMethod · 0.45
IsIntersectMethod · 0.45
GetGlobalRectMethod · 0.45
insertMethod · 0.45
findMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected