From 864aa116402d241e85929c8045bac1f013e78b60 Mon Sep 17 00:00:00 2001 From: Ansis Brammanis Date: Fri, 6 Dec 2019 12:22:12 -0500 Subject: [PATCH 1/3] [core] Fix really overscaled lines #16018 --- metrics/ignores/platform-all.json | 1 - src/mbgl/renderer/buckets/line_bucket.cpp | 13 +++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/metrics/ignores/platform-all.json b/metrics/ignores/platform-all.json index c9e7a84be34..44761324fc5 100644 --- a/metrics/ignores/platform-all.json +++ b/metrics/ignores/platform-all.json @@ -111,7 +111,6 @@ "render-tests/regressions/mapbox-gl-js#7708": "skip - js specific", "render-tests/regressions/mapbox-gl-js#8026": "skip - js specific", "render-tests/regressions/mapbox-gl-js#8817": "skip - https://github.com/mapbox/mapbox-gl-native/issues/15737", - "render-tests/regressions/mapbox-gl-js#9009": "https://github.com/mapbox/mapbox-gl-native/issues/16018", "render-tests/regressions/mapbox-gl-native#7357": "https://github.com/mapbox/mapbox-gl-native/issues/7357", "render-tests/runtime-styling/image-add-remove-add": "skip - https://github.com/mapbox/mapbox-gl-native/issues/16021", "render-tests/runtime-styling/pattern-add-remove-add": "skip - https://github.com/mapbox/mapbox-gl-native/issues/16021", diff --git a/src/mbgl/renderer/buckets/line_bucket.cpp b/src/mbgl/renderer/buckets/line_bucket.cpp index 895d5aa1bb5..c32515e0160 100644 --- a/src/mbgl/renderer/buckets/line_bucket.cpp +++ b/src/mbgl/renderer/buckets/line_bucket.cpp @@ -129,18 +129,19 @@ void LineBucket::addGeometry(const GeometryCoordinates& coordinates, const Geome total_length += util::dist(coordinates[i], coordinates[i + 1]); } - lineDistances = Distances{*numericValue(clip_start_it->second), - *numericValue(clip_end_it->second), - total_length}; + lineDistances = Distances{ + *numericValue(clip_start_it->second), *numericValue(clip_end_it->second), total_length}; } const LineJoinType joinType = layout.evaluate(zoom, feature); const float miterLimit = joinType == LineJoinType::Bevel ? 1.05f : float(layout.get()); - const double sharpCornerOffset = overscaling == 0 ? - SHARP_CORNER_OFFSET * (float(util::EXTENT) / util::tileSize) : - SHARP_CORNER_OFFSET * (float(util::EXTENT) / (util::tileSize * overscaling)); + const double sharpCornerOffset = + overscaling == 0 + ? SHARP_CORNER_OFFSET * (float(util::EXTENT) / util::tileSize) + : (overscaling <= 16.0 ? SHARP_CORNER_OFFSET * (float(util::EXTENT) / (util::tileSize * overscaling)) + : 0.0f); const GeometryCoordinate firstCoordinate = coordinates[first]; const LineCapType beginCap = layout.get(); From 62c600c718287a789a723d0d85f5897a37cd332c Mon Sep 17 00:00:00 2001 From: Alexander Shalamov Date: Tue, 17 Dec 2019 14:27:11 +0200 Subject: [PATCH 2/3] [metrics] Add baselines for a new test --- .../line-width/very-overscaled/metrics.json | 8 ++--- .../mapbox-gl-js#9009/metrics.json | 35 +++++++++++++++++++ .../line-width/very-overscaled/metrics.json | 8 ++--- .../mapbox-gl-js#9009/metrics.json | 35 +++++++++++++++++++ .../line-width/very-overscaled/metrics.json | 8 ++--- .../mapbox-gl-js#9009/metrics.json | 35 +++++++++++++++++++ .../line-width/very-overscaled/metrics.json | 8 ++--- .../mapbox-gl-js#9009/metrics.json | 35 +++++++++++++++++++ 8 files changed, 156 insertions(+), 16 deletions(-) create mode 100644 metrics/next-android-render-test-runner/render-tests/regressions/mapbox-gl-js#9009/metrics.json create mode 100644 metrics/next-linux-clang8-release/render-tests/regressions/mapbox-gl-js#9009/metrics.json create mode 100644 metrics/next-linux-gcc8-release/render-tests/regressions/mapbox-gl-js#9009/metrics.json create mode 100644 metrics/next-macos-xcode11-release/render-tests/regressions/mapbox-gl-js#9009/metrics.json diff --git a/metrics/next-android-render-test-runner/render-tests/line-width/very-overscaled/metrics.json b/metrics/next-android-render-test-runner/render-tests/line-width/very-overscaled/metrics.json index b487cf1ec17..b93dcb82323 100644 --- a/metrics/next-android-render-test-runner/render-tests/line-width/very-overscaled/metrics.json +++ b/metrics/next-android-render-test-runner/render-tests/line-width/very-overscaled/metrics.json @@ -23,12 +23,12 @@ 32768 ], [ - 28042, - 28042 + 28078, + 28078 ], [ - 48928, - 48928 + 48976, + 48976 ] ] ] diff --git a/metrics/next-android-render-test-runner/render-tests/regressions/mapbox-gl-js#9009/metrics.json b/metrics/next-android-render-test-runner/render-tests/regressions/mapbox-gl-js#9009/metrics.json new file mode 100644 index 00000000000..a5407ceb766 --- /dev/null +++ b/metrics/next-android-render-test-runner/render-tests/regressions/mapbox-gl-js#9009/metrics.json @@ -0,0 +1,35 @@ +{ + "network": [ + [ + "probeNetwork - default - end", + 0, + 0 + ], + [ + "probeNetwork - default - start", + 0, + 0 + ] + ], + "gfx": [ + [ + "probeGFX - default - end", + 8, + 9, + 13, + 1, + [ + 131072, + 131072 + ], + [ + 214, + 214 + ], + [ + 384, + 384 + ] + ] + ] +} \ No newline at end of file diff --git a/metrics/next-linux-clang8-release/render-tests/line-width/very-overscaled/metrics.json b/metrics/next-linux-clang8-release/render-tests/line-width/very-overscaled/metrics.json index b487cf1ec17..b93dcb82323 100644 --- a/metrics/next-linux-clang8-release/render-tests/line-width/very-overscaled/metrics.json +++ b/metrics/next-linux-clang8-release/render-tests/line-width/very-overscaled/metrics.json @@ -23,12 +23,12 @@ 32768 ], [ - 28042, - 28042 + 28078, + 28078 ], [ - 48928, - 48928 + 48976, + 48976 ] ] ] diff --git a/metrics/next-linux-clang8-release/render-tests/regressions/mapbox-gl-js#9009/metrics.json b/metrics/next-linux-clang8-release/render-tests/regressions/mapbox-gl-js#9009/metrics.json new file mode 100644 index 00000000000..a5407ceb766 --- /dev/null +++ b/metrics/next-linux-clang8-release/render-tests/regressions/mapbox-gl-js#9009/metrics.json @@ -0,0 +1,35 @@ +{ + "network": [ + [ + "probeNetwork - default - end", + 0, + 0 + ], + [ + "probeNetwork - default - start", + 0, + 0 + ] + ], + "gfx": [ + [ + "probeGFX - default - end", + 8, + 9, + 13, + 1, + [ + 131072, + 131072 + ], + [ + 214, + 214 + ], + [ + 384, + 384 + ] + ] + ] +} \ No newline at end of file diff --git a/metrics/next-linux-gcc8-release/render-tests/line-width/very-overscaled/metrics.json b/metrics/next-linux-gcc8-release/render-tests/line-width/very-overscaled/metrics.json index b487cf1ec17..b93dcb82323 100644 --- a/metrics/next-linux-gcc8-release/render-tests/line-width/very-overscaled/metrics.json +++ b/metrics/next-linux-gcc8-release/render-tests/line-width/very-overscaled/metrics.json @@ -23,12 +23,12 @@ 32768 ], [ - 28042, - 28042 + 28078, + 28078 ], [ - 48928, - 48928 + 48976, + 48976 ] ] ] diff --git a/metrics/next-linux-gcc8-release/render-tests/regressions/mapbox-gl-js#9009/metrics.json b/metrics/next-linux-gcc8-release/render-tests/regressions/mapbox-gl-js#9009/metrics.json new file mode 100644 index 00000000000..a5407ceb766 --- /dev/null +++ b/metrics/next-linux-gcc8-release/render-tests/regressions/mapbox-gl-js#9009/metrics.json @@ -0,0 +1,35 @@ +{ + "network": [ + [ + "probeNetwork - default - end", + 0, + 0 + ], + [ + "probeNetwork - default - start", + 0, + 0 + ] + ], + "gfx": [ + [ + "probeGFX - default - end", + 8, + 9, + 13, + 1, + [ + 131072, + 131072 + ], + [ + 214, + 214 + ], + [ + 384, + 384 + ] + ] + ] +} \ No newline at end of file diff --git a/metrics/next-macos-xcode11-release/render-tests/line-width/very-overscaled/metrics.json b/metrics/next-macos-xcode11-release/render-tests/line-width/very-overscaled/metrics.json index b487cf1ec17..b93dcb82323 100644 --- a/metrics/next-macos-xcode11-release/render-tests/line-width/very-overscaled/metrics.json +++ b/metrics/next-macos-xcode11-release/render-tests/line-width/very-overscaled/metrics.json @@ -23,12 +23,12 @@ 32768 ], [ - 28042, - 28042 + 28078, + 28078 ], [ - 48928, - 48928 + 48976, + 48976 ] ] ] diff --git a/metrics/next-macos-xcode11-release/render-tests/regressions/mapbox-gl-js#9009/metrics.json b/metrics/next-macos-xcode11-release/render-tests/regressions/mapbox-gl-js#9009/metrics.json new file mode 100644 index 00000000000..a5407ceb766 --- /dev/null +++ b/metrics/next-macos-xcode11-release/render-tests/regressions/mapbox-gl-js#9009/metrics.json @@ -0,0 +1,35 @@ +{ + "network": [ + [ + "probeNetwork - default - end", + 0, + 0 + ], + [ + "probeNetwork - default - start", + 0, + 0 + ] + ], + "gfx": [ + [ + "probeGFX - default - end", + 8, + 9, + 13, + 1, + [ + 131072, + 131072 + ], + [ + 214, + 214 + ], + [ + 384, + 384 + ] + ] + ] +} \ No newline at end of file From 80588daec91c4735d0434dc20bb4a0ae5d34f8c8 Mon Sep 17 00:00:00 2001 From: Alexander Shalamov Date: Tue, 17 Dec 2019 14:31:24 +0200 Subject: [PATCH 3/3] [core] Update changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 308b54bf20a..6038cc2e670 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,10 @@ This patch introduces batch conversion between LatLng and ScreenCoordinate in Gl-Native core, so for multiple conversions with single point/latLng previously now it can be done with invoking one function call by passing vector of points/latLngs. ### Bug fixes +- [core] Fix really overscaled lines ([#16045](https://github.com/mapbox/mapbox-gl-native/pull/16045)) + + We resample lines after sharp corners in some situations. When tiles were really overscaled, sometimes we didn't have enough precision to represent the resampled vertex because it was too close. Disabling this after a certain point prevents this ([#16018](https://github.com/mapbox/mapbox-gl-native/issues/16018)). + - [core] Don't use signed int type for anchor segment ([#16008](https://github.com/mapbox/mapbox-gl-native/pull/16008)) Erroneous signed to unsigned implicit conversion was used when PlacedSymbol(s) were created in SymbolLayout and signed values were used as indexes in a few other places.