Skip to content
Snippets Groups Projects
Commit 73fc787a authored by Alexander Rose's avatar Alexander Rose
Browse files

tweaks to canvas3d.add

parent c1a3c28c
No related branches found
No related tags found
No related merge requests found
...@@ -9,9 +9,8 @@ import { now } from 'mol-util/now'; ...@@ -9,9 +9,8 @@ import { now } from 'mol-util/now';
import { Vec3 } from 'mol-math/linear-algebra' import { Vec3 } from 'mol-math/linear-algebra'
import InputObserver from 'mol-util/input/input-observer' import InputObserver from 'mol-util/input/input-observer'
import { SetUtils } from 'mol-util/set'
import Renderer, { RendererStats } from 'mol-gl/renderer' import Renderer, { RendererStats } from 'mol-gl/renderer'
import { RenderObject } from 'mol-gl/render-object' import { GraphicsRenderObject } from 'mol-gl/render-object'
import { TrackballControls, TrackballControlsParams } from './controls/trackball' import { TrackballControls, TrackballControlsParams } from './controls/trackball'
import { Viewport } from './camera/util' import { Viewport } from './camera/util'
...@@ -29,6 +28,7 @@ import { Camera } from './camera'; ...@@ -29,6 +28,7 @@ import { Camera } from './camera';
import { ParamDefinition as PD } from 'mol-util/param-definition'; import { ParamDefinition as PD } from 'mol-util/param-definition';
import { BoundingSphereHelper, DebugHelperParams } from './helper/bounding-sphere-helper'; import { BoundingSphereHelper, DebugHelperParams } from './helper/bounding-sphere-helper';
import { decodeFloatRGB } from 'mol-util/float-packing'; import { decodeFloatRGB } from 'mol-util/float-packing';
import { SetUtils } from 'mol-util/set';
export const Canvas3DParams = { export const Canvas3DParams = {
// TODO: FPS cap? // TODO: FPS cap?
...@@ -83,7 +83,7 @@ namespace Canvas3D { ...@@ -83,7 +83,7 @@ namespace Canvas3D {
export function create(canvas: HTMLCanvasElement, container: Element, props: Partial<Canvas3DProps> = {}): Canvas3D { export function create(canvas: HTMLCanvasElement, container: Element, props: Partial<Canvas3DProps> = {}): Canvas3D {
const p = { ...PD.getDefaultValues(Canvas3DParams), ...props } const p = { ...PD.getDefaultValues(Canvas3DParams), ...props }
const reprRenderObjects = new Map<Representation.Any, Set<RenderObject>>() const reprRenderObjects = new Map<Representation.Any, Set<GraphicsRenderObject>>()
const reprUpdatedSubscriptions = new Map<Representation.Any, Subscription>() const reprUpdatedSubscriptions = new Map<Representation.Any, Subscription>()
const reprCount = new BehaviorSubject(0) const reprCount = new BehaviorSubject(0)
...@@ -300,11 +300,13 @@ namespace Canvas3D { ...@@ -300,11 +300,13 @@ namespace Canvas3D {
function add(repr: Representation.Any) { function add(repr: Representation.Any) {
isUpdating = true isUpdating = true
const oldRO = reprRenderObjects.get(repr) const oldRO = reprRenderObjects.get(repr)
const newRO = new Set<RenderObject>() const newRO = new Set<GraphicsRenderObject>()
repr.renderObjects.forEach(o => newRO.add(o)) repr.renderObjects.forEach(o => newRO.add(o))
if (oldRO) { if (oldRO) {
SetUtils.difference(newRO, oldRO).forEach(o => scene.add(o)) if (!SetUtils.areEqual(newRO, oldRO)) {
SetUtils.difference(oldRO, newRO).forEach(o => scene.remove(o)) for (const o of Array.from(newRO)) { if (!oldRO.has(o)) scene.add(o) }
for (const o of Array.from(oldRO)) { if (!newRO.has(o)) scene.remove(o) }
}
} else { } else {
repr.renderObjects.forEach(o => scene.add(o)) repr.renderObjects.forEach(o => scene.add(o))
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment