@luma.gl/engine 9.0.0-alpha.15 → 9.0.0-alpha.16

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.
Files changed (172) hide show
  1. package/dist/animation/key-frames.d.ts +1 -1
  2. package/dist/animation/key-frames.d.ts.map +1 -1
  3. package/dist/animation/key-frames.js +51 -72
  4. package/dist/animation/timeline.d.ts +4 -4
  5. package/dist/animation/timeline.d.ts.map +1 -1
  6. package/dist/animation/timeline.js +94 -131
  7. package/dist/animation-loop/animation-loop.d.ts +2 -3
  8. package/dist/animation-loop/animation-loop.d.ts.map +1 -1
  9. package/dist/animation-loop/animation-loop.js +414 -473
  10. package/dist/animation-loop/animation-props.d.ts +1 -2
  11. package/dist/animation-loop/animation-props.d.ts.map +1 -1
  12. package/dist/animation-loop/animation-props.js +0 -1
  13. package/dist/animation-loop/make-animation-loop.d.ts +1 -1
  14. package/dist/animation-loop/make-animation-loop.d.ts.map +1 -1
  15. package/dist/animation-loop/make-animation-loop.js +26 -31
  16. package/dist/animation-loop/render-loop.js +17 -7
  17. package/dist/bundle.js +2 -2
  18. package/dist/dist.min.js +31 -0
  19. package/dist/es5/animation/key-frames.js +84 -0
  20. package/dist/es5/animation/key-frames.js.map +1 -0
  21. package/dist/es5/animation/timeline.js +183 -0
  22. package/dist/es5/animation/timeline.js.map +1 -0
  23. package/dist/es5/animation-loop/animation-loop.js +534 -0
  24. package/dist/es5/animation-loop/animation-loop.js.map +1 -0
  25. package/dist/es5/animation-loop/animation-props.js +2 -0
  26. package/dist/es5/animation-loop/animation-props.js.map +1 -0
  27. package/dist/es5/animation-loop/make-animation-loop.js +53 -0
  28. package/dist/es5/animation-loop/make-animation-loop.js.map +1 -0
  29. package/dist/es5/animation-loop/render-loop.js +39 -0
  30. package/dist/es5/animation-loop/render-loop.js.map +1 -0
  31. package/dist/es5/bundle.js +6 -0
  32. package/dist/es5/bundle.js.map +1 -0
  33. package/dist/es5/geometries/cone-geometry.js +43 -0
  34. package/dist/es5/geometries/cone-geometry.js.map +1 -0
  35. package/dist/es5/geometries/cube-geometry.js +84 -0
  36. package/dist/es5/geometries/cube-geometry.js.map +1 -0
  37. package/dist/es5/geometries/cylinder-geometry.js +39 -0
  38. package/dist/es5/geometries/cylinder-geometry.js.map +1 -0
  39. package/dist/es5/geometries/ico-sphere-geometry.js +185 -0
  40. package/dist/es5/geometries/ico-sphere-geometry.js.map +1 -0
  41. package/dist/es5/geometries/plane-geometry.js +137 -0
  42. package/dist/es5/geometries/plane-geometry.js.map +1 -0
  43. package/dist/es5/geometries/sphere-geometry.js +120 -0
  44. package/dist/es5/geometries/sphere-geometry.js.map +1 -0
  45. package/dist/es5/geometries/truncated-cone-geometry.js +160 -0
  46. package/dist/es5/geometries/truncated-cone-geometry.js.map +1 -0
  47. package/dist/es5/geometry/geometry-table.js +2 -0
  48. package/dist/es5/geometry/geometry-table.js.map +1 -0
  49. package/dist/es5/geometry/geometry-utils.js +39 -0
  50. package/dist/es5/geometry/geometry-utils.js.map +1 -0
  51. package/dist/es5/geometry/geometry.js +150 -0
  52. package/dist/es5/geometry/geometry.js.map +1 -0
  53. package/dist/es5/geometry/primitive-utils.js +2 -0
  54. package/dist/es5/geometry/primitive-utils.js.map +1 -0
  55. package/dist/es5/index.js +112 -0
  56. package/dist/es5/index.js.map +1 -0
  57. package/dist/es5/lib/clip-space.js +2 -0
  58. package/dist/es5/lib/clip-space.js.map +1 -0
  59. package/dist/es5/lib/model-utils.js +52 -0
  60. package/dist/es5/lib/model-utils.js.map +1 -0
  61. package/dist/es5/lib/model.js +173 -0
  62. package/dist/es5/lib/model.js.map +1 -0
  63. package/dist/es5/lib/pipeline-factory.js +244 -0
  64. package/dist/es5/lib/pipeline-factory.js.map +1 -0
  65. package/dist/esm/animation/key-frames.js +57 -0
  66. package/dist/esm/animation/key-frames.js.map +1 -0
  67. package/dist/esm/animation/timeline.js +113 -0
  68. package/dist/esm/animation/timeline.js.map +1 -0
  69. package/dist/esm/animation-loop/animation-loop.js +367 -0
  70. package/dist/esm/animation-loop/animation-loop.js.map +1 -0
  71. package/dist/esm/animation-loop/animation-props.js +2 -0
  72. package/dist/esm/animation-loop/animation-props.js.map +1 -0
  73. package/dist/esm/animation-loop/make-animation-loop.js +28 -0
  74. package/dist/esm/animation-loop/make-animation-loop.js.map +1 -0
  75. package/dist/esm/animation-loop/render-loop.js +7 -0
  76. package/dist/esm/animation-loop/render-loop.js.map +1 -0
  77. package/dist/esm/bundle.js +4 -0
  78. package/dist/esm/bundle.js.map +1 -0
  79. package/dist/esm/geometries/cone-geometry.js +21 -0
  80. package/dist/esm/geometries/cone-geometry.js.map +1 -0
  81. package/dist/esm/geometries/cube-geometry.js +67 -0
  82. package/dist/esm/geometries/cube-geometry.js.map +1 -0
  83. package/dist/esm/geometries/cylinder-geometry.js +18 -0
  84. package/dist/esm/geometries/cylinder-geometry.js.map +1 -0
  85. package/dist/esm/geometries/ico-sphere-geometry.js +170 -0
  86. package/dist/esm/geometries/ico-sphere-geometry.js.map +1 -0
  87. package/dist/esm/geometries/plane-geometry.js +119 -0
  88. package/dist/esm/geometries/plane-geometry.js.map +1 -0
  89. package/dist/esm/geometries/sphere-geometry.js +102 -0
  90. package/dist/esm/geometries/sphere-geometry.js.map +1 -0
  91. package/dist/esm/geometries/truncated-cone-geometry.js +136 -0
  92. package/dist/esm/geometries/truncated-cone-geometry.js.map +1 -0
  93. package/dist/esm/geometry/geometry-table.js +2 -0
  94. package/dist/esm/geometry/geometry-table.js.map +1 -0
  95. package/dist/esm/geometry/geometry-utils.js +37 -0
  96. package/dist/esm/geometry/geometry-utils.js.map +1 -0
  97. package/dist/esm/geometry/geometry.js +119 -0
  98. package/dist/esm/geometry/geometry.js.map +1 -0
  99. package/dist/esm/geometry/primitive-utils.js +2 -0
  100. package/dist/esm/geometry/primitive-utils.js.map +1 -0
  101. package/dist/esm/index.js +16 -0
  102. package/dist/esm/index.js.map +1 -0
  103. package/dist/esm/lib/clip-space.js +2 -0
  104. package/dist/esm/lib/clip-space.js.map +1 -0
  105. package/dist/esm/lib/model-utils.js +40 -0
  106. package/dist/esm/lib/model-utils.js.map +1 -0
  107. package/dist/esm/lib/model.js +146 -0
  108. package/dist/esm/lib/model.js.map +1 -0
  109. package/dist/esm/lib/pipeline-factory.js +180 -0
  110. package/dist/esm/lib/pipeline-factory.js.map +1 -0
  111. package/dist/geometries/cone-geometry.d.ts +1 -1
  112. package/dist/geometries/cone-geometry.d.ts.map +1 -1
  113. package/dist/geometries/cone-geometry.js +12 -17
  114. package/dist/geometries/cube-geometry.d.ts +1 -1
  115. package/dist/geometries/cube-geometry.d.ts.map +1 -1
  116. package/dist/geometries/cube-geometry.js +187 -56
  117. package/dist/geometries/cylinder-geometry.d.ts +1 -1
  118. package/dist/geometries/cylinder-geometry.d.ts.map +1 -1
  119. package/dist/geometries/cylinder-geometry.js +10 -14
  120. package/dist/geometries/ico-sphere-geometry.d.ts +1 -1
  121. package/dist/geometries/ico-sphere-geometry.d.ts.map +1 -1
  122. package/dist/geometries/ico-sphere-geometry.js +141 -170
  123. package/dist/geometries/plane-geometry.d.ts +1 -1
  124. package/dist/geometries/plane-geometry.d.ts.map +1 -1
  125. package/dist/geometries/plane-geometry.js +93 -121
  126. package/dist/geometries/sphere-geometry.d.ts +1 -1
  127. package/dist/geometries/sphere-geometry.d.ts.map +1 -1
  128. package/dist/geometries/sphere-geometry.js +76 -100
  129. package/dist/geometries/truncated-cone-geometry.d.ts +1 -1
  130. package/dist/geometries/truncated-cone-geometry.d.ts.map +1 -1
  131. package/dist/geometries/truncated-cone-geometry.js +104 -131
  132. package/dist/geometry/geometry-table.d.ts +1 -1
  133. package/dist/geometry/geometry-table.d.ts.map +1 -1
  134. package/dist/geometry/geometry-table.js +0 -1
  135. package/dist/geometry/geometry-utils.js +22 -41
  136. package/dist/geometry/geometry.d.ts +4 -4
  137. package/dist/geometry/geometry.d.ts.map +1 -1
  138. package/dist/geometry/geometry.js +96 -142
  139. package/dist/geometry/primitive-utils.js +30 -1
  140. package/dist/index.js +20 -16
  141. package/dist/lib/clip-space.js +50 -1
  142. package/dist/lib/model-utils.js +97 -29
  143. package/dist/lib/model.d.ts +1 -1
  144. package/dist/lib/model.d.ts.map +1 -1
  145. package/dist/lib/model.js +122 -166
  146. package/dist/lib/pipeline-factory.d.ts +3 -3
  147. package/dist/lib/pipeline-factory.d.ts.map +1 -1
  148. package/dist/lib/pipeline-factory.js +136 -204
  149. package/package.json +11 -10
  150. package/dist/animation/key-frames.js.map +0 -1
  151. package/dist/animation/timeline.js.map +0 -1
  152. package/dist/animation-loop/animation-loop.js.map +0 -1
  153. package/dist/animation-loop/animation-props.js.map +0 -1
  154. package/dist/animation-loop/make-animation-loop.js.map +0 -1
  155. package/dist/animation-loop/render-loop.js.map +0 -1
  156. package/dist/bundle.js.map +0 -1
  157. package/dist/geometries/cone-geometry.js.map +0 -1
  158. package/dist/geometries/cube-geometry.js.map +0 -1
  159. package/dist/geometries/cylinder-geometry.js.map +0 -1
  160. package/dist/geometries/ico-sphere-geometry.js.map +0 -1
  161. package/dist/geometries/plane-geometry.js.map +0 -1
  162. package/dist/geometries/sphere-geometry.js.map +0 -1
  163. package/dist/geometries/truncated-cone-geometry.js.map +0 -1
  164. package/dist/geometry/geometry-table.js.map +0 -1
  165. package/dist/geometry/geometry-utils.js.map +0 -1
  166. package/dist/geometry/geometry.js.map +0 -1
  167. package/dist/geometry/primitive-utils.js.map +0 -1
  168. package/dist/index.js.map +0 -1
  169. package/dist/lib/clip-space.js.map +0 -1
  170. package/dist/lib/model-utils.js.map +0 -1
  171. package/dist/lib/model.js.map +0 -1
  172. package/dist/lib/pipeline-factory.js.map +0 -1
