Merge pull request #12020 from tschaub/delete-buffer

Fix WebGL buffer deletion
This commit is contained in:
Tim Schaub
2021-02-11 06:07:22 -07:00
committed by GitHub
2 changed files with 19 additions and 3 deletions

View File

@@ -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];
}

View File

@@ -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 () {