@luma.gl/engine 8.5.8 → 8.6.0-alpha.2

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 (270) hide show
  1. package/dist/animation/key-frames.d.ts +18 -0
  2. package/dist/animation/key-frames.d.ts.map +1 -0
  3. package/dist/{esm/animation → animation}/key-frames.js +13 -6
  4. package/dist/animation/key-frames.js.map +1 -0
  5. package/dist/animation/timeline.d.ts +51 -0
  6. package/dist/animation/timeline.d.ts.map +1 -0
  7. package/dist/{esm/animation → animation}/timeline.js +10 -5
  8. package/dist/animation/timeline.js.map +1 -0
  9. package/dist/bundle.d.ts +2 -0
  10. package/dist/bundle.d.ts.map +1 -0
  11. package/dist/bundle.js +5 -0
  12. package/dist/bundle.js.map +1 -0
  13. package/dist/geometries/cone-geometry.d.ts +10 -0
  14. package/dist/geometries/cone-geometry.d.ts.map +1 -0
  15. package/dist/{esm/geometries → geometries}/cone-geometry.js +2 -2
  16. package/dist/geometries/cone-geometry.js.map +1 -0
  17. package/dist/geometries/cube-geometry.d.ts +9 -0
  18. package/dist/geometries/cube-geometry.d.ts.map +1 -0
  19. package/dist/{esm/geometries → geometries}/cube-geometry.js +18 -18
  20. package/dist/geometries/cube-geometry.js.map +1 -0
  21. package/dist/geometries/cylinder-geometry.d.ts +10 -0
  22. package/dist/geometries/cylinder-geometry.d.ts.map +1 -0
  23. package/dist/{esm/geometries → geometries}/cylinder-geometry.js +2 -2
  24. package/dist/geometries/cylinder-geometry.js.map +1 -0
  25. package/dist/geometries/ico-sphere-geometry.d.ts +11 -0
  26. package/dist/geometries/ico-sphere-geometry.d.ts.map +1 -0
  27. package/dist/{esm/geometries → geometries}/ico-sphere-geometry.js +2 -2
  28. package/dist/geometries/ico-sphere-geometry.js.map +1 -0
  29. package/dist/geometries/plane-geometry.d.ts +10 -0
  30. package/dist/geometries/plane-geometry.d.ts.map +1 -0
  31. package/dist/{esm/geometries → geometries}/plane-geometry.js +5 -5
  32. package/dist/geometries/plane-geometry.js.map +1 -0
  33. package/dist/geometries/sphere-geometry.d.ts +12 -0
  34. package/dist/geometries/sphere-geometry.d.ts.map +1 -0
  35. package/dist/{esm/geometries → geometries}/sphere-geometry.js +2 -9
  36. package/dist/geometries/sphere-geometry.js.map +1 -0
  37. package/dist/geometries/truncated-cone-geometry.d.ts +13 -0
  38. package/dist/geometries/truncated-cone-geometry.d.ts.map +1 -0
  39. package/dist/{esm/geometries → geometries}/truncated-cone-geometry.js +1 -1
  40. package/dist/geometries/truncated-cone-geometry.js.map +1 -0
  41. package/dist/geometry/geometry-utils.d.ts +2 -0
  42. package/dist/geometry/geometry-utils.d.ts.map +1 -0
  43. package/dist/{esm/geometry → geometry}/geometry-utils.js +0 -0
  44. package/dist/geometry/geometry-utils.js.map +1 -0
  45. package/dist/geometry/geometry.d.ts +44 -0
  46. package/dist/geometry/geometry.d.ts.map +1 -0
  47. package/dist/{esm/geometry → geometry}/geometry.js +28 -19
  48. package/dist/geometry/geometry.js.map +1 -0
  49. package/dist/index.d.ts +26 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +17 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/lib/animation-loop.d.ts +149 -0
  54. package/dist/lib/animation-loop.d.ts.map +1 -0
  55. package/dist/{esm/lib → lib}/animation-loop.js +190 -143
  56. package/dist/lib/animation-loop.js.map +1 -0
  57. package/dist/lib/model-utils.d.ts +4 -0
  58. package/dist/lib/model-utils.d.ts.map +1 -0
  59. package/dist/{esm/lib → lib}/model-utils.js +3 -2
  60. package/dist/lib/model-utils.js.map +1 -0
  61. package/dist/lib/model.d.ts +109 -0
  62. package/dist/lib/model.d.ts.map +1 -0
  63. package/dist/{esm/lib → lib}/model.js +76 -20
  64. package/dist/lib/model.js.map +1 -0
  65. package/dist/lib/program-manager.d.ts +39 -0
  66. package/dist/lib/program-manager.d.ts.map +1 -0
  67. package/dist/{esm/lib → lib}/program-manager.js +29 -18
  68. package/dist/lib/program-manager.js.map +1 -0
  69. package/dist/lib/render-loop.d.ts +27 -0
  70. package/dist/lib/render-loop.d.ts.map +1 -0
  71. package/dist/lib/render-loop.js +56 -0
  72. package/dist/lib/render-loop.js.map +1 -0
  73. package/dist/transform/buffer-transform.d.ts +36 -0
  74. package/dist/transform/buffer-transform.d.ts.map +1 -0
  75. package/dist/{esm/transform → transform}/buffer-transform.js +15 -8
  76. package/dist/transform/buffer-transform.js.map +1 -0
  77. package/dist/transform/texture-transform.d.ts +57 -0
  78. package/dist/transform/texture-transform.d.ts.map +1 -0
  79. package/dist/{esm/transform → transform}/texture-transform.js +48 -16
  80. package/dist/transform/texture-transform.js.map +1 -0
  81. package/dist/transform/transform-shader-utils.d.ts +26 -0
  82. package/dist/transform/transform-shader-utils.d.ts.map +1 -0
  83. package/dist/{esm/transform → transform}/transform-shader-utils.js +38 -46
  84. package/dist/transform/transform-shader-utils.js.map +1 -0
  85. package/dist/transform/transform-types.d.ts +44 -0
  86. package/dist/transform/transform-types.d.ts.map +1 -0
  87. package/dist/transform/transform-types.js +2 -0
  88. package/dist/transform/transform-types.js.map +1 -0
  89. package/dist/transform/transform.d.ts +47 -0
  90. package/dist/transform/transform.d.ts.map +1 -0
  91. package/dist/{esm/transform → transform}/transform.js +63 -43
  92. package/dist/transform/transform.js.map +1 -0
  93. package/dist/utils/clip-space.d.ts +5 -0
  94. package/dist/utils/clip-space.d.ts.map +1 -0
  95. package/dist/{esm/utils → utils}/clip-space.js +3 -17
  96. package/dist/utils/clip-space.js.map +1 -0
  97. package/package.json +11 -11
  98. package/src/animation/{key-frames.js → key-frames.ts} +18 -16
  99. package/src/animation/{timeline.js → timeline.ts} +54 -18
  100. package/src/bundle.ts +4 -0
  101. package/src/geometries/{cone-geometry.js → cone-geometry.ts} +9 -3
  102. package/src/geometries/{cube-geometry.js → cube-geometry.ts} +17 -12
  103. package/src/geometries/cylinder-geometry.ts +20 -0
  104. package/src/geometries/{ico-sphere-geometry.js → ico-sphere-geometry.ts} +10 -3
  105. package/src/geometries/{plane-geometry.js → plane-geometry.ts} +11 -6
  106. package/src/geometries/{sphere-geometry.js → sphere-geometry.ts} +15 -11
  107. package/src/geometries/{truncated-cone-geometry.js → truncated-cone-geometry.ts} +14 -5
  108. package/src/geometry/{geometry-utils.js → geometry-utils.ts} +2 -0
  109. package/src/geometry/{geometry.js → geometry.ts} +47 -34
  110. package/src/index.ts +35 -0
  111. package/src/lib/animation-loop.ts +724 -0
  112. package/src/lib/{model-utils.js → model-utils.ts} +2 -2
  113. package/src/lib/{model.js → model.ts} +184 -66
  114. package/src/lib/{program-manager.js → program-manager.ts} +53 -34
  115. package/src/lib/render-loop.ts +56 -0
  116. package/src/transform/{buffer-transform.js → buffer-transform.ts} +42 -27
  117. package/src/transform/{texture-transform.js → texture-transform.ts} +35 -25
  118. package/src/transform/{transform-shader-utils.js → transform-shader-utils.ts} +55 -27
  119. package/src/transform/transform-types.ts +42 -0
  120. package/src/transform/transform.ts +189 -0
  121. package/src/utils/{clip-space.js → clip-space.ts} +4 -3
  122. package/dist/dist.js +0 -32403
  123. package/dist/dist.min.js +0 -1
  124. package/dist/es5/animation/key-frames.d.ts +0 -19
  125. package/dist/es5/animation/key-frames.js +0 -95
  126. package/dist/es5/animation/key-frames.js.map +0 -1
  127. package/dist/es5/animation/timeline.d.ts +0 -39
  128. package/dist/es5/animation/timeline.js +0 -211
  129. package/dist/es5/animation/timeline.js.map +0 -1
  130. package/dist/es5/bundle.js +0 -9
  131. package/dist/es5/bundle.js.map +0 -1
  132. package/dist/es5/geometries/cone-geometry.d.ts +0 -5
  133. package/dist/es5/geometries/cone-geometry.js +0 -59
  134. package/dist/es5/geometries/cone-geometry.js.map +0 -1
  135. package/dist/es5/geometries/cube-geometry.d.ts +0 -5
  136. package/dist/es5/geometries/cube-geometry.js +0 -75
  137. package/dist/es5/geometries/cube-geometry.js.map +0 -1
  138. package/dist/es5/geometries/cylinder-geometry.d.ts +0 -5
  139. package/dist/es5/geometries/cylinder-geometry.js +0 -55
  140. package/dist/es5/geometries/cylinder-geometry.js.map +0 -1
  141. package/dist/es5/geometries/ico-sphere-geometry.d.ts +0 -5
  142. package/dist/es5/geometries/ico-sphere-geometry.js +0 -217
  143. package/dist/es5/geometries/ico-sphere-geometry.js.map +0 -1
  144. package/dist/es5/geometries/index.d.ts +0 -7
  145. package/dist/es5/geometries/index.js +0 -64
  146. package/dist/es5/geometries/index.js.map +0 -1
  147. package/dist/es5/geometries/plane-geometry.d.ts +0 -5
  148. package/dist/es5/geometries/plane-geometry.js +0 -168
  149. package/dist/es5/geometries/plane-geometry.js.map +0 -1
  150. package/dist/es5/geometries/sphere-geometry.d.ts +0 -5
  151. package/dist/es5/geometries/sphere-geometry.js +0 -152
  152. package/dist/es5/geometries/sphere-geometry.js.map +0 -1
  153. package/dist/es5/geometries/truncated-cone-geometry.d.ts +0 -5
  154. package/dist/es5/geometries/truncated-cone-geometry.js +0 -171
  155. package/dist/es5/geometries/truncated-cone-geometry.js.map +0 -1
  156. package/dist/es5/geometry/geometry-utils.d.ts +0 -1
  157. package/dist/es5/geometry/geometry-utils.js +0 -49
  158. package/dist/es5/geometry/geometry-utils.js.map +0 -1
  159. package/dist/es5/geometry/geometry.d.ts +0 -25
  160. package/dist/es5/geometry/geometry.js +0 -150
  161. package/dist/es5/geometry/geometry.js.map +0 -1
  162. package/dist/es5/index.d.ts +0 -19
  163. package/dist/es5/index.js +0 -128
  164. package/dist/es5/index.js.map +0 -1
  165. package/dist/es5/lib/animation-loop.d.ts +0 -158
  166. package/dist/es5/lib/animation-loop.js +0 -642
  167. package/dist/es5/lib/animation-loop.js.map +0 -1
  168. package/dist/es5/lib/model-utils.d.ts +0 -3
  169. package/dist/es5/lib/model-utils.js +0 -110
  170. package/dist/es5/lib/model-utils.js.map +0 -1
  171. package/dist/es5/lib/model.d.ts +0 -214
  172. package/dist/es5/lib/model.js +0 -584
  173. package/dist/es5/lib/model.js.map +0 -1
  174. package/dist/es5/lib/program-manager.d.ts +0 -79
  175. package/dist/es5/lib/program-manager.js +0 -238
  176. package/dist/es5/lib/program-manager.js.map +0 -1
  177. package/dist/es5/transform/buffer-transform.d.ts +0 -13
  178. package/dist/es5/transform/buffer-transform.js +0 -294
  179. package/dist/es5/transform/buffer-transform.js.map +0 -1
  180. package/dist/es5/transform/resource-transform.d.ts +0 -16
  181. package/dist/es5/transform/texture-transform.d.ts +0 -16
  182. package/dist/es5/transform/texture-transform.js +0 -405
  183. package/dist/es5/transform/texture-transform.js.map +0 -1
  184. package/dist/es5/transform/transform-shader-utils.d.ts +0 -31
  185. package/dist/es5/transform/transform-shader-utils.js +0 -160
  186. package/dist/es5/transform/transform-shader-utils.js.map +0 -1
  187. package/dist/es5/transform/transform.d.ts +0 -33
  188. package/dist/es5/transform/transform.js +0 -274
  189. package/dist/es5/transform/transform.js.map +0 -1
  190. package/dist/es5/utils/clip-space.d.ts +0 -5
  191. package/dist/es5/utils/clip-space.js +0 -72
  192. package/dist/es5/utils/clip-space.js.map +0 -1
  193. package/dist/esm/animation/key-frames.d.ts +0 -19
  194. package/dist/esm/animation/key-frames.js.map +0 -1
  195. package/dist/esm/animation/timeline.d.ts +0 -39
  196. package/dist/esm/animation/timeline.js.map +0 -1
  197. package/dist/esm/bundle.js +0 -7
  198. package/dist/esm/bundle.js.map +0 -1
  199. package/dist/esm/geometries/cone-geometry.d.ts +0 -5
  200. package/dist/esm/geometries/cone-geometry.js.map +0 -1
  201. package/dist/esm/geometries/cube-geometry.d.ts +0 -5
  202. package/dist/esm/geometries/cube-geometry.js.map +0 -1
  203. package/dist/esm/geometries/cylinder-geometry.d.ts +0 -5
  204. package/dist/esm/geometries/cylinder-geometry.js.map +0 -1
  205. package/dist/esm/geometries/ico-sphere-geometry.d.ts +0 -5
  206. package/dist/esm/geometries/ico-sphere-geometry.js.map +0 -1
  207. package/dist/esm/geometries/index.d.ts +0 -7
  208. package/dist/esm/geometries/index.js +0 -8
  209. package/dist/esm/geometries/index.js.map +0 -1
  210. package/dist/esm/geometries/plane-geometry.d.ts +0 -5
  211. package/dist/esm/geometries/plane-geometry.js.map +0 -1
  212. package/dist/esm/geometries/sphere-geometry.d.ts +0 -5
  213. package/dist/esm/geometries/sphere-geometry.js.map +0 -1
  214. package/dist/esm/geometries/truncated-cone-geometry.d.ts +0 -5
  215. package/dist/esm/geometries/truncated-cone-geometry.js.map +0 -1
  216. package/dist/esm/geometry/geometry-utils.d.ts +0 -1
  217. package/dist/esm/geometry/geometry-utils.js.map +0 -1
  218. package/dist/esm/geometry/geometry.d.ts +0 -25
  219. package/dist/esm/geometry/geometry.js.map +0 -1
  220. package/dist/esm/index.d.ts +0 -19
  221. package/dist/esm/index.js +0 -16
  222. package/dist/esm/index.js.map +0 -1
  223. package/dist/esm/lib/animation-loop.d.ts +0 -158
  224. package/dist/esm/lib/animation-loop.js.map +0 -1
  225. package/dist/esm/lib/model-utils.d.ts +0 -3
  226. package/dist/esm/lib/model-utils.js.map +0 -1
  227. package/dist/esm/lib/model.d.ts +0 -214
  228. package/dist/esm/lib/model.js.map +0 -1
  229. package/dist/esm/lib/program-manager.d.ts +0 -79
  230. package/dist/esm/lib/program-manager.js.map +0 -1
  231. package/dist/esm/transform/buffer-transform.d.ts +0 -13
  232. package/dist/esm/transform/buffer-transform.js.map +0 -1
  233. package/dist/esm/transform/resource-transform.d.ts +0 -16
  234. package/dist/esm/transform/texture-transform.d.ts +0 -16
  235. package/dist/esm/transform/texture-transform.js.map +0 -1
  236. package/dist/esm/transform/transform-shader-utils.d.ts +0 -31
  237. package/dist/esm/transform/transform-shader-utils.js.map +0 -1
  238. package/dist/esm/transform/transform.d.ts +0 -33
  239. package/dist/esm/transform/transform.js.map +0 -1
  240. package/dist/esm/utils/clip-space.d.ts +0 -5
  241. package/dist/esm/utils/clip-space.js.map +0 -1
  242. package/src/animation/key-frames.d.ts +0 -19
  243. package/src/animation/timeline.d.ts +0 -39
  244. package/src/bundle.js +0 -7
  245. package/src/geometries/cone-geometry.d.ts +0 -5
  246. package/src/geometries/cube-geometry.d.ts +0 -5
  247. package/src/geometries/cylinder-geometry.d.ts +0 -5
  248. package/src/geometries/cylinder-geometry.js +0 -14
  249. package/src/geometries/ico-sphere-geometry.d.ts +0 -5
  250. package/src/geometries/index.d.ts +0 -7
  251. package/src/geometries/index.js +0 -7
  252. package/src/geometries/plane-geometry.d.ts +0 -5
  253. package/src/geometries/sphere-geometry.d.ts +0 -5
  254. package/src/geometries/truncated-cone-geometry.d.ts +0 -5
  255. package/src/geometry/geometry-utils.d.ts +0 -1
  256. package/src/geometry/geometry.d.ts +0 -25
  257. package/src/index.d.ts +0 -19
  258. package/src/index.js +0 -22
  259. package/src/lib/animation-loop.d.ts +0 -158
  260. package/src/lib/animation-loop.js +0 -601
  261. package/src/lib/model-utils.d.ts +0 -3
  262. package/src/lib/model.d.ts +0 -214
  263. package/src/lib/program-manager.d.ts +0 -79
  264. package/src/transform/buffer-transform.d.ts +0 -13
  265. package/src/transform/resource-transform.d.ts +0 -16
  266. package/src/transform/texture-transform.d.ts +0 -16
  267. package/src/transform/transform-shader-utils.d.ts +0 -31
  268. package/src/transform/transform.d.ts +0 -33
  269. package/src/transform/transform.js +0 -177
  270. package/src/utils/clip-space.d.ts +0 -5
