diff --git a/src/ol/renderer/webgl/Layer.js b/src/ol/renderer/webgl/Layer.js index 2f0779efba..bd731fb817 100644 --- a/src/ol/renderer/webgl/Layer.js +++ b/src/ol/renderer/webgl/Layer.js @@ -70,6 +70,7 @@ class WebGLLayerRenderer extends LayerRenderer { * @inheritDoc */ disposeInternal() { + this.helper.disposeInternal(); super.disposeInternal(); } diff --git a/src/ol/renderer/webgl/PointsLayer.js b/src/ol/renderer/webgl/PointsLayer.js index 4a557a9476..767e4c564d 100644 --- a/src/ol/renderer/webgl/PointsLayer.js +++ b/src/ol/renderer/webgl/PointsLayer.js @@ -574,6 +574,14 @@ class WebGLPointsLayerRenderer extends WebGLLayerRenderer { const renderCount = this.indicesBuffer_.getSize(); this.helper.drawElements(0, renderCount); } + + /** + * @inheritDoc + */ + disposeInternal() { + this.worker_.terminate(); + super.disposeInternal(); + } } export default WebGLPointsLayerRenderer; diff --git a/test/spec/ol/renderer/webgl/pointslayer.test.js b/test/spec/ol/renderer/webgl/pointslayer.test.js index e5c6bc9870..53b36a8041 100644 --- a/test/spec/ol/renderer/webgl/pointslayer.test.js +++ b/test/spec/ol/renderer/webgl/pointslayer.test.js @@ -254,4 +254,20 @@ describe('ol.renderer.webgl.PointsLayer', function() { }); }); + describe('#disposeInternal', function() { + it('terminates the worker and calls dispose on the helper', function() { + const layer = new VectorLayer({ + source: new VectorSource() + }); + const renderer = new WebGLPointsLayerRenderer(layer, { + }); + + const spyHelper = sinon.spy(renderer.helper, 'disposeInternal'); + const spyWorker = sinon.spy(renderer.worker_, 'terminate'); + renderer.disposeInternal(); + expect(spyHelper.called).to.be(true); + expect(spyWorker.called).to.be(true); + }); + }); + });