| 2540 | } |
| 2541 | |
| 2542 | void FrontendRenderer::UpdateScene(ScreenBase const & modelView) |
| 2543 | { |
| 2544 | TRACE_SECTION("[drape] UpdateScene"); |
| 2545 | ResolveZoomLevel(modelView); |
| 2546 | |
| 2547 | m_gpsTrackRenderer->Update(); |
| 2548 | |
| 2549 | auto removePredicate = [this](drape_ptr<RenderGroup> const & group) |
| 2550 | { |
| 2551 | uint32_t constexpr kMaxGenerationRange = 5; |
| 2552 | TileKey const & key = group->GetTileKey(); |
| 2553 | |
| 2554 | return ((GetDepthLayer(group->GetState()) == DepthLayer::OverlayLayer || |
| 2555 | GetDepthLayer(group->GetState()) == DepthLayer::OverlayUnderBuildingLayer) && |
| 2556 | key.m_zoomLevel > GetCurrentZoom()) || |
| 2557 | (m_maxGeneration - key.m_generation > kMaxGenerationRange) || |
| 2558 | (group->IsUserMark() && (m_maxUserMarksGeneration - key.m_userMarksGeneration > kMaxGenerationRange)); |
| 2559 | }; |
| 2560 | for (RenderLayer & layer : m_layers) |
| 2561 | layer.m_isDirty |= RemoveGroups(removePredicate, layer.m_renderGroups, make_ref(m_overlayTree)); |
| 2562 | |
| 2563 | if (m_forceUpdateScene || m_forceUpdateUserMarks || m_lastReadedModelView != modelView) |
| 2564 | { |
| 2565 | EmitModelViewChanged(modelView); |
| 2566 | m_lastReadedModelView = modelView; |
| 2567 | m_requestedTiles->Set(modelView, m_isIsometry || modelView.isPerspective(), m_forceUpdateScene, |
| 2568 | m_forceUpdateUserMarks, ResolveTileKeys(modelView)); |
| 2569 | m_commutator->PostMessage(ThreadsCommutator::ResourceUploadThread, make_unique_dp<UpdateReadManagerMessage>(), |
| 2570 | MessagePriority::UberHighSingleton); |
| 2571 | m_forceUpdateScene = false; |
| 2572 | m_forceUpdateUserMarks = false; |
| 2573 | } |
| 2574 | } |
| 2575 | |
| 2576 | void FrontendRenderer::EmitModelViewChanged(ScreenBase const & modelView) const |
| 2577 | { |
nothing calls this directly
no test coverage detected