@@ -1,143 +1,181 @@
1
- import { isWebGL, createGLContext, instrumentGLContext, resizeGLContext, resetParameters } from '@luma.gl/gltools';
2
- import { requestAnimationFrame, cancelAnimationFrame, Query, lumaStats, Framebuffer, log, assert } from '@luma.gl/webgl';
3
- import { isBrowser } from 'probe.gl/env';
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
+ import { luma } from '@luma.gl/api';
3
+ import { lumaStats, log } from '@luma.gl/api';
4
+ import { isWebGL, resetParameters } from '@luma.gl/webgl';
5
+ import { requestAnimationFrame, cancelAnimationFrame, Query, Framebuffer } from '@luma.gl/webgl';
6
+ import { isBrowser } from '@probe.gl/env';
4
7
  const isPage = isBrowser() && typeof document !== 'undefined';
5
8
  let statIdCounter = 0;
9
+ const DEFAULT_ANIMATION_LOOP_PROPS = {
10
+ onCreateDevice: props => luma.createDevice(props),
11
+ onCreateContext: null,
12
+ onAddHTML: null,
13
+ onInitialize: () => ({}),
14
+ onRender: () => {},
15
+ onFinalize: () => {},
16
+ onError: error => console.error(error),
17
+ device: null,
18
+ debug: false,
19
+ useDevicePixels: true,
20
+ autoResizeViewport: true,
21
+ autoResizeDrawingBuffer: true,
22
+ stats: lumaStats.get("animation-loop-".concat(statIdCounter++)),
23
+ gl: null,
24
+ glOptions: {},
25
+ createFramebuffer: false
26
+ };
6
27
  export default class AnimationLoop {
7
28
  constructor(props = {}) {
8
- const {
9
- onCreateContext = opts => createGLContext(opts),
10
- onAddHTML = null,
11
- onInitialize = () => {},
12
- onRender = () => {},
13
- onFinalize = () => {},
14
- onError,
15
- gl = null,
16
- glOptions = {},
17
- debug = false,
18
- createFramebuffer = false,
19
- autoResizeViewport = true,
20
- autoResizeDrawingBuffer = true,
21
- stats = lumaStats.get(`animation-loop-${statIdCounter++}`)
22
- } = props;
29
+ _defineProperty(this, "device", void 0);
30
+
31
+ _defineProperty(this, "canvas", void 0);
32
+
33
+ _defineProperty(this, "props", void 0);
34
+
35
+ _defineProperty(this, "animationProps", void 0);
36
+
37
+ _defineProperty(this, "framebuffer", null);
38
+
39
+ _defineProperty(this, "timeline", null);
40
+
41
+ _defineProperty(this, "stats", void 0);
42
+
43
+ _defineProperty(this, "cpuTime", void 0);
44
+
45
+ _defineProperty(this, "gpuTime", void 0);
46
+
47
+ _defineProperty(this, "frameRate", void 0);
48
+
49
+ _defineProperty(this, "display", void 0);
50
+
51
+ _defineProperty(this, "needsRedraw", 'initialized');
52
+
53
+ _defineProperty(this, "_initialized", false);
54
+
55
+ _defineProperty(this, "_running", false);
56
+
57
+ _defineProperty(this, "_animationFrameId", null);
58
+
59
+ _defineProperty(this, "_pageLoadPromise", null);
60
+
61
+ _defineProperty(this, "_nextFramePromise", null);
62
+
63
+ _defineProperty(this, "_resolveNextFrame", null);
64
+
65
+ _defineProperty(this, "_cpuStartTime", 0);
66
+
67
+ _defineProperty(this, "_gpuTimeQuery", null);
68
+
69
+ _defineProperty(this, "gl", void 0);
70
+
71
+ this.props = { ...DEFAULT_ANIMATION_LOOP_PROPS,
72
+ ...props
73
+ };
74
+ props = this.props;
23
75
  let {
24
76
  useDevicePixels = true
25
- } = props;
77
+ } = this.props;
26
78
 
27
79
  if ('useDevicePixelRatio' in props) {
28
80
  log.deprecated('useDevicePixelRatio', 'useDevicePixels')();
29
81
  useDevicePixels = props.useDevicePixelRatio;
30
82
  }
31
83
 
32
- this.props = {
33
- onCreateContext,
34
- onAddHTML,
35
- onInitialize,
36
- onRender,
37
- onFinalize,
38
- onError,
39
- gl,
40
- glOptions,
41
- debug,
42
- createFramebuffer
43
- };
44
- this.gl = gl;
45
- this.needsRedraw = null;
46
- this.timeline = null;
47
- this.stats = stats;
84
+ this.device = props.device;
85
+ this.gl = this.device && this.device.gl || props.gl;
86
+ this.stats = props.stats;
48
87
  this.cpuTime = this.stats.get('CPU Time');
49
88
  this.gpuTime = this.stats.get('GPU Time');
50
89
  this.frameRate = this.stats.get('Frame Rate');
51
- this._initialized = false;
52
- this._running = false;
53
- this._animationFrameId = null;
54
- this._nextFramePromise = null;
55
- this._resolveNextFrame = null;
56
- this._cpuStartTime = 0;
57
90
  this.setProps({
58
- autoResizeViewport,
59
- autoResizeDrawingBuffer,
91
+ autoResizeViewport: props.autoResizeViewport,
92
+ autoResizeDrawingBuffer: props.autoResizeDrawingBuffer,
60
93
  useDevicePixels
61
94
  });
62
95
  this.start = this.start.bind(this);
63
96
  this.stop = this.stop.bind(this);
64
- this._pageLoadPromise = null;
65
97
  this._onMousemove = this._onMousemove.bind(this);
66
98
  this._onMouseleave = this._onMouseleave.bind(this);
67
99
  }
