diff --git a/src/ol/webgl/Helper.js b/src/ol/webgl/Helper.js index 7334355dc8..79c139d622 100644 --- a/src/ol/webgl/Helper.js +++ b/src/ol/webgl/Helper.js @@ -410,8 +410,8 @@ class WebGLHelper extends Disposable { const gl = this.getGL(); const bufferKey = getUid(buf); const bufferCacheEntry = this.bufferCache_[bufferKey]; - if (!gl.isContextLost()) { - gl.deleteBuffer(bufferCacheEntry.buffer); + if (bufferCacheEntry && !gl.isContextLost()) { + gl.deleteBuffer(bufferCacheEntry.webGlBuffer); } delete this.bufferCache_[bufferKey]; } diff --git a/test/spec/ol/webgl/helper.test.js b/test/spec/ol/webgl/helper.test.js index c9d250b431..e88d70947c 100644 --- a/test/spec/ol/webgl/helper.test.js +++ b/test/spec/ol/webgl/helper.test.js @@ -1,11 +1,13 @@ +import WebGLArrayBuffer from '../../../../src/ol/webgl/Buffer.js'; import WebGLHelper, {DefaultUniform} from '../../../../src/ol/webgl/Helper.js'; -import {FLOAT} from '../../../../src/ol/webgl.js'; +import {ARRAY_BUFFER, FLOAT, STATIC_DRAW} from '../../../../src/ol/webgl.js'; import { create as createTransform, rotate as rotateTransform, scale as scaleTransform, translate as translateTransform, } from '../../../../src/ol/transform.js'; +import {getUid} from '../../../../src/ol/util.js'; const VERTEX_SHADER = ` precision mediump float; @@ -240,6 +242,20 @@ describe('ol/webgl/WebGLHelper', function () { }); }); + describe('deleteBuffer()', function () { + it('can be called to free up buffer resources', function () { + const helper = new WebGLHelper(); + const buffer = new WebGLArrayBuffer(ARRAY_BUFFER, STATIC_DRAW); + buffer.fromArray([0, 1, 2, 3]); + helper.flushBufferData(buffer); + const bufferKey = getUid(buffer); + expect(helper.bufferCache_).to.have.property(bufferKey); + + helper.deleteBuffer(buffer); + expect(helper.bufferCache_).to.not.have.property(bufferKey); + }); + }); + describe('#createTexture', function () { let h; beforeEach(function () {