From c1a3c28cd224273b3911bc8756c7df2bc9fa948c Mon Sep 17 00:00:00 2001
From: Alexander Rose <alexander.rose@weirdbyte.de>
Date: Sat, 2 Feb 2019 11:53:48 -0800
Subject: [PATCH] don't use getter for repr.renderObjects

---
 src/mol-repr/shape/representation.ts             |  7 ++++---
 src/mol-repr/structure/complex-representation.ts | 10 +++++++---
 src/mol-repr/structure/units-representation.ts   | 16 +++++++++-------
 src/mol-repr/volume/representation.ts            |  9 ++++++---
 4 files changed, 26 insertions(+), 16 deletions(-)

diff --git a/src/mol-repr/shape/representation.ts b/src/mol-repr/shape/representation.ts
index d0cec8c69..7083810e3 100644
--- a/src/mol-repr/shape/representation.ts
+++ b/src/mol-repr/shape/representation.ts
@@ -95,14 +95,14 @@ export function ShapeRepresentation<D, G extends Geometry, P extends Geometry.Pa
             }
 
             if (updateState.createNew) {
-                renderObjects.length = 0
+                renderObjects.length = 0 // clear list o renderObjects
                 locationIt = ShapeGroupIterator.fromShape(_shape)
                 const transform = createShapeTransform(_shape.transforms)
                 const values = geometryUtils.createValues(_shape.geometry, transform, locationIt, _theme, newProps)
                 const state = geometryUtils.createRenderableState(newProps)
 
                 _renderObject = createRenderObject(_shape.geometry.kind, values, state)
-                if (_renderObject) renderObjects.push(_renderObject)
+                if (_renderObject) renderObjects.push(_renderObject) // add new renderObject to list
             } else {
                 if (!_renderObject) {
                     throw new Error('expected renderObject to be available')
@@ -144,6 +144,7 @@ export function ShapeRepresentation<D, G extends Geometry, P extends Geometry.Pa
             }
 
             currentProps = newProps
+            // increment version
             updated.next(version++)
         });
     }
@@ -151,11 +152,11 @@ export function ShapeRepresentation<D, G extends Geometry, P extends Geometry.Pa
     return {
         label: 'Shape geometry',
         get groupCount () { return locationIt ? locationIt.count : 0 },
-        get renderObjects () { return renderObjects },
         get props () { return currentProps },
         get params () { return currentParams },
         get state() { return _state },
         get theme() { return _theme },
+        renderObjects,
         updated,
         createOrUpdate,
         getLoci(pickingId: PickingId) {
diff --git a/src/mol-repr/structure/complex-representation.ts b/src/mol-repr/structure/complex-representation.ts
index b3ca4d235..05d82e964 100644
--- a/src/mol-repr/structure/complex-representation.ts
+++ b/src/mol-repr/structure/complex-representation.ts
@@ -16,10 +16,12 @@ import { RepresentationContext, RepresentationParamsGetter } from 'mol-repr/repr
 import { Theme, createEmptyTheme } from 'mol-theme/theme';
 import { ParamDefinition as PD } from 'mol-util/param-definition';
 import { Subject } from 'rxjs';
+import { GraphicsRenderObject } from 'mol-gl/render-object';
 
 export function ComplexRepresentation<P extends StructureParams>(label: string, ctx: RepresentationContext, getParams: RepresentationParamsGetter<Structure, P>, visualCtor: () => ComplexVisual<P>): StructureRepresentation<P> {
     let version = 0
     const updated = new Subject<number>()
+    const renderObjects: GraphicsRenderObject[] = []
     const _state = StructureRepresentationStateBuilder.create()
     let visual: ComplexVisual<P> | undefined
 
@@ -40,6 +42,10 @@ export function ComplexRepresentation<P extends StructureParams>(label: string,
             if (!visual) visual = visualCtor()
             const promise = visual.createOrUpdate({ webgl: ctx.webgl, runtime }, _theme, _props, structure)
             if (promise) await promise
+            // update list of renderObjects
+            renderObjects.length = 0
+            if (visual && visual.renderObject) renderObjects.push(visual.renderObject)
+            // increment version
             updated.next(version++)
         });
     }
@@ -81,13 +87,11 @@ export function ComplexRepresentation<P extends StructureParams>(label: string,
         get groupCount() {
             return visual ? visual.groupCount : 0
         },
-        get renderObjects() {
-            return visual && visual.renderObject ? [ visual.renderObject ] : []
-        },
         get props() { return _props },
         get params() { return _params },
         get state() { return _state },
         get theme() { return _theme },
+        renderObjects,
         updated,
         createOrUpdate,
         setState,
diff --git a/src/mol-repr/structure/units-representation.ts b/src/mol-repr/structure/units-representation.ts
index ccf0e37f3..ab8bb1d26 100644
--- a/src/mol-repr/structure/units-representation.ts
+++ b/src/mol-repr/structure/units-representation.ts
@@ -31,6 +31,7 @@ export interface UnitsVisual<P extends UnitsParams> extends Visual<StructureGrou
 export function UnitsRepresentation<P extends UnitsParams>(label: string, ctx: RepresentationContext, getParams: RepresentationParamsGetter<Structure, P>, visualCtor: () => UnitsVisual<P>): StructureRepresentation<P> {
     let version = 0
     const updated = new Subject<number>()
+    const renderObjects: GraphicsRenderObject[] = []
     const _state = StructureRepresentationStateBuilder.create()
     let visuals = new Map<number, { group: Unit.SymmetryGroup, visual: UnitsVisual<P> }>()
 
@@ -140,7 +141,14 @@ export function UnitsRepresentation<P extends UnitsParams>(label: string, ctx: R
                     if (runtime.shouldUpdate) await runtime.update({ message: 'Creating or updating UnitsVisual', current: i, max: il })
                 }
             }
+            // update list of renderObjects
+            renderObjects.length = 0
+            visuals.forEach(({ visual }) => {
+                if (visual.renderObject) renderObjects.push(visual.renderObject)
+            })
+            // set new structure
             if (structure) _structure = structure
+            // increment version
             updated.next(version++)
         });
     }
