@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
@@ -0,0 +1,56 @@
1
+ import {Stats} from '@probe.gl/stats';
2
+ import type {AnimationProps} from './animation-loop';
3
+ import AnimationLoop from './animation-loop';
4
+ import {Timeline} from '../animation/timeline'
5
+
6
+ /**
7
+ * Minimal animation loop that initializes models in constructor
8
+ * Simplifying type management
9
+ */
10
+ export abstract class RenderLoop {
11
+ constructor(animationProps?: AnimationProps) {}
12
+ onRender(animationProps: AnimationProps) {}
13
+ onFinalize(animationProps: AnimationProps) {}
14
+
15
+ static getAnimationLoop(RenderLoopConstructor: typeof RenderLoop) {
16
+ return new WrappedAnimationLoop(RenderLoopConstructor);
17
+ }
18
+
19
+ /** Instantiates and runs the render loop */
20
+ static run(RenderLoopConstructor: typeof RenderLoop, options?: {start?: boolean}): WrappedAnimationLoop {
21
+ const animationLoop = RenderLoop.getAnimationLoop(RenderLoopConstructor);
22
+ if (options?.start !== false) {
23
+ animationLoop.start();
24
+ }
25
+ return animationLoop;
26
+ }
27
+ }
28
+
29
+ class WrappedAnimationLoop extends AnimationLoop {
30
+ RenderLoopConstructor: typeof RenderLoop;
31
+ renderLoop: RenderLoop;
32
+
33
+ getInfo() {
34
+ // @ts-ignore
35
+ return this.RenderLoopConstructor.info;
36
+ }
37
+
38
+ constructor(RenderLoopConstructor: typeof RenderLoop) {
39
+ super();
40
+ this.RenderLoopConstructor = RenderLoopConstructor;
41
+ }
42
+
43
+ onInitialize(animationProps: AnimationProps) {
44
+ // @ts-expect-error
45
+ this.renderLoop = new this.RenderLoopConstructor(animationProps);
46
+ }
47
+
48
+ onRender(animationProps: AnimationProps) {
49
+ this.renderLoop.onRender(animationProps);
50
+ }
51
+
52
+ onFinalize(animationProps: AnimationProps) {
53
+ this.renderLoop?.onFinalize?.(animationProps);
54
+ }
55
+ }
56
+
@@ -1,28 +1,40 @@
1
- import {isWebGL2} from '@luma.gl/gltools';
2
- import {Buffer, TransformFeedback} from '@luma.gl/webgl';
3
- import {assert} from '@luma.gl/webgl';
1
+ import {assert} from '@luma.gl/api';
2
+ import {Buffer, TransformFeedback, isWebGL2} from '@luma.gl/webgl';
3
+ import type {TransformProps, TransformDrawOptions, TransformRunOptions, TransformBinding} from './transform-types';
4
+
5
+ // import {TransformDrawOptions, TransformModelProps} from './resource-transform';
6
+ // export interface BufferTransform2 {
7
+ // setupResources(opts: any): void;
8
+ // updateModelProps(props?: {}): TransformProps;
9
+ // getDrawOptions(opts?: {}): TransformDrawOptions;
10
+ // swap(): boolean;
11
+ // update(opts?: {}): void;
12
+ // getBuffer(varyingName: any): any;
13
+ // getData(options?: {varyingName: string}): any;
14
+ // delete(): void;
15
+ // }
4
16
 
