Skip to content
Snippets Groups Projects
Commit 42037074 authored by David Sehnal's avatar David Sehnal
Browse files

fix unitTransforms visual state updating

parent 1e3f17ef
No related branches found
No related tags found
No related merge requests found
......@@ -21,6 +21,8 @@ export class StructureUnitTransforms {
private _isIdentity: boolean | undefined = undefined;
version = 0;
constructor(readonly structure: Structure) {
this.unitTransforms = new Float32Array(structure.units.length * 16)
this.size = structure.units.length
......@@ -39,6 +41,7 @@ export class StructureUnitTransforms {
}
reset() {
this.version = 0;
fillIdentityTransform(this.unitTransforms, this.size);
this._isIdentity = true
}
......@@ -58,6 +61,7 @@ export class StructureUnitTransforms {
}
setTransform(matrix: Mat4, unit: Unit) {
this.version = (this.version + 1) % 0x7fffffff;
Mat4.toArray(matrix, this.unitTransforms, this.unitOffsetMap.get(unit.id))
this._isIdentity = undefined
}
......
......@@ -19,13 +19,15 @@ import { TextureMesh } from '../../mol-geo/geometry/texture-mesh/texture-mesh';
import { Text } from '../../mol-geo/geometry/text/text';
export interface StructureRepresentationState extends Representation.State {
unitTransforms: StructureUnitTransforms | null
unitTransforms: StructureUnitTransforms | null,
unitTransformsVersion: number
}
export const StructureRepresentationStateBuilder: Representation.StateBuilder<StructureRepresentationState> = {
create: () => {
return {
...Representation.createState(),
unitTransforms: null
unitTransforms: null,
unitTransformsVersion: -1
}
},
update: (state: StructureRepresentationState, update: Partial<StructureRepresentationState>) => {
......
......@@ -231,9 +231,13 @@ export function UnitsRepresentation<P extends UnitsParams>(label: string, ctx: R
if (transparency !== undefined && !Transparency.areEqual(transparency, _state.transparency)) {
newState.transparency = transparency
}
if (transform !== undefined && !Mat4.areEqual(transform, _state.transform, EPSILON)) { newState.transform = transform
if (transform !== undefined && !Mat4.areEqual(transform, _state.transform, EPSILON)) {
newState.transform = transform
}
if (unitTransforms !== _state.unitTransforms || unitTransforms?.version !== state.unitTransformsVersion) {
newState.unitTransforms = unitTransforms
_state.unitTransformsVersion = unitTransforms ? unitTransforms?.version : -1
}
if (unitTransforms !== _state.unitTransforms) newState.unitTransforms = unitTransforms
if (syncManually !== _state.syncManually) newState.syncManually = syncManually
if (markerActions !== _state.markerActions) newState.markerActions = markerActions
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment