Browse Source

don't use getter for repr.renderObjects

Alexander Rose 6 years ago
parent
commit
c1a3c28cd2

+ 4 - 3
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) {

+ 7 - 3
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,

+ 9 - 7
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,

+ 6 - 3
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,