@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,601 +0,0 @@
1
- import {
2
- isWebGL,
3
- createGLContext,
4
- instrumentGLContext,
5
- resizeGLContext,
6
- resetParameters
7
- } from '@luma.gl/gltools';
8
-
9
- import {
10
- requestAnimationFrame,
11
- cancelAnimationFrame,
12
- Query,
13
- lumaStats,
14
- // TODO - remove dependency on framebuffer (bundle size impact)
15
- Framebuffer,
16
- log,
17
- assert
18
- } from '@luma.gl/webgl';
19
-
20
- import {isBrowser} from 'probe.gl/env';
21
-
22
- const isPage = isBrowser() && typeof document !== 'undefined';
23
-
24
- let statIdCounter = 0;
25
-
26
- export default class AnimationLoop {
27
- /*
28
- * @param {HTMLCanvasElement} canvas - if provided, width and height will be passed to context
29
- */
30
- constructor(props = {}) {
31
- const {
32
- onCreateContext = opts => createGLContext(opts),
33
- onAddHTML = null,
34
- onInitialize = () => {},
35
- onRender = () => {},
36
- onFinalize = () => {},
37
- onError,
38
-
39
- gl = null,
40
- glOptions = {},
41
- debug = false,
42
-
43
- createFramebuffer = false,
44
-
45
- // view parameters
46
- autoResizeViewport = true,
47
- autoResizeDrawingBuffer = true,
48
- stats = lumaStats.get(`animation-loop-${statIdCounter++}`)
49
- } = props;
50
-
51
- let {useDevicePixels = true} = props;
52
-
53
- if ('useDevicePixelRatio' in props) {
54
- log.deprecated('useDevicePixelRatio', 'useDevicePixels')();
55
- // @ts-ignore
56
- useDevicePixels = props.useDevicePixelRatio;
57
- }
58
-
59
- this.props = {
60
- onCreateContext,
61
- onAddHTML,
62
- onInitialize,
63
- onRender,
64
- onFinalize,
65
- onError,
66
-
67
- gl,
68
- glOptions,
69
- debug,
70
- createFramebuffer
71
- };
72
-
73
- // state
74
- this.gl = gl;
75
- this.needsRedraw = null;
76
- this.timeline = null;
77
- this.stats = stats;
78
- this.cpuTime = this.stats.get('CPU Time');
79
- this.gpuTime = this.stats.get('GPU Time');
80
- this.frameRate = this.stats.get('Frame Rate');
81
-
82
- this._initialized = false;
83
- this._running = false;
84
- this._animationFrameId = null;
85
- this._nextFramePromise = null;
86
- this._resolveNextFrame = null;
87
- this._cpuStartTime = 0;
88
-
89
- this.setProps({
90
- autoResizeViewport,
91
- autoResizeDrawingBuffer,
92
- useDevicePixels
93
- });
94
-
95
- // Bind methods
96
- this.start = this.start.bind(this);
97
- this.stop = this.stop.bind(this);
98
-
99
- this._pageLoadPromise = null;
100
-
101
- this._onMousemove = this._onMousemove.bind(this);
102
- this._onMouseleave = this._onMouseleave.bind(this);
103
- }
104
-
105
- delete() {
106
- this.stop();
107
- this._setDisplay(null);
108
- }
109
-
110
- setNeedsRedraw(reason) {
111
- assert(typeof reason === 'string');
112
- this.needsRedraw = this.needsRedraw || reason;
113
- return this;
114
- }
115
-
116
- setProps(props) {
117
- if ('autoResizeViewport' in props) {
118
- this.autoResizeViewport = props.autoResizeViewport;
119
- }
120
- if ('autoResizeDrawingBuffer' in props) {
121
- this.autoResizeDrawingBuffer = props.autoResizeDrawingBuffer;
122
- }
123
- if ('useDevicePixels' in props) {
124
- this.useDevicePixels = props.useDevicePixels;
125
- }
126
- return this;
127
- }
128
-
129
- // Starts a render loop if not already running
130
- // @param {Object} context - contains frame specific info (E.g. tick, width, height, etc)
131
- start(opts = {}) {
132
- if (this._running) {
133
- return this;
134
- }
135
- this._running = true;
136
- // console.debug(`Starting ${this.constructor.name}`);
137
- // Wait for start promise before rendering frame
138
- const startPromise = this._getPageLoadPromise()
139
- .then(() => {
140
- if (!this._running || this._initialized) {
141
- return null;
142
- }
143
-
144
- // Create the WebGL context
145
- this._createWebGLContext(opts);
146
- this._createFramebuffer();
147
- this._startEventHandling();
148
-
149
- // Initialize the callback data
150
- this._initializeCallbackData();
151
- this._updateCallbackData();
152
-
153
- // Default viewport setup, in case onInitialize wants to render
154
- this._resizeCanvasDrawingBuffer();
155
- this._resizeViewport();
156
-
157
- this._gpuTimeQuery = Query.isSupported(this.gl, ['timers']) ? new Query(this.gl) : null;
158
-
159
- this._initialized = true;
160
-
161
- // Note: onIntialize can return a promise (in case it needs to load resources)
162
- return this.onInitialize(this.animationProps);
163
- })
164
- .then(appContext => {
165
- if (this._running) {
166
- this._addCallbackData(appContext || {});
167
- if (appContext !== false) {
168
- this._startLoop();
169
- }
170
- }
171
- });
172
-
173
- if (this.props.onError) {
174
- startPromise.catch(this.props.onError);
175
- }
176
-
177
- return this;
178
- }
179
-
180
- // Redraw now
181
- redraw() {
182
- if (this.isContextLost()) {
183
- return this;
184
- }
185
-
186
- this._beginTimers();
187
-
188
- this._setupFrame();
189
- this._updateCallbackData();
190
-
191
- this._renderFrame(this.animationProps);
192
-
193
- // clear needsRedraw flag
194
- this._clearNeedsRedraw();
195
-
196
- // https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/commit
197
- // Chrome's offscreen canvas does not require gl.commit
198
- if (this.offScreen && this.gl.commit) {
199
- this.gl.commit();
200
- }
201
-
202
- if (this._resolveNextFrame) {
203
- this._resolveNextFrame(this);
204
- this._nextFramePromise = null;
205
- this._resolveNextFrame = null;
206
- }
207
-
208
- this._endTimers();
209
-
210
- return this;
211
- }
212
-
213
- // Stops a render loop if already running, finalizing
214
- stop() {
215
- // console.debug(`Stopping ${this.constructor.name}`);
216
- if (this._running) {
217
- this._finalizeCallbackData();
218
- this._cancelAnimationFrame(this._animationFrameId);
219
- this._nextFramePromise = null;
220
- this._resolveNextFrame = null;
221
- this._animationFrameId = null;
222
- this._running = false;
223
- }
224
- return this;
225
- }
226
-
227
- attachTimeline(timeline) {
228
- this.timeline = timeline;
229
-
230
- return this.timeline;
231
- }
232
-
233
- detachTimeline() {
234
- this.timeline = null;
235
- }
236
-
237
- waitForRender() {
238
- this.setNeedsRedraw('waitForRender');
239
-
240
- if (!this._nextFramePromise) {
241
- this._nextFramePromise = new Promise(resolve => {
242
- this._resolveNextFrame = resolve;
243
- });
244
- }
245
- return this._nextFramePromise;
246
- }
247
-
248
- async toDataURL() {
249
- this.setNeedsRedraw('toDataURL');
250
-
251
- await this.waitForRender();
252
-
253
- return this.gl.canvas.toDataURL();
254
- }
255
-
256
- isContextLost() {
257
- return this.gl.isContextLost();
258
- }
259
-
260
- onCreateContext(...args) {
261
- return this.props.onCreateContext(...args);
262
- }
263
-
264
- onInitialize(...args) {
265
- return this.props.onInitialize(...args);
266
- }
267
-
268
- onRender(...args) {
269
- return this.props.onRender(...args);
270
- }
271
-
272
- onFinalize(...args) {
273
- return this.props.onFinalize(...args);
274
- }
275
-
276
- // DEPRECATED/REMOVED METHODS
277
-
278
- getHTMLControlValue(id, defaultValue = 1) {
279
- const element = document.getElementById(id);
280
- // @ts-ignore Not all html elements have value
281
- return element ? Number(element.value) : defaultValue;
282
- }
283
-
284
- // Update parameters
285
- setViewParameters() {
286
- log.removed('AnimationLoop.setViewParameters', 'AnimationLoop.setProps')();
287
- return this;
288
- }
289
-
290
- // PRIVATE METHODS
291
-
292
- _startLoop() {
293
- const renderFrame = () => {
294
- if (!this._running) {
295
- return;
296
- }
297
- this.redraw();
298
- this._animationFrameId = this._requestAnimationFrame(renderFrame);
299
- };
300
-
301
- // cancel any pending renders to ensure only one loop can ever run
302
- this._cancelAnimationFrame(this._animationFrameId);
303
- this._animationFrameId = this._requestAnimationFrame(renderFrame);
304
- }
305
-
306
- // PRIVATE METHODS
307
-
308
- _getPageLoadPromise() {
309
- if (!this._pageLoadPromise) {
310
- this._pageLoadPromise = isPage
311
- ? new Promise((resolve, reject) => {
312
- if (isPage && document.readyState === 'complete') {
313
- resolve(document);
314
- return;
315
- }
316
- window.addEventListener('load', () => {
317
- resolve(document);
318
- });
319
- })
320
- : Promise.resolve({});
321
- }
322
- return this._pageLoadPromise;
323
- }
324
-
325
- _setDisplay(display) {
326
- if (this.display) {
327
- this.display.delete();
328
- this.display.animationLoop = null;
329
- }
330
-
331
- // store animation loop on the display
332
- if (display) {
333
- display.animationLoop = this;
334
- }
335
-
336
- this.display = display;
337
- }
338
-
339
- _cancelAnimationFrame(animationFrameId) {
340
- // E.g. VR display has a separate animation frame to sync with headset
341
- if (this.display && this.display.cancelAnimationFrame) {
342
- return this.display.cancelAnimationFrame(animationFrameId);
343
- }
344
-
345
- return cancelAnimationFrame(animationFrameId);
346
- }
347
-
348
- _requestAnimationFrame(renderFrameCallback) {
349
- if (this._running) {
350
- // E.g. VR display has a separate animation frame to sync with headset
351
- if (this.display && this.display.requestAnimationFrame) {
352
- return this.display.requestAnimationFrame(renderFrameCallback);
353
- }
354
-
355
- return requestAnimationFrame(renderFrameCallback);
356
- }
357
- return undefined;
358
- }
359
-
360
- // Called on each frame, can be overridden to call onRender multiple times
361
- // to support e.g. stereoscopic rendering
362
- _renderFrame(...args) {
363
- // Allow e.g. VR display to render multiple frames.
364
- if (this.display) {
365
- this.display._renderFrame(...args);
366
- return;
367
- }
368
-
369
- // call callback
370
- this.onRender(...args);
371
- // end callback
372
- }
373
-
374
- _clearNeedsRedraw() {
375
- this.needsRedraw = null;
376
- }
377
-
378
- _setupFrame() {
379
- this._resizeCanvasDrawingBuffer();
380
- this._resizeViewport();
381
- this._resizeFramebuffer();
382
- }
383
-
384
- // Initialize the object that will be passed to app callbacks
385
- _initializeCallbackData() {
386
- this.animationProps = {
387
- gl: this.gl,
388
-
389
- stop: this.stop,
390
- canvas: this.gl.canvas,
391
- framebuffer: this.framebuffer,
392
-
393
- // Initial values
394
- useDevicePixels: this.useDevicePixels,
395
- needsRedraw: null,
396
-
397
- // Animation props
398
- startTime: Date.now(),
399
- engineTime: 0,
400
- tick: 0,
401
- tock: 0,
402
-
403
- // Timeline time for back compatibility
404
- time: 0,
405
-
406
- // Experimental
407
- _timeline: this.timeline,
408
- _loop: this,
409
- _animationLoop: this,
410
- _mousePosition: null // Event props
411
- };
412
- }
413
-
414
- // Update the context object that will be passed to app callbacks
415
- _updateCallbackData() {
416
- const {width, height, aspect} = this._getSizeAndAspect();
417
- if (width !== this.animationProps.width || height !== this.animationProps.height) {
418
- this.setNeedsRedraw('drawing buffer resized');
419
- }
420
- if (aspect !== this.animationProps.aspect) {
421
- this.setNeedsRedraw('drawing buffer aspect changed');
422
- }
423
-
424
- this.animationProps.width = width;
425
- this.animationProps.height = height;
426
- this.animationProps.aspect = aspect;
427
-
428
- this.animationProps.needsRedraw = this.needsRedraw;
429
-
430
- // Update time properties
431
- this.animationProps.engineTime = Date.now() - this.animationProps.startTime;
432
-
433
- if (this.timeline) {
434
- this.timeline.update(this.animationProps.engineTime);
435
- }
436
-
437
- this.animationProps.tick = Math.floor((this.animationProps.time / 1000) * 60);
438
- this.animationProps.tock++;
439
-
440
- // For back compatibility
441
- this.animationProps.time = this.timeline
442
- ? this.timeline.getTime()
443
- : this.animationProps.engineTime;
444
-
445
- // experimental
446
- this.animationProps._offScreen = this.offScreen;
447
- }
448
-
449
- _finalizeCallbackData() {
450
- // call callback
451
- this.onFinalize(this.animationProps);
452
- // end callback
453
- }
454
-
455
- // Add application's data to the app context object
456
- _addCallbackData(appContext) {
457
- if (typeof appContext === 'object' && appContext !== null) {
458
- this.animationProps = Object.assign({}, this.animationProps, appContext);
459
- }
460
- }
461
-
462
- // Either uses supplied or existing context, or calls provided callback to create one
463
- _createWebGLContext(opts) {
464
- this.offScreen =
465
- opts.canvas &&
466
- typeof OffscreenCanvas !== 'undefined' &&
467
- opts.canvas instanceof OffscreenCanvas;
468
-
469
- // Create the WebGL context if necessary
470
- opts = Object.assign({}, opts, this.props.glOptions);
471
- this.gl = this.props.gl ? instrumentGLContext(this.props.gl, opts) : this.onCreateContext(opts);
472
-
473
- if (!isWebGL(this.gl)) {
474
- throw new Error('AnimationLoop.onCreateContext - illegal context returned');
475
- }
476
-
477
- // Reset the WebGL context.
478
- resetParameters(this.gl);
479
-
480
- this._createInfoDiv();
481
- }
482
-
483
- _createInfoDiv() {
484
- if (this.gl.canvas && this.props.onAddHTML) {
485
- const wrapperDiv = document.createElement('div');
486
- document.body.appendChild(wrapperDiv);
487
- wrapperDiv.style.position = 'relative';
488
- const div = document.createElement('div');
489
- div.style.position = 'absolute';
490
- div.style.left = '10px';
491
- div.style.bottom = '10px';
492
- div.style.width = '300px';
493
- div.style.background = 'white';
494
- wrapperDiv.appendChild(this.gl.canvas);
495
- wrapperDiv.appendChild(div);
496
- const html = this.props.onAddHTML(div);
497
- if (html) {
498
- div.innerHTML = html;
499
- }
500
- }
501
- }
502
-
503
- _getSizeAndAspect() {
504
- // https://webglfundamentals.org/webgl/lessons/webgl-resizing-the-canvas.html
505
- const width = this.gl.drawingBufferWidth;
506
- const height = this.gl.drawingBufferHeight;
507
-
508
- // https://webglfundamentals.org/webgl/lessons/webgl-anti-patterns.html
509
- let aspect = 1;
510
- const {canvas} = this.gl;
511
-
512
- if (canvas && canvas.clientHeight) {
513
- aspect = canvas.clientWidth / canvas.clientHeight;
514
- } else if (width > 0 && height > 0) {
515
- aspect = width / height;
516
- }
517
-
518
- return {width, height, aspect};
519
- }
520
-
521
- // Default viewport setup
522
- _resizeViewport() {
523
- if (this.autoResizeViewport) {
524
- this.gl.viewport(0, 0, this.gl.drawingBufferWidth, this.gl.drawingBufferHeight);
525
- }
526
- }
527
-
528
- // Resize the render buffer of the canvas to match canvas client size
529
- // Optionally multiplying with devicePixel ratio
530
- _resizeCanvasDrawingBuffer() {
531
- if (this.autoResizeDrawingBuffer) {
532
- resizeGLContext(this.gl, {useDevicePixels: this.useDevicePixels});
533
- }
534
- }
535
-
536
- // TBD - deprecated?
537
- _createFramebuffer() {
538
- // Setup default framebuffer
539
- if (this.props.createFramebuffer) {
540
- this.framebuffer = new Framebuffer(this.gl);
541
- }
542
- }
543
-
544
- _resizeFramebuffer() {
545
- if (this.framebuffer) {
546
- this.framebuffer.resize({
547
- width: this.gl.drawingBufferWidth,
548
- height: this.gl.drawingBufferHeight
549
- });
550
- }
551
- }
552
-
553
- _beginTimers() {
554
- this.frameRate.timeEnd();
555
- this.frameRate.timeStart();
556
-
557
- // Check if timer for last frame has completed.
558
- // GPU timer results are never available in the same
559
- // frame they are captured.
560
- if (
561
- this._gpuTimeQuery &&
562
- this._gpuTimeQuery.isResultAvailable() &&
563
- !this._gpuTimeQuery.isTimerDisjoint()
564
- ) {
565
- this.stats.get('GPU Time').addTime(this._gpuTimeQuery.getTimerMilliseconds());
566
- }
567
-
568
- if (this._gpuTimeQuery) {
569
- // GPU time query start
570
- this._gpuTimeQuery.beginTimeElapsedQuery();
571
- }
572
-
573
- this.cpuTime.timeStart();
574
- }
575
-
576
- _endTimers() {
577
- this.cpuTime.timeEnd();
578
-
579
- if (this._gpuTimeQuery) {
580
- // GPU time query end. Results will be available on next frame.
581
- this._gpuTimeQuery.end();
582
- }
583
- }
584
-
585
- // Event handling
586
-
587
- _startEventHandling() {
588
- const {canvas} = this.gl;
589
- if (canvas) {
590
- canvas.addEventListener('mousemove', this._onMousemove);
591
- canvas.addEventListener('mouseleave', this._onMouseleave);
592
- }
593
- }
594
-
595
- _onMousemove(e) {
596
- this.animationProps._mousePosition = [e.offsetX, e.offsetY];
597
- }
598
- _onMouseleave(e) {
599
- this.animationProps._mousePosition = null;
600
- }
601
- }
@@ -1,3 +0,0 @@
1
- export function getBuffersFromGeometry(gl: WebGLRenderingContext, geometry: any, options?: any): {};
2
-
3
- export function inferAttributeAccessor(attributeName: any, attribute: any): void;