68
100
 
69
- delete() {
101
+ destroy() {
70
102
  this.stop();
71
103
 
72
104
  this._setDisplay(null);
73
105
  }
74
106
 
107
+ delete() {
108
+ this.destroy();
109
+ }
110
+
75
111
  setNeedsRedraw(reason) {
76
- assert(typeof reason === 'string');
77
112
  this.needsRedraw = this.needsRedraw || reason;
78
113
  return this;
79
114
  }
80
115
 
81
116
  setProps(props) {
82
117
  if ('autoResizeViewport' in props) {
83
- this.autoResizeViewport = props.autoResizeViewport;
118
+ this.props.autoResizeViewport = props.autoResizeViewport;
84
119
  }
85
120
 
86
121
  if ('autoResizeDrawingBuffer' in props) {
87
- this.autoResizeDrawingBuffer = props.autoResizeDrawingBuffer;
122
+ this.props.autoResizeDrawingBuffer = props.autoResizeDrawingBuffer;
88
123
  }
89
124
 
90
125
  if ('useDevicePixels' in props) {
91
- this.useDevicePixels = props.useDevicePixels;
126
+ this.props.useDevicePixels = props.useDevicePixels;
92
127
  }
93
128
 
94
129
  return this;
95
130
  }
96
131
 
97
132
  start(opts = {}) {
133
+ this._start(opts);
134
+
135
+ return this;
136
+ }
137
+
138
+ async _start(opts) {
98
139
  if (this._running) {
99
140
  return this;
100
141
  }
101
142
 
102
143
  this._running = true;
103
144
 
104
- const startPromise = this._getPageLoadPromise().then(() => {
105
- if (!this._running || this._initialized) {
145
+ try {
146
+ await this._getPageLoadPromise();
147
+
148
+ if (!this._running) {
106
149
  return null;
107
150
  }
108
151
 
109
- this._createWebGLContext(opts);
110
-
111
- this._createFramebuffer();
152
+ let appContext;
112
153
 
113
- this._startEventHandling();
154
+ if (!this._initialized) {
155
+ this._initialized = true;
114
156
 
115
- this._initializeCallbackData();
157
+ this._initialize(opts);
116
158
 
117
- this._updateCallbackData();
159
+ appContext = await this.onInitialize(this.animationProps);
118
160
 
119
- this._resizeCanvasDrawingBuffer();
161
+ this._addCallbackData(appContext || {});
162
+ }
120
163
 
121
- this._resizeViewport();
164
+ if (!this._running) {
165
+ return null;
166
+ }
122
167
 
123
- this._gpuTimeQuery = Query.isSupported(this.gl, ['timers']) ? new Query(this.gl) : null;
124
- this._initialized = true;
125
- return this.onInitialize(this.animationProps);
126
- }).then(appContext => {
127
- if (this._running) {
128
- this._addCallbackData(appContext || {});
168
+ if (appContext !== false) {
169
+ this._cancelAnimationFrame();
129
170
 
130
- if (appContext !== false) {
131
- this._startLoop();
132
- }
171
+ this._requestAnimationFrame();
133
172
  }
134
- });
135
173
 
136
- if (this.props.onError) {
137
- startPromise.catch(this.props.onError);
174
+ return this;
175
+ } catch (error) {
176
+ this.props.onError(error);
177
+ return null;
138
178
  }
139
-
140
- return this;
141
179
  }
142
180
 
143
181
  redraw() {
@@ -155,10 +193,6 @@ export default class AnimationLoop {
155
193
 
156
194
  this._clearNeedsRedraw();
157
195
 
158
- if (this.offScreen && this.gl.commit) {
159
- this.gl.commit();
160
- }
161
-
162
196
  if (this._resolveNextFrame) {
163
197
  this._resolveNextFrame(this);
164
198
 
@@ -175,11 +209,10 @@ export default class AnimationLoop {
175
209
  if (this._running) {
176
210
  this._finalizeCallbackData();
177
211
 
178
- this._cancelAnimationFrame(this._animationFrameId);
212
+ this._cancelAnimationFrame();
179
213
 
180
214
  this._nextFramePromise = null;
181
215
  this._resolveNextFrame = null;
182
- this._animationFrameId = null;
183
216
  this._running = false;
184
217
  }
185
218
 
@@ -217,20 +250,24 @@ export default class AnimationLoop {
217
250
  return this.gl.isContextLost();
218
251
  }
219
252
 
220
- onCreateContext(...args) {
221
- return this.props.onCreateContext(...args);
253
+ onCreateDevice(deviceProps) {
254
+ return this.props.onCreateDevice(deviceProps);
222
255
  }
223
256
 
224
- onInitialize(...args) {
225
- return this.props.onInitialize(...args);
257
+ onInitialize(animationProps) {
258
+ return this.props.onInitialize(animationProps);
226
259
  }
227
260
 
228
- onRender(...args) {
229
- return this.props.onRender(...args);
261
+ onRender(animationProps) {
262
+ return this.props.onRender(animationProps);
230
263
  }
231
264
 
232
- onFinalize(...args) {
233
- return this.props.onFinalize(...args);
265
+ onFinalize(animationProps) {
266
+ return this.props.onFinalize(animationProps);
267
+ }
268
+
269
+ onCreateContext(props) {
270
+ return this.props.onCreateContext(props);
234
271
  }
235
272
 
236
273
  getHTMLControlValue(id, defaultValue = 1) {
@@ -238,24 +275,22 @@ export default class AnimationLoop {
238
275
  return element ? Number(element.value) : defaultValue;
239
276
  }
240
277
 
241
- setViewParameters() {
242
- log.removed('AnimationLoop.setViewParameters', 'AnimationLoop.setProps')();
243
- return this;
244
- }
278
+ _initialize(props) {
279
+ this._createDevice(props);
245
280
 
246
- _startLoop() {
247
- const renderFrame = () => {
248
- if (!this._running) {
249
- return;
250
- }
281
+ this._createFramebuffer();
251
282
 
252
- this.redraw();
253
- this._animationFrameId = this._requestAnimationFrame(renderFrame);
254
- };
283
+ this._startEventHandling();
284
+
285
+ this._initializeCallbackData();
286
+
287
+ this._updateCallbackData();
255
288
 
256
- this._cancelAnimationFrame(this._animationFrameId);
289
+ this._resizeCanvasDrawingBuffer();
290
+
291
+ this._resizeViewport();
257
292
 
258
- this._animationFrameId = this._requestAnimationFrame(renderFrame);
293
+ this._gpuTimeQuery = Query.isSupported(this.gl, ['timers']) ? new Query(this.gl) : null;
259
294
  }
260
295
 
261
296
  _getPageLoadPromise() {
@@ -288,34 +323,41 @@ export default class AnimationLoop {
288
323
  this.display = display;
289
324
  }
290
325
 
291
- _cancelAnimationFrame(animationFrameId) {
292
- if (this.display && this.display.cancelAnimationFrame) {
293
- return this.display.cancelAnimationFrame(animationFrameId);
326
+ _requestAnimationFrame() {
327
+ if (!this._running) {
328
+ return;
294
329
  }
295
330
 
296
- return cancelAnimationFrame(animationFrameId);
331
+ this._animationFrameId = requestAnimationFrame(this._animationFrame.bind(this));
297
332
  }
298
333
 
299
- _requestAnimationFrame(renderFrameCallback) {
300
- if (this._running) {
301
- if (this.display && this.display.requestAnimationFrame) {
302
- return this.display.requestAnimationFrame(renderFrameCallback);
303
- }
334
+ _cancelAnimationFrame() {
335
+ if (this._animationFrameId !== null) {
336
+ return;
337
+ }
338
+
339
+ cancelAnimationFrame(this._animationFrameId);
340
+ this._animationFrameId = null;
341
+ }
304
342
 
305
- return requestAnimationFrame(renderFrameCallback);
343
+ _animationFrame() {
344
+ if (!this._running) {
345
+ return;
306
346
  }
307
347
 
308
- return undefined;
348
+ this.redraw();
349
+
350
+ this._requestAnimationFrame();
309
351
  }
310
352
 
311
- _renderFrame(...args) {
353
+ _renderFrame(props) {
312
354
  if (this.display) {
313
- this.display._renderFrame(...args);
355
+ this.display._renderFrame(props);
314
356
 
315
357
  return;
316
358
  }
317
359
 
318
- this.onRender(...args);
360
+ this.onRender(props);
319
361
  }
320
362
 
321
363
  _clearNeedsRedraw() {
@@ -332,21 +374,24 @@ export default class AnimationLoop {
332
374
 
333
375
  _initializeCallbackData() {
334
376
  this.animationProps = {
377
+ device: this.device,
335
378
  gl: this.gl,
336
379
  stop: this.stop,
337
380
  canvas: this.gl.canvas,
338
- framebuffer: this.framebuffer,
339
- useDevicePixels: this.useDevicePixels,
381
+ useDevicePixels: this.props.useDevicePixels,
340
382
  needsRedraw: null,
341
383
  startTime: Date.now(),
342
384
  engineTime: 0,
343
385
  tick: 0,
344
386
  tock: 0,
387
+ timeline: this.timeline,
388
+ animationLoop: this,
345
389
  time: 0,
390
+ _mousePosition: null,
391
+ framebuffer: this.framebuffer,
346
392
  _timeline: this.timeline,
347
393
  _loop: this,
348
- _animationLoop: this,
349
- _mousePosition: null
394
+ _animationLoop: this
350
395
  };
351
396
  }
352
397
 
@@ -378,7 +423,6 @@ export default class AnimationLoop {
378
423
  this.animationProps.tick = Math.floor(this.animationProps.time / 1000 * 60);
379
424
  this.animationProps.tock++;
380
425
  this.animationProps.time = this.timeline ? this.timeline.getTime() : this.animationProps.engineTime;
381
- this.animationProps._offScreen = this.offScreen;
382
426
  }
383
427
 
384
428
  _finalizeCallbackData() {
@@ -391,10 +435,13 @@ export default class AnimationLoop {
391
435
  }
392
436
  }
393
437
 
394
- _createWebGLContext(opts) {
395
- this.offScreen = opts.canvas && typeof OffscreenCanvas !== 'undefined' && opts.canvas instanceof OffscreenCanvas;
396
- opts = Object.assign({}, opts, this.props.glOptions);
397
- this.gl = this.props.gl ? instrumentGLContext(this.props.gl, opts) : this.onCreateContext(opts);
438
+ _createDevice(props) {
439
+ const deviceProps = { ...this.props,
440
+ ...props,
441
+ ...this.props.glOptions
442
+ };
443
+ this.device = this.onCreateDevice(deviceProps);
444
+ this.gl = this.device.gl;
398
445
 
399
446
  if (!isWebGL(this.gl)) {
400
447
  throw new Error('AnimationLoop.onCreateContext - illegal context returned');
@@ -448,30 +495,15 @@ export default class AnimationLoop {
448
495
  }
449
496
 
450
497
  _resizeViewport() {
451
- if (this.autoResizeViewport) {
498
+ if (this.props.autoResizeViewport) {
452
499
  this.gl.viewport(0, 0, this.gl.drawingBufferWidth, this.gl.drawingBufferHeight);
453
500
  }
454
501
  }
455
502
 
456
503
  _resizeCanvasDrawingBuffer() {
457
- if (this.autoResizeDrawingBuffer) {
458
- resizeGLContext(this.gl, {
459
- useDevicePixels: this.useDevicePixels
460
- });
461
- }
462
- }
463
-
464
- _createFramebuffer() {
465
- if (this.props.createFramebuffer) {
466
- this.framebuffer = new Framebuffer(this.gl);
467
- }
468
- }
469
-
470
- _resizeFramebuffer() {
471
- if (this.framebuffer) {
472
- this.framebuffer.resize({
473
- width: this.gl.drawingBufferWidth,
474
- height: this.gl.drawingBufferHeight
504
+ if (this.props.autoResizeDrawingBuffer) {
505
+ this.device.resize({
506
+ useDevicePixels: this.props.useDevicePixels
475
507
  });
476
508
  }
477
509
  }
@@ -518,5 +550,20 @@ export default class AnimationLoop {
518
550
  this.animationProps._mousePosition = null;
519
551
  }
520
552
 
553
+ _createFramebuffer() {
554
+ if (this.props.createFramebuffer) {
555
+ this.framebuffer = new Framebuffer(this.gl);
556
+ }
557
+ }
558
+
559
+ _resizeFramebuffer() {
560
+ if (this.framebuffer) {
561
+ this.framebuffer.resize({
562
+ width: this.gl.drawingBufferWidth,
563
+ height: this.gl.drawingBufferHeight
564
+ });
565
+ }
566
+ }
567
+
521
568
  }
522
569
  //# sourceMappingURL=animation-loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/animation-loop.ts"],"names":["luma","lumaStats","log","isWebGL","resetParameters","requestAnimationFrame","cancelAnimationFrame","Query","Framebuffer","isBrowser","isPage","document","statIdCounter","DEFAULT_ANIMATION_LOOP_PROPS","onCreateDevice","props","createDevice","onCreateContext","onAddHTML","onInitialize","onRender","onFinalize","onError","error","console","device","debug","useDevicePixels","autoResizeViewport","autoResizeDrawingBuffer","stats","get","gl","glOptions","createFramebuffer","AnimationLoop","constructor","deprecated","useDevicePixelRatio","cpuTime","gpuTime","frameRate","setProps","start","bind","stop","_onMousemove","_onMouseleave","destroy","_setDisplay","delete","setNeedsRedraw","reason","needsRedraw","opts","_start","_running","_getPageLoadPromise","appContext","_initialized","_initialize","animationProps","_addCallbackData","_cancelAnimationFrame","_requestAnimationFrame","redraw","isContextLost","_beginTimers","_setupFrame","_updateCallbackData","_renderFrame","_clearNeedsRedraw","_resolveNextFrame","_nextFramePromise","_endTimers","_finalizeCallbackData","attachTimeline","timeline","detachTimeline","waitForRender","Promise","resolve","toDataURL","canvas","deviceProps","getHTMLControlValue","id","defaultValue","element","getElementById","Number","value","_createDevice","_createFramebuffer","_startEventHandling","_initializeCallbackData","_resizeCanvasDrawingBuffer","_resizeViewport","_gpuTimeQuery","isSupported","_pageLoadPromise","reject","readyState","window","addEventListener","display","animationLoop","_animationFrameId","_animationFrame","_resizeFramebuffer","startTime","Date","now","engineTime","tick","tock","time","_mousePosition","framebuffer","_timeline","_loop","_animationLoop","width","height","aspect","_getSizeAndAspect","update","Math","floor","getTime","Object","assign","Error","_createInfoDiv","wrapperDiv","createElement","body","appendChild","style","position","div","left","bottom","background","html","innerHTML","drawingBufferWidth","drawingBufferHeight","clientHeight","clientWidth","viewport","resize","timeEnd","timeStart","isResultAvailable","isTimerDisjoint","addTime","getTimerMilliseconds","beginTimeElapsedQuery","end","e","offsetX","offsetY"],"mappings":"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","sourcesContent":["import {luma, Device} from '@luma.gl/api';\nimport {\n lumaStats,\n // TODO - remove dependency on framebuffer (bundle size impact)\n log,\n assert\n} from '@luma.gl/api';\nimport type {WebGLDeviceProps} from '@luma.gl/webgl'\nimport {WebGLDevice} from '@luma.gl/webgl';\nimport {\n isWebGL,\n // createGLContext,\n // instrumentGLContext,\n // resizeGLContext,\n resetParameters\n} from '@luma.gl/webgl';\n\n\nimport {\n requestAnimationFrame,\n cancelAnimationFrame,\n Query,\n // TODO - remove dependency on framebuffer (bundle size impact)\n Framebuffer\n} from '@luma.gl/webgl';\n\nimport { Stats, Stat } from '@probe.gl/stats'\nimport {isBrowser} from '@probe.gl/env';\n\nimport { Timeline } from '../animation/timeline'\n\n\ntype DeviceProps = WebGLDeviceProps;\ntype ContextProps = WebGLDeviceProps;\n\nconst isPage = isBrowser() && typeof document !== 'undefined';\n\nlet statIdCounter = 0;\n\n/** AnimationLoop properties */\nexport type AnimationLoopProps = {\n onCreateDevice?: (props: DeviceProps) => Device;\n onCreateContext?: (props: ContextProps) => WebGLRenderingContext; // TODO: signature from createGLContext\n onAddHTML?: (div: HTMLDivElement) => string; // innerHTML\n onInitialize?: (animationProps: AnimationProps) => {} | void;\n onRender?: (animationProps: AnimationProps) => void;\n onFinalize?: (animationProps: AnimationProps) => void;\n onError?: (reason: any) => void;\n\n stats?: Stats;\n\n device?: Device;\n glOptions?: ContextProps; // createGLContext options\n debug?: boolean;\n\n // view parameters\n autoResizeViewport?: boolean;\n autoResizeDrawingBuffer?: boolean;\n useDevicePixels?: number | boolean;\n\n /** @deprecated Use .device */\n gl?: WebGLRenderingContext\n /** @deprecated Will be removed */\n createFramebuffer?: boolean;\n};\n\nexport type AnimationProps = {\n device: Device;\n\n stop: () => AnimationLoop\n canvas: HTMLCanvasElement | OffscreenCanvas\n // Initial values\n useDevicePixels: number | boolean\n needsRedraw?: string\n // Animation props\n startTime: number\n engineTime: number\n tick: number\n tock: number\n\n // Timeline time for back compatibility\n time: number\n\n width: number\n height: number\n aspect: number\n\n timeline: Timeline\n animationLoop: AnimationLoop\n\n // Experimental\n _mousePosition?: [number, number] // [offsetX, offsetY],\n\n /** @deprecated Will be removed, create your own Framebuffer */\n framebuffer: Framebuffer\n /** @deprecated Use .device */\n gl: WebGLRenderingContext\n\n /** @deprecated Use .timeline */\n _timeline: Timeline\n /** @deprecated Use .animationLoop */\n _loop: AnimationLoop\n /** @deprecated Use .animationLoop */\n _animationLoop: AnimationLoop\n}\n\nconst DEFAULT_ANIMATION_LOOP_PROPS: Required<AnimationLoopProps> = {\n onCreateDevice: (props: DeviceProps) => luma.createDevice(props),\n onCreateContext: null,\n onAddHTML: null,\n onInitialize: () => ({}),\n onRender: () => {},\n onFinalize: () => {},\n onError: (error) => console.error(error), // eslint-disable-line no-console\n\n device: null,\n debug: false,\n\n // view parameters\n useDevicePixels: true,\n autoResizeViewport: true,\n autoResizeDrawingBuffer: true,\n stats: lumaStats.get(`animation-loop-${statIdCounter++}`),\n\n // deprecated\n // onCreateContext: (opts) => createGLContext(opts),\n gl: null,\n glOptions: {},\n createFramebuffer: false\n};\n\n/** Convenient animation loop */\nexport default class AnimationLoop {\n device: Device;\n canvas: HTMLCanvasElement | OffscreenCanvas;\n\n props: Required<AnimationLoopProps>;\n animationProps: AnimationProps;\n framebuffer: Framebuffer = null;\n timeline: Timeline = null;\n stats: Stats;\n cpuTime: Stat;\n gpuTime: Stat;\n frameRate: Stat;\n\n display: any;\n\n needsRedraw: string | null = 'initialized';\n\n _initialized: boolean = false;\n _running: boolean = false;\n _animationFrameId = null;\n _pageLoadPromise: Promise<{}> | null = null;\n _nextFramePromise: Promise<AnimationLoop> | null = null;\n _resolveNextFrame: ((AnimationLoop) => void) | null = null;\n _cpuStartTime: number = 0;\n\n _gpuTimeQuery: Query | null = null;\n\n /** @deprecated */\n gl: WebGLRenderingContext;\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 let {useDevicePixels = true} = this.props;\n\n if ('useDevicePixelRatio' in props) {\n log.deprecated('useDevicePixelRatio', 'useDevicePixels')();\n // @ts-expect-error\n useDevicePixels = props.useDevicePixelRatio;\n }\n\n // state\n this.device = props.device;\n // @ts-expect-error\n this.gl = (this.device && this.device.gl) || props.gl;\n\n this.stats = props.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 setProps(props: AnimationLoopProps): this {\n if ('autoResizeViewport' in props) {\n this.props.autoResizeViewport = props.autoResizeViewport;\n }\n if ('autoResizeDrawingBuffer' in props) {\n this.props.autoResizeDrawingBuffer = props.autoResizeDrawingBuffer;\n }\n if ('useDevicePixels' in props) {\n this.props.useDevicePixels = props.useDevicePixels;\n }\n return this;\n }\n\n start(opts = {}) {\n this._start(opts);\n return this;\n }\n\n /** Starts a render loop if not already running\n * @param {Object} context - contains frame specific info (E.g. tick, width, height, etc)\n */\n async _start(opts) {\n if (this._running) {\n return this;\n }\n this._running = true;\n\n // console.debug(`Starting ${this.constructor.name}`);\n // Wait for start promise before rendering frame\n try {\n await this._getPageLoadPromise();\n\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 this._initialize(opts);\n\n // Note: onIntialize can return a promise (in case app needs to load resources)\n appContext = await this.onInitialize(this.animationProps);\n this._addCallbackData(appContext || {});\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 (error) {\n this.props.onError(error);\n // this._running = false; // TODO\n return null;\n }\n }\n\n /** Explicitly draw a frame */\n redraw(): this {\n if (this.isContextLost()) {\n return this;\n }\n\n this._beginTimers();\n\n this._setupFrame();\n this._updateCallbackData();\n\n this._renderFrame(this.animationProps);\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 this._finalizeCallbackData();\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() {\n this.setNeedsRedraw('toDataURL');\n\n await this.waitForRender();\n\n return this.gl.canvas.toDataURL();\n }\n\n isContextLost(): boolean {\n return this.gl.isContextLost();\n }\n\n onCreateDevice(deviceProps: DeviceProps) {\n return this.props.onCreateDevice(deviceProps);\n }\n\n onInitialize(animationProps: AnimationProps): {} | void {\n return this.props.onInitialize(animationProps);\n }\n\n onRender(animationProps: AnimationProps) {\n return this.props.onRender(animationProps);\n }\n\n onFinalize(animationProps: AnimationProps) {\n return this.props.onFinalize(animationProps);\n }\n\n // DEPRECATED/REMOVED METHODS\n\n /** @deprecated Use .onCreateDevice() */\n onCreateContext(props: ContextProps) {\n return this.props.onCreateContext(props);\n }\n\n /** @deprecated */\n getHTMLControlValue(id, defaultValue = 1) {\n const element = document.getElementById(id);\n // @ts-expect-error Not all html elements have value\n return element ? Number(element.value) : defaultValue;\n }\n\n // PRIVATE METHODS\n\n _initialize(props: AnimationLoopProps) {\n // Create the WebGL context\n this._createDevice(props);\n this._createFramebuffer();\n this._startEventHandling();\n\n // Initialize the callback data\n this._initializeCallbackData();\n this._updateCallbackData();\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 _getPageLoadPromise() {\n if (!this._pageLoadPromise) {\n this._pageLoadPromise = isPage\n ? new Promise((resolve, reject) => {\n if (isPage && document.readyState === 'complete') {\n resolve(document);\n return;\n }\n window.addEventListener('load', () => {\n resolve(document);\n });\n })\n : Promise.resolve({});\n }\n return this._pageLoadPromise;\n }\n\n _setDisplay(display) {\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(props: AnimationProps) {\n // Allow e.g. VR display to render multiple frames.\n if (this.display) {\n this.display._renderFrame(props);\n return;\n }\n\n // call callback\n this.onRender(props);\n // end callback\n }\n\n _clearNeedsRedraw() {\n this.needsRedraw = null;\n }\n\n _setupFrame() {\n this._resizeCanvasDrawingBuffer();\n this._resizeViewport();\n this._resizeFramebuffer();\n }\n\n // Initialize the object that will be passed to app callbacks\n _initializeCallbackData() {\n // @ts-expect-error\n this.animationProps = {\n device: this.device,\n gl: this.gl,\n\n stop: this.stop,\n canvas: this.gl.canvas,\n\n // Initial values\n useDevicePixels: this.props.useDevicePixels,\n needsRedraw: null,\n\n // Animation props\n startTime: Date.now(),\n engineTime: 0,\n tick: 0,\n tock: 0,\n\n timeline: this.timeline,\n animationLoop: this,\n\n // Timeline time for back compatibility\n time: 0,\n\n // Experimental\n _mousePosition: null, // Event props\n\n // Deprecated\n framebuffer: this.framebuffer,\n _timeline: this.timeline,\n _loop: this,\n _animationLoop: this\n };\n }\n\n // Update the context object that will be passed to app callbacks\n _updateCallbackData() {\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 _finalizeCallbackData() {\n // call callback\n this.onFinalize(this.animationProps);\n // end callback\n }\n\n /** Add application's data to the app context object */\n _addCallbackData(appContext) {\n if (typeof appContext === 'object' && appContext !== null) {\n this.animationProps = Object.assign({}, this.animationProps, appContext);\n }\n }\n\n /** Either uses supplied or existing context, or calls provided callback to create one */\n _createDevice(props: DeviceProps) {\n const deviceProps = {...this.props, ...props, ...this.props.glOptions};\n\n // TODO - support this.onCreateContext\n // Create the WebGL context if necessary\n // this.gl = this.props.gl ? instrumentGLContext(this.props.gl, deviceProps) : this.onCreateContext(deviceProps);\n\n this.device = this.onCreateDevice(deviceProps);\n // @ts-expect-error\n this.gl = this.device.gl;\n\n if (!isWebGL(this.gl)) {\n throw new Error('AnimationLoop.onCreateContext - illegal context returned');\n }\n\n // Reset the WebGL context.\n resetParameters(this.gl);\n\n this._createInfoDiv();\n }\n\n _createInfoDiv() {\n if (this.gl.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 wrapperDiv.appendChild(this.gl.canvas);\n wrapperDiv.appendChild(div);\n const html = this.props.onAddHTML(div);\n if (html) {\n div.innerHTML = html;\n }\n }\n }\n\n _getSizeAndAspect() {\n // https://webglfundamentals.org/webgl/lessons/webgl-resizing-the-canvas.html\n const width = this.gl.drawingBufferWidth;\n const height = this.gl.drawingBufferHeight;\n\n // https://webglfundamentals.org/webgl/lessons/webgl-anti-patterns.html\n let aspect = 1;\n const {canvas} = this.gl;\n\n if (canvas && canvas.clientHeight) {\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 if (this.props.autoResizeViewport) {\n this.gl.viewport(0, 0, this.gl.drawingBufferWidth, this.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 as WebGLDevice).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 const {canvas} = this.gl;\n if (canvas) {\n canvas.addEventListener('mousemove', this._onMousemove);\n canvas.addEventListener('mouseleave', this._onMouseleave);\n }\n }\n\n _onMousemove(e) {\n this.animationProps._mousePosition = [e.offsetX, e.offsetY];\n }\n _onMouseleave(e) {\n this.animationProps._mousePosition = null;\n }\n\n // Deprecated\n\n /** @deprecated */\n _createFramebuffer() {\n // Setup default framebuffer\n if (this.props.createFramebuffer) {\n this.framebuffer = new Framebuffer(this.gl);\n }\n }\n\n /** @deprecated */\n _resizeFramebuffer() {\n if (this.framebuffer) {\n this.framebuffer.resize({\n width: this.gl.drawingBufferWidth,\n height: this.gl.drawingBufferHeight\n });\n }\n } \n}\n"],"file":"animation-loop.js"}
@@ -0,0 +1,4 @@
1
+ import { Buffer } from '@luma.gl/webgl';
2
+ export declare function getBuffersFromGeometry(gl: WebGLRenderingContext, geometry: any, options?: any): Record<string, Buffer | [Buffer, {}]>;
3
+ export declare function inferAttributeAccessor(attributeName: any, attribute: any): void;
4
+ //# sourceMappingURL=model-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-utils.d.ts","sourceRoot":"","sources":["../../src/lib/model-utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAS,MAAM,gBAAgB,CAAC;AAY9C,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,qBAAqB,EAAE,QAAQ,KAAA,EAAE,OAAO,CAAC,KAAA,yCA2CnF;AASD,wBAAgB,sBAAsB,CAAC,aAAa,KAAA,EAAE,SAAS,KAAA,QA8B9D"}
@@ -1,3 +1,4 @@
1
+ import GL from '@luma.gl/constants';
1
2
  import { Buffer, assert } from '@luma.gl/webgl';
2
3
  const GLTF_TO_LUMA_ATTRIBUTE_MAP = {
3
4
  POSITION: 'positions',
@@ -38,7 +39,7 @@ export function getBuffersFromGeometry(gl, geometry, options) {
38
39
  };
39
40
  buffers.indices = [new Buffer(gl, {
40
41
  data,
41
- target: 34963
42
+ target: GL.ELEMENT_ARRAY_BUFFER
42
43
  }), accessor];
43
44
  }
44
45
 
@@ -85,6 +86,6 @@ export function inferAttributeAccessor(attributeName, attribute) {
85
86
  default:
86
87
  }
87
88
 
88
- assert(Number.isFinite(attribute.size), `attribute ${attributeName} needs size`);
89
+ assert(Number.isFinite(attribute.size), "attribute ".concat(attributeName, " needs size"));
89
90
  }
90
91
  //# sourceMappingURL=model-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/model-utils.ts"],"names":["GL","Buffer","assert","GLTF_TO_LUMA_ATTRIBUTE_MAP","POSITION","NORMAL","COLOR_0","TEXCOORD_0","TEXCOORD_1","TEXCOORD_2","getBuffersFromGeometry","gl","geometry","options","buffers","indices","name","attributes","attribute","remappedName","mapAttributeName","constant","value","typedArray","accessor","inferAttributeAccessor","data","Uint16Array","Uint32Array","size","isIndexed","undefined","target","ELEMENT_ARRAY_BUFFER","attributeMap","attributeName","category","Number","isFinite"],"mappings":"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","sourcesContent":["import GL from '@luma.gl/constants';\nimport {Buffer, assert} from '@luma.gl/webgl';\n\n// Support for mapping new geometries with glTF attribute names to \"classic\" luma.gl shader names\nconst GLTF_TO_LUMA_ATTRIBUTE_MAP = {\n POSITION: 'positions',\n NORMAL: 'normals',\n COLOR_0: 'colors',\n TEXCOORD_0: 'texCoords',\n TEXCOORD_1: 'texCoords1',\n TEXCOORD_2: 'texCoords2'\n};\n\nexport function getBuffersFromGeometry(gl: WebGLRenderingContext, geometry, options?) {\n const buffers: Record<string, Buffer | [Buffer, {}]> = {};\n let indices = geometry.indices;\n\n for (const name in geometry.attributes) {\n const attribute = geometry.attributes[name];\n const remappedName = mapAttributeName(name, options);\n\n if (name === 'indices') {\n indices = attribute;\n } else if (attribute.constant) {\n buffers[remappedName] = attribute.value;\n } else {\n const typedArray = attribute.value;\n // Create accessor by copying the attribute and removing `value``\n const accessor = {...attribute};\n delete accessor.value;\n buffers[remappedName] = [new Buffer(gl, typedArray), accessor];\n\n inferAttributeAccessor(name, accessor);\n }\n }\n\n if (indices) {\n const data = indices.value || indices;\n assert(\n data instanceof Uint16Array || data instanceof Uint32Array,\n 'attribute array for \"indices\" must be of integer type'\n );\n const accessor = {\n size: 1,\n isIndexed: indices.isIndexed === undefined ? true : indices.isIndexed\n };\n buffers.indices = [\n new Buffer(gl, {\n data,\n target: GL.ELEMENT_ARRAY_BUFFER\n }),\n accessor\n ];\n }\n\n return buffers;\n}\n\nfunction mapAttributeName(name, options) {\n const {attributeMap = GLTF_TO_LUMA_ATTRIBUTE_MAP} = options || {};\n return (attributeMap && attributeMap[name]) || name;\n}\n\n// Check for well known attribute names\n// eslint-disable-next-line complexity\nexport function inferAttributeAccessor(attributeName, attribute) {\n let category;\n switch (attributeName) {\n case 'texCoords':\n case 'texCoord1':\n case 'texCoord2':\n case 'texCoord3':\n category = 'uvs';\n break;\n case 'vertices':\n case 'positions':\n case 'normals':\n case 'pickingColors':\n category = 'vectors';\n break;\n default:\n }\n\n // Check for categorys\n switch (category) {\n case 'vectors':\n attribute.size = attribute.size || 3;\n break;\n case 'uvs':\n attribute.size = attribute.size || 2;\n break;\n default:\n }\n\n assert(Number.isFinite(attribute.size), `attribute ${attributeName} needs size`);\n}\n"],"file":"model-utils.js"}