void AirspaceRenderer::Draw(Canvas &canvas, #ifndef ENABLE_OPENGL Canvas &buffer_canvas, Canvas &stencil_canvas, #endif const WindowProjection &projection, const AirspaceRendererSettings &settings, const AirspaceWarningCopy &awc, const AirspacePredicate &visible) { if (airspaces == NULL) return; #ifdef ENABLE_OPENGL if (settings.fill_mode == AirspaceRendererSettings::FillMode::ALL) { AirspaceFillRenderer renderer(canvas, projection, look, awc, settings); airspaces->VisitWithinRange(projection.GetGeoScreenCenter(), projection.GetScreenDistanceMeters(), renderer, visible); } else { AirspaceVisitorRenderer renderer(canvas, projection, look, awc, settings); airspaces->VisitWithinRange(projection.GetGeoScreenCenter(), projection.GetScreenDistanceMeters(), renderer, visible); } #else MapDrawHelper helper(canvas, buffer_canvas, stencil_canvas, projection, settings); AirspaceVisitorMap v(helper, awc, settings, look); // JMW TODO wasteful to draw twice, can't it be drawn once? // we are using two draws so borders go on top of everything airspaces->VisitWithinRange(projection.GetGeoScreenCenter(), projection.GetScreenDistanceMeters(), v, visible); awc.VisitWarnings(v); awc.VisitInside(v); v.DrawIntercepts(); AirspaceOutlineRenderer outline_renderer(canvas, projection, look, settings); airspaces->VisitWithinRange(projection.GetGeoScreenCenter(), projection.GetScreenDistanceMeters(), outline_renderer, visible); awc.VisitWarnings(outline_renderer); awc.VisitInside(outline_renderer); #endif intersections = awc.GetLocations(); }
void AirspaceRenderer::Draw(Canvas &canvas, #ifndef ENABLE_OPENGL Canvas &stencil_canvas, #endif const WindowProjection &projection, const AirspaceRendererSettings &settings, const AirspaceWarningCopy &awc, const AirspacePredicate &visible) { if (airspaces == nullptr || airspaces->IsEmpty()) return; DrawInternal(canvas, #ifndef ENABLE_OPENGL stencil_canvas, #endif projection, settings, awc, visible); intersections = awc.GetLocations(); }
void AirspaceRenderer::Draw(Canvas &canvas, #ifndef ENABLE_OPENGL Canvas &stencil_canvas, #endif const WindowProjection &projection, const AirspaceRendererSettings &settings, const AirspaceWarningCopy &awc, const AirspacePredicate &visible) { if (airspaces == NULL || airspaces->IsEmpty()) return; #ifdef ENABLE_OPENGL if (settings.fill_mode == AirspaceRendererSettings::FillMode::ALL || settings.fill_mode == AirspaceRendererSettings::FillMode::NONE) { AirspaceFillRenderer renderer(canvas, projection, look, awc, settings); airspaces->VisitWithinRange(projection.GetGeoScreenCenter(), projection.GetScreenDistanceMeters(), renderer, visible); } else { AirspaceVisitorRenderer renderer(canvas, projection, look, awc, settings); airspaces->VisitWithinRange(projection.GetGeoScreenCenter(), projection.GetScreenDistanceMeters(), renderer, visible); } #else if (settings.fill_mode != AirspaceRendererSettings::FillMode::NONE) DrawFillCached(canvas, stencil_canvas, projection, settings, awc, visible); DrawOutline(canvas, projection, settings, visible); #endif intersections = awc.GetLocations(); }