@luma.gl/engine 8.5.7 → 8.6.0-alpha.1

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 (263) 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 +16 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +16 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/lib/animation-loop.d.ts +120 -0
  54. package/dist/lib/animation-loop.d.ts.map +1 -0
  55. package/dist/{esm/lib → lib}/animation-loop.js +135 -97
  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 +97 -0
  62. package/dist/lib/model.d.ts.map +1 -0
  63. package/dist/{esm/lib → lib}/model.js +63 -13
  64. package/dist/lib/model.js.map +1 -0
  65. package/dist/lib/program-manager.d.ts +38 -0
  66. package/dist/lib/program-manager.d.ts.map +1 -0
  67. package/dist/{esm/lib → lib}/program-manager.js +22 -10
  68. package/dist/lib/program-manager.js.map +1 -0
  69. package/dist/transform/buffer-transform.d.ts +36 -0
  70. package/dist/transform/buffer-transform.d.ts.map +1 -0
  71. package/dist/{esm/transform → transform}/buffer-transform.js +13 -5
  72. package/dist/transform/buffer-transform.js.map +1 -0
  73. package/dist/transform/texture-transform.d.ts +57 -0
  74. package/dist/transform/texture-transform.d.ts.map +1 -0
  75. package/dist/{esm/transform → transform}/texture-transform.js +48 -16
  76. package/dist/transform/texture-transform.js.map +1 -0
  77. package/dist/transform/transform-shader-utils.d.ts +26 -0
  78. package/dist/transform/transform-shader-utils.d.ts.map +1 -0
  79. package/dist/{esm/transform → transform}/transform-shader-utils.js +38 -46
  80. package/dist/transform/transform-shader-utils.js.map +1 -0
  81. package/dist/transform/transform-types.d.ts +43 -0
  82. package/dist/transform/transform-types.d.ts.map +1 -0
  83. package/dist/transform/transform-types.js +2 -0
  84. package/dist/transform/transform-types.js.map +1 -0
  85. package/dist/transform/transform.d.ts +28 -0
  86. package/dist/transform/transform.d.ts.map +1 -0
  87. package/dist/{esm/transform → transform}/transform.js +39 -34
  88. package/dist/transform/transform.js.map +1 -0
  89. package/dist/utils/clip-space.d.ts +5 -0
  90. package/dist/utils/clip-space.d.ts.map +1 -0
  91. package/dist/{esm/utils → utils}/clip-space.js +3 -17
  92. package/dist/utils/clip-space.js.map +1 -0
  93. package/package.json +10 -10
  94. package/src/animation/{key-frames.js → key-frames.ts} +18 -16
  95. package/src/animation/{timeline.js → timeline.ts} +54 -18
  96. package/src/bundle.ts +4 -0
  97. package/src/geometries/{cone-geometry.js → cone-geometry.ts} +9 -3
  98. package/src/geometries/{cube-geometry.js → cube-geometry.ts} +17 -12
  99. package/src/geometries/cylinder-geometry.ts +20 -0
  100. package/src/geometries/{ico-sphere-geometry.js → ico-sphere-geometry.ts} +10 -3
  101. package/src/geometries/{plane-geometry.js → plane-geometry.ts} +11 -6
  102. package/src/geometries/{sphere-geometry.js → sphere-geometry.ts} +15 -11
  103. package/src/geometries/{truncated-cone-geometry.js → truncated-cone-geometry.ts} +14 -5
  104. package/src/geometry/{geometry-utils.js → geometry-utils.ts} +2 -0
  105. package/src/geometry/{geometry.js → geometry.ts} +47 -34
  106. package/src/index.ts +30 -0
  107. package/src/lib/{animation-loop.js → animation-loop.ts} +237 -130
  108. package/src/lib/{model-utils.js → model-utils.ts} +2 -2
  109. package/src/lib/{model.js → model.ts} +148 -57
  110. package/src/lib/{program-manager.js → program-manager.ts} +46 -26
  111. package/src/transform/{buffer-transform.js → buffer-transform.ts} +40 -24
  112. package/src/transform/{texture-transform.js → texture-transform.ts} +34 -23
  113. package/src/transform/{transform-shader-utils.js → transform-shader-utils.ts} +55 -27
  114. package/src/transform/transform-types.ts +41 -0
  115. package/src/transform/{transform.js → transform.ts} +45 -49
  116. package/src/utils/{clip-space.js → clip-space.ts} +4 -3
  117. package/dist/dist.js +0 -32248
  118. package/dist/dist.min.js +0 -1
  119. package/dist/es5/animation/key-frames.d.ts +0 -19
  120. package/dist/es5/animation/key-frames.js +0 -95
  121. package/dist/es5/animation/key-frames.js.map +0 -1
  122. package/dist/es5/animation/timeline.d.ts +0 -39
  123. package/dist/es5/animation/timeline.js +0 -211
  124. package/dist/es5/animation/timeline.js.map +0 -1
  125. package/dist/es5/bundle.js +0 -9
  126. package/dist/es5/bundle.js.map +0 -1
  127. package/dist/es5/geometries/cone-geometry.d.ts +0 -5
  128. package/dist/es5/geometries/cone-geometry.js +0 -59
  129. package/dist/es5/geometries/cone-geometry.js.map +0 -1
  130. package/dist/es5/geometries/cube-geometry.d.ts +0 -5
  131. package/dist/es5/geometries/cube-geometry.js +0 -75
  132. package/dist/es5/geometries/cube-geometry.js.map +0 -1
  133. package/dist/es5/geometries/cylinder-geometry.d.ts +0 -5
  134. package/dist/es5/geometries/cylinder-geometry.js +0 -55
  135. package/dist/es5/geometries/cylinder-geometry.js.map +0 -1
  136. package/dist/es5/geometries/ico-sphere-geometry.d.ts +0 -5
  137. package/dist/es5/geometries/ico-sphere-geometry.js +0 -217
  138. package/dist/es5/geometries/ico-sphere-geometry.js.map +0 -1
  139. package/dist/es5/geometries/index.d.ts +0 -7
  140. package/dist/es5/geometries/index.js +0 -64
  141. package/dist/es5/geometries/index.js.map +0 -1
  142. package/dist/es5/geometries/plane-geometry.d.ts +0 -5
  143. package/dist/es5/geometries/plane-geometry.js +0 -168
  144. package/dist/es5/geometries/plane-geometry.js.map +0 -1
  145. package/dist/es5/geometries/sphere-geometry.d.ts +0 -5
  146. package/dist/es5/geometries/sphere-geometry.js +0 -152
  147. package/dist/es5/geometries/sphere-geometry.js.map +0 -1
  148. package/dist/es5/geometries/truncated-cone-geometry.d.ts +0 -5
  149. package/dist/es5/geometries/truncated-cone-geometry.js +0 -171
  150. package/dist/es5/geometries/truncated-cone-geometry.js.map +0 -1
  151. package/dist/es5/geometry/geometry-utils.d.ts +0 -1
  152. package/dist/es5/geometry/geometry-utils.js +0 -49
  153. package/dist/es5/geometry/geometry-utils.js.map +0 -1
  154. package/dist/es5/geometry/geometry.d.ts +0 -25
  155. package/dist/es5/geometry/geometry.js +0 -150
  156. package/dist/es5/geometry/geometry.js.map +0 -1
  157. package/dist/es5/index.d.ts +0 -19
  158. package/dist/es5/index.js +0 -128
  159. package/dist/es5/index.js.map +0 -1
  160. package/dist/es5/lib/animation-loop.d.ts +0 -158
  161. package/dist/es5/lib/animation-loop.js +0 -642
  162. package/dist/es5/lib/animation-loop.js.map +0 -1
  163. package/dist/es5/lib/model-utils.d.ts +0 -3
  164. package/dist/es5/lib/model-utils.js +0 -110
  165. package/dist/es5/lib/model-utils.js.map +0 -1
  166. package/dist/es5/lib/model.d.ts +0 -214
  167. package/dist/es5/lib/model.js +0 -584
  168. package/dist/es5/lib/model.js.map +0 -1
  169. package/dist/es5/lib/program-manager.d.ts +0 -79
  170. package/dist/es5/lib/program-manager.js +0 -238
  171. package/dist/es5/lib/program-manager.js.map +0 -1
  172. package/dist/es5/transform/buffer-transform.d.ts +0 -13
  173. package/dist/es5/transform/buffer-transform.js +0 -294
  174. package/dist/es5/transform/buffer-transform.js.map +0 -1
  175. package/dist/es5/transform/resource-transform.d.ts +0 -16
  176. package/dist/es5/transform/texture-transform.d.ts +0 -16
  177. package/dist/es5/transform/texture-transform.js +0 -405
  178. package/dist/es5/transform/texture-transform.js.map +0 -1
  179. package/dist/es5/transform/transform-shader-utils.d.ts +0 -31
  180. package/dist/es5/transform/transform-shader-utils.js +0 -160
  181. package/dist/es5/transform/transform-shader-utils.js.map +0 -1
  182. package/dist/es5/transform/transform.d.ts +0 -33
  183. package/dist/es5/transform/transform.js +0 -274
  184. package/dist/es5/transform/transform.js.map +0 -1
  185. package/dist/es5/utils/clip-space.d.ts +0 -5
  186. package/dist/es5/utils/clip-space.js +0 -72
  187. package/dist/es5/utils/clip-space.js.map +0 -1
  188. package/dist/esm/animation/key-frames.d.ts +0 -19
  189. package/dist/esm/animation/key-frames.js.map +0 -1
  190. package/dist/esm/animation/timeline.d.ts +0 -39
  191. package/dist/esm/animation/timeline.js.map +0 -1
  192. package/dist/esm/bundle.js +0 -7
  193. package/dist/esm/bundle.js.map +0 -1
  194. package/dist/esm/geometries/cone-geometry.d.ts +0 -5
  195. package/dist/esm/geometries/cone-geometry.js.map +0 -1
  196. package/dist/esm/geometries/cube-geometry.d.ts +0 -5
  197. package/dist/esm/geometries/cube-geometry.js.map +0 -1
  198. package/dist/esm/geometries/cylinder-geometry.d.ts +0 -5
  199. package/dist/esm/geometries/cylinder-geometry.js.map +0 -1
  200. package/dist/esm/geometries/ico-sphere-geometry.d.ts +0 -5
  201. package/dist/esm/geometries/ico-sphere-geometry.js.map +0 -1
  202. package/dist/esm/geometries/index.d.ts +0 -7
  203. package/dist/esm/geometries/index.js +0 -8
  204. package/dist/esm/geometries/index.js.map +0 -1
  205. package/dist/esm/geometries/plane-geometry.d.ts +0 -5
  206. package/dist/esm/geometries/plane-geometry.js.map +0 -1
  207. package/dist/esm/geometries/sphere-geometry.d.ts +0 -5
  208. package/dist/esm/geometries/sphere-geometry.js.map +0 -1
  209. package/dist/esm/geometries/truncated-cone-geometry.d.ts +0 -5
  210. package/dist/esm/geometries/truncated-cone-geometry.js.map +0 -1
  211. package/dist/esm/geometry/geometry-utils.d.ts +0 -1
  212. package/dist/esm/geometry/geometry-utils.js.map +0 -1
  213. package/dist/esm/geometry/geometry.d.ts +0 -25
  214. package/dist/esm/geometry/geometry.js.map +0 -1
  215. package/dist/esm/index.d.ts +0 -19
  216. package/dist/esm/index.js +0 -16
  217. package/dist/esm/index.js.map +0 -1
  218. package/dist/esm/lib/animation-loop.d.ts +0 -158
  219. package/dist/esm/lib/animation-loop.js.map +0 -1
  220. package/dist/esm/lib/model-utils.d.ts +0 -3
  221. package/dist/esm/lib/model-utils.js.map +0 -1
  222. package/dist/esm/lib/model.d.ts +0 -214
  223. package/dist/esm/lib/model.js.map +0 -1
  224. package/dist/esm/lib/program-manager.d.ts +0 -79
  225. package/dist/esm/lib/program-manager.js.map +0 -1
  226. package/dist/esm/transform/buffer-transform.d.ts +0 -13
  227. package/dist/esm/transform/buffer-transform.js.map +0 -1
  228. package/dist/esm/transform/resource-transform.d.ts +0 -16
  229. package/dist/esm/transform/texture-transform.d.ts +0 -16
  230. package/dist/esm/transform/texture-transform.js.map +0 -1
  231. package/dist/esm/transform/transform-shader-utils.d.ts +0 -31
  232. package/dist/esm/transform/transform-shader-utils.js.map +0 -1
  233. package/dist/esm/transform/transform.d.ts +0 -33
  234. package/dist/esm/transform/transform.js.map +0 -1
  235. package/dist/esm/utils/clip-space.d.ts +0 -5
  236. package/dist/esm/utils/clip-space.js.map +0 -1
  237. package/src/animation/key-frames.d.ts +0 -19
  238. package/src/animation/timeline.d.ts +0 -39
  239. package/src/bundle.js +0 -7
  240. package/src/geometries/cone-geometry.d.ts +0 -5
  241. package/src/geometries/cube-geometry.d.ts +0 -5
  242. package/src/geometries/cylinder-geometry.d.ts +0 -5
  243. package/src/geometries/cylinder-geometry.js +0 -14
  244. package/src/geometries/ico-sphere-geometry.d.ts +0 -5
  245. package/src/geometries/index.d.ts +0 -7
  246. package/src/geometries/index.js +0 -7
  247. package/src/geometries/plane-geometry.d.ts +0 -5
  248. package/src/geometries/sphere-geometry.d.ts +0 -5
  249. package/src/geometries/truncated-cone-geometry.d.ts +0 -5
  250. package/src/geometry/geometry-utils.d.ts +0 -1
  251. package/src/geometry/geometry.d.ts +0 -25
  252. package/src/index.d.ts +0 -19
  253. package/src/index.js +0 -22
  254. package/src/lib/animation-loop.d.ts +0 -158
  255. package/src/lib/model-utils.d.ts +0 -3
  256. package/src/lib/model.d.ts +0 -214
  257. package/src/lib/program-manager.d.ts +0 -79
  258. package/src/transform/buffer-transform.d.ts +0 -13
  259. package/src/transform/resource-transform.d.ts +0 -16
  260. package/src/transform/texture-transform.d.ts +0 -16
  261. package/src/transform/transform-shader-utils.d.ts +0 -31
  262. package/src/transform/transform.d.ts +0 -33
  263. package/src/utils/clip-space.d.ts +0 -5
