From 976542d3558e1dadf40d46efa401d5f16ef80fed Mon Sep 17 00:00:00 2001 From: Alexander Rose <alexander.rose@weirdbyte.de> Date: Tue, 28 Dec 2021 19:30:45 -0800 Subject: [PATCH] ensure mark changes are rendered (even w/ noDraw) - schedule using forceNextRender to avoid rendering twice --- src/mol-canvas3d/canvas3d.ts | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/mol-canvas3d/canvas3d.ts b/src/mol-canvas3d/canvas3d.ts index 4c1ec427a..ce953c2cb 100644 --- a/src/mol-canvas3d/canvas3d.ts +++ b/src/mol-canvas3d/canvas3d.ts @@ -355,13 +355,20 @@ namespace Canvas3D { changed = helper.camera.mark(loci, action) || changed; reprRenderObjects.forEach((_, _repr) => { changed = _repr.mark(loci, action) || changed; }); } - if (changed && !noDraw) { - scene.update(void 0, true); - helper.handle.scene.update(void 0, true); - helper.camera.scene.update(void 0, true); - const prevPickDirty = pickHelper.dirty; - draw(true, true); - pickHelper.dirty = prevPickDirty; // marking does not change picking buffers + if (changed) { + if (noDraw) { + // Even with `noDraw` make sure changes will be rendered. + // Note that with this calling mark (with or without `noDraw`) multiple times + // during a JS event loop iteration will only result in a single render call. + forceNextRender = true; + } else { + scene.update(void 0, true); + helper.handle.scene.update(void 0, true); + helper.camera.scene.update(void 0, true); + const prevPickDirty = pickHelper.dirty; + draw(true, true); + pickHelper.dirty = prevPickDirty; // marking does not change picking buffers + } } } -- GitLab