diff --git a/CHANGELOG.md b/CHANGELOG.md index 2e4a494a3a2e20e6eacb73219ca5299465b4bd5f..952ba6982bfe01225e56a82b54f8f2affea0bdff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ Note that since we don't clearly distinguish between a public and private interf ## [Unreleased] +- [Fix] Clone ``Canvas3DParams`` when creating a ``Canvas3D`` instance to prevent shared state between multiple instances. + ## [v3.16.0] - 2022-08-25 - Support ``globalColorParams`` and ``globalSymmetryParams`` in common representation params diff --git a/src/mol-canvas3d/canvas3d.ts b/src/mol-canvas3d/canvas3d.ts index 5df5536af201a1b921c1a5c84a9dba55642f9afe..e0c3335651cbb1cd19be7ea1f1417d3fa77a9d0e 100644 --- a/src/mol-canvas3d/canvas3d.ts +++ b/src/mol-canvas3d/canvas3d.ts @@ -42,6 +42,7 @@ import { MarkingParams } from './passes/marking'; import { GraphicsRenderVariantsBlended, GraphicsRenderVariantsWboit } from '../mol-gl/webgl/render-item'; import { degToRad, radToDeg } from '../mol-math/misc'; import { AssetManager } from '../mol-util/assets'; +import { deepClone } from '../mol-util/object'; export const Canvas3DParams = { camera: PD.Group({ @@ -285,7 +286,7 @@ namespace Canvas3D { export interface ClickEvent { current: Representation.Loci, buttons: ButtonsType, button: ButtonsType.Flag, modifiers: ModifiersKeys, page?: Vec2, position?: Vec3 } export function create({ webgl, input, passes, attribs, assetManager }: Canvas3DContext, props: Partial<Canvas3DProps> = {}): Canvas3D { - const p: Canvas3DProps = { ...DefaultCanvas3DParams, ...props }; + const p: Canvas3DProps = { ...deepClone(DefaultCanvas3DParams), ...deepClone(props) }; const reprRenderObjects = new Map<Representation.Any, Set<GraphicsRenderObject>>(); const reprUpdatedSubscriptions = new Map<Representation.Any, Subscription>();