diff --git a/src/apps/render-test/state.ts b/src/apps/render-test/state.ts index d722048f4b85eca1cd31ca92e4f09c61f1ec92df..c8a2f0cd6ed84df02a1e9734db2ad346164eeea4 100644 --- a/src/apps/render-test/state.ts +++ b/src/apps/render-test/state.ts @@ -39,7 +39,7 @@ export default class State { initialized = new BehaviorSubject<boolean>(false) loading = new BehaviorSubject<boolean>(false) - colorTheme = new BehaviorSubject<ColorTheme>('chain-id') + colorTheme = new BehaviorSubject<ColorTheme>('atom-index') detail = new BehaviorSubject<number>(2) pointVisibility = new BehaviorSubject<boolean>(true) diff --git a/src/mol-geo/representation/structure/point.ts b/src/mol-geo/representation/structure/point.ts index b162a8a0a54563a2c19e58ccfc624d02ae24af88..e1ffca4b33a9d6eb913dd937af3ac26da6f385c1 100644 --- a/src/mol-geo/representation/structure/point.ts +++ b/src/mol-geo/representation/structure/point.ts @@ -75,7 +75,7 @@ export default function Point(): UnitsRepresentation<PointProps> { objectId: 0, position: ValueCell.create(vertices), - id: ValueCell.create(fillSerial(new Float32Array(unitCount))), + id: ValueCell.create(fillSerial(new Float32Array(elementCount))), size, color, transform: ValueCell.create(transforms), diff --git a/src/mol-gl/renderer.ts b/src/mol-gl/renderer.ts index 64b3f042993323905b89d245d4fb3188bf5cd5fa..70525b7a0163693e855f509e7a900cee5368eabe 100644 --- a/src/mol-gl/renderer.ts +++ b/src/mol-gl/renderer.ts @@ -74,7 +74,6 @@ namespace Renderer { const draw = () => { regl.poll() // updates timers and viewport - camera.update() baseContext(state => { regl.clear({ color: [0, 0, 0, 1] }) // TODO painters sort, filter visible, filter picking, visibility culling? diff --git a/src/mol-view/controls/trackball.ts b/src/mol-view/controls/trackball.ts index 5535d7c6f6d562b00ca4d315bd5ff41848244ab0..d55e69035d99cd67adcd079f40fd7397eb1a9c10 100644 --- a/src/mol-view/controls/trackball.ts +++ b/src/mol-view/controls/trackball.ts @@ -63,7 +63,7 @@ namespace TrackballControls { const wheelSub = input.wheel.subscribe(onWheel) const pinchSub = input.pinch.subscribe(onPinch) - // internals + // For internal use const target = Vec3.zero() const lastPosition = Vec3.zero() @@ -84,7 +84,7 @@ namespace TrackballControls { const _panStart = Vec2.zero() const _panEnd = Vec2.zero() - // for reset + // Initial values for reseting const target0 = Vec3.clone(target) const position0 = Vec3.clone(object.position) const up0 = Vec3.clone(object.up) @@ -197,6 +197,7 @@ namespace TrackballControls { } } + /** Ensure the distance between object and target is within the min/max distance */ function checkDistances() { if (Vec3.squaredMagnitude(_eye) > maxDistance * maxDistance) { Vec3.setMagnitude(_eye, _eye, maxDistance) @@ -211,6 +212,7 @@ namespace TrackballControls { } } + /** Update the object's position, direction and up vectors */ function update() { Vec3.sub(_eye, object.position, target) @@ -229,6 +231,7 @@ namespace TrackballControls { } } + /** Reset object's vectors and the target vector to their initial values */ function reset() { Vec3.copy(target, target0) Vec3.copy(object.position, position0) diff --git a/src/mol-view/viewer.ts b/src/mol-view/viewer.ts index faf022963a3e741218c189f6f59b7a1fc94131a6..4bd6189ffefe65fcf719d53dbc05a3ba2e821f63 100644 --- a/src/mol-view/viewer.ts +++ b/src/mol-view/viewer.ts @@ -4,7 +4,7 @@ * @author Alexander Rose <alexander.rose@weirdbyte.de> */ -import { Vec3 } from 'mol-math/linear-algebra' +import { Vec3, Mat4, EPSILON } from 'mol-math/linear-algebra' import InputObserver from 'mol-util/input/input-observer' import * as SetUtils from 'mol-util/set' import Renderer, { RendererStats } from 'mol-gl/renderer' @@ -24,7 +24,7 @@ interface Viewer { remove: (repr: StructureRepresentation) => void clear: () => void - draw: () => void + draw: (force?: boolean) => void requestDraw: () => void animate: () => void @@ -68,22 +68,27 @@ namespace Viewer { const renderer = Renderer.create(gl, camera) let drawPending = false + const prevProjectionView = Mat4.zero() - function draw () { + function draw (force?: boolean) { controls.update() camera.update() - renderer.draw() + if (force || !Mat4.areEqual(camera.projectionView, prevProjectionView, EPSILON.Value)) { + Mat4.copy(prevProjectionView, camera.projectionView) + renderer.draw() + } + drawPending = false } function requestDraw () { if (drawPending) return drawPending = true - window.requestAnimationFrame(draw) + window.requestAnimationFrame(() => draw(true)) } function animate () { draw() - window.requestAnimationFrame(animate) + window.requestAnimationFrame(() => animate()) } handleResize()