From be8d2843cdda330683a7eda9eb5c513e6f0daa1f Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Tue, 16 Aug 2022 16:31:02 -0600 Subject: [PATCH] Avoid append only cache in WebGL tile layers --- src/ol/renderer/webgl/TileLayer.js | 1 + test/browser/spec/ol/layer/WebGLTile.test.js | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/src/ol/renderer/webgl/TileLayer.js b/src/ol/renderer/webgl/TileLayer.js index 4833fba2e6..5de570b2c8 100644 --- a/src/ol/renderer/webgl/TileLayer.js +++ b/src/ol/renderer/webgl/TileLayer.js @@ -674,6 +674,7 @@ class WebGLTileLayerRenderer extends WebGLLayerRenderer { * @param {import("../../Map.js").FrameState} frameState Frame state. */ const postRenderFunction = function (map, frameState) { + tileSource.updateCacheSize(0.1, frameState.viewState.projection); tileSource.expireCache(frameState.viewState.projection, empty); }; diff --git a/test/browser/spec/ol/layer/WebGLTile.test.js b/test/browser/spec/ol/layer/WebGLTile.test.js index e9293dfa89..a17bb1aae5 100644 --- a/test/browser/spec/ol/layer/WebGLTile.test.js +++ b/test/browser/spec/ol/layer/WebGLTile.test.js @@ -1,5 +1,6 @@ import DataTileSource from '../../../../../src/ol/source/DataTile.js'; import Map from '../../../../../src/ol/Map.js'; +import OSM from '../../../../../src/ol/source/OSM.js'; import TileWMS from '../../../../../src/ol/source/TileWMS.js'; import View from '../../../../../src/ol/View.js'; import WebGLHelper from '../../../../../src/ol/webgl/Helper.js'; @@ -269,6 +270,19 @@ describe('ol/layer/WebGLTile', function () { }); }); + describe('caching', () => { + it('updates the size of the tile cache on the source ', (done) => { + const source = new OSM(); + const spy = sinon.spy(source, 'updateCacheSize'); + const layer = new WebGLTileLayer({source: source}); + map.addLayer(layer); + map.once('rendercomplete', () => { + expect(spy.called).to.be(true); + done(); + }); + }); + }); + it('creates fragment and vertex shaders', function () { const compileShaderSpy = sinon.spy(WebGLHelper.prototype, 'compileShader'); const renderer = layer.getRenderer();