diff --git a/src/mol-canvas3d/canvas3d.ts b/src/mol-canvas3d/canvas3d.ts index b8d7d83cfb68def49df123cec5ae7a58a349f2a8..4eedba503de3d7bff3a3cb4efc7bcfc2cab82f05 100644 --- a/src/mol-canvas3d/canvas3d.ts +++ b/src/mol-canvas3d/canvas3d.ts @@ -126,6 +126,7 @@ namespace Canvas3D { let pickDirty = true let isPicking = false + let isUpdating = false let drawPending = false let lastRenderTime = -1 @@ -182,7 +183,7 @@ namespace Canvas3D { } function render(variant: RenderVariant, force: boolean) { - if (isPicking) return false + if (isPicking || isUpdating) return false let didRender = false controls.update() @@ -285,6 +286,7 @@ namespace Canvas3D { } function add(repr: Representation.Any) { + isUpdating = true const oldRO = reprRenderObjects.get(repr) const newRO = new Set<RenderObject>() repr.renderObjects.forEach(o => newRO.add(o)) @@ -299,6 +301,7 @@ namespace Canvas3D { reprCount.next(reprRenderObjects.size) boundingSphereHelper.update() scene.update() + isUpdating = false requestDraw(true) } @@ -329,11 +332,13 @@ namespace Canvas3D { } const renderObjects = reprRenderObjects.get(repr) if (renderObjects) { + isUpdating = true renderObjects.forEach(o => scene.remove(o)) reprRenderObjects.delete(repr) reprCount.next(reprRenderObjects.size) boundingSphereHelper.update() scene.update() + isUpdating = false requestDraw(true) } }, diff --git a/src/mol-gl/webgl/buffer.ts b/src/mol-gl/webgl/buffer.ts index 8f2c0e71939f3b342235fc75f2fd6724aac71527..5c2d5b0801427b8f586be8f8c9695a55a32f124b 100644 --- a/src/mol-gl/webgl/buffer.ts +++ b/src/mol-gl/webgl/buffer.ts @@ -142,9 +142,6 @@ export function createBuffer(ctx: WebGLContext, array: ArrayType, itemSize: Buff destroy: () => { if (destroyed) return - gl.bindBuffer(_bufferType, _buffer); - // set size to 1 before deleting - (gl as WebGLRenderingContext).bufferData(_bufferType, 1, _usageHint) // TODO remove cast when webgl2 types are fixed gl.deleteBuffer(_buffer) destroyed = true ctx.bufferCount -= 1