@@ -1,18 +1,20 @@
1
- /** @type {import('@luma.gl/engine').KeyFrames} */
1
+ // keyframes
2
+ export type KeyFrame<T> = [number, T];
2
3
 
3
- export class KeyFrames {
4
- constructor(keyFrames) {
5
- this._lastTime = -1;
6
- this.startIndex = -1;
7
- this.endIndex = -1;
8
- this.factor = 0;
9
- this.times = [];
10
- this.values = [];
4
+ export class KeyFrames<T = number> {
5
+ startIndex: number = -1;
6
+ endIndex: number = -1;
7
+ factor: number = 0;
8
+ times: number[] = [];
9
+ values: T[] = [];
10
+ private _lastTime = -1;
11
+
12
+ constructor(keyFrames: KeyFrame<T>[]) {
11
13
  this.setKeyFrames(keyFrames);
12
14
  this.setTime(0);
13
15
  }
14
16
 
15
- setKeyFrames(keyFrames) {
17
+ setKeyFrames(keyFrames: KeyFrame<T>[]): void {
16
18
  const numKeys = keyFrames.length;
17
19
  this.times.length = numKeys;
18
20
  this.values.length = numKeys;
@@ -25,7 +27,7 @@ export class KeyFrames {
25
27
  this._calculateKeys(this._lastTime);
26
28
  }
27
29
 
28
- setTime(time) {
30
+ setTime(time: number): void {
29
31
  time = Math.max(0, time);
30
32
 
31
33
  if (time !== this._lastTime) {
@@ -34,23 +36,23 @@ export class KeyFrames {
34
36
  }
35
37
  }
36
38
 
37
- getStartTime() {
39
+ getStartTime(): number {
38
40
  return this.times[this.startIndex];
39
41
  }
40
42
 
41
- getEndTime() {
43
+ getEndTime(): number {
42
44
  return this.times[this.endIndex];
43
45
  }
44
46
 
45
- getStartData() {
47
+ getStartData(): T {
46
48
  return this.values[this.startIndex];
47
49
  }
48
50
 
49
- getEndData() {
51
+ getEndData(): T {
50
52
  return this.values[this.endIndex];
51
53
  }
52
54
 
53
- _calculateKeys(time) {
55
+ _calculateKeys(time: number): void {
54
56
  let index = 0;
55
57
  const numKeys = this.times.length;
56
58
 
@@ -1,20 +1,56 @@
1
+ // luma.gl, MIT license
2
+
3
+ /**
4
+ * Timeline channel properties
5
+ * @param delay = 0;
6
+ * @param duration = Number.POSITIVE_INFINITY;
7
+ * @param rate = 1
8
+ * @param repeat = 1
9
+ */
10
+ export type ChannelOptions = {
11
+ delay?: number
12
+ duration?: number
13
+ rate?: number
14
+ repeat?: number
15
+ }
16
+
17
+ export type AnimationOptions = {
18
+ setTime: (time: number) => void
19
+ }
20
+
21
+ type Channel = {
22
+ time: number
23
+ delay: number
24
+ duration: number
25
+ rate: number
26
+ repeat: number
27
+ }
28
+
29
+ type Animation = {
30
+ channel: number;
31
+ animation: {
32
+ setTime: (time: number) => void
33
+ }
34
+ }
35
+
1
36
  let channelHandles = 1;
2
37
  let animationHandles = 1;
3
38
 
4
39
  export class Timeline {
40
+ time: number = 0;
41
+ channels = new Map<number, Channel>();
42
+ animations = new Map<number, Animation>();
43
+ playing: boolean = false;
44
+ lastEngineTime: number = -1;
45
+
5
46
  constructor() {
6
- this.time = 0;
7
- this.channels = new Map();
8
- this.animations = new Map();
9
- this.playing = false;
10
- this.lastEngineTime = -1;
11
47
  }
12
48
 
13
- addChannel(props) {
49
+ addChannel(props: ChannelOptions): number {
14
50
  const {delay = 0, duration = Number.POSITIVE_INFINITY, rate = 1, repeat = 1} = props;
15
51
 
16
52
  const handle = channelHandles++;
17
- const channel = {
53
+ const channel: Channel = {
18
54
  time: 0,
19
55
  delay,
20
56
  duration,
@@ -27,7 +63,7 @@ export class Timeline {
27
63
  return handle;
28
64
  }
29
65
 
30
- removeChannel(handle) {
66
+ removeChannel(handle: number): void {
31
67
  this.channels.delete(handle);
32
68
 
33
69
  for (const [animationHandle, animation] of this.animations) {
@@ -37,7 +73,7 @@ export class Timeline {
37
73
  }
38
74
  }
39
75
 
40
- isFinished(handle) {
76
+ isFinished(handle: number): boolean {
41
77
  const channel = this.channels.get(handle);
42
78
  if (channel === undefined) {
43
79
  return false;
@@ -46,7 +82,7 @@ export class Timeline {
46
82
  return this.time >= channel.delay + channel.duration * channel.repeat;
47
83
  }
48
84
 
49
- getTime(handle) {
85
+ getTime(handle?: number): number {
50
86
  if (handle === undefined) {
51
87
  return this.time;
52
88
  }
@@ -60,7 +96,7 @@ export class Timeline {
60
96
  return channel.time;
61
97
  }
62
98
 
63
- setTime(time) {
99
+ setTime(time: number): void {
64
100
  this.time = Math.max(0, time);
65
101
 
66
102
  const channels = this.channels.values();
@@ -75,20 +111,20 @@ export class Timeline {
75
111
  }
76
112
  }
77
113
 
78
- play() {
114
+ play(): void {
79
115
  this.playing = true;
80
116
  }
81
117
 
82
- pause() {
118
+ pause(): void {
83
119
  this.playing = false;
84
120
  this.lastEngineTime = -1;
85
121
  }
86
122
 
87
- reset() {
123
+ reset(): void {
88
124
  this.setTime(0);
89
125
  }
90
126
 
91
- attachAnimation(animation, channelHandle) {
127
+ attachAnimation(animation: AnimationOptions, channelHandle: number): number {
92
128
  const animationHandle = animationHandles++;
93
129
 
94
130
  this.animations.set(animationHandle, {
@@ -101,11 +137,11 @@ export class Timeline {
101
137
  return animationHandle;
102
138
  }
103
139
 
104
- detachAnimation(handle) {
140
+ detachAnimation(handle: number): void {
105
141
  this.animations.delete(handle);
106
142
  }
107
143
 
108
- update(engineTime) {
144
+ update(engineTime: number): void {
109
145
  if (this.playing) {
110
146
  if (this.lastEngineTime === -1) {
111
147
  this.lastEngineTime = engineTime;
@@ -115,7 +151,7 @@ export class Timeline {
115
151
  }
116
152
  }
117
153
 
118
- _setChannelTime(channel, time) {
154
+ _setChannelTime(channel: Channel, time: number): void {
119
155
  const offsetTime = time - channel.delay;
120
156
  const totalDuration = channel.duration * channel.repeat;
121
157
  // Note(Tarek): Don't loop on final repeat.
package/src/bundle.ts ADDED
@@ -0,0 +1,4 @@
1
+ // @ts-nocheck
2
+ const moduleExports = require('./index');
3
+ globalThis.luma = globalThis.luma || {};
4
+ module.exports = Object.assign(globalThis.luma, moduleExports);
@@ -1,8 +1,14 @@
1
- import TruncatedConeGeometry from './truncated-cone-geometry';
1
+ import {TruncatedConeGeometry} from './truncated-cone-geometry';
2
2
  import {uid} from '@luma.gl/webgl';
3
3
 
4
- export default class ConeGeometry extends TruncatedConeGeometry {
5
- constructor(props = {}) {
4
+ export type ConeGeometryProps = {
5
+ id?: string;
6
+ radius?: number;
7
+ cap?: boolean;
8
+ };
9
+
10
+ export class ConeGeometry extends TruncatedConeGeometry {
11
+ constructor(props: ConeGeometryProps = {}) {
6
12
  const {id = uid('cone-geometry'), radius = 1, cap = true} = props;
7
13
  super({
8
14
  ...props,
@@ -1,6 +1,23 @@
1
1
  import Geometry from '../geometry/geometry';
2
2
  import {uid} from '@luma.gl/webgl';
3
3
 
4
+ export type CubeGeometryProps = {
5
+ id?: string;
6
+ attributes?
7
+ };
8
+
9
+ export class CubeGeometry extends Geometry {
10
+ constructor(props: CubeGeometryProps = {}) {
11
+ const {id = uid('cube-geometry')} = props;
12
+ super({
13
+ ...props,
14
+ id,
15
+ indices: {size: 1, value: new Uint16Array(CUBE_INDICES)},
16
+ attributes: {...ATTRIBUTES, ...props.attributes}
17
+ });
18
+ }
19
+ }
20
+
4
21
  // prettier-ignore
5
22
  const CUBE_INDICES = new Uint16Array([
6
23
  0, 1, 2, 0, 2, 3, 4, 5, 6, 4, 6, 7, 8, 9, 10, 8, 10, 11, 12, 13,
@@ -55,15 +72,3 @@ const ATTRIBUTES = {
55
72
  NORMAL: {size: 3, value: new Float32Array(CUBE_NORMALS)},
56
73
  TEXCOORD_0: {size: 2, value: new Float32Array(CUBE_TEX_COORDS)}
57
74
  };
58
-
59
- export default class CubeGeometry extends Geometry {
60
- constructor(props = {}) {
61
- const {id = uid('cube-geometry')} = props;
62
- super({
63
- ...props,
64
- id,
65
- indices: {size: 1, value: new Uint16Array(CUBE_INDICES)},
66
- attributes: {...ATTRIBUTES, ...props.attributes}
67
- });
68
- }
69
- }
@@ -0,0 +1,20 @@
1
+ import {TruncatedConeGeometry} from './truncated-cone-geometry';
2
+ import {uid} from '@luma.gl/webgl';
3
+
4
+ export type CylinderGeometryProps = {
5
+ id?: string;
6
+ radius?: number;
7
+ attributes?
8
+ };
9
+
10
+ export class CylinderGeometry extends TruncatedConeGeometry {
11
+ constructor(props: CylinderGeometryProps = {}) {
12
+ const {id = uid('cylinder-geometry'), radius = 1} = props;
13
+ super({
14
+ ...props,
15
+ id,
16
+ bottomRadius: radius,
17
+ topRadius: radius
18
+ });
19
+ }
20
+ }
@@ -7,8 +7,15 @@ import {uid} from '@luma.gl/webgl';
7
7
  const ICO_POSITIONS = [-1, 0, 0, 0, 1, 0, 0, 0, -1, 0, 0, 1, 0, -1, 0, 1, 0, 0];
8
8
  const ICO_INDICES = [3, 4, 5, 3, 5, 1, 3, 1, 0, 3, 0, 4, 4, 0, 2, 4, 2, 5, 2, 0, 1, 5, 2, 1];
9
9
 
10
- export default class IcoSphereGeometry extends Geometry {
11
- constructor(props = {}) {
10
+ export type IcoSphereGeometryProps = {
11
+ id?: string;
12
+ radius?: number;
13
+ iterations?: number;
14
+ attributes?
15
+ };
16
+
17
+ export class IcoSphereGeometry extends Geometry {
18
+ constructor(props: IcoSphereGeometryProps = {}) {
12
19
  const {id = uid('ico-sphere-geometry')} = props;
13
20
  const {indices, attributes} = tesselateIcosaHedron(props);
14
21
  super({
@@ -20,7 +27,7 @@ export default class IcoSphereGeometry extends Geometry {
20
27
  }
21
28
  }
22
29
 
23
- function tesselateIcosaHedron(props) {
30
+ function tesselateIcosaHedron(props: IcoSphereGeometryProps) {
24
31
  const {iterations = 0} = props;
25
32
 
26
33
  const PI = Math.PI;
@@ -2,8 +2,17 @@ import Geometry from '../geometry/geometry';
2
2
  import {unpackIndexedGeometry} from '../geometry/geometry-utils';
3
3
  import {uid} from '@luma.gl/webgl';
4
4
 
5
- export default class PlaneGeometry extends Geometry {
6
- constructor(props = {}) {
5
+ export type PlaneGeometryProps = {
6
+ id?: string;
7
+ radius?: number;
8
+ attributes?
9
+ };
10
+
11
+ // Primitives inspired by TDL http://code.google.com/p/webglsamples/,
12
+ // copyright 2011 Google Inc. new BSD License
13
+ // (http://www.opensource.org/licenses/bsd-license.php).
14
+ export class PlaneGeometry extends Geometry {
15
+ constructor(props: PlaneGeometryProps = {}) {
7
16
  const {id = uid('plane-geometry')} = props;
8
17
 
9
18
  const {indices, attributes} = tesselatePlane(props);
@@ -16,10 +25,6 @@ export default class PlaneGeometry extends Geometry {
16
25
  }
17
26
  }
18
27
 
19
- // Primitives inspired by TDL http://code.google.com/p/webglsamples/,
20
- // copyright 2011 Google Inc. new BSD License
21
- // (http://www.opensource.org/licenses/bsd-license.php).
22
- /* eslint-disable max-statements, complexity */
23
28
  /* eslint-disable complexity, max-statements */
24
29
  function tesselatePlane(props) {
25
30
  const {type = 'x,y', offset = 0, flipCull = false, unpack = false} = props;
@@ -1,8 +1,19 @@
1
1
  import Geometry from '../geometry/geometry';
2
2
  import {uid} from '@luma.gl/webgl';
3
3
 
4
- export default class SphereGeometry extends Geometry {
5
- constructor(props = {}) {
4
+ export type SphereGeometryProps = {
5
+ id?: string;
6
+ radius?: number;
7
+ nlat?: number;
8
+ nlong?: number;
9
+ attributes?
10
+ };
11
+
12
+ // Primitives inspired by TDL http://code.google.com/p/webglsamples/,
13
+ // copyright 2011 Google Inc. new BSD License
14
+ // (http://www.opensource.org/licenses/bsd-license.php).
15
+ export class SphereGeometry extends Geometry {
16
+ constructor(props: SphereGeometryProps = {}) {
6
17
  const {id = uid('sphere-geometry')} = props;
7
18
  const {indices, attributes} = tesselateSphere(props);
8
19
  super({
@@ -14,13 +25,9 @@ export default class SphereGeometry extends Geometry {
14
25
  }
15
26
  }
16
27
 
17
- // Primitives inspired by TDL http://code.google.com/p/webglsamples/,
18
- // copyright 2011 Google Inc. new BSD License
19
- // (http://www.opensource.org/licenses/bsd-license.php).
20
28
  /* eslint-disable max-statements, complexity */
21
- function tesselateSphere(props) {
29
+ function tesselateSphere(props: SphereGeometryProps) {
22
30
  const {nlat = 10, nlong = 10} = props;
23
- let {radius = 1} = props;
24
31
 
25
32
  const startLat = 0;
26
33
  const endLat = Math.PI;
@@ -30,10 +37,7 @@ function tesselateSphere(props) {
30
37
  const longRange = endLong - startLong;
31
38
  const numVertices = (nlat + 1) * (nlong + 1);
32
39
 
33
- if (typeof radius === 'number') {
34
- const value = radius;
35
- radius = (n1, n2, n3, u, v) => value;
36
- }
40
+ const radius = (n1, n2, n3, u, v) => props.radius || 1;
37
41
 
38
42
  const positions = new Float32Array(numVertices * 3);
39
43
  const normals = new Float32Array(numVertices * 3);
@@ -7,8 +7,20 @@ const INDEX_OFFSETS = {
7
7
  z: [1, 2, 0]
8
8
  };
9
9
 
10
- export default class TruncatedConeGeometry extends Geometry {
11
- constructor(props = {}) {
10
+ export type TruncatedConeGeometryProps = {
11
+ id?: string;
12
+ topRadius?: number;
13
+ bottomRadius?: number;
14
+ topCap?: boolean;
15
+ bottomCap?: boolean;
16
+ attributes?
17
+ };
18
+
19
+ // Primitives inspired by TDL http://code.google.com/p/webglsamples/,
20
+ // copyright 2011 Google Inc. new BSD License
21
+ // (http://www.opensource.org/licenses/bsd-license.php).
22
+ export class TruncatedConeGeometry extends Geometry {
23
+ constructor(props: TruncatedConeGeometryProps = {}) {
12
24
  const {id = uid('truncated-code-geometry')} = props;
13
25
  const {indices, attributes} = tesselateTruncatedCone(props);
14
26
  super({
@@ -20,9 +32,6 @@ export default class TruncatedConeGeometry extends Geometry {
20
32
  }
21
33
  }
22
34
 
23
- // Primitives inspired by TDL http://code.google.com/p/webglsamples/,
24
- // copyright 2011 Google Inc. new BSD License
25
- // (http://www.opensource.org/licenses/bsd-license.php).
26
35
  /* eslint-disable max-statements, complexity */
27
36
  function tesselateTruncatedCone(props) {
28
37
  const {
@@ -1,3 +1,5 @@
1
+ import type Geometry from './geometry';
2
+
1
3
  export function unpackIndexedGeometry(geometry) {
2
4
  const {indices, attributes} = geometry;
3
5
  if (!indices) {
@@ -1,57 +1,70 @@
1
+ // luma.gl, MIT license
2
+ import GL from '@luma.gl/constants';
1
3
  import {uid, assert} from '@luma.gl/webgl';
2
4
 
3
- // Rendering primitives - specify how to extract primitives from vertices.
4
- // NOTE: These are numerically identical to the corresponding WebGL/OpenGL constants
5
- export const DRAW_MODE = {
6
- POINTS: 0x0000, // draw single points.
7
- LINES: 0x0001, // draw lines. Each vertex connects to the one after it.
8
- LINE_LOOP: 0x0002, // draw lines. Each set of two vertices is treated as a separate line segment.
9
- LINE_STRIP: 0x0003, // draw a connected group of line segments from the first vertex to the last
10
- TRIANGLES: 0x0004, // draw triangles. Each set of three vertices creates a separate triangle.
11
- TRIANGLE_STRIP: 0x0005, // draw a connected group of triangles.
12
- TRIANGLE_FAN: 0x0006 // draw a connected group of triangles.
13
- // Each vertex connects to the previous and the first vertex in the fan.
5
+ /**
6
+ * Rendering primitives - "opology" specifies how to extract primitives from vertices.
7
+ */
8
+ export type Topology =
9
+ GL.POINTS | // draw single points.
10
+ GL.LINES | // draw lines. Each vertex connects to the one after it.
11
+ GL.LINE_LOOP | // draw lines. Each set of two vertices is treated as a separate line segment.
12
+ GL.LINE_STRIP | // draw a connected group of line segments from the first vertex to the last
13
+ GL.TRIANGLES | // draw triangles. Each set of three vertices creates a separate triangle.
14
+ GL.TRIANGLE_STRIP | // draw a connected group of triangles.
15
+ GL.TRIANGLE_FAN // draw a connected group of triangles.
16
+ ;
17
+
18
+ export type GeometryProps = {
19
+ id?: string;
20
+ drawMode?: Topology,
21
+ attributes?: {},
22
+ indices?;
23
+ vertexCount?: number
14
24
  };
15
25
 
16
26
  export default class Geometry {
17
- static get DRAW_MODE() {
18
- return DRAW_MODE;
19
- }
20
-
21
- constructor(props = {}) {
27
+ /** @deprecated */
28
+ static DRAW_MODE = {
29
+ POINTS: GL.POINTS, // draw single points.
30
+ LINES: GL.LINES, // draw lines. Each vertex connects to the one after it.
31
+ LINE_LOOP: GL.LINE_LOOP, // draw lines. Each set of two vertices is treated as a separate line segment.
32
+ LINE_STRIP: GL.LINE_STRIP, // draw a connected group of line segments from the first vertex to the last
33
+ TRIANGLES: GL.TRIANGLES, // draw triangles. Each set of three vertices creates a separate triangle.
34
+ TRIANGLE_STRIP: GL.TRIANGLE_STRIP, // draw a connected group of triangles.
35
+ TRIANGLE_FAN: GL.TRIANGLE_FAN // draw a connected group of triangles.
36
+ };
37
+
38
+ readonly id: string;
39
+ readonly drawMode: Topology = GL.TRIANGLES;
40
+
41
+ vertexCount: number;
42
+ attributes = {};
43
+ indices;
44
+ userData: Record<string, any> = {};
45
+
46
+ constructor(props: GeometryProps = {}) {
22
47
  const {
23
48
  id = uid('geometry'),
24
- drawMode = DRAW_MODE.TRIANGLES,
49
+ drawMode = GL.TRIANGLES,
25
50
  attributes = {},
26
51
  indices = null,
27
52
  vertexCount = null
28
53
  } = props;
29
54
 
30
55
  this.id = id;
31
- this.drawMode = drawMode | 0;
32
- this.attributes = {};
33
- this.userData = {};
56
+ this.drawMode = drawMode;
34
57
 
35
58
  this._setAttributes(attributes, indices);
36
59
 
37
60
  this.vertexCount = vertexCount || this._calculateVertexCount(this.attributes, this.indices);
38
-
39
- // stubRemovedMethods(this, [
40
- // 'setNeedsRedraw', 'needsRedraw', 'setAttributes'
41
- // ], 'Immutable');
42
-
43
- // stubRemovedMethods(this, [
44
- // 'hasAttribute', 'getAttribute', 'getArray'
45
- // ], 'Use geometry.attributes and geometry.indices');
46
-
47
- // deprecateMethods(this, ['getAttributes'])
48
61
  }
49
62
 
50
63
  get mode() {
51
64
  return this.drawMode;
52
65
  }
53
66
 
54
- getVertexCount() {
67
+ getVertexCount(): number {
55
68
  return this.vertexCount;
56
69
  }
57
70
 
@@ -62,7 +75,7 @@ export default class Geometry {
62
75
 
63
76
  // PRIVATE
64
77
 
65
- _print(attributeName) {
78
+ _print(attributeName): string {
66
79
  return `Geometry ${this.id} attribute ${attributeName}`;
67
80
  }
68
81
 
@@ -71,7 +84,7 @@ export default class Geometry {
71
84
  // type: indices, vertices, uvs
72
85
  // size: elements per vertex
73
86
  // target: WebGL buffer type (string or constant)
74
- _setAttributes(attributes, indices) {
87
+ _setAttributes(attributes, indices): this {
75
88
  if (indices) {
76
89
  this.indices = ArrayBuffer.isView(indices) ? {value: indices, size: 1} : indices;
77
90
  }
@@ -108,7 +121,7 @@ export default class Geometry {
108
121
  return this;
109
122
  }
110
123
 
111
- _calculateVertexCount(attributes, indices) {
124
+ _calculateVertexCount(attributes, indices): number {
112
125
  if (indices) {
113
126
  return indices.value.length;
114
127
  }
package/src/index.ts ADDED
@@ -0,0 +1,30 @@
1
+ // CORE
2
+ export {default as AnimationLoop} from './lib/animation-loop';
3
+ export {default as Model} from './lib/model';
4
+ export {default as ProgramManager} from './lib/program-manager';
5
+ export {default as Transform} from './transform/transform';
6
+
7
+ // Geometries
8
+ export {default as Geometry} from './geometry/geometry';
9
+
10
+ // Primitives
11
+ export {ConeGeometry, ConeGeometryProps} from './geometries/cone-geometry';
12
+ export {CubeGeometry, CubeGeometryProps} from './geometries/cube-geometry';
13
+ export {CylinderGeometry, CylinderGeometryProps} from './geometries/cylinder-geometry';
14
+ export {
15
+ IcoSphereGeometry,
16
+ IcoSphereGeometryProps
17
+ } from './geometries/ico-sphere-geometry';
18
+ export {PlaneGeometry, PlaneGeometryProps} from './geometries/plane-geometry';
19
+ export {SphereGeometry, SphereGeometryProps} from './geometries/sphere-geometry';
20
+ export {
21
+ TruncatedConeGeometry,
22
+ TruncatedConeGeometryProps
23
+ } from './geometries/truncated-cone-geometry';
24
+
25
+ // Animation
26
+ export {Timeline} from './animation/timeline';
27
+ export {KeyFrames} from './animation/key-frames';
28
+
29
+ // Utils
30
+ export {default as ClipSpace} from './utils/clip-space';