Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix attribute transition #8643

Merged
merged 13 commits into from Mar 13, 2024
2 changes: 1 addition & 1 deletion modules/core/src/lib/attribute/attribute-manager.ts
Expand Up @@ -275,7 +275,7 @@ export default class AttributeManager {
* @return {Object} attributes - descriptors
*/
getAttributes(): {[id: string]: Attribute} {
return this.attributes;
return {...this.attributes, ...this.attributeTransitionManager.getAttributes()};
}

/**
Expand Down
Expand Up @@ -6,10 +6,10 @@ import log from '../../utils/log';

import type {Device} from '@luma.gl/core';
import type {Timeline} from '@luma.gl/engine';
import type GPUTransition from '../../transitions/gpu-transition';
import type {GPUTransition} from '../../transitions/gpu-transition';
import type {ConstructorOf} from '../../types/types';
import type Attribute from './attribute';
import type {TransitionSettings} from './attribute-transition-utils';
import type {TransitionSettings} from './transition-settings';

const TRANSITION_TYPES: Record<string, ConstructorOf<GPUTransition>> = {
interpolation: GPUInterpolationTransition,
Expand Down Expand Up @@ -129,7 +129,7 @@ export default class AttributeTransitionManager {

/* Private methods */
private _removeTransition(attributeName: string): void {
this.transitions[attributeName].cancel();
this.transitions[attributeName].delete();
delete this.transitions[attributeName];
}

Expand Down
216 changes: 0 additions & 216 deletions modules/core/src/lib/attribute/attribute-transition-utils.ts

This file was deleted.

2 changes: 1 addition & 1 deletion modules/core/src/lib/attribute/attribute.ts
Expand Up @@ -10,7 +10,7 @@ import {createIterable, getAccessorFromBuffer} from '../../utils/iterable-utils'
import {fillArray} from '../../utils/flatten';
import * as range from '../../utils/range';
import {bufferLayoutEqual} from './gl-utils';
import {normalizeTransitionSettings, TransitionSettings} from './attribute-transition-utils';
import {normalizeTransitionSettings, TransitionSettings} from './transition-settings';
import type {Device, Buffer, BufferLayout} from '@luma.gl/core';

import type {NumericArray, TypedArray} from '../../types/types';
Expand Down
2 changes: 2 additions & 0 deletions modules/core/src/lib/attribute/data-column.ts
Expand Up @@ -344,6 +344,8 @@ export default class DataColumn<Options, State> {
constant?: boolean;
value?: NumericArray;
buffer?: Buffer;
/** Set to `true` if supplying float values to a unorm attribute */
normalized?: boolean;
} & Partial<BufferAccessor>)
): boolean {
const {state} = this;
Expand Down
59 changes: 59 additions & 0 deletions modules/core/src/lib/attribute/transition-settings.ts
@@ -0,0 +1,59 @@
import {NumericArray} from '../../types/types';

export interface TransitionSettings {
type: string;
/** Callback to get the value that the entering vertices are transitioning from. */
enter?: (toValue: NumericArray, chunk?: NumericArray) => NumericArray;
/** Callback when the transition is started */
onStart?: () => void;
/** Callback when the transition is done */
onEnd?: () => void;
/** Callback when the transition is interrupted */
onInterrupt?: () => void;
}

export type InterpolationTransitionSettings = TransitionSettings & {
type?: 'interpolation';
/** Duration of the transition animation, in milliseconds */
duration: number;
/** Easing function that maps a value from [0, 1] to [0, 1], see [http://easings.net/](http://easings.net/) */
easing?: (t: number) => number;
};

export type SpringTransitionSettings = TransitionSettings & {
type: 'spring';
/** "Tension" factor for the spring */
stiffness: number;
/** "Friction" factor that counteracts the spring's acceleration */
damping: number;
};

const DEFAULT_TRANSITION_SETTINGS = {
interpolation: {
duration: 0,
easing: t => t
},
spring: {
stiffness: 0.05,
damping: 0.5
}
};

export function normalizeTransitionSettings(
userSettings: number | InterpolationTransitionSettings | SpringTransitionSettings,
layerSettings?: boolean | Partial<TransitionSettings>
): TransitionSettings | null {
if (!userSettings) {
return null;
}
if (Number.isFinite(userSettings)) {
userSettings = {type: 'interpolation', duration: userSettings as number};
}
const type = (userSettings as TransitionSettings).type || 'interpolation';
return {
...DEFAULT_TRANSITION_SETTINGS[type],
...(layerSettings as TransitionSettings),
...(userSettings as TransitionSettings),
type
};
}
2 changes: 1 addition & 1 deletion modules/core/src/lib/uniform-transition-manager.ts
@@ -1,4 +1,4 @@
import {normalizeTransitionSettings} from './attribute/attribute-transition-utils';
import {normalizeTransitionSettings} from './attribute/transition-settings';
import CPUInterpolationTransition from '../transitions/cpu-interpolation-transition';
import CPUSpringTransition from '../transitions/cpu-spring-transition';
import log from '../utils/log';
Expand Down