@@ -0,0 +1,534 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.AnimationLoop = void 0;
8
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
14
+ var _api = require("@luma.gl/api");
15
+ var _stats = require("@probe.gl/stats");
16
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
17
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
18
+ var statIdCounter = 0;
19
+ var DEFAULT_ANIMATION_LOOP_PROPS = {
20
+ device: null,
21
+ onAddHTML: function onAddHTML() {
22
+ return '';
23
+ },
24
+ onInitialize: function () {
25
+ var _onInitialize = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee() {
26
+ return _regenerator.default.wrap(function _callee$(_context) {
27
+ while (1) switch (_context.prev = _context.next) {
28
+ case 0:
29
+ return _context.abrupt("return", null);
30
+ case 1:
31
+ case "end":
32
+ return _context.stop();
33
+ }
34
+ }, _callee);
35
+ }));
36
+ function onInitialize() {
37
+ return _onInitialize.apply(this, arguments);
38
+ }
39
+ return onInitialize;
40
+ }(),
41
+ onRender: function onRender() {},
42
+ onFinalize: function onFinalize() {},
43
+ onError: function onError(error) {
44
+ return console.error(error);
45
+ },
46
+ stats: _api.luma.stats.get("animation-loop-".concat(statIdCounter++)),
47
+ useDevicePixels: true,
48
+ autoResizeViewport: false,
49
+ autoResizeDrawingBuffer: false
50
+ };
51
+ var AnimationLoop = function () {
52
+ function AnimationLoop(props) {
53
+ (0, _classCallCheck2.default)(this, AnimationLoop);
54
+ (0, _defineProperty2.default)(this, "device", null);
55
+ (0, _defineProperty2.default)(this, "canvas", null);
56
+ (0, _defineProperty2.default)(this, "props", void 0);
57
+ (0, _defineProperty2.default)(this, "animationProps", null);
58
+ (0, _defineProperty2.default)(this, "timeline", null);
59
+ (0, _defineProperty2.default)(this, "stats", void 0);
60
+ (0, _defineProperty2.default)(this, "cpuTime", void 0);
61
+ (0, _defineProperty2.default)(this, "gpuTime", void 0);
62
+ (0, _defineProperty2.default)(this, "frameRate", void 0);
63
+ (0, _defineProperty2.default)(this, "display", void 0);
64
+ (0, _defineProperty2.default)(this, "needsRedraw", 'initialized');
65
+ (0, _defineProperty2.default)(this, "_initialized", false);
66
+ (0, _defineProperty2.default)(this, "_running", false);
67
+ (0, _defineProperty2.default)(this, "_animationFrameId", null);
68
+ (0, _defineProperty2.default)(this, "_nextFramePromise", null);
69
+ (0, _defineProperty2.default)(this, "_resolveNextFrame", null);
70
+ (0, _defineProperty2.default)(this, "_cpuStartTime", 0);
71
+ this.props = _objectSpread(_objectSpread({}, DEFAULT_ANIMATION_LOOP_PROPS), props);
72
+ props = this.props;
73
+ if (!props.device) {
74
+ throw new Error('No device provided');
75
+ }
76
+ var _this$props$useDevice = this.props.useDevicePixels,
77
+ useDevicePixels = _this$props$useDevice === void 0 ? true : _this$props$useDevice;
78
+ this.stats = props.stats || new _stats.Stats({
79
+ id: 'animation-loop-stats'
80
+ });
81
+ this.cpuTime = this.stats.get('CPU Time');
82
+ this.gpuTime = this.stats.get('GPU Time');
83
+ this.frameRate = this.stats.get('Frame Rate');
84
+ this.setProps({
85
+ autoResizeViewport: props.autoResizeViewport,
86
+ autoResizeDrawingBuffer: props.autoResizeDrawingBuffer,
87
+ useDevicePixels: useDevicePixels
88
+ });
89
+ this.start = this.start.bind(this);
90
+ this.stop = this.stop.bind(this);
91
+ this._onMousemove = this._onMousemove.bind(this);
92
+ this._onMouseleave = this._onMouseleave.bind(this);
93
+ }
94
+ (0, _createClass2.default)(AnimationLoop, [{
95
+ key: "destroy",
96
+ value: function destroy() {
97
+ this.stop();
98
+ this._setDisplay(null);
99
+ }
100
+ }, {
101
+ key: "delete",
102
+ value: function _delete() {
103
+ this.destroy();
104
+ }
105
+ }, {
106
+ key: "setNeedsRedraw",
107
+ value: function setNeedsRedraw(reason) {
108
+ this.needsRedraw = this.needsRedraw || reason;
109
+ return this;
110
+ }
111
+ }, {
112
+ key: "setProps",
113
+ value: function setProps(props) {
114
+ if ('autoResizeViewport' in props) {
115
+ this.props.autoResizeViewport = props.autoResizeViewport || false;
116
+ }
117
+ if ('autoResizeDrawingBuffer' in props) {
118
+ this.props.autoResizeDrawingBuffer = props.autoResizeDrawingBuffer || false;
119
+ }
120
+ if ('useDevicePixels' in props) {
121
+ this.props.useDevicePixels = props.useDevicePixels || false;
122
+ }
123
+ return this;
124
+ }
125
+ }, {
126
+ key: "start",
127
+ value: function () {
128
+ var _start = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee2() {
129
+ var appContext, error;
130
+ return _regenerator.default.wrap(function _callee2$(_context2) {
131
+ while (1) switch (_context2.prev = _context2.next) {
132
+ case 0:
133
+ if (!this._running) {
134
+ _context2.next = 2;
135
+ break;
136
+ }
137
+ return _context2.abrupt("return", this);
138
+ case 2:
139
+ this._running = true;
140
+ _context2.prev = 3;
141
+ if (this._running) {
142
+ _context2.next = 6;
143
+ break;
144
+ }
145
+ return _context2.abrupt("return", null);
146
+ case 6:
147
+ if (this._initialized) {
148
+ _context2.next = 13;
149
+ break;
150
+ }
151
+ this._initialized = true;
152
+ _context2.next = 10;
153
+ return this._initDevice();
154
+ case 10:
155
+ this._initialize();
156
+ _context2.next = 13;
157
+ return this.props.onInitialize(this._getAnimationProps());
158
+ case 13:
159
+ if (this._running) {
160
+ _context2.next = 15;
161
+ break;
162
+ }
163
+ return _context2.abrupt("return", null);
164
+ case 15:
165
+ if (appContext !== false) {
166
+ this._cancelAnimationFrame();
167
+ this._requestAnimationFrame();
168
+ }
169
+ return _context2.abrupt("return", this);
170
+ case 19:
171
+ _context2.prev = 19;
172
+ _context2.t0 = _context2["catch"](3);
173
+ error = _context2.t0 instanceof Error ? _context2.t0 : new Error('Unknown error');
174
+ this.props.onError(error);
175
+ throw error;
176
+ case 24:
177
+ case "end":
178
+ return _context2.stop();
179
+ }
180
+ }, _callee2, this, [[3, 19]]);
181
+ }));
182
+ function start() {
183
+ return _start.apply(this, arguments);
184
+ }
185
+ return start;
186
+ }()
187
+ }, {
188
+ key: "redraw",
189
+ value: function redraw() {
190
+ var _this$device;
191
+ if ((_this$device = this.device) !== null && _this$device !== void 0 && _this$device.isLost) {
192
+ return this;
193
+ }
194
+ this._beginTimers();
195
+ this._setupFrame();
196
+ this._updateAnimationProps();
197
+ this._renderFrame(this._getAnimationProps());
198
+ this._clearNeedsRedraw();
199
+ if (this._resolveNextFrame) {
200
+ this._resolveNextFrame(this);
201
+ this._nextFramePromise = null;
202
+ this._resolveNextFrame = null;
203
+ }
204
+ this._endTimers();
205
+ return this;
206
+ }
207
+ }, {
208
+ key: "stop",
209
+ value: function stop() {
210
+ if (this._running) {
211
+ if (this.animationProps) {
212
+ this.props.onFinalize(this.animationProps);
213
+ }
214
+ this._cancelAnimationFrame();
215
+ this._nextFramePromise = null;
216
+ this._resolveNextFrame = null;
217
+ this._running = false;
218
+ }
219
+ return this;
220
+ }
221
+ }, {
222
+ key: "attachTimeline",
223
+ value: function attachTimeline(timeline) {
224
+ this.timeline = timeline;
225
+ return this.timeline;
226
+ }
227
+ }, {
228
+ key: "detachTimeline",
229
+ value: function detachTimeline() {
230
+ this.timeline = null;
231
+ }
232
+ }, {
233
+ key: "waitForRender",
234
+ value: function waitForRender() {
235
+ var _this = this;
236
+ this.setNeedsRedraw('waitForRender');
237
+ if (!this._nextFramePromise) {
238
+ this._nextFramePromise = new Promise(function (resolve) {
239
+ _this._resolveNextFrame = resolve;
240
+ });
241
+ }
242
+ return this._nextFramePromise;
243
+ }
244
+ }, {
245
+ key: "toDataURL",
246
+ value: function () {
247
+ var _toDataURL = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee3() {
248
+ return _regenerator.default.wrap(function _callee3$(_context3) {
249
+ while (1) switch (_context3.prev = _context3.next) {
250
+ case 0:
251
+ this.setNeedsRedraw('toDataURL');
252
+ _context3.next = 3;
253
+ return this.waitForRender();
254
+ case 3:
255
+ if (!(this.canvas instanceof HTMLCanvasElement)) {
256
+ _context3.next = 5;
257
+ break;
258
+ }
259
+ return _context3.abrupt("return", this.canvas.toDataURL());
260
+ case 5:
261
+ throw new Error('OffscreenCanvas');
262
+ case 6:
263
+ case "end":
264
+ return _context3.stop();
265
+ }
266
+ }, _callee3, this);
267
+ }));
268
+ function toDataURL() {
269
+ return _toDataURL.apply(this, arguments);
270
+ }
271
+ return toDataURL;
272
+ }()
273
+ }, {
274
+ key: "_initialize",
275
+ value: function _initialize() {
276
+ this._startEventHandling();
277
+ this._initializeAnimationProps();
278
+ this._updateAnimationProps();
279
+ this._resizeCanvasDrawingBuffer();
280
+ this._resizeViewport();
281
+ }
282
+ }, {
283
+ key: "_setDisplay",
284
+ value: function _setDisplay(display) {
285
+ if (this.display) {
286
+ this.display.delete();
287
+ this.display.animationLoop = null;
288
+ }
289
+ if (display) {
290
+ display.animationLoop = this;
291
+ }
292
+ this.display = display;
293
+ }
294
+ }, {
295
+ key: "_requestAnimationFrame",
296
+ value: function _requestAnimationFrame() {
297
+ if (!this._running) {
298
+ return;
299
+ }
300
+ this._animationFrameId = (0, _api.requestAnimationFrame)(this._animationFrame.bind(this));
301
+ }
302
+ }, {
303
+ key: "_cancelAnimationFrame",
304
+ value: function _cancelAnimationFrame() {
305
+ if (this._animationFrameId !== null) {
306
+ return;
307
+ }
308
+ (0, _api.cancelAnimationFrame)(this._animationFrameId);
309
+ this._animationFrameId = null;
310
+ }
311
+ }, {
312
+ key: "_animationFrame",
313
+ value: function _animationFrame() {
314
+ if (!this._running) {
315
+ return;
316
+ }
317
+ this.redraw();
318
+ this._requestAnimationFrame();
319
+ }
320
+ }, {
321
+ key: "_renderFrame",
322
+ value: function _renderFrame(animationProps) {
323
+ if (this.display) {
324
+ this.display._renderFrame(animationProps);
325
+ return;
326
+ }
327
+ this.props.onRender(this._getAnimationProps());
328
+ }
329
+ }, {
330
+ key: "_clearNeedsRedraw",
331
+ value: function _clearNeedsRedraw() {
332
+ this.needsRedraw = false;
333
+ }
334
+ }, {
335
+ key: "_setupFrame",
336
+ value: function _setupFrame() {
337
+ this._resizeCanvasDrawingBuffer();
338
+ this._resizeViewport();
339
+ }
340
+ }, {
341
+ key: "_initializeAnimationProps",
342
+ value: function _initializeAnimationProps() {
343
+ var _this$device2, _this$device2$canvasC;
344
+ if (!this.device) {
345
+ throw new Error('loop');
346
+ }
347
+ this.animationProps = {
348
+ animationLoop: this,
349
+ device: this.device,
350
+ canvas: (_this$device2 = this.device) === null || _this$device2 === void 0 ? void 0 : (_this$device2$canvasC = _this$device2.canvasContext) === null || _this$device2$canvasC === void 0 ? void 0 : _this$device2$canvasC.canvas,
351
+ timeline: this.timeline,
352
+ useDevicePixels: this.props.useDevicePixels,
353
+ needsRedraw: false,
354
+ width: 1,
355
+ height: 1,
356
+ aspect: 1,
357
+ time: 0,
358
+ startTime: Date.now(),
359
+ engineTime: 0,
360
+ tick: 0,
361
+ tock: 0,
362
+ _mousePosition: null
363
+ };
364
+ }
365
+ }, {
366
+ key: "_getAnimationProps",
367
+ value: function _getAnimationProps() {
368
+ if (!this.animationProps) {
369
+ throw new Error('animationProps');
370
+ }
371
+ return this.animationProps;
372
+ }
373
+ }, {
374
+ key: "_updateAnimationProps",
375
+ value: function _updateAnimationProps() {
376
+ if (!this.animationProps) {
377
+ return;
378
+ }
379
+ var _this$_getSizeAndAspe = this._getSizeAndAspect(),
380
+ width = _this$_getSizeAndAspe.width,
381
+ height = _this$_getSizeAndAspe.height,
382
+ aspect = _this$_getSizeAndAspe.aspect;
383
+ if (width !== this.animationProps.width || height !== this.animationProps.height) {
384
+ this.setNeedsRedraw('drawing buffer resized');
385
+ }
386
+ if (aspect !== this.animationProps.aspect) {
387
+ this.setNeedsRedraw('drawing buffer aspect changed');
388
+ }
389
+ this.animationProps.width = width;
390
+ this.animationProps.height = height;
391
+ this.animationProps.aspect = aspect;
392
+ this.animationProps.needsRedraw = this.needsRedraw;
393
+ this.animationProps.engineTime = Date.now() - this.animationProps.startTime;
394
+ if (this.timeline) {
395
+ this.timeline.update(this.animationProps.engineTime);
396
+ }
397
+ this.animationProps.tick = Math.floor(this.animationProps.time / 1000 * 60);
398
+ this.animationProps.tock++;
399
+ this.animationProps.time = this.timeline ? this.timeline.getTime() : this.animationProps.engineTime;
400
+ }
401
+ }, {
402
+ key: "_initDevice",
403
+ value: function () {
404
+ var _initDevice2 = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee4() {
405
+ var _this$device$canvasCo;
406
+ return _regenerator.default.wrap(function _callee4$(_context4) {
407
+ while (1) switch (_context4.prev = _context4.next) {
408
+ case 0:
409
+ _context4.next = 2;
410
+ return this.props.device;
411
+ case 2:
412
+ this.device = _context4.sent;
413
+ if (this.device) {
414
+ _context4.next = 5;
415
+ break;
416
+ }
417
+ throw new Error('No device provided');
418
+ case 5:
419
+ this.canvas = ((_this$device$canvasCo = this.device.canvasContext) === null || _this$device$canvasCo === void 0 ? void 0 : _this$device$canvasCo.canvas) || null;
420
+ case 6:
421
+ case "end":
422
+ return _context4.stop();
423
+ }
424
+ }, _callee4, this);
425
+ }));
426
+ function _initDevice() {
427
+ return _initDevice2.apply(this, arguments);
428
+ }
429
+ return _initDevice;
430
+ }()
431
+ }, {
432
+ key: "_createInfoDiv",
433
+ value: function _createInfoDiv() {
434
+ if (this.canvas && this.props.onAddHTML) {
435
+ var wrapperDiv = document.createElement('div');
436
+ document.body.appendChild(wrapperDiv);
437
+ wrapperDiv.style.position = 'relative';
438
+ var _div = document.createElement('div');
439
+ _div.style.position = 'absolute';
440
+ _div.style.left = '10px';
441
+ _div.style.bottom = '10px';
442
+ _div.style.width = '300px';
443
+ _div.style.background = 'white';
444
+ if (this.canvas instanceof HTMLCanvasElement) {
445
+ wrapperDiv.appendChild(this.canvas);
446
+ }
447
+ wrapperDiv.appendChild(_div);
448
+ var html = this.props.onAddHTML(_div);
449
+ if (html) {
450
+ _div.innerHTML = html;
451
+ }
452
+ }
453
+ }
454
+ }, {
455
+ key: "_getSizeAndAspect",
456
+ value: function _getSizeAndAspect() {
457
+ var _this$device3, _this$device3$canvasC, _this$device4, _this$device4$canvasC;
458
+ if (!this.device) {
459
+ return {
460
+ width: 1,
461
+ height: 1,
462
+ aspect: 1
463
+ };
464
+ }
465
+ var _ref = ((_this$device3 = this.device) === null || _this$device3 === void 0 ? void 0 : (_this$device3$canvasC = _this$device3.canvasContext) === null || _this$device3$canvasC === void 0 ? void 0 : _this$device3$canvasC.getPixelSize()) || [1, 1],
466
+ _ref2 = (0, _slicedToArray2.default)(_ref, 2),
467
+ width = _ref2[0],
468
+ height = _ref2[1];
469
+ var aspect = 1;
470
+ var canvas = (_this$device4 = this.device) === null || _this$device4 === void 0 ? void 0 : (_this$device4$canvasC = _this$device4.canvasContext) === null || _this$device4$canvasC === void 0 ? void 0 : _this$device4$canvasC.canvas;
471
+ if (canvas && canvas.clientHeight) {
472
+ aspect = canvas.clientWidth / canvas.clientHeight;
473
+ } else if (width > 0 && height > 0) {
474
+ aspect = width / height;
475
+ }
476
+ return {
477
+ width: width,
478
+ height: height,
479
+ aspect: aspect
480
+ };
481
+ }
482
+ }, {
483
+ key: "_resizeViewport",
484
+ value: function _resizeViewport() {
485
+ if (this.props.autoResizeViewport && this.device.gl) {
486
+ this.device.gl.viewport(0, 0, this.device.gl.drawingBufferWidth, this.device.gl.drawingBufferHeight);
487
+ }
488
+ }
489
+ }, {
490
+ key: "_resizeCanvasDrawingBuffer",
491
+ value: function _resizeCanvasDrawingBuffer() {
492
+ if (this.props.autoResizeDrawingBuffer) {
493
+ var _this$device5, _this$device5$canvasC;
494
+ (_this$device5 = this.device) === null || _this$device5 === void 0 ? void 0 : (_this$device5$canvasC = _this$device5.canvasContext) === null || _this$device5$canvasC === void 0 ? void 0 : _this$device5$canvasC.resize({
495
+ useDevicePixels: this.props.useDevicePixels
496
+ });
497
+ }
498
+ }
499
+ }, {
500
+ key: "_beginTimers",
501
+ value: function _beginTimers() {
502
+ this.frameRate.timeEnd();
503
+ this.frameRate.timeStart();
504
+ }
505
+ }, {
506
+ key: "_endTimers",
507
+ value: function _endTimers() {
508
+ this.cpuTime.timeEnd();
509
+ }
510
+ }, {
511
+ key: "_startEventHandling",
512
+ value: function _startEventHandling() {
513
+ if (this.canvas) {
514
+ this.canvas.addEventListener('mousemove', this._onMousemove);
515
+ this.canvas.addEventListener('mouseleave', this._onMouseleave);
516
+ }
517
+ }
518
+ }, {
519
+ key: "_onMousemove",
520
+ value: function _onMousemove(event) {
521
+ if (event instanceof MouseEvent) {
522
+ this._getAnimationProps()._mousePosition = [event.offsetX, event.offsetY];
523
+ }
524
+ }
525
+ }, {
526
+ key: "_onMouseleave",
527
+ value: function _onMouseleave(event) {
528
+ this._getAnimationProps()._mousePosition = null;
529
+ }
530
+ }]);
531
+ return AnimationLoop;
532
+ }();
533
+ exports.AnimationLoop = AnimationLoop;
534
+ //# sourceMappingURL=animation-loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animation-loop.js","names":["_api","require","_stats","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty2","default","getOwnPropertyDescriptors","defineProperties","defineProperty","statIdCounter","DEFAULT_ANIMATION_LOOP_PROPS","device","onAddHTML","onInitialize","_onInitialize","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_callee$","_context","prev","next","abrupt","stop","onRender","onFinalize","onError","error","console","stats","luma","get","concat","useDevicePixels","autoResizeViewport","autoResizeDrawingBuffer","AnimationLoop","props","_classCallCheck2","Error","_this$props$useDevice","Stats","id","cpuTime","gpuTime","frameRate","setProps","start","bind","_onMousemove","_onMouseleave","_createClass2","value","destroy","_setDisplay","_delete","setNeedsRedraw","reason","needsRedraw","_start","_callee2","appContext","_callee2$","_context2","_running","_initialized","_initDevice","_initialize","_getAnimationProps","_cancelAnimationFrame","_requestAnimationFrame","t0","redraw","_this$device","isLost","_beginTimers","_setupFrame","_updateAnimationProps","_renderFrame","_clearNeedsRedraw","_resolveNextFrame","_nextFramePromise","_endTimers","animationProps","attachTimeline","timeline","detachTimeline","waitForRender","_this","Promise","resolve","_toDataURL","_callee3","_callee3$","_context3","canvas","HTMLCanvasElement","toDataURL","_startEventHandling","_initializeAnimationProps","_resizeCanvasDrawingBuffer","_resizeViewport","display","delete","animationLoop","_animationFrameId","requestAnimationFrame","_animationFrame","cancelAnimationFrame","_this$device2","_this$device2$canvasC","canvasContext","width","height","aspect","time","startTime","Date","now","engineTime","tick","tock","_mousePosition","_this$_getSizeAndAspe","_getSizeAndAspect","update","Math","floor","getTime","_initDevice2","_callee4","_this$device$canvasCo","_callee4$","_context4","sent","_createInfoDiv","wrapperDiv","document","createElement","body","appendChild","style","position","div","left","bottom","background","html","innerHTML","_this$device3","_this$device3$canvasC","_this$device4","_this$device4$canvasC","_ref","getPixelSize","_ref2","_slicedToArray2","clientHeight","clientWidth","gl","viewport","drawingBufferWidth","drawingBufferHeight","_this$device5","_this$device5$canvasC","resize","timeEnd","timeStart","addEventListener","event","MouseEvent","offsetX","offsetY","exports"],"sources":["../../../src/animation-loop/animation-loop.ts"],"sourcesContent":["// luma.gl, MIT license\n\nimport {luma, Device} from '@luma.gl/api';\nimport {requestAnimationFrame, cancelAnimationFrame} from '@luma.gl/api';\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 let {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 // check that we haven't been stopped\n if (!this._running) {\n return null;\n }\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._beginTimers();\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._endTimers();\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.delete();\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 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 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 _beginTimers() {\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 _endTimers() {\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);\n this.canvas.addEventListener('mouseleave', this._onMouseleave);\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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"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=animation-props.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animation-props.js","names":[],"sources":["../../../src/animation-loop/animation-props.ts"],"sourcesContent":["import {Device} from '@luma.gl/api';\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,53 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.makeAnimationLoop = makeAnimationLoop;
8
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
+ var _api = require("@luma.gl/api");
12
+ var _animationLoop = require("./animation-loop");
13
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
14
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
15
+ function makeAnimationLoop(AnimationLoopTemplateCtor, props) {
16
+ var _this = this;
17
+ var renderLoop = null;
18
+ var device = (props === null || props === void 0 ? void 0 : props.device) || _api.luma.createDevice();
19
+ var animationLoop = new _animationLoop.AnimationLoop(_objectSpread(_objectSpread({}, props), {}, {
20
+ device: device,
21
+ onInitialize: function onInitialize(animationProps) {
22
+ return (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee() {
23
+ var _renderLoop;
24
+ return _regenerator.default.wrap(function _callee$(_context) {
25
+ while (1) switch (_context.prev = _context.next) {
26
+ case 0:
27
+ renderLoop = new AnimationLoopTemplateCtor(animationProps);
28
+ _context.next = 3;
29
+ return (_renderLoop = renderLoop) === null || _renderLoop === void 0 ? void 0 : _renderLoop.onInitialize(animationProps);
30
+ case 3:
31
+ return _context.abrupt("return", _context.sent);
32
+ case 4:
33
+ case "end":
34
+ return _context.stop();
35
+ }
36
+ }, _callee);
37
+ }))();
38
+ },
39
+ onRender: function onRender(animationProps) {
40
+ var _renderLoop2;
41
+ return (_renderLoop2 = renderLoop) === null || _renderLoop2 === void 0 ? void 0 : _renderLoop2.onRender(animationProps);
42
+ },
43
+ onFinalize: function onFinalize(animationProps) {
44
+ var _renderLoop3;
45
+ return (_renderLoop3 = renderLoop) === null || _renderLoop3 === void 0 ? void 0 : _renderLoop3.onFinalize(animationProps);
46
+ }
47
+ }));
48
+ animationLoop.getInfo = function () {
49
+ return _this.AnimationLoopTemplateCtor.info;
50
+ };
51
+ return animationLoop;
52
+ }
53
+ //# sourceMappingURL=make-animation-loop.js.map