@@ -199,17 +207,11 @@ export function UnitsRepresentation<P extends UnitsParams>(label: string, ctx: R
             })
             return groupCount
         },
-        get renderObjects() {
-            const renderObjects: GraphicsRenderObject[] = []
-            visuals.forEach(({ visual }) => {
-                if (visual.renderObject) renderObjects.push(visual.renderObject)
-            })
-            return renderObjects
-        },
         get props() { return _props },
         get params() { return _params },
         get state() { return _state },
         get theme() { return _theme },
+        renderObjects,
         updated,
         createOrUpdate,
         setState,
diff --git a/src/mol-repr/volume/representation.ts b/src/mol-repr/volume/representation.ts
index 1822e400e..ac1457617 100644
--- a/src/mol-repr/volume/representation.ts
+++ b/src/mol-repr/volume/representation.ts
@@ -154,6 +154,7 @@ export type VolumeParams = typeof VolumeParams
 export function VolumeRepresentation<P extends VolumeParams>(label: string, ctx: RepresentationContext, getParams: RepresentationParamsGetter<VolumeData, P>, visualCtor: (volume: VolumeData) => VolumeVisual<P>): VolumeRepresentation<P> {
     let version = 0
     const updated = new Subject<number>()
+    const renderObjects: GraphicsRenderObject[] = []
     const _state = Representation.createState()
     let visual: VolumeVisual<P>
 
@@ -187,6 +188,10 @@ export function VolumeRepresentation<P extends VolumeParams>(label: string, ctx:
                 await visual.createOrUpdate({ webgl: ctx.webgl, runtime }, _theme, _props, volume)
                 busy = false
             }
+            // update list of renderObjects
+            renderObjects.length = 0
+            if (visual && visual.renderObject) renderObjects.push(visual.renderObject)
+            // increment version
             updated.next(version++)
         });
     }
@@ -220,13 +225,11 @@ export function VolumeRepresentation<P extends VolumeParams>(label: string, ctx:
         get groupCount() {
             return visual ? visual.groupCount : 0
         },
-        get renderObjects() {
-            return visual && visual.renderObject ? [ visual.renderObject ] : []
-        },
         get props () { return _props },
         get params() { return _params },
         get state() { return _state },
         get theme() { return _theme },
+        renderObjects,
         updated,
         createOrUpdate,
         setState,
-- 
GitLab