5
17
  export default class BufferTransform {
6
- constructor(gl, props = {}) {
18
+ gl: WebGL2RenderingContext;
19
+ currentIndex = 0;
20
+ feedbackMap = {};
21
+ varyings: string[] | null = null; // varyings array
22
+ bindings: TransformBinding[] = [];
23
+ resources = {}; // resources to be deleted
24
+
25
+ constructor(gl: WebGL2RenderingContext, props: TransformProps = {}) {
7
26
  this.gl = gl;
8
- this.currentIndex = 0;
9
- this.feedbackMap = {};
10
- this.varyings = null; // varyings array
11
- this.bindings = []; // each element is an object : {sourceBuffers, feedbackBuffers, transformFeedback}
12
-
13
- this.resources = {}; // resources to be deleted
14
-
15
27
  this._initialize(props);
16
28
  Object.seal(this);
17
29
  }
18
30
 
19
- setupResources(opts) {
31
+ setupResources(opts): void {
20
32
  for (const binding of this.bindings) {
21
33
  this._setupTransformFeedback(binding, opts);
22
34
  }
23
35
  }
24
36
 
25
- updateModelProps(props = {}) {
37
+ updateModelProps(props: TransformProps = {}): TransformProps {
26
38
  const {varyings} = this;
27
39
  if (varyings.length > 0) {
28
40
  props = Object.assign({}, props, {varyings});
@@ -30,15 +42,16 @@ export default class BufferTransform {
30
42
  return props;
31
43
  }
32
44
 
33
- getDrawOptions(opts = {}) {
45
+ // @ts-expect-error
46
+ getDrawOptions(opts: TransformRunOptions = {}): TransformDrawOptions {
34
47
  const binding = this.bindings[this.currentIndex];
35
48
  const {sourceBuffers, transformFeedback} = binding;
49
+ // @ts-expect-error
36
50
  const attributes = Object.assign({}, sourceBuffers, opts.attributes);
37
-
38
51
  return {attributes, transformFeedback};
39
52
  }
40
53
 
41
- swap() {
54
+ swap(): boolean {
42
55
  if (this.feedbackMap) {
43
56
  this.currentIndex = this._getNextIndex();
44
57
  return true;
@@ -52,7 +65,7 @@ export default class BufferTransform {
52
65
  }
53
66
 
54
67
  // returns current feedbackBuffer of given name
55
- getBuffer(varyingName) {
68
+ getBuffer(varyingName: string | null): Buffer | null {
56
69
  const {feedbackBuffers} = this.bindings[this.currentIndex];
57
70
  const bufferOrParams = varyingName ? feedbackBuffers[varyingName] : null;
58
71
  if (!bufferOrParams) {
@@ -61,7 +74,7 @@ export default class BufferTransform {
61
74
  return bufferOrParams instanceof Buffer ? bufferOrParams : bufferOrParams.buffer;
62
75
  }
63
76
 
64
- getData(options = {}) {
77
+ getData(options: {varyingName?: string} = {}) {
65
78
  const {varyingName} = options;
66
79
  const buffer = this.getBuffer(varyingName);
67
80
  if (buffer) {
@@ -71,7 +84,7 @@ export default class BufferTransform {
71
84
  }
72
85
 
73
86
  // Delete owned resources.
74
- delete() {
87
+ delete(): void {
75
88
  for (const name in this.resources) {
76
89
  this.resources[name].delete();
77
90
  }
@@ -79,7 +92,7 @@ export default class BufferTransform {
79
92
 
80
93
  // Private
81
94
 
82
- _initialize(props = {}) {
95
+ _initialize(props: TransformProps = {}): void {
83
96
  this._setupBuffers(props);
84
97
  this.varyings = props.varyings || Object.keys(this.bindings[this.currentIndex].feedbackBuffers);
85
98
  if (this.varyings.length > 0) {
@@ -125,13 +138,15 @@ export default class BufferTransform {
125
138
  }
126
139
 
127
140
  _setupBuffers(props = {}) {
128
- const {sourceBuffers = null} = props;
129
- Object.assign(this.feedbackMap, props.feedbackMap);
141
+ // @ts-expect-error
142
+ const {sourceBuffers = null} = props;
143
+ // @ts-expect-error
144
+ Object.assign(this.feedbackMap, props.feedbackMap);
130
145
  const feedbackBuffers = this._getFeedbackBuffers(props);
131
146
  this._updateBindings({sourceBuffers, feedbackBuffers});
132
147
  }
133
148
 
134
- _setupTransformFeedback(binding, {model}) {
149
+ _setupTransformFeedback(binding, {model}): void {
135
150
  const {program} = model;
136
151
  binding.transformFeedback = new TransformFeedback(this.gl, {
137
152
  program,
@@ -139,7 +154,7 @@ export default class BufferTransform {
139
154
  });
140
155
  }
141
156
 
142
- _updateBindings(opts) {
157
+ _updateBindings(opts): void {
143
158
  this.bindings[this.currentIndex] = this._updateBinding(this.bindings[this.currentIndex], opts);
144
159
  if (this.feedbackMap) {
145
160
  const {sourceBuffers, feedbackBuffers} = this._swapBuffers(this.bindings[this.currentIndex]);
@@ -166,7 +181,7 @@ export default class BufferTransform {
166
181
  return binding;
167
182
  }
168
183
 
169
- _swapBuffers(opts) {
184
+ _swapBuffers(opts): {sourceBuffers: any; feedbackBuffers: any} {
170
185
  if (!this.feedbackMap) {
171
186
  return null;
172
187
  }
@@ -184,7 +199,7 @@ export default class BufferTransform {
184
199
  }
185
200
 
186
201
  // Create a buffer and add to list of buffers to be deleted.
187
- _createNewBuffer(name, opts) {
202
+ _createNewBuffer(name, opts): Buffer {
188
203
  const buffer = new Buffer(this.gl, opts);
189
204
  if (this.resources[name]) {
190
205
  this.resources[name].delete();
@@ -193,7 +208,7 @@ export default class BufferTransform {
193
208
  return buffer;
194
209
  }
195
210
 
196
- _getNextIndex() {
211
+ _getNextIndex(): number {
197
212
  return (this.currentIndex + 1) % 2;
198
213
  }
199
214
  }
@@ -1,17 +1,10 @@
1
- /** @typedef {import('./transform').TransformProps} TransformProps */
2
1
  import GL from '@luma.gl/constants';
3
2
 
4
- import {
5
- cloneTextureFrom,
6
- readPixelsToArray,
7
- getShaderVersion,
8
- Buffer,
9
- Texture2D,
10
- Framebuffer
11
- } from '@luma.gl/webgl';
3
+ import {cloneTextureFrom, readPixelsToArray, Buffer, Texture2D, Framebuffer} from '@luma.gl/webgl';
12
4
 
13
5
  import {
14
6
  _transform as transformModule,
7
+ getShaderInfo,
15
8
  getPassthroughFS,
16
9
  typeToChannelCount,
17
10
  combineInjects
@@ -19,6 +12,8 @@ import {
19
12
 
20
13
  import {updateForTextures, getSizeUniforms} from './transform-shader-utils';
21
14
 
15
+ import type {TransformProps, TransformDrawOptions} from './transform-types';
16
+
22
17
  // TODO: move these constants to transform-shader-utils
23
18
  // Texture parameters needed so sample can precisely pick pixel for given element id.
24
19
  const SRC_TEX_PARAMETER_OVERRIDES = {
@@ -30,7 +25,24 @@ const SRC_TEX_PARAMETER_OVERRIDES = {
30
25
  const FS_OUTPUT_VARIABLE = 'transform_output';
31
26
 
32
27
  export default class TextureTransform {
33
- constructor(gl, props = {}) {
28
+ gl: WebGL2RenderingContext;
29
+ id = 0;
30
+ currentIndex = 0;
31
+ _swapTexture = null;
32
+ targetTextureVarying = null;
33
+ targetTextureType = null;
34
+ samplerTextureMap = null;
35
+ bindings = []; // each element is an object : {sourceTextures, targetTexture, framebuffer}
36
+ resources = {}; // resources to be deleted
37
+
38
+ hasTargetTexture: boolean = false;
39
+ hasSourceTextures: boolean = false;
40
+ ownTexture: Texture2D | null = null;
41
+ elementIDBuffer: Buffer | null = null;
42
+ _targetRefTexName: string;
43
+ elementCount: number;
44
+
45
+ constructor(gl: WebGL2RenderingContext, props: TransformProps = {}) {
34
46
  this.gl = gl;
35
47
  this.id = this.currentIndex = 0;
36
48
  this._swapTexture = null;
@@ -45,15 +57,14 @@ export default class TextureTransform {
45
57
  Object.seal(this);
46
58
  }
47
59
 
48
- updateModelProps(props = {}) {
60
+ updateModelProps(props: TransformProps = {}) {
49
61
  const updatedModelProps = this._processVertexShader(props);
50
62
  return Object.assign({}, props, updatedModelProps);
51
63
  }
52
64
 
53
- getDrawOptions(opts = {}) {
54
- const {sourceBuffers, sourceTextures, framebuffer, targetTexture} = this.bindings[
55
- this.currentIndex
56
- ];
65
+ getDrawOptions(opts: TransformProps = {}): TransformDrawOptions {
66
+ const {sourceBuffers, sourceTextures, framebuffer, targetTexture} =
67
+ this.bindings[this.currentIndex];
57
68
 
58
69
  const attributes = Object.assign({}, sourceBuffers, opts.attributes);
59
70
  const uniforms = Object.assign({}, opts.uniforms);
@@ -76,7 +87,6 @@ export default class TextureTransform {
76
87
  });
77
88
  Object.assign(uniforms, sizeUniforms);
78
89
  }
79
-
80
90
  if (this.hasTargetTexture) {
81
91
  discard = false;
82
92
  parameters.viewport = [0, 0, framebuffer.width, framebuffer.height];
@@ -115,7 +125,7 @@ export default class TextureTransform {
115
125
  // readPixels returns 4 elements for each pixel, pack the elements when requested
116
126
  const ArrayType = pixels.constructor;
117
127
  const channelCount = typeToChannelCount(this.targetTextureType);
118
- // @ts-ignore
128
+ // @ts-expect-error
119
129
  const packedPixels = new ArrayType((pixels.length * channelCount) / 4);
120
130
  let packCount = 0;
121
131
  for (let i = 0; i < pixels.length; i += 4) {
@@ -144,11 +154,11 @@ export default class TextureTransform {
144
154
 
145
155
  // Private
146
156
 
147
- _initialize(props = {}) {
157
+ _initialize(props: TransformProps = {}) {
148
158
  const {_targetTextureVarying, _swapTexture} = props;
149
159
  this._swapTexture = _swapTexture;
150
160
  this.targetTextureVarying = _targetTextureVarying;
151
- this.hasTargetTexture = _targetTextureVarying;
161
+ this.hasTargetTexture = Boolean(_targetTextureVarying);
152
162
  this._setupTextures(props);
153
163
  }
154
164
 
@@ -171,8 +181,7 @@ export default class TextureTransform {
171
181
  return this._createNewTexture(refTexture);
172
182
  }
173
183
 
174
- /** @param {TransformProps} props */
175
- _setupTextures(props = {}) {
184
+ _setupTextures(props: TransformProps = {}) {
176
185
  const {sourceBuffers, _sourceTextures = {}, _targetTexture} = props;
177
186
  const targetTexture = this._createTargetTexture({
178
187
  sourceTextures: _sourceTextures,
@@ -186,7 +195,7 @@ export default class TextureTransform {
186
195
  }
187
196
  }
188
197
 
189
- _updateElementIDBuffer(elementCount) {
198
+ _updateElementIDBuffer(elementCount: number): void {
190
199
  if (typeof elementCount !== 'number' || this.elementCount >= elementCount) {
191
200
  return;
192
201
  }
@@ -305,9 +314,9 @@ export default class TextureTransform {
305
314
  }
306
315
 
307
316
  // build and return shader releated parameters
308
- _processVertexShader(props = {}) {
317
+ _processVertexShader(props: TransformProps = {}) {
309
318
  const {sourceTextures, targetTexture} = this.bindings[this.currentIndex];
310
- // @ts-ignore TODO - uniforms is not present
319
+ // @ts-expect-error TODO - uniforms is not present
311
320
  const {vs, uniforms, targetTextureType, inject, samplerTextureMap} = updateForTextures({
312
321
  vs: props.vs,
313
322
  sourceTextureMap: sourceTextures,
@@ -320,13 +329,14 @@ export default class TextureTransform {
320
329
  const fs =
321
330
  props._fs ||
322
331
  getPassthroughFS({
323
- version: getShaderVersion(vs),
332
+ version: getShaderInfo(vs).version,
324
333
  input: this.targetTextureVarying,
325
334
  inputType: targetTextureType,
326
335
  output: FS_OUTPUT_VARIABLE
327
336
  });
328
337
  const modules =
329
338
  this.hasSourceTextures || this.targetTextureVarying
339
+ // @ts-expect-error
330
340
  ? [transformModule].concat(props.modules || [])
331
341
  : props.modules;
332
342
  return {vs, fs, modules, uniforms, inject: combinedInject};
@@ -8,7 +8,18 @@ const VS_POS_VARIABLE = 'transform_position';
8
8
  // Scan provided vertex shader
9
9
  // for each texture attribute, inject sampler instructions and build uniforms for sampler
10
10
  // for texture target, get varying type and inject position instruction
11
- export function updateForTextures({vs, sourceTextureMap, targetTextureVarying, targetTexture}) {
11
+ export function updateForTextures(options: {
12
+ vs: any;
13
+ sourceTextureMap: any;
14
+ targetTextureVarying: any;
15
+ targetTexture: any;
16
+ }): {
17
+ vs: any;
18
+ targetTextureType: any;
19
+ inject: {};
20
+ samplerTextureMap: {};
21
+ } {
22
+ const {vs, sourceTextureMap, targetTextureVarying, targetTexture} = options;
12
23
  const texAttributeNames = Object.keys(sourceTextureMap);
13
24
  let sourceCount = texAttributeNames.length;
14
25
  let targetTextureType = null;
@@ -67,46 +78,47 @@ export function updateForTextures({vs, sourceTextureMap, targetTextureVarying, t
67
78
  }
68
79
 
69
80
  // builds and returns an object contaning size uniform for each texture
70
- export function getSizeUniforms({sourceTextureMap, targetTextureVarying, targetTexture}) {
81
+ export function getSizeUniforms(options: {
82
+ sourceTextureMap: any;
83
+ targetTextureVarying: any;
84
+ targetTexture: any;
85
+ }): {} {
71
86
  const uniforms = {};
72
87
  let width;
73
88
  let height;
74
- if (targetTextureVarying) {
75
- ({width, height} = targetTexture);
76
- uniforms[`${SIZE_UNIFORM_PREFIX}${targetTextureVarying}`] = [width, height];
89
+ if (options.targetTextureVarying) {
90
+ ({width, height} = options.targetTexture);
91
+ uniforms[`${SIZE_UNIFORM_PREFIX}${options.targetTextureVarying}`] = [width, height];
77
92
  }
78
- for (const textureName in sourceTextureMap) {
79
- ({width, height} = sourceTextureMap[textureName]);
93
+ for (const textureName in options.sourceTextureMap) {
94
+ ({width, height} = options.sourceTextureMap[textureName]);
80
95
  uniforms[`${SIZE_UNIFORM_PREFIX}${textureName}`] = [width, height];
81
96
  }
82
97
  return uniforms;
83
98
  }
84
99
 
85
- // Checks if provided line is defining an attribute, if so returns details otherwise null
86
- function getAttributeDefinition(line) {
87
- return getQualifierDetails(line, ['attribute', 'in']);
88
- }
89
-
90
- function getSamplerDeclerations(textureName) {
91
- const samplerName = `${SAMPLER_UNIFORM_PREFIX}${textureName}`;
92
- const sizeName = `${SIZE_UNIFORM_PREFIX}${textureName}`;
93
- const uniformDeclerations = `\
94
- uniform sampler2D ${samplerName};
95
- uniform vec2 ${sizeName};`;
96
- return {samplerName, sizeName, uniformDeclerations};
97
- }
98
-
99
100
  // Return size (float, vec2 etc) of a given varying, null if doens't exist.
100
- export function getVaryingType(line, varying) {
101
- const qualaiferDetails = getQualifierDetails(line, ['varying', 'out']);
102
- if (!qualaiferDetails) {
101
+
102
+ export function getVaryingType(line: any, varying: any): any {
103
+ const qualiferDetails = getQualifierDetails(line, ['varying', 'out']);
104
+ if (!qualiferDetails) {
103
105
  return null;
104
106
  }
105
- return qualaiferDetails.name === varying ? qualaiferDetails.type : null;
107
+ return qualiferDetails.name === varying ? qualiferDetails.type : null;
106
108
  }
107
109
 
108
110
  // build required definitions, sample instructions for each texture attribute
109
- export function processAttributeDefinition(line, textureMap) {
111
+ export function processAttributeDefinition(
112
+ line: any,
113
+ textureMap: any
114
+ ): {
115
+ updatedLine: string;
116
+ inject: {
117
+ 'vs:#decl': string;
118
+ 'vs:#main-start': string;
119
+ };
120
+ samplerTextureMap: {};
121
+ } {
110
122
  const samplerTextureMap = {};
111
123
  const attributeData = getAttributeDefinition(line);
112
124
  if (!attributeData) {
@@ -116,7 +128,7 @@ export function processAttributeDefinition(line, textureMap) {
116
128
  if (name && textureMap[name]) {
117
129
  // eslint-disable-next-line no-useless-escape
118
130
  const updatedLine = `\// ${line} => Replaced by Transform with a sampler`;
119
- const {samplerName, sizeName, uniformDeclerations} = getSamplerDeclerations(name);
131
+ const {samplerName, sizeName, uniformDeclerations} = getSamplerDeclarations(name);
120
132
 
121
133
  const channels = typeToChannelSuffix(type);
122
134
  const sampleInstruction = ` ${type} ${name} = transform_getInput(${samplerName}, ${sizeName}).${channels};\n`;
@@ -139,3 +151,19 @@ export function processAttributeDefinition(line, textureMap) {
139
151
  }
140
152
  return null;
141
153
  }
154
+
155
+ // HELPERS
156
+
157
+ // Checks if provided line is defining an attribute, if so returns details otherwise null
158
+ function getAttributeDefinition(line) {
159
+ return getQualifierDetails(line, ['attribute', 'in']);
160
+ }
161
+
162
+ function getSamplerDeclarations(textureName) {
163
+ const samplerName = `${SAMPLER_UNIFORM_PREFIX}${textureName}`;
164
+ const sizeName = `${SIZE_UNIFORM_PREFIX}${textureName}`;
165
+ const uniformDeclerations = `\
166
+ uniform sampler2D ${samplerName};
167
+ uniform vec2 ${sizeName};`;
168
+ return {samplerName, sizeName, uniformDeclerations};
169
+ }
@@ -0,0 +1,42 @@
1
+ /** Properties for creating Transforms */
2
+ export type TransformProps = {
3
+ id?: string;
4
+ vs?: string;
5
+ elementCount?: number;
6
+ sourceBuffers?: object;
7
+ feedbackBuffers?: object;
8
+ varyings?: string[];
9
+ feedbackMap?: object;
10
+ modules?: object[]; // TODO use ShaderModule type
11
+ attributes?: any;
12
+ uniforms?: any;
13
+ parameters?: any;
14
+ discard?: boolean;
15
+ isIndexed?: boolean;
16
+ _sourceTextures?: any;
17
+ _targetTexture?: any;
18
+ _targetTextureVarying?: string;
19
+ _swapTexture?: string;
20
+ _fs?: string;
21
+ fs?: string;
22
+ inject?: any;
23
+ drawMode?: number;
24
+ };
25
+
26
+ /** Options that can be provided when running a Transform */
27
+ export type TransformRunOptions = {
28
+ clearRenderTarget?: boolean;
29
+ uniforms: Record<string, any>;
30
+ };
31
+
32
+ /** Options that control drawing a Transform. Used by subclasses to return draw parameters */
33
+ export type TransformDrawOptions = {
34
+ attributes?: object;
35
+ framebuffer?: any;
36
+ uniforms?: object;
37
+ discard?: boolean;
38
+ parameters?: object;
39
+ transformFeedback?: any;
40
+ };
41
+
42
+ export type TransformBinding = {sourceBuffers, feedbackBuffers, transformFeedback};