@luma.gl/engine 9.0.0-alpha.5 → 9.0.0-alpha.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +3 -1
- package/dist/animation/key-frames.d.ts +1 -1
- package/dist/animation/key-frames.d.ts.map +1 -1
- package/dist/animation/key-frames.js +6 -27
- package/dist/animation/key-frames.js.map +1 -1
- package/dist/animation/timeline.d.ts +9 -9
- package/dist/animation/timeline.d.ts.map +1 -1
- package/dist/animation/timeline.js +18 -49
- package/dist/animation/timeline.js.map +1 -1
- package/dist/{lib → animation-loop}/animation-loop.d.ts +30 -31
- package/dist/animation-loop/animation-loop.d.ts.map +1 -0
- package/dist/{lib → animation-loop}/animation-loop.js +115 -199
- package/dist/animation-loop/animation-loop.js.map +1 -0
- package/dist/{lib → animation-loop}/animation-props.d.ts +6 -7
- package/dist/animation-loop/animation-props.d.ts.map +1 -0
- package/dist/animation-loop/animation-props.js.map +1 -0
- package/dist/animation-loop/make-animation-loop.d.ts +6 -0
- package/dist/animation-loop/make-animation-loop.d.ts.map +1 -0
- package/dist/animation-loop/make-animation-loop.js +28 -0
- package/dist/animation-loop/make-animation-loop.js.map +1 -0
- package/dist/animation-loop/render-loop.d.ts +23 -0
- package/dist/animation-loop/render-loop.d.ts.map +1 -0
- package/dist/animation-loop/render-loop.js +7 -0
- package/dist/animation-loop/render-loop.js.map +1 -0
- package/dist/dist.dev.js +7064 -0
- package/dist/geometries/cone-geometry.d.ts +1 -1
- package/dist/geometries/cone-geometry.d.ts.map +1 -1
- package/dist/geometries/cone-geometry.js +6 -5
- package/dist/geometries/cone-geometry.js.map +1 -1
- package/dist/geometries/cube-geometry.d.ts +2 -2
- package/dist/geometries/cube-geometry.d.ts.map +1 -1
- package/dist/geometries/cube-geometry.js +15 -8
- package/dist/geometries/cube-geometry.js.map +1 -1
- package/dist/geometries/cylinder-geometry.d.ts +1 -1
- package/dist/geometries/cylinder-geometry.d.ts.map +1 -1
- package/dist/geometries/cylinder-geometry.js +6 -5
- package/dist/geometries/cylinder-geometry.js.map +1 -1
- package/dist/geometries/ico-sphere-geometry.d.ts +2 -2
- package/dist/geometries/ico-sphere-geometry.d.ts.map +1 -1
- package/dist/geometries/ico-sphere-geometry.js +10 -19
- package/dist/geometries/ico-sphere-geometry.js.map +1 -1
- package/dist/geometries/plane-geometry.d.ts +2 -2
- package/dist/geometries/plane-geometry.d.ts.map +1 -1
- package/dist/geometries/plane-geometry.js +14 -23
- package/dist/geometries/plane-geometry.js.map +1 -1
- package/dist/geometries/sphere-geometry.d.ts +2 -2
- package/dist/geometries/sphere-geometry.d.ts.map +1 -1
- package/dist/geometries/sphere-geometry.js +9 -13
- package/dist/geometries/sphere-geometry.js.map +1 -1
- package/dist/geometries/truncated-cone-geometry.d.ts +2 -4
- package/dist/geometries/truncated-cone-geometry.d.ts.map +1 -1
- package/dist/geometries/truncated-cone-geometry.js +9 -25
- package/dist/geometries/truncated-cone-geometry.js.map +1 -1
- package/dist/geometry/geometry-table.d.ts +2 -2
- package/dist/geometry/geometry-table.d.ts.map +1 -1
- package/dist/geometry/geometry-table.js.map +1 -1
- package/dist/geometry/geometry-utils.d.ts.map +1 -1
- package/dist/geometry/geometry-utils.js +0 -9
- package/dist/geometry/geometry-utils.js.map +1 -1
- package/dist/geometry/geometry.d.ts +50 -59
- package/dist/geometry/geometry.d.ts.map +1 -1
- package/dist/geometry/geometry.js +32 -97
- package/dist/geometry/geometry.js.map +1 -1
- package/dist/geometry/gpu-geometry.d.ts +37 -0
- package/dist/geometry/gpu-geometry.d.ts.map +1 -0
- package/dist/geometry/gpu-geometry.js +107 -0
- package/dist/geometry/gpu-geometry.js.map +1 -0
- package/dist/geometry/gpu-table.d.ts +1 -0
- package/dist/geometry/gpu-table.d.ts.map +1 -0
- package/dist/geometry/gpu-table.js +2 -0
- package/dist/geometry/gpu-table.js.map +1 -0
- package/dist/index.cjs +2959 -0
- package/dist/index.d.ts +26 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -13
- package/dist/index.js.map +1 -1
- package/dist/lib/clip-space.d.ts +8 -0
- package/dist/lib/clip-space.d.ts.map +1 -1
- package/dist/lib/clip-space.js +47 -0
- package/dist/lib/clip-space.js.map +1 -1
- package/dist/lib/pipeline-factory.d.ts +12 -40
- package/dist/lib/pipeline-factory.d.ts.map +1 -1
- package/dist/lib/pipeline-factory.js +50 -148
- package/dist/lib/pipeline-factory.js.map +1 -1
- package/dist/model/model.d.ts +192 -0
- package/dist/model/model.d.ts.map +1 -0
- package/dist/model/model.js +312 -0
- package/dist/model/model.js.map +1 -0
- package/dist/scenegraph/group-node.d.ts +21 -0
- package/dist/scenegraph/group-node.d.ts.map +1 -0
- package/dist/scenegraph/group-node.js +94 -0
- package/dist/scenegraph/group-node.js.map +1 -0
- package/dist/scenegraph/model-node.d.ts +18 -0
- package/dist/scenegraph/model-node.d.ts.map +1 -0
- package/dist/scenegraph/model-node.js +28 -0
- package/dist/scenegraph/model-node.js.map +1 -0
- package/dist/scenegraph/scenegraph-node.d.ts +56 -0
- package/dist/scenegraph/scenegraph-node.d.ts.map +1 -0
- package/dist/scenegraph/scenegraph-node.js +141 -0
- package/dist/scenegraph/scenegraph-node.js.map +1 -0
- package/dist/shader-inputs.d.ts +62 -0
- package/dist/shader-inputs.d.ts.map +1 -0
- package/dist/shader-inputs.js +49 -0
- package/dist/shader-inputs.js.map +1 -0
- package/dist/transform/buffer-transform.d.ts +35 -0
- package/dist/transform/buffer-transform.d.ts.map +1 -0
- package/dist/transform/buffer-transform.js +62 -0
- package/dist/transform/buffer-transform.js.map +1 -0
- package/dist/transform/texture-transform.d.ts +57 -0
- package/dist/transform/texture-transform.d.ts.map +1 -0
- package/dist/transform/texture-transform.js +122 -0
- package/dist/transform/texture-transform.js.map +1 -0
- package/dist.min.js +286 -0
- package/package.json +21 -12
- package/src/animation/timeline.ts +16 -15
- package/src/{lib → animation-loop}/animation-loop.ts +120 -107
- package/src/{lib → animation-loop}/animation-props.ts +5 -5
- package/src/animation-loop/make-animation-loop.ts +44 -0
- package/src/animation-loop/render-loop.ts +23 -0
- package/src/geometries/cone-geometry.ts +1 -1
- package/src/geometries/cube-geometry.ts +6 -3
- package/src/geometries/cylinder-geometry.ts +2 -2
- package/src/geometries/ico-sphere-geometry.ts +7 -6
- package/src/geometries/plane-geometry.ts +5 -4
- package/src/geometries/sphere-geometry.ts +4 -3
- package/src/geometries/truncated-cone-geometry.ts +4 -13
- package/src/geometry/geometry-table.ts +1 -1
- package/src/geometry/geometry-utils.ts +3 -3
- package/src/geometry/geometry.ts +79 -119
- package/src/geometry/gpu-geometry.ts +124 -0
- package/src/geometry/gpu-table.ts +41 -0
- package/src/index.ts +38 -12
- package/src/lib/clip-space.ts +22 -21
- package/src/lib/pipeline-factory.ts +60 -168
- package/src/model/model.ts +549 -0
- package/src/scenegraph/group-node.ts +103 -0
- package/src/scenegraph/model-node.ts +50 -0
- package/src/scenegraph/scenegraph-node.ts +204 -0
- package/src/shader-inputs.ts +132 -0
- package/src/transform/buffer-transform.ts +94 -0
- package/src/transform/texture-transform.ts +169 -0
- package/dist/bundle.d.ts +0 -2
- package/dist/bundle.d.ts.map +0 -1
- package/dist/bundle.js +0 -5
- package/dist/bundle.js.map +0 -1
- package/dist/geometry/primitive-utils.d.ts +0 -1
- package/dist/geometry/primitive-utils.d.ts.map +0 -1
- package/dist/geometry/primitive-utils.js +0 -2
- package/dist/geometry/primitive-utils.js.map +0 -1
- package/dist/lib/animation-loop.d.ts.map +0 -1
- package/dist/lib/animation-loop.js.map +0 -1
- package/dist/lib/animation-props.d.ts.map +0 -1
- package/dist/lib/animation-props.js.map +0 -1
- package/dist/lib/model-utils.d.ts +0 -5
- package/dist/lib/model-utils.d.ts.map +0 -1
- package/dist/lib/model-utils.js +0 -45
- package/dist/lib/model-utils.js.map +0 -1
- package/dist/lib/model.d.ts +0 -41
- package/dist/lib/model.d.ts.map +0 -1
- package/dist/lib/model.js +0 -176
- package/dist/lib/model.js.map +0 -1
- package/dist/lib/render-loop.d.ts +0 -14
- package/dist/lib/render-loop.d.ts.map +0 -1
- package/dist/lib/render-loop.js +0 -49
- package/dist/lib/render-loop.js.map +0 -1
- package/src/bundle.ts +0 -4
- package/src/geometry/primitive-utils.ts +0 -30
- package/src/lib/model-utils.ts +0 -124
- package/src/lib/model.ts +0 -179
- package/src/lib/render-loop.ts +0 -58
- /package/dist/{lib → animation-loop}/animation-props.js +0 -0
|
@@ -1,70 +1,54 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { isBrowser } from '@probe.gl/env';
|
|
5
|
-
const isPage = isBrowser() && typeof document !== 'undefined';
|
|
1
|
+
import { luma } from '@luma.gl/core';
|
|
2
|
+
import { requestAnimationFrame, cancelAnimationFrame } from '@luma.gl/core';
|
|
3
|
+
import { Stats } from '@probe.gl/stats';
|
|
6
4
|
let statIdCounter = 0;
|
|
7
5
|
const DEFAULT_ANIMATION_LOOP_PROPS = {
|
|
8
|
-
|
|
9
|
-
onAddHTML:
|
|
10
|
-
onInitialize: () =>
|
|
6
|
+
device: null,
|
|
7
|
+
onAddHTML: () => '',
|
|
8
|
+
onInitialize: async () => {
|
|
9
|
+
return null;
|
|
10
|
+
},
|
|
11
11
|
onRender: () => {},
|
|
12
12
|
onFinalize: () => {},
|
|
13
13
|
onError: error => console.error(error),
|
|
14
|
-
|
|
15
|
-
deviceProps: {},
|
|
16
|
-
debug: false,
|
|
17
|
-
stats: luma.stats.get("animation-loop-".concat(statIdCounter++)),
|
|
14
|
+
stats: luma.stats.get(`animation-loop-${statIdCounter++}`),
|
|
18
15
|
useDevicePixels: true,
|
|
19
|
-
autoResizeViewport:
|
|
20
|
-
autoResizeDrawingBuffer:
|
|
16
|
+
autoResizeViewport: false,
|
|
17
|
+
autoResizeDrawingBuffer: false
|
|
21
18
|
};
|
|
22
|
-
export
|
|
23
|
-
constructor(props
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
_defineProperty(this, "needsRedraw", 'initialized');
|
|
45
|
-
|
|
46
|
-
_defineProperty(this, "_initialized", false);
|
|
47
|
-
|
|
48
|
-
_defineProperty(this, "_running", false);
|
|
49
|
-
|
|
50
|
-
_defineProperty(this, "_animationFrameId", null);
|
|
51
|
-
|
|
52
|
-
_defineProperty(this, "_nextFramePromise", null);
|
|
53
|
-
|
|
54
|
-
_defineProperty(this, "_resolveNextFrame", null);
|
|
55
|
-
|
|
56
|
-
_defineProperty(this, "_cpuStartTime", 0);
|
|
57
|
-
|
|
58
|
-
this.props = { ...DEFAULT_ANIMATION_LOOP_PROPS,
|
|
19
|
+
export class AnimationLoop {
|
|
20
|
+
constructor(props) {
|
|
21
|
+
this.device = null;
|
|
22
|
+
this.canvas = null;
|
|
23
|
+
this.props = void 0;
|
|
24
|
+
this.animationProps = null;
|
|
25
|
+
this.timeline = null;
|
|
26
|
+
this.stats = void 0;
|
|
27
|
+
this.cpuTime = void 0;
|
|
28
|
+
this.gpuTime = void 0;
|
|
29
|
+
this.frameRate = void 0;
|
|
30
|
+
this.display = void 0;
|
|
31
|
+
this.needsRedraw = 'initialized';
|
|
32
|
+
this._initialized = false;
|
|
33
|
+
this._running = false;
|
|
34
|
+
this._animationFrameId = null;
|
|
35
|
+
this._nextFramePromise = null;
|
|
36
|
+
this._resolveNextFrame = null;
|
|
37
|
+
this._cpuStartTime = 0;
|
|
38
|
+
this.props = {
|
|
39
|
+
...DEFAULT_ANIMATION_LOOP_PROPS,
|
|
59
40
|
...props
|
|
60
41
|
};
|
|
61
42
|
props = this.props;
|
|
62
|
-
|
|
43
|
+
if (!props.device) {
|
|
44
|
+
throw new Error('No device provided');
|
|
45
|
+
}
|
|
46
|
+
const {
|
|
63
47
|
useDevicePixels = true
|
|
64
48
|
} = this.props;
|
|
65
|
-
this.
|
|
66
|
-
|
|
67
|
-
|
|
49
|
+
this.stats = props.stats || new Stats({
|
|
50
|
+
id: 'animation-loop-stats'
|
|
51
|
+
});
|
|
68
52
|
this.cpuTime = this.stats.get('CPU Time');
|
|
69
53
|
this.gpuTime = this.stats.get('GPU Time');
|
|
70
54
|
this.frameRate = this.stats.get('Frame Rate');
|
|
@@ -78,71 +62,49 @@ export default class AnimationLoop {
|
|
|
78
62
|
this._onMousemove = this._onMousemove.bind(this);
|
|
79
63
|
this._onMouseleave = this._onMouseleave.bind(this);
|
|
80
64
|
}
|
|
81
|
-
|
|
82
65
|
destroy() {
|
|
83
66
|
this.stop();
|
|
84
|
-
|
|
85
67
|
this._setDisplay(null);
|
|
86
68
|
}
|
|
87
|
-
|
|
88
69
|
delete() {
|
|
89
70
|
this.destroy();
|
|
90
71
|
}
|
|
91
|
-
|
|
92
72
|
setNeedsRedraw(reason) {
|
|
93
73
|
this.needsRedraw = this.needsRedraw || reason;
|
|
94
74
|
return this;
|
|
95
75
|
}
|
|
96
|
-
|
|
97
76
|
setProps(props) {
|
|
98
77
|
if ('autoResizeViewport' in props) {
|
|
99
|
-
this.props.autoResizeViewport = props.autoResizeViewport;
|
|
78
|
+
this.props.autoResizeViewport = props.autoResizeViewport || false;
|
|
100
79
|
}
|
|
101
|
-
|
|
102
80
|
if ('autoResizeDrawingBuffer' in props) {
|
|
103
|
-
this.props.autoResizeDrawingBuffer = props.autoResizeDrawingBuffer;
|
|
81
|
+
this.props.autoResizeDrawingBuffer = props.autoResizeDrawingBuffer || false;
|
|
104
82
|
}
|
|
105
|
-
|
|
106
83
|
if ('useDevicePixels' in props) {
|
|
107
|
-
this.props.useDevicePixels = props.useDevicePixels;
|
|
84
|
+
this.props.useDevicePixels = props.useDevicePixels || false;
|
|
108
85
|
}
|
|
109
|
-
|
|
110
86
|
return this;
|
|
111
87
|
}
|
|
112
|
-
|
|
113
88
|
async start() {
|
|
114
89
|
if (this._running) {
|
|
115
90
|
return this;
|
|
116
91
|
}
|
|
117
|
-
|
|
118
92
|
this._running = true;
|
|
119
|
-
|
|
120
93
|
try {
|
|
121
|
-
if (!this._running) {
|
|
122
|
-
return null;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
94
|
let appContext;
|
|
126
|
-
|
|
127
95
|
if (!this._initialized) {
|
|
128
96
|
this._initialized = true;
|
|
129
|
-
await this.
|
|
130
|
-
|
|
97
|
+
await this._initDevice();
|
|
131
98
|
this._initialize();
|
|
132
|
-
|
|
133
|
-
await this.onInitialize(this.animationProps);
|
|
99
|
+
await this.props.onInitialize(this._getAnimationProps());
|
|
134
100
|
}
|
|
135
|
-
|
|
136
101
|
if (!this._running) {
|
|
137
102
|
return null;
|
|
138
103
|
}
|
|
139
|
-
|
|
140
104
|
if (appContext !== false) {
|
|
141
105
|
this._cancelAnimationFrame();
|
|
142
|
-
|
|
143
106
|
this._requestAnimationFrame();
|
|
144
107
|
}
|
|
145
|
-
|
|
146
108
|
return this;
|
|
147
109
|
} catch (err) {
|
|
148
110
|
const error = err instanceof Error ? err : new Error('Unknown error');
|
|
@@ -150,171 +112,123 @@ export default class AnimationLoop {
|
|
|
150
112
|
throw error;
|
|
151
113
|
}
|
|
152
114
|
}
|
|
153
|
-
|
|
154
115
|
redraw() {
|
|
155
|
-
|
|
116
|
+
var _this$device;
|
|
117
|
+
if ((_this$device = this.device) !== null && _this$device !== void 0 && _this$device.isLost) {
|
|
156
118
|
return this;
|
|
157
119
|
}
|
|
158
|
-
|
|
159
|
-
this._beginTimers();
|
|
160
|
-
|
|
120
|
+
this._beginFrameTimers();
|
|
161
121
|
this._setupFrame();
|
|
162
|
-
|
|
163
|
-
this.
|
|
164
|
-
|
|
165
|
-
this._renderFrame(this.animationProps);
|
|
166
|
-
|
|
122
|
+
this._updateAnimationProps();
|
|
123
|
+
this._renderFrame(this._getAnimationProps());
|
|
167
124
|
this._clearNeedsRedraw();
|
|
168
|
-
|
|
169
125
|
if (this._resolveNextFrame) {
|
|
170
126
|
this._resolveNextFrame(this);
|
|
171
|
-
|
|
172
127
|
this._nextFramePromise = null;
|
|
173
128
|
this._resolveNextFrame = null;
|
|
174
129
|
}
|
|
175
|
-
|
|
176
|
-
this._endTimers();
|
|
177
|
-
|
|
130
|
+
this._endFrameTimers();
|
|
178
131
|
return this;
|
|
179
132
|
}
|
|
180
|
-
|
|
181
133
|
stop() {
|
|
182
134
|
if (this._running) {
|
|
183
|
-
|
|
184
|
-
|
|
135
|
+
if (this.animationProps) {
|
|
136
|
+
this.props.onFinalize(this.animationProps);
|
|
137
|
+
}
|
|
185
138
|
this._cancelAnimationFrame();
|
|
186
|
-
|
|
187
139
|
this._nextFramePromise = null;
|
|
188
140
|
this._resolveNextFrame = null;
|
|
189
141
|
this._running = false;
|
|
190
142
|
}
|
|
191
|
-
|
|
192
143
|
return this;
|
|
193
144
|
}
|
|
194
|
-
|
|
195
145
|
attachTimeline(timeline) {
|
|
196
146
|
this.timeline = timeline;
|
|
197
147
|
return this.timeline;
|
|
198
148
|
}
|
|
199
|
-
|
|
200
149
|
detachTimeline() {
|
|
201
150
|
this.timeline = null;
|
|
202
151
|
}
|
|
203
|
-
|
|
204
152
|
waitForRender() {
|
|
205
153
|
this.setNeedsRedraw('waitForRender');
|
|
206
|
-
|
|
207
154
|
if (!this._nextFramePromise) {
|
|
208
155
|
this._nextFramePromise = new Promise(resolve => {
|
|
209
156
|
this._resolveNextFrame = resolve;
|
|
210
157
|
});
|
|
211
158
|
}
|
|
212
|
-
|
|
213
159
|
return this._nextFramePromise;
|
|
214
160
|
}
|
|
215
|
-
|
|
216
161
|
async toDataURL() {
|
|
217
162
|
this.setNeedsRedraw('toDataURL');
|
|
218
163
|
await this.waitForRender();
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
return this.props.onCreateDevice(deviceProps);
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
onInitialize(animationProps) {
|
|
227
|
-
return this.props.onInitialize(animationProps);
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
onRender(animationProps) {
|
|
231
|
-
return this.props.onRender(animationProps);
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
onFinalize(animationProps) {
|
|
235
|
-
return this.props.onFinalize(animationProps);
|
|
164
|
+
if (this.canvas instanceof HTMLCanvasElement) {
|
|
165
|
+
return this.canvas.toDataURL();
|
|
166
|
+
}
|
|
167
|
+
throw new Error('OffscreenCanvas');
|
|
236
168
|
}
|
|
237
|
-
|
|
238
169
|
_initialize() {
|
|
239
170
|
this._startEventHandling();
|
|
240
|
-
|
|
241
|
-
this.
|
|
242
|
-
|
|
243
|
-
this._updateCallbackData();
|
|
244
|
-
|
|
171
|
+
this._initializeAnimationProps();
|
|
172
|
+
this._updateAnimationProps();
|
|
245
173
|
this._resizeCanvasDrawingBuffer();
|
|
246
|
-
|
|
247
174
|
this._resizeViewport();
|
|
248
175
|
}
|
|
249
|
-
|
|
250
176
|
_setDisplay(display) {
|
|
251
177
|
if (this.display) {
|
|
252
|
-
this.display.
|
|
178
|
+
this.display.destroy();
|
|
253
179
|
this.display.animationLoop = null;
|
|
254
180
|
}
|
|
255
|
-
|
|
256
181
|
if (display) {
|
|
257
182
|
display.animationLoop = this;
|
|
258
183
|
}
|
|
259
|
-
|
|
260
184
|
this.display = display;
|
|
261
185
|
}
|
|
262
|
-
|
|
263
186
|
_requestAnimationFrame() {
|
|
264
187
|
if (!this._running) {
|
|
265
188
|
return;
|
|
266
189
|
}
|
|
267
|
-
|
|
268
190
|
this._animationFrameId = requestAnimationFrame(this._animationFrame.bind(this));
|
|
269
191
|
}
|
|
270
|
-
|
|
271
192
|
_cancelAnimationFrame() {
|
|
272
|
-
if (this._animationFrameId
|
|
193
|
+
if (this._animationFrameId === null) {
|
|
273
194
|
return;
|
|
274
195
|
}
|
|
275
|
-
|
|
276
196
|
cancelAnimationFrame(this._animationFrameId);
|
|
277
197
|
this._animationFrameId = null;
|
|
278
198
|
}
|
|
279
|
-
|
|
280
199
|
_animationFrame() {
|
|
281
200
|
if (!this._running) {
|
|
282
201
|
return;
|
|
283
202
|
}
|
|
284
|
-
|
|
285
203
|
this.redraw();
|
|
286
|
-
|
|
287
204
|
this._requestAnimationFrame();
|
|
288
205
|
}
|
|
289
|
-
|
|
290
|
-
_renderFrame(props) {
|
|
206
|
+
_renderFrame(animationProps) {
|
|
291
207
|
if (this.display) {
|
|
292
|
-
this.display._renderFrame(
|
|
293
|
-
|
|
208
|
+
this.display._renderFrame(animationProps);
|
|
294
209
|
return;
|
|
295
210
|
}
|
|
296
|
-
|
|
297
|
-
this.onRender(props);
|
|
211
|
+
this.props.onRender(this._getAnimationProps());
|
|
298
212
|
}
|
|
299
|
-
|
|
300
213
|
_clearNeedsRedraw() {
|
|
301
|
-
this.needsRedraw =
|
|
214
|
+
this.needsRedraw = false;
|
|
302
215
|
}
|
|
303
|
-
|
|
304
216
|
_setupFrame() {
|
|
305
217
|
this._resizeCanvasDrawingBuffer();
|
|
306
|
-
|
|
307
218
|
this._resizeViewport();
|
|
308
219
|
}
|
|
309
|
-
|
|
310
|
-
|
|
220
|
+
_initializeAnimationProps() {
|
|
221
|
+
var _this$device2;
|
|
222
|
+
if (!this.device) {
|
|
223
|
+
throw new Error('loop');
|
|
224
|
+
}
|
|
311
225
|
this.animationProps = {
|
|
312
226
|
animationLoop: this,
|
|
313
227
|
device: this.device,
|
|
314
|
-
canvas: this.device.canvasContext.canvas,
|
|
228
|
+
canvas: (_this$device2 = this.device) === null || _this$device2 === void 0 || (_this$device2 = _this$device2.canvasContext) === null || _this$device2 === void 0 ? void 0 : _this$device2.canvas,
|
|
315
229
|
timeline: this.timeline,
|
|
316
230
|
useDevicePixels: this.props.useDevicePixels,
|
|
317
|
-
needsRedraw:
|
|
231
|
+
needsRedraw: false,
|
|
318
232
|
width: 1,
|
|
319
233
|
height: 1,
|
|
320
234
|
aspect: 1,
|
|
@@ -326,47 +240,47 @@ export default class AnimationLoop {
|
|
|
326
240
|
_mousePosition: null
|
|
327
241
|
};
|
|
328
242
|
}
|
|
329
|
-
|
|
330
|
-
|
|
243
|
+
_getAnimationProps() {
|
|
244
|
+
if (!this.animationProps) {
|
|
245
|
+
throw new Error('animationProps');
|
|
246
|
+
}
|
|
247
|
+
return this.animationProps;
|
|
248
|
+
}
|
|
249
|
+
_updateAnimationProps() {
|
|
250
|
+
if (!this.animationProps) {
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
331
253
|
const {
|
|
332
254
|
width,
|
|
333
255
|
height,
|
|
334
256
|
aspect
|
|
335
257
|
} = this._getSizeAndAspect();
|
|
336
|
-
|
|
337
258
|
if (width !== this.animationProps.width || height !== this.animationProps.height) {
|
|
338
259
|
this.setNeedsRedraw('drawing buffer resized');
|
|
339
260
|
}
|
|
340
|
-
|
|
341
261
|
if (aspect !== this.animationProps.aspect) {
|
|
342
262
|
this.setNeedsRedraw('drawing buffer aspect changed');
|
|
343
263
|
}
|
|
344
|
-
|
|
345
264
|
this.animationProps.width = width;
|
|
346
265
|
this.animationProps.height = height;
|
|
347
266
|
this.animationProps.aspect = aspect;
|
|
348
267
|
this.animationProps.needsRedraw = this.needsRedraw;
|
|
349
268
|
this.animationProps.engineTime = Date.now() - this.animationProps.startTime;
|
|
350
|
-
|
|
351
269
|
if (this.timeline) {
|
|
352
270
|
this.timeline.update(this.animationProps.engineTime);
|
|
353
271
|
}
|
|
354
|
-
|
|
355
272
|
this.animationProps.tick = Math.floor(this.animationProps.time / 1000 * 60);
|
|
356
273
|
this.animationProps.tock++;
|
|
357
274
|
this.animationProps.time = this.timeline ? this.timeline.getTime() : this.animationProps.engineTime;
|
|
358
275
|
}
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
this.canvas = this.device.canvasContext.canvas;
|
|
366
|
-
|
|
367
|
-
this._createInfoDiv();
|
|
276
|
+
async _initDevice() {
|
|
277
|
+
var _this$device$canvasCo;
|
|
278
|
+
this.device = await this.props.device;
|
|
279
|
+
if (!this.device) {
|
|
280
|
+
throw new Error('No device provided');
|
|
281
|
+
}
|
|
282
|
+
this.canvas = ((_this$device$canvasCo = this.device.canvasContext) === null || _this$device$canvasCo === void 0 ? void 0 : _this$device$canvasCo.canvas) || null;
|
|
368
283
|
}
|
|
369
|
-
|
|
370
284
|
_createInfoDiv() {
|
|
371
285
|
if (this.canvas && this.props.onAddHTML) {
|
|
372
286
|
const wrapperDiv = document.createElement('div');
|
|
@@ -378,71 +292,73 @@ export default class AnimationLoop {
|
|
|
378
292
|
div.style.bottom = '10px';
|
|
379
293
|
div.style.width = '300px';
|
|
380
294
|
div.style.background = 'white';
|
|
381
|
-
|
|
295
|
+
if (this.canvas instanceof HTMLCanvasElement) {
|
|
296
|
+
wrapperDiv.appendChild(this.canvas);
|
|
297
|
+
}
|
|
382
298
|
wrapperDiv.appendChild(div);
|
|
383
299
|
const html = this.props.onAddHTML(div);
|
|
384
|
-
|
|
385
300
|
if (html) {
|
|
386
301
|
div.innerHTML = html;
|
|
387
302
|
}
|
|
388
303
|
}
|
|
389
304
|
}
|
|
390
|
-
|
|
391
305
|
_getSizeAndAspect() {
|
|
392
|
-
|
|
306
|
+
var _this$device3, _this$device4;
|
|
307
|
+
if (!this.device) {
|
|
308
|
+
return {
|
|
309
|
+
width: 1,
|
|
310
|
+
height: 1,
|
|
311
|
+
aspect: 1
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
const [width, height] = ((_this$device3 = this.device) === null || _this$device3 === void 0 || (_this$device3 = _this$device3.canvasContext) === null || _this$device3 === void 0 ? void 0 : _this$device3.getPixelSize()) || [1, 1];
|
|
393
315
|
let aspect = 1;
|
|
394
|
-
const canvas = this.device.canvasContext.canvas;
|
|
395
|
-
|
|
316
|
+
const canvas = (_this$device4 = this.device) === null || _this$device4 === void 0 || (_this$device4 = _this$device4.canvasContext) === null || _this$device4 === void 0 ? void 0 : _this$device4.canvas;
|
|
396
317
|
if (canvas && canvas.clientHeight) {
|
|
397
318
|
aspect = canvas.clientWidth / canvas.clientHeight;
|
|
398
319
|
} else if (width > 0 && height > 0) {
|
|
399
320
|
aspect = width / height;
|
|
400
321
|
}
|
|
401
|
-
|
|
402
322
|
return {
|
|
403
323
|
width,
|
|
404
324
|
height,
|
|
405
325
|
aspect
|
|
406
326
|
};
|
|
407
327
|
}
|
|
408
|
-
|
|
409
328
|
_resizeViewport() {
|
|
410
329
|
if (this.props.autoResizeViewport && this.device.gl) {
|
|
411
330
|
this.device.gl.viewport(0, 0, this.device.gl.drawingBufferWidth, this.device.gl.drawingBufferHeight);
|
|
412
331
|
}
|
|
413
332
|
}
|
|
414
|
-
|
|
415
333
|
_resizeCanvasDrawingBuffer() {
|
|
416
334
|
if (this.props.autoResizeDrawingBuffer) {
|
|
417
|
-
|
|
335
|
+
var _this$device5;
|
|
336
|
+
(_this$device5 = this.device) === null || _this$device5 === void 0 || (_this$device5 = _this$device5.canvasContext) === null || _this$device5 === void 0 ? void 0 : _this$device5.resize({
|
|
418
337
|
useDevicePixels: this.props.useDevicePixels
|
|
419
338
|
});
|
|
420
339
|
}
|
|
421
340
|
}
|
|
422
|
-
|
|
423
|
-
_beginTimers() {
|
|
341
|
+
_beginFrameTimers() {
|
|
424
342
|
this.frameRate.timeEnd();
|
|
425
343
|
this.frameRate.timeStart();
|
|
344
|
+
this.cpuTime.timeStart();
|
|
426
345
|
}
|
|
427
|
-
|
|
428
|
-
_endTimers() {
|
|
346
|
+
_endFrameTimers() {
|
|
429
347
|
this.cpuTime.timeEnd();
|
|
430
348
|
}
|
|
431
|
-
|
|
432
349
|
_startEventHandling() {
|
|
433
350
|
if (this.canvas) {
|
|
434
|
-
this.canvas.addEventListener('mousemove', this._onMousemove);
|
|
435
|
-
this.canvas.addEventListener('mouseleave', this._onMouseleave);
|
|
351
|
+
this.canvas.addEventListener('mousemove', this._onMousemove.bind(this));
|
|
352
|
+
this.canvas.addEventListener('mouseleave', this._onMouseleave.bind(this));
|
|
436
353
|
}
|
|
437
354
|
}
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
355
|
+
_onMousemove(event) {
|
|
356
|
+
if (event instanceof MouseEvent) {
|
|
357
|
+
this._getAnimationProps()._mousePosition = [event.offsetX, event.offsetY];
|
|
358
|
+
}
|
|
441
359
|
}
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
this.animationProps._mousePosition = null;
|
|
360
|
+
_onMouseleave(event) {
|
|
361
|
+
this._getAnimationProps()._mousePosition = null;
|
|
445
362
|
}
|
|
446
|
-
|
|
447
363
|
}
|
|
448
364
|
//# sourceMappingURL=animation-loop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animation-loop.js","names":["luma","requestAnimationFrame","cancelAnimationFrame","Stats","statIdCounter","DEFAULT_ANIMATION_LOOP_PROPS","device","onAddHTML","onInitialize","onRender","onFinalize","onError","error","console","stats","get","useDevicePixels","autoResizeViewport","autoResizeDrawingBuffer","AnimationLoop","constructor","props","canvas","animationProps","timeline","cpuTime","gpuTime","frameRate","display","needsRedraw","_initialized","_running","_animationFrameId","_nextFramePromise","_resolveNextFrame","_cpuStartTime","Error","id","setProps","start","bind","stop","_onMousemove","_onMouseleave","destroy","_setDisplay","delete","setNeedsRedraw","reason","appContext","_initDevice","_initialize","_getAnimationProps","_cancelAnimationFrame","_requestAnimationFrame","err","redraw","_this$device","isLost","_beginFrameTimers","_setupFrame","_updateAnimationProps","_renderFrame","_clearNeedsRedraw","_endFrameTimers","attachTimeline","detachTimeline","waitForRender","Promise","resolve","toDataURL","HTMLCanvasElement","_startEventHandling","_initializeAnimationProps","_resizeCanvasDrawingBuffer","_resizeViewport","animationLoop","_animationFrame","_this$device2","canvasContext","width","height","aspect","time","startTime","Date","now","engineTime","tick","tock","_mousePosition","_getSizeAndAspect","update","Math","floor","getTime","_this$device$canvasCo","_createInfoDiv","wrapperDiv","document","createElement","body","appendChild","style","position","div","left","bottom","background","html","innerHTML","_this$device3","_this$device4","getPixelSize","clientHeight","clientWidth","gl","viewport","drawingBufferWidth","drawingBufferHeight","_this$device5","resize","timeEnd","timeStart","addEventListener","event","MouseEvent","offsetX","offsetY"],"sources":["../../src/animation-loop/animation-loop.ts"],"sourcesContent":["// luma.gl, MIT license\n// Copyright (c) vis.gl contributors\n\nimport {luma, Device} from '@luma.gl/core';\nimport {requestAnimationFrame, cancelAnimationFrame} from '@luma.gl/core';\nimport {Timeline} from '../animation/timeline';\nimport {AnimationProps} from './animation-props';\nimport {Stats, Stat} from '@probe.gl/stats';\n\nlet statIdCounter = 0;\n\n/** AnimationLoop properties */\nexport type AnimationLoopProps = {\n device: Device | Promise<Device>;\n\n onAddHTML?: (div: HTMLDivElement) => string; // innerHTML\n onInitialize?: (animationProps: AnimationProps) => Promise<unknown>;\n onRender?: (animationProps: AnimationProps) => unknown;\n onFinalize?: (animationProps: AnimationProps) => void;\n onError?: (reason: Error) => void;\n\n stats?: Stats;\n\n // view parameters - TODO move to CanvasContext?\n autoResizeViewport?: boolean;\n autoResizeDrawingBuffer?: boolean;\n useDevicePixels?: number | boolean;\n};\n\nexport type MutableAnimationLoopProps = {\n // view parameters\n autoResizeViewport?: boolean;\n autoResizeDrawingBuffer?: boolean;\n useDevicePixels?: number | boolean;\n}\n\n\nconst DEFAULT_ANIMATION_LOOP_PROPS: Required<AnimationLoopProps> = {\n device: null!,\n\n onAddHTML: () => '',\n onInitialize: async () => { return null; },\n onRender: () => {},\n onFinalize: () => {},\n onError: (error) => console.error(error), // eslint-disable-line no-console\n\n stats: luma.stats.get(`animation-loop-${statIdCounter++}`),\n\n // view parameters\n useDevicePixels: true,\n autoResizeViewport: false,\n autoResizeDrawingBuffer: false,\n};\n\n/** Convenient animation loop */\nexport class AnimationLoop {\n device: Device | null = null;\n canvas: HTMLCanvasElement | OffscreenCanvas | null = null;\n\n props: Required<AnimationLoopProps>;\n animationProps: AnimationProps | null = null;\n timeline: Timeline | null = null;\n stats: Stats;\n cpuTime: Stat;\n gpuTime: Stat;\n frameRate: Stat;\n\n display: any;\n\n needsRedraw: string | false = 'initialized';\n\n _initialized: boolean = false;\n _running: boolean = false;\n _animationFrameId: any = null;\n _nextFramePromise: Promise<AnimationLoop> | null = null;\n _resolveNextFrame: ((animationLoop: AnimationLoop) => void) | null = null;\n _cpuStartTime: number = 0;\n\n // _gpuTimeQuery: Query | null = null;\n\n /*\n * @param {HTMLCanvasElement} canvas - if provided, width and height will be passed to context\n */\n constructor(props: AnimationLoopProps) {\n this.props = {...DEFAULT_ANIMATION_LOOP_PROPS, ...props};\n props = this.props;\n\n if (!props.device) {\n throw new Error('No device provided');\n }\n\n const {useDevicePixels = true} = this.props;\n\n // state\n this.stats = props.stats || new Stats({id: 'animation-loop-stats'});\n this.cpuTime = this.stats.get('CPU Time');\n this.gpuTime = this.stats.get('GPU Time');\n this.frameRate = this.stats.get('Frame Rate');\n\n this.setProps({\n autoResizeViewport: props.autoResizeViewport,\n autoResizeDrawingBuffer: props.autoResizeDrawingBuffer,\n useDevicePixels\n });\n\n // Bind methods\n this.start = this.start.bind(this);\n this.stop = this.stop.bind(this);\n\n this._onMousemove = this._onMousemove.bind(this);\n this._onMouseleave = this._onMouseleave.bind(this);\n }\n\n destroy(): void {\n this.stop();\n this._setDisplay(null);\n }\n\n /** @deprecated Use .destroy() */\n delete(): void {\n this.destroy();\n }\n\n setNeedsRedraw(reason: string): this {\n this.needsRedraw = this.needsRedraw || reason;\n return this;\n }\n\n // TODO - move to CanvasContext\n setProps(props: MutableAnimationLoopProps): this {\n if ('autoResizeViewport' in props) {\n this.props.autoResizeViewport = props.autoResizeViewport || false;\n }\n if ('autoResizeDrawingBuffer' in props) {\n this.props.autoResizeDrawingBuffer = props.autoResizeDrawingBuffer || false;\n }\n if ('useDevicePixels' in props) {\n this.props.useDevicePixels = props.useDevicePixels || false;\n }\n return this;\n }\n\n /** Starts a render loop if not already running */\n async start() {\n if (this._running) {\n return this;\n }\n this._running = true;\n\n try {\n\n let appContext;\n if (!this._initialized) {\n this._initialized = true;\n // Create the WebGL context\n await this._initDevice();\n this._initialize();\n\n // Note: onIntialize can return a promise (e.g. in case app needs to load resources)\n await this.props.onInitialize(this._getAnimationProps());\n }\n\n // check that we haven't been stopped\n if (!this._running) {\n return null;\n }\n\n // Start the loop\n if (appContext !== false) {\n // cancel any pending renders to ensure only one loop can ever run\n this._cancelAnimationFrame();\n this._requestAnimationFrame();\n }\n\n return this;\n } catch (err: unknown) {\n const error = err instanceof Error ? err : new Error('Unknown error')\n this.props.onError(error);\n // this._running = false; // TODO\n throw error;\n }\n }\n\n /** Explicitly draw a frame */\n redraw(): this {\n if (this.device?.isLost) {\n return this;\n }\n\n this._beginFrameTimers();\n\n this._setupFrame();\n this._updateAnimationProps();\n\n this._renderFrame(this._getAnimationProps());\n\n // clear needsRedraw flag\n this._clearNeedsRedraw();\n\n if (this._resolveNextFrame) {\n this._resolveNextFrame(this);\n this._nextFramePromise = null;\n this._resolveNextFrame = null;\n }\n\n this._endFrameTimers();\n\n return this;\n }\n\n // Stops a render loop if already running, finalizing\n stop() {\n // console.debug(`Stopping ${this.constructor.name}`);\n if (this._running) {\n // call callback\n // If stop is called immediately, we can end up in a state where props haven't been initialized...\n if (this.animationProps) {\n this.props.onFinalize(this.animationProps);\n }\n\n this._cancelAnimationFrame();\n this._nextFramePromise = null;\n this._resolveNextFrame = null;\n this._running = false;\n }\n return this;\n }\n\n attachTimeline(timeline: Timeline): Timeline {\n this.timeline = timeline;\n return this.timeline;\n }\n\n detachTimeline(): void {\n this.timeline = null;\n }\n\n waitForRender(): Promise<AnimationLoop> {\n this.setNeedsRedraw('waitForRender');\n\n if (!this._nextFramePromise) {\n this._nextFramePromise = new Promise((resolve) => {\n this._resolveNextFrame = resolve;\n });\n }\n return this._nextFramePromise;\n }\n\n async toDataURL(): Promise<string> {\n this.setNeedsRedraw('toDataURL');\n await this.waitForRender();\n if (this.canvas instanceof HTMLCanvasElement) {\n return this.canvas.toDataURL();\n }\n throw new Error('OffscreenCanvas');\n }\n\n // PRIVATE METHODS\n\n _initialize() {\n this._startEventHandling();\n\n // Initialize the callback data\n this._initializeAnimationProps();\n this._updateAnimationProps();\n\n // Default viewport setup, in case onInitialize wants to render\n this._resizeCanvasDrawingBuffer();\n this._resizeViewport();\n\n // this._gpuTimeQuery = Query.isSupported(this.gl, ['timers']) ? new Query(this.gl) : null;\n }\n\n _setDisplay(display: any) {\n if (this.display) {\n this.display.destroy();\n this.display.animationLoop = null;\n }\n\n // store animation loop on the display\n if (display) {\n display.animationLoop = this;\n }\n\n this.display = display;\n }\n\n _requestAnimationFrame() {\n if (!this._running) {\n return;\n }\n\n // VR display has a separate animation frame to sync with headset\n // TODO WebVR API discontinued, replaced by WebXR: https://immersive-web.github.io/webxr/\n // See https://developer.mozilla.org/en-US/docs/Web/API/VRDisplay/requestAnimationFrame\n // if (this.display && this.display.requestAnimationFrame) {\n // this._animationFrameId = this.display.requestAnimationFrame(this._animationFrame.bind(this));\n // }\n this._animationFrameId = requestAnimationFrame(this._animationFrame.bind(this));\n }\n\n _cancelAnimationFrame() {\n if (this._animationFrameId === null) {\n return;\n }\n\n // VR display has a separate animation frame to sync with headset\n // TODO WebVR API discontinued, replaced by WebXR: https://immersive-web.github.io/webxr/\n // See https://developer.mozilla.org/en-US/docs/Web/API/VRDisplay/requestAnimationFrame\n // if (this.display && this.display.cancelAnimationFrame) {\n // this.display.cancelAnimationFrame(this._animationFrameId);\n // }\n cancelAnimationFrame(this._animationFrameId);\n this._animationFrameId = null;\n }\n\n _animationFrame() {\n if (!this._running) {\n return;\n }\n this.redraw();\n this._requestAnimationFrame();\n }\n\n // Called on each frame, can be overridden to call onRender multiple times\n // to support e.g. stereoscopic rendering\n _renderFrame(animationProps: AnimationProps) {\n // Allow e.g. VR display to render multiple frames.\n if (this.display) {\n this.display._renderFrame(animationProps);\n return;\n }\n\n // call callback\n this.props.onRender(this._getAnimationProps());\n // end callback\n }\n\n _clearNeedsRedraw() {\n this.needsRedraw = false;\n }\n\n _setupFrame() {\n this._resizeCanvasDrawingBuffer();\n this._resizeViewport();\n }\n\n // Initialize the object that will be passed to app callbacks\n _initializeAnimationProps() {\n if (!this.device) {\n throw new Error('loop');\n }\n this.animationProps = {\n animationLoop: this,\n\n device: this.device,\n canvas: this.device?.canvasContext?.canvas,\n timeline: this.timeline,\n\n // Initial values\n useDevicePixels: this.props.useDevicePixels,\n needsRedraw: false,\n\n // Placeholders\n width: 1,\n height: 1,\n aspect: 1,\n\n // Animation props\n time: 0,\n startTime: Date.now(),\n engineTime: 0,\n tick: 0,\n tock: 0,\n\n // Experimental\n _mousePosition: null // Event props\n };\n }\n\n _getAnimationProps(): AnimationProps {\n if (!this.animationProps) {\n throw new Error('animationProps');\n }\n return this.animationProps;\n }\n\n // Update the context object that will be passed to app callbacks\n _updateAnimationProps(): void {\n if (!this.animationProps) {\n return;\n }\n\n // Can this be replaced with canvas context?\n const {width, height, aspect} = this._getSizeAndAspect();\n if (width !== this.animationProps.width || height !== this.animationProps.height) {\n this.setNeedsRedraw('drawing buffer resized');\n }\n if (aspect !== this.animationProps.aspect) {\n this.setNeedsRedraw('drawing buffer aspect changed');\n }\n\n this.animationProps.width = width;\n this.animationProps.height = height;\n this.animationProps.aspect = aspect;\n\n this.animationProps.needsRedraw = this.needsRedraw;\n\n // Update time properties\n this.animationProps.engineTime = Date.now() - this.animationProps.startTime;\n\n if (this.timeline) {\n this.timeline.update(this.animationProps.engineTime);\n }\n\n this.animationProps.tick = Math.floor((this.animationProps.time / 1000) * 60);\n this.animationProps.tock++;\n\n // For back compatibility\n this.animationProps.time = this.timeline\n ? this.timeline.getTime()\n : this.animationProps.engineTime;\n }\n\n /** Wait for supplied device */\n async _initDevice() {\n this.device = await this.props.device;\n if (!this.device) {\n throw new Error('No device provided');\n }\n this.canvas = this.device.canvasContext?.canvas || null;\n // this._createInfoDiv();\n }\n\n _createInfoDiv() {\n if (this.canvas && this.props.onAddHTML) {\n const wrapperDiv = document.createElement('div');\n document.body.appendChild(wrapperDiv);\n wrapperDiv.style.position = 'relative';\n const div = document.createElement('div');\n div.style.position = 'absolute';\n div.style.left = '10px';\n div.style.bottom = '10px';\n div.style.width = '300px';\n div.style.background = 'white';\n if (this.canvas instanceof HTMLCanvasElement) {\n wrapperDiv.appendChild(this.canvas);\n }\n wrapperDiv.appendChild(div);\n const html = this.props.onAddHTML(div);\n if (html) {\n div.innerHTML = html;\n }\n }\n }\n\n _getSizeAndAspect(): {width: number; height: number; aspect: number} {\n if (!this.device) {\n return {width: 1, height: 1, aspect: 1};\n }\n // https://webglfundamentals.org/webgl/lessons/webgl-resizing-the-canvas.html\n const [width, height] = this.device?.canvasContext?.getPixelSize() || [1, 1];\n\n // https://webglfundamentals.org/webgl/lessons/webgl-anti-patterns.html\n let aspect = 1;\n const canvas = this.device?.canvasContext?.canvas;\n\n // @ts-expect-error\n if (canvas && canvas.clientHeight) {\n // @ts-expect-error\n aspect = canvas.clientWidth / canvas.clientHeight;\n } else if (width > 0 && height > 0) {\n aspect = width / height;\n }\n\n return {width, height, aspect};\n }\n\n /** Default viewport setup */\n _resizeViewport() {\n // @ts-expect-error Expose on canvasContext\n if (this.props.autoResizeViewport && this.device.gl) {\n // @ts-expect-error Expose canvasContext\n this.device.gl.viewport(0, 0, this.device.gl.drawingBufferWidth, this.device.gl.drawingBufferHeight);\n }\n }\n\n /**\n * Resize the render buffer of the canvas to match canvas client size\n * Optionally multiplying with devicePixel ratio\n */\n _resizeCanvasDrawingBuffer() {\n if (this.props.autoResizeDrawingBuffer) {\n this.device?.canvasContext?.resize({useDevicePixels: this.props.useDevicePixels});\n }\n }\n\n _beginFrameTimers() {\n this.frameRate.timeEnd();\n this.frameRate.timeStart();\n\n // Check if timer for last frame has completed.\n // GPU timer results are never available in the same\n // frame they are captured.\n // if (\n // this._gpuTimeQuery &&\n // this._gpuTimeQuery.isResultAvailable() &&\n // !this._gpuTimeQuery.isTimerDisjoint()\n // ) {\n // this.stats.get('GPU Time').addTime(this._gpuTimeQuery.getTimerMilliseconds());\n // }\n\n // if (this._gpuTimeQuery) {\n // // GPU time query start\n // this._gpuTimeQuery.beginTimeElapsedQuery();\n // }\n\n this.cpuTime.timeStart();\n }\n\n _endFrameTimers() {\n this.cpuTime.timeEnd();\n\n // if (this._gpuTimeQuery) {\n // // GPU time query end. Results will be available on next frame.\n // this._gpuTimeQuery.end();\n // }\n }\n\n // Event handling\n\n _startEventHandling() {\n if (this.canvas) {\n this.canvas.addEventListener('mousemove', this._onMousemove.bind(this));\n this.canvas.addEventListener('mouseleave', this._onMouseleave.bind(this));\n }\n }\n\n _onMousemove(event: Event) {\n if (event instanceof MouseEvent) {\n this._getAnimationProps()._mousePosition = [event.offsetX, event.offsetY];\n }\n }\n\n _onMouseleave(event: Event) {\n this._getAnimationProps()._mousePosition = null;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
import { Device } from '@luma.gl/api';
|
|
1
|
+
import { Device } from '@luma.gl/core';
|
|
3
2
|
import { Timeline } from '../animation/timeline';
|
|
4
|
-
import type AnimationLoop from './animation-loop';
|
|
3
|
+
import type { AnimationLoop } from './animation-loop';
|
|
5
4
|
/** Properties passed to every render frame */
|
|
6
|
-
export
|
|
5
|
+
export type AnimationProps = {
|
|
7
6
|
device: Device;
|
|
8
7
|
animationLoop: AnimationLoop;
|
|
9
8
|
/** @todo Should be canvasContext */
|
|
@@ -17,8 +16,8 @@ export declare type AnimationProps = {
|
|
|
17
16
|
engineTime: number;
|
|
18
17
|
tick: number;
|
|
19
18
|
tock: number;
|
|
20
|
-
needsRedraw?: string;
|
|
21
|
-
timeline: Timeline;
|
|
22
|
-
_mousePosition?: [number, number];
|
|
19
|
+
needsRedraw?: string | false;
|
|
20
|
+
timeline: Timeline | null;
|
|
21
|
+
_mousePosition?: [number, number] | null;
|
|
23
22
|
};
|
|
24
23
|
//# sourceMappingURL=animation-props.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animation-props.d.ts","sourceRoot":"","sources":["../../src/animation-loop/animation-props.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,eAAe,CAAC;AACrC,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAC9C,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAEpD,+CAA+C;AAC/C,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,aAAa,CAAC;IAE7B,oCAAoC;IACpC,MAAM,EAAE,iBAAiB,GAAG,eAAe,CAAC;IAC5C,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IAGf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IAGb,WAAW,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAE7B,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAG1B,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;CAC1C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animation-props.js","names":[],"sources":["../../src/animation-loop/animation-props.ts"],"sourcesContent":["import {Device} from '@luma.gl/core';\nimport {Timeline} from '../animation/timeline'\nimport type {AnimationLoop} from './animation-loop';\n\n/** Properties passed to every render frame */\nexport type AnimationProps = {\n device: Device;\n animationLoop: AnimationLoop;\n\n /** @todo Should be canvasContext */\n canvas: HTMLCanvasElement | OffscreenCanvas;\n useDevicePixels: number | boolean;\n width: number;\n height: number;\n aspect: number;\n\n // Animation props\n time: number;\n startTime: number;\n engineTime: number;\n tick: number;\n tock: number;\n\n // Initial values\n needsRedraw?: string | false;\n\n timeline: Timeline | null;\n\n // Experimental\n _mousePosition?: [number, number] | null; // [offsetX, offsetY],\n};\n"],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { AnimationLoopTemplate } from './render-loop';
|
|
2
|
+
import { AnimationLoop, AnimationLoopProps } from './animation-loop';
|
|
3
|
+
export type MakeAnimationLoopProps = Omit<AnimationLoopProps, 'onCreateDevice' | 'onInitialize' | 'onRedraw' | 'onFinalize'>;
|
|
4
|
+
/** Instantiates and runs the render loop */
|
|
5
|
+
export declare function makeAnimationLoop(AnimationLoopTemplateCtor: typeof AnimationLoopTemplate, props?: MakeAnimationLoopProps): AnimationLoop;
|
|
6
|
+
//# sourceMappingURL=make-animation-loop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"make-animation-loop.d.ts","sourceRoot":"","sources":["../../src/animation-loop/make-animation-loop.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,qBAAqB,EAAC,MAAM,eAAe,CAAA;AACnD,OAAO,EAAC,aAAa,EAAE,kBAAkB,EAAC,MAAM,kBAAkB,CAAA;AAGlE,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,kBAAkB,EAAE,gBAAgB,GAAG,cAAc,GAAG,UAAU,GAAG,YAAY,CAAC,CAAC;AAE7H,4CAA4C;AAC5C,wBAAgB,iBAAiB,CAAC,yBAAyB,EAAE,OAAO,qBAAqB,EAAE,KAAK,CAAC,EAAE,sBAAsB,GAAG,aAAa,CAkCxI"}
|