From 9df1a821627b1608dd3732833d7651564b2ff9aa Mon Sep 17 00:00:00 2001 From: mike-000 <49240900+mike-000@users.noreply.github.com> Date: Thu, 18 Aug 2022 22:14:49 +0100 Subject: [PATCH] clear cache when source reset clear cache if view projection changed test source reset --- src/ol/layer/WebGLTile.js | 3 + src/ol/renderer/webgl/TileLayer.js | 24 ++++++- .../webgl-data-tile-reset-source/expected.png | Bin 0 -> 9387 bytes .../webgl-data-tile-reset-source/main.js | 66 ++++++++++++++++++ 4 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 test/rendering/cases/webgl-data-tile-reset-source/expected.png create mode 100644 test/rendering/cases/webgl-data-tile-reset-source/main.js diff --git a/src/ol/layer/WebGLTile.js b/src/ol/layer/WebGLTile.js index 5aca739168..2cf948e0ed 100644 --- a/src/ol/layer/WebGLTile.js +++ b/src/ol/layer/WebGLTile.js @@ -392,6 +392,9 @@ class WebGLTileLayer extends BaseTileLayer { * @private */ handleSourceUpdate_() { + if (this.hasRenderer()) { + this.getRenderer().clearCache(); + } if (this.getSource()) { this.setStyle(this.style_); } diff --git a/src/ol/renderer/webgl/TileLayer.js b/src/ol/renderer/webgl/TileLayer.js index 5de570b2c8..ae89bd2dd1 100644 --- a/src/ol/renderer/webgl/TileLayer.js +++ b/src/ol/renderer/webgl/TileLayer.js @@ -247,6 +247,12 @@ class WebGLTileLayerRenderer extends WebGLLayerRenderer { * @type {import("../../Map.js").FrameState|null} */ this.frameState_ = null; + + /** + * @private + * @type {import("../../proj/Projection.js").default} + */ + this.projection_ = undefined; } /** @@ -299,6 +305,14 @@ class WebGLTileLayerRenderer extends WebGLLayerRenderer { * @return {boolean} Layer is ready to be rendered. */ prepareFrameInternal(frameState) { + this.projection_ = + this.projection_ === undefined + ? frameState.viewState.projection + : this.projection_; + if (frameState.viewState.projection !== this.projection_) { + this.clearCache(); + this.projection_ = frameState.viewState.projection; + } const layer = this.getLayer(); const source = layer.getRenderSource(); if (!source) { @@ -817,11 +831,15 @@ class WebGLTileLayerRenderer extends WebGLLayerRenderer { return covered; } + clearCache() { + const tileTextureCache = this.tileTextureCache_; + tileTextureCache.forEach((tileTexture) => tileTexture.dispose()); + tileTextureCache.clear(); + } + removeHelper() { if (this.helper) { - const tileTextureCache = this.tileTextureCache_; - tileTextureCache.forEach((tileTexture) => tileTexture.dispose()); - tileTextureCache.clear(); + this.clearCache(); } super.removeHelper(); diff --git a/test/rendering/cases/webgl-data-tile-reset-source/expected.png b/test/rendering/cases/webgl-data-tile-reset-source/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..890747aca61e0af1ee22501af086ff89c2c3adb6 GIT binary patch literal 9387 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