[drape] Render trees under buildings

Signed-off-by: Yannik Bloscheck <git@yannikbloscheck.com>
This commit is contained in:
Yannik Bloscheck
2025-11-17 15:00:09 +01:00
committed by x7z4w
parent dd106df592
commit f3b105ee33
7 changed files with 42 additions and 8 deletions

View File

@@ -1383,6 +1383,8 @@ void FrontendRenderer::RenderScene(ScreenBase const & modelView, bool activeFram
Render2dLayer(modelView);
RenderUserMarksLayer(modelView, DepthLayer::UserLineLayer);
RenderOverlayUnderBuildingLayer(modelView);
bool const hasTransitRouteData = HasTransitRouteData();
if (m_buildingsFramebuffer->IsSupported() && !m_routeRenderer->IsRulerRoute())
{
@@ -1546,6 +1548,17 @@ void FrontendRenderer::RenderOverlayLayer(ScreenBase const & modelView)
RenderSingleGroup(m_context, modelView, make_ref(group));
}
void FrontendRenderer::RenderOverlayUnderBuildingLayer(ScreenBase const & modelView)
{
TRACE_SECTION("[drape] RenderOverlayUnderBuildingLayer");
CHECK(m_context != nullptr, ());
DEBUG_LABEL(m_context, "Overlay Under Building Layer");
RenderLayer & overlay = m_layers[static_cast<size_t>(DepthLayer::OverlayUnderBuildingLayer)];
BuildOverlayTree(modelView);
for (drape_ptr<RenderGroup> & group : overlay.m_renderGroups)
RenderSingleGroup(m_context, modelView, make_ref(group));
}
bool FrontendRenderer::HasTransitRouteData() const
{
return m_routeRenderer->HasTransitData();
@@ -1814,7 +1827,7 @@ void FrontendRenderer::BuildOverlayTree(ScreenBase const & modelView)
BeginUpdateOverlayTree(modelView);
for (auto const layerId :
{DepthLayer::OverlayLayer, DepthLayer::RoutingBottomMarkLayer, DepthLayer::RoutingMarkLayer})
{DepthLayer::OverlayUnderBuildingLayer, DepthLayer::OverlayLayer, DepthLayer::RoutingBottomMarkLayer, DepthLayer::RoutingMarkLayer})
{
RenderLayer & overlay = m_layers[static_cast<size_t>(layerId)];
overlay.Sort(make_ref(m_overlayTree));
@@ -2504,7 +2517,7 @@ void FrontendRenderer::UpdateScene(ScreenBase const & modelView)
uint32_t constexpr kMaxGenerationRange = 5;
TileKey const & key = group->GetTileKey();
return (GetDepthLayer(group->GetState()) == DepthLayer::OverlayLayer && key.m_zoomLevel > GetCurrentZoom()) ||
return ((GetDepthLayer(group->GetState()) == DepthLayer::OverlayLayer || GetDepthLayer(group->GetState()) == DepthLayer::OverlayUnderBuildingLayer) && key.m_zoomLevel > GetCurrentZoom()) ||
(m_maxGeneration - key.m_generation > kMaxGenerationRange) ||
(group->IsUserMark() && (m_maxUserMarksGeneration - key.m_userMarksGeneration > kMaxGenerationRange));
};