Fix ImageSource not rendering across world copies (#4508)
This commit is contained in:
@@ -29,6 +29,7 @@
|
||||
### 🐞 Bug fixes
|
||||
|
||||
- *...Add new stuff here...*
|
||||
- [core] Fix `ImageSource` not rendering across world copies ([#4508](https://github.com/maplibre/maplibre-native/issues/4508)).
|
||||
- [core] Repaint data-driven symbol paint properties after feature-state updates.
|
||||
- [core] Accept alpha values in legacy comma-separated `hsl()` colors ([#4434](https://github.com/maplibre/maplibre-native/issues/4434)).
|
||||
- [core] Fix thread-unsafe headless OpenGL display singleton initialization [#4332](https://github.com/maplibre/maplibre-native/pull/4332)
|
||||
|
||||
Binary file not shown.
BIN
metrics/integration/image/world-wrap.png
Normal file
BIN
metrics/integration/image/world-wrap.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 186 B |
BIN
metrics/integration/render-tests/image/world-wrap/expected.png
Normal file
BIN
metrics/integration/render-tests/image/world-wrap/expected.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 548 B |
56
metrics/integration/render-tests/image/world-wrap/style.json
Normal file
56
metrics/integration/render-tests/image/world-wrap/style.json
Normal file
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"version": 8,
|
||||
"metadata": {
|
||||
"test": {
|
||||
"width": 256,
|
||||
"height": 128
|
||||
}
|
||||
},
|
||||
"center": [
|
||||
180,
|
||||
0
|
||||
],
|
||||
"zoom": 1,
|
||||
"sources": {
|
||||
"image": {
|
||||
"type": "image",
|
||||
"coordinates": [
|
||||
[
|
||||
-180,
|
||||
85.05112878
|
||||
],
|
||||
[
|
||||
180,
|
||||
85.05112878
|
||||
],
|
||||
[
|
||||
180,
|
||||
-85.05112878
|
||||
],
|
||||
[
|
||||
-180,
|
||||
-85.05112878
|
||||
]
|
||||
],
|
||||
"url": "local://image/world-wrap.png"
|
||||
}
|
||||
},
|
||||
"layers": [
|
||||
{
|
||||
"id": "background",
|
||||
"type": "background",
|
||||
"paint": {
|
||||
"background-color": "#ff00ff"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "image",
|
||||
"type": "raster",
|
||||
"source": "image",
|
||||
"paint": {
|
||||
"raster-fade-duration": 0,
|
||||
"raster-resampling": "nearest"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -13,6 +13,8 @@
|
||||
#include <mln/util/tile_coordinate.hpp>
|
||||
#include <mln/util/tile_cover.hpp>
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
namespace mln {
|
||||
|
||||
using namespace style;
|
||||
@@ -142,15 +144,15 @@ void RenderImageSource::update(Immutable<style::Source::Impl> baseImpl_,
|
||||
static_cast<uint8_t>(transformState.getZoom()),
|
||||
zoomRange);
|
||||
for (auto tile : idealTiles) {
|
||||
if (tile.wrap != 0 && tileCover[0].canonical.isChildOf(tile.canonical)) {
|
||||
tileIds.emplace_back(tile.wrap, tileCover[0].canonical);
|
||||
hasVisibleTile = true;
|
||||
} else if (!hasVisibleTile) {
|
||||
for (auto coveringTile : tileCover) {
|
||||
if (coveringTile.canonical == tile.canonical || coveringTile.canonical.isChildOf(tile.canonical) ||
|
||||
tile.canonical.isChildOf(coveringTile.canonical)) {
|
||||
hasVisibleTile = true;
|
||||
for (auto coveringTile : tileCover) {
|
||||
if (coveringTile.canonical == tile.canonical || coveringTile.canonical.isChildOf(tile.canonical) ||
|
||||
tile.canonical.isChildOf(coveringTile.canonical)) {
|
||||
hasVisibleTile = true;
|
||||
const UnwrappedTileID wrappedTileID(tile.wrap, tileCover[0].canonical);
|
||||
if (tile.wrap != 0 && std::find(tileIds.cbegin(), tileIds.cend(), wrappedTileID) == tileIds.cend()) {
|
||||
tileIds.push_back(wrappedTileID);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user