diff --git a/cortex/webgl/resources/js/svgoverlay.js b/cortex/webgl/resources/js/svgoverlay.js index db33a036..bcf951a2 100644 --- a/cortex/webgl/resources/js/svgoverlay.js +++ b/cortex/webgl/resources/js/svgoverlay.js @@ -114,11 +114,17 @@ var svgoverlay = (function(module) { this.svg.setAttribute("height", this.height); }, module.SVGOverlay.prototype.update = function() { - console.log("Updating overlay!"); + // Re-bake the SVG overlay into a GPU texture asynchronously (toDataURL -> Image.onload). + // Rapid layer toggles (ROIs / sulci / labels) can kick off several bakes that finish out + // of order, leaving a stale texture on the surface that disagrees with the switch state. + // Tag each bake with a generation id and commit only the most recent one. + var gen = (this._updateGen = (this._updateGen || 0) + 1); this.svg.toDataURL("image/png", {renderer:"native", callback:function(dataurl) { var img = new Image(); //img.src = dataurl; img.onload = function () { + if (gen !== this._updateGen) + return; // superseded by a newer toggle -- discard this stale bake var tex = new THREE.Texture(img); tex.needsUpdate = true; //tex.anisotropy = 16;