@luma.gl/engine 8.5.9 → 8.6.0-alpha.3

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 (271) hide show
  1. package/LICENSE +8 -1
  2. package/dist/animation/key-frames.d.ts +18 -0
  3. package/dist/animation/key-frames.d.ts.map +1 -0
  4. package/dist/{esm/animation → animation}/key-frames.js +13 -6
  5. package/dist/animation/key-frames.js.map +1 -0
  6. package/dist/animation/timeline.d.ts +51 -0
  7. package/dist/animation/timeline.d.ts.map +1 -0
  8. package/dist/{esm/animation → animation}/timeline.js +10 -5
  9. package/dist/animation/timeline.js.map +1 -0
  10. package/dist/bundle.d.ts +2 -0
  11. package/dist/bundle.d.ts.map +1 -0
  12. package/dist/bundle.js +5 -0
  13. package/dist/bundle.js.map +1 -0
  14. package/dist/geometries/cone-geometry.d.ts +10 -0
  15. package/dist/geometries/cone-geometry.d.ts.map +1 -0
  16. package/dist/{esm/geometries → geometries}/cone-geometry.js +2 -2
  17. package/dist/geometries/cone-geometry.js.map +1 -0
  18. package/dist/geometries/cube-geometry.d.ts +9 -0
  19. package/dist/geometries/cube-geometry.d.ts.map +1 -0
  20. package/dist/{esm/geometries → geometries}/cube-geometry.js +18 -18
  21. package/dist/geometries/cube-geometry.js.map +1 -0
  22. package/dist/geometries/cylinder-geometry.d.ts +10 -0
  23. package/dist/geometries/cylinder-geometry.d.ts.map +1 -0
  24. package/dist/{esm/geometries → geometries}/cylinder-geometry.js +2 -2
  25. package/dist/geometries/cylinder-geometry.js.map +1 -0
  26. package/dist/geometries/ico-sphere-geometry.d.ts +11 -0
  27. package/dist/geometries/ico-sphere-geometry.d.ts.map +1 -0
  28. package/dist/{esm/geometries → geometries}/ico-sphere-geometry.js +2 -2
  29. package/dist/geometries/ico-sphere-geometry.js.map +1 -0
  30. package/dist/geometries/plane-geometry.d.ts +10 -0
  31. package/dist/geometries/plane-geometry.d.ts.map +1 -0
  32. package/dist/{esm/geometries → geometries}/plane-geometry.js +5 -5
  33. package/dist/geometries/plane-geometry.js.map +1 -0
  34. package/dist/geometries/sphere-geometry.d.ts +12 -0
  35. package/dist/geometries/sphere-geometry.d.ts.map +1 -0
  36. package/dist/{esm/geometries → geometries}/sphere-geometry.js +2 -9
  37. package/dist/geometries/sphere-geometry.js.map +1 -0
  38. package/dist/geometries/truncated-cone-geometry.d.ts +13 -0
  39. package/dist/geometries/truncated-cone-geometry.d.ts.map +1 -0
  40. package/dist/{esm/geometries → geometries}/truncated-cone-geometry.js +1 -1
  41. package/dist/geometries/truncated-cone-geometry.js.map +1 -0
  42. package/dist/geometry/geometry-utils.d.ts +2 -0
  43. package/dist/geometry/geometry-utils.d.ts.map +1 -0
  44. package/dist/{esm/geometry → geometry}/geometry-utils.js +0 -0
  45. package/dist/geometry/geometry-utils.js.map +1 -0
  46. package/dist/geometry/geometry.d.ts +44 -0
  47. package/dist/geometry/geometry.d.ts.map +1 -0
  48. package/dist/{esm/geometry → geometry}/geometry.js +28 -19
  49. package/dist/geometry/geometry.js.map +1 -0
  50. package/dist/index.d.ts +26 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +17 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/lib/animation-loop.d.ts +149 -0
  55. package/dist/lib/animation-loop.d.ts.map +1 -0
  56. package/dist/{esm/lib → lib}/animation-loop.js +190 -143
  57. package/dist/lib/animation-loop.js.map +1 -0
  58. package/dist/lib/model-utils.d.ts +4 -0
  59. package/dist/lib/model-utils.d.ts.map +1 -0
  60. package/dist/{esm/lib → lib}/model-utils.js +3 -2
  61. package/dist/lib/model-utils.js.map +1 -0
  62. package/dist/lib/model.d.ts +111 -0
  63. package/dist/lib/model.d.ts.map +1 -0
  64. package/dist/{esm/lib → lib}/model.js +76 -20
  65. package/dist/lib/model.js.map +1 -0
  66. package/dist/lib/program-manager.d.ts +39 -0
  67. package/dist/lib/program-manager.d.ts.map +1 -0
  68. package/dist/{esm/lib → lib}/program-manager.js +29 -18
  69. package/dist/lib/program-manager.js.map +1 -0
  70. package/dist/lib/render-loop.d.ts +27 -0
  71. package/dist/lib/render-loop.d.ts.map +1 -0
  72. package/dist/lib/render-loop.js +56 -0
  73. package/dist/lib/render-loop.js.map +1 -0
  74. package/dist/transform/buffer-transform.d.ts +36 -0
  75. package/dist/transform/buffer-transform.d.ts.map +1 -0
  76. package/dist/{esm/transform → transform}/buffer-transform.js +15 -8
  77. package/dist/transform/buffer-transform.js.map +1 -0
  78. package/dist/transform/texture-transform.d.ts +57 -0
  79. package/dist/transform/texture-transform.d.ts.map +1 -0
  80. package/dist/{esm/transform → transform}/texture-transform.js +48 -16
  81. package/dist/transform/texture-transform.js.map +1 -0
  82. package/dist/transform/transform-shader-utils.d.ts +26 -0
  83. package/dist/transform/transform-shader-utils.d.ts.map +1 -0
  84. package/dist/{esm/transform → transform}/transform-shader-utils.js +38 -46
  85. package/dist/transform/transform-shader-utils.js.map +1 -0
  86. package/dist/transform/transform-types.d.ts +44 -0
  87. package/dist/transform/transform-types.d.ts.map +1 -0
  88. package/dist/transform/transform-types.js +2 -0
  89. package/dist/transform/transform-types.js.map +1 -0
  90. package/dist/transform/transform.d.ts +47 -0
  91. package/dist/transform/transform.d.ts.map +1 -0
  92. package/dist/{esm/transform → transform}/transform.js +63 -43
  93. package/dist/transform/transform.js.map +1 -0
  94. package/dist/utils/clip-space.d.ts +5 -0
  95. package/dist/utils/clip-space.d.ts.map +1 -0
  96. package/dist/{esm/utils → utils}/clip-space.js +3 -17
  97. package/dist/utils/clip-space.js.map +1 -0
  98. package/package.json +11 -11
  99. package/src/animation/{key-frames.js → key-frames.ts} +18 -16
  100. package/src/animation/{timeline.js → timeline.ts} +54 -18
  101. package/src/bundle.ts +4 -0
  102. package/src/geometries/{cone-geometry.js → cone-geometry.ts} +9 -3
  103. package/src/geometries/{cube-geometry.js → cube-geometry.ts} +17 -12
  104. package/src/geometries/cylinder-geometry.ts +20 -0
  105. package/src/geometries/{ico-sphere-geometry.js → ico-sphere-geometry.ts} +10 -3
  106. package/src/geometries/{plane-geometry.js → plane-geometry.ts} +11 -6
  107. package/src/geometries/{sphere-geometry.js → sphere-geometry.ts} +15 -11
  108. package/src/geometries/{truncated-cone-geometry.js → truncated-cone-geometry.ts} +14 -5
  109. package/src/geometry/{geometry-utils.js → geometry-utils.ts} +2 -0
  110. package/src/geometry/{geometry.js → geometry.ts} +47 -34
  111. package/src/index.ts +35 -0
  112. package/src/lib/animation-loop.ts +724 -0
  113. package/src/lib/{model-utils.js → model-utils.ts} +2 -2
  114. package/src/lib/{model.js → model.ts} +186 -66
  115. package/src/lib/{program-manager.js → program-manager.ts} +53 -34
  116. package/src/lib/render-loop.ts +56 -0
  117. package/src/transform/{buffer-transform.js → buffer-transform.ts} +42 -27
  118. package/src/transform/{texture-transform.js → texture-transform.ts} +35 -25
  119. package/src/transform/{transform-shader-utils.js → transform-shader-utils.ts} +55 -27
  120. package/src/transform/transform-types.ts +42 -0
  121. package/src/transform/transform.ts +189 -0
  122. package/src/utils/{clip-space.js → clip-space.ts} +4 -3
  123. package/dist/dist.js +0 -32248
  124. package/dist/dist.min.js +0 -1
  125. package/dist/es5/animation/key-frames.d.ts +0 -19
  126. package/dist/es5/animation/key-frames.js +0 -95
  127. package/dist/es5/animation/key-frames.js.map +0 -1
  128. package/dist/es5/animation/timeline.d.ts +0 -39
  129. package/dist/es5/animation/timeline.js +0 -211
  130. package/dist/es5/animation/timeline.js.map +0 -1
  131. package/dist/es5/bundle.js +0 -9
  132. package/dist/es5/bundle.js.map +0 -1
  133. package/dist/es5/geometries/cone-geometry.d.ts +0 -5
  134. package/dist/es5/geometries/cone-geometry.js +0 -59
  135. package/dist/es5/geometries/cone-geometry.js.map +0 -1
  136. package/dist/es5/geometries/cube-geometry.d.ts +0 -5
  137. package/dist/es5/geometries/cube-geometry.js +0 -75
  138. package/dist/es5/geometries/cube-geometry.js.map +0 -1
  139. package/dist/es5/geometries/cylinder-geometry.d.ts +0 -5
  140. package/dist/es5/geometries/cylinder-geometry.js +0 -55
  141. package/dist/es5/geometries/cylinder-geometry.js.map +0 -1
  142. package/dist/es5/geometries/ico-sphere-geometry.d.ts +0 -5
  143. package/dist/es5/geometries/ico-sphere-geometry.js +0 -217
  144. package/dist/es5/geometries/ico-sphere-geometry.js.map +0 -1
  145. package/dist/es5/geometries/index.d.ts +0 -7
  146. package/dist/es5/geometries/index.js +0 -64
  147. package/dist/es5/geometries/index.js.map +0 -1
  148. package/dist/es5/geometries/plane-geometry.d.ts +0 -5
  149. package/dist/es5/geometries/plane-geometry.js +0 -168
  150. package/dist/es5/geometries/plane-geometry.js.map +0 -1
  151. package/dist/es5/geometries/sphere-geometry.d.ts +0 -5
  152. package/dist/es5/geometries/sphere-geometry.js +0 -152
  153. package/dist/es5/geometries/sphere-geometry.js.map +0 -1
  154. package/dist/es5/geometries/truncated-cone-geometry.d.ts +0 -5
  155. package/dist/es5/geometries/truncated-cone-geometry.js +0 -171
  156. package/dist/es5/geometries/truncated-cone-geometry.js.map +0 -1
  157. package/dist/es5/geometry/geometry-utils.d.ts +0 -1
  158. package/dist/es5/geometry/geometry-utils.js +0 -49
  159. package/dist/es5/geometry/geometry-utils.js.map +0 -1
  160. package/dist/es5/geometry/geometry.d.ts +0 -25
  161. package/dist/es5/geometry/geometry.js +0 -150
  162. package/dist/es5/geometry/geometry.js.map +0 -1
  163. package/dist/es5/index.d.ts +0 -19
  164. package/dist/es5/index.js +0 -128
  165. package/dist/es5/index.js.map +0 -1
  166. package/dist/es5/lib/animation-loop.d.ts +0 -158
  167. package/dist/es5/lib/animation-loop.js +0 -642
  168. package/dist/es5/lib/animation-loop.js.map +0 -1
  169. package/dist/es5/lib/model-utils.d.ts +0 -3
  170. package/dist/es5/lib/model-utils.js +0 -110
  171. package/dist/es5/lib/model-utils.js.map +0 -1
  172. package/dist/es5/lib/model.d.ts +0 -214
  173. package/dist/es5/lib/model.js +0 -584
  174. package/dist/es5/lib/model.js.map +0 -1
  175. package/dist/es5/lib/program-manager.d.ts +0 -79
  176. package/dist/es5/lib/program-manager.js +0 -238
  177. package/dist/es5/lib/program-manager.js.map +0 -1
  178. package/dist/es5/transform/buffer-transform.d.ts +0 -13
  179. package/dist/es5/transform/buffer-transform.js +0 -294
  180. package/dist/es5/transform/buffer-transform.js.map +0 -1
  181. package/dist/es5/transform/resource-transform.d.ts +0 -16
  182. package/dist/es5/transform/texture-transform.d.ts +0 -16
  183. package/dist/es5/transform/texture-transform.js +0 -405
  184. package/dist/es5/transform/texture-transform.js.map +0 -1
  185. package/dist/es5/transform/transform-shader-utils.d.ts +0 -31
  186. package/dist/es5/transform/transform-shader-utils.js +0 -160
  187. package/dist/es5/transform/transform-shader-utils.js.map +0 -1
  188. package/dist/es5/transform/transform.d.ts +0 -33
  189. package/dist/es5/transform/transform.js +0 -274
  190. package/dist/es5/transform/transform.js.map +0 -1
  191. package/dist/es5/utils/clip-space.d.ts +0 -5
  192. package/dist/es5/utils/clip-space.js +0 -72
  193. package/dist/es5/utils/clip-space.js.map +0 -1
  194. package/dist/esm/animation/key-frames.d.ts +0 -19
  195. package/dist/esm/animation/key-frames.js.map +0 -1
  196. package/dist/esm/animation/timeline.d.ts +0 -39
  197. package/dist/esm/animation/timeline.js.map +0 -1
  198. package/dist/esm/bundle.js +0 -7
  199. package/dist/esm/bundle.js.map +0 -1
  200. package/dist/esm/geometries/cone-geometry.d.ts +0 -5
  201. package/dist/esm/geometries/cone-geometry.js.map +0 -1
  202. package/dist/esm/geometries/cube-geometry.d.ts +0 -5
  203. package/dist/esm/geometries/cube-geometry.js.map +0 -1
  204. package/dist/esm/geometries/cylinder-geometry.d.ts +0 -5
  205. package/dist/esm/geometries/cylinder-geometry.js.map +0 -1
  206. package/dist/esm/geometries/ico-sphere-geometry.d.ts +0 -5
  207. package/dist/esm/geometries/ico-sphere-geometry.js.map +0 -1
  208. package/dist/esm/geometries/index.d.ts +0 -7
  209. package/dist/esm/geometries/index.js +0 -8
  210. package/dist/esm/geometries/index.js.map +0 -1
  211. package/dist/esm/geometries/plane-geometry.d.ts +0 -5
  212. package/dist/esm/geometries/plane-geometry.js.map +0 -1
  213. package/dist/esm/geometries/sphere-geometry.d.ts +0 -5
  214. package/dist/esm/geometries/sphere-geometry.js.map +0 -1
  215. package/dist/esm/geometries/truncated-cone-geometry.d.ts +0 -5
  216. package/dist/esm/geometries/truncated-cone-geometry.js.map +0 -1
  217. package/dist/esm/geometry/geometry-utils.d.ts +0 -1
  218. package/dist/esm/geometry/geometry-utils.js.map +0 -1
  219. package/dist/esm/geometry/geometry.d.ts +0 -25
  220. package/dist/esm/geometry/geometry.js.map +0 -1
  221. package/dist/esm/index.d.ts +0 -19
  222. package/dist/esm/index.js +0 -16
  223. package/dist/esm/index.js.map +0 -1
  224. package/dist/esm/lib/animation-loop.d.ts +0 -158
  225. package/dist/esm/lib/animation-loop.js.map +0 -1
  226. package/dist/esm/lib/model-utils.d.ts +0 -3
  227. package/dist/esm/lib/model-utils.js.map +0 -1
  228. package/dist/esm/lib/model.d.ts +0 -214
  229. package/dist/esm/lib/model.js.map +0 -1
  230. package/dist/esm/lib/program-manager.d.ts +0 -79
  231. package/dist/esm/lib/program-manager.js.map +0 -1
  232. package/dist/esm/transform/buffer-transform.d.ts +0 -13
  233. package/dist/esm/transform/buffer-transform.js.map +0 -1
  234. package/dist/esm/transform/resource-transform.d.ts +0 -16
  235. package/dist/esm/transform/texture-transform.d.ts +0 -16
  236. package/dist/esm/transform/texture-transform.js.map +0 -1
  237. package/dist/esm/transform/transform-shader-utils.d.ts +0 -31
  238. package/dist/esm/transform/transform-shader-utils.js.map +0 -1
  239. package/dist/esm/transform/transform.d.ts +0 -33
  240. package/dist/esm/transform/transform.js.map +0 -1
  241. package/dist/esm/utils/clip-space.d.ts +0 -5
  242. package/dist/esm/utils/clip-space.js.map +0 -1
  243. package/src/animation/key-frames.d.ts +0 -19
  244. package/src/animation/timeline.d.ts +0 -39
  245. package/src/bundle.js +0 -7
  246. package/src/geometries/cone-geometry.d.ts +0 -5
  247. package/src/geometries/cube-geometry.d.ts +0 -5
  248. package/src/geometries/cylinder-geometry.d.ts +0 -5
  249. package/src/geometries/cylinder-geometry.js +0 -14
  250. package/src/geometries/ico-sphere-geometry.d.ts +0 -5
  251. package/src/geometries/index.d.ts +0 -7
  252. package/src/geometries/index.js +0 -7
  253. package/src/geometries/plane-geometry.d.ts +0 -5
  254. package/src/geometries/sphere-geometry.d.ts +0 -5
  255. package/src/geometries/truncated-cone-geometry.d.ts +0 -5
  256. package/src/geometry/geometry-utils.d.ts +0 -1
  257. package/src/geometry/geometry.d.ts +0 -25
  258. package/src/index.d.ts +0 -19
  259. package/src/index.js +0 -22
  260. package/src/lib/animation-loop.d.ts +0 -158
  261. package/src/lib/animation-loop.js +0 -601
  262. package/src/lib/model-utils.d.ts +0 -3
  263. package/src/lib/model.d.ts +0 -214
  264. package/src/lib/program-manager.d.ts +0 -79
  265. package/src/transform/buffer-transform.d.ts +0 -13
  266. package/src/transform/resource-transform.d.ts +0 -16
  267. package/src/transform/texture-transform.d.ts +0 -16
  268. package/src/transform/transform-shader-utils.d.ts +0 -31
  269. package/src/transform/transform.d.ts +0 -33
  270. package/src/transform/transform.js +0 -177
  271. package/src/utils/clip-space.d.ts +0 -5
@@ -0,0 +1,189 @@
1
+ import {Device, assert} from '@luma.gl/api';
2
+ import GL from '@luma.gl/constants';
3
+ import {getShaderInfo, getPassthroughFS} from '@luma.gl/shadertools';
4
+ import type {Framebuffer, Buffer} from '@luma.gl/webgl';
5
+ import {WebGLDevice, isObjectEmpty} from '@luma.gl/webgl';
6
+
7
+ import Model from '../lib/model';
8
+ import BufferTransform from './buffer-transform';
9
+ import TextureTransform from './texture-transform';
10
+ import {TransformProps, TransformRunOptions, TransformDrawOptions} from './transform-types';
11
+
12
+ /**
13
+ * Takes source and target buffers/textures and sets up the pipeline
14
+ */
15
+ export default class Transform {
16
+ /**
17
+ * Check if Transforms are supported (they are not under WebGL1)
18
+ * @todo differentiate writing to buffer vs not
19
+ */
20
+ static isSupported(device: Device | WebGL2RenderingContext): boolean {
21
+ try {
22
+ const webglDevice = WebGLDevice.attach(device);
23
+ return webglDevice.isWebGL2;
24
+ } catch {
25
+ return false;
26
+ }
27
+ }
28
+
29
+ readonly device: WebGLDevice;
30
+ readonly gl: WebGL2RenderingContext;
31
+ model: Model | null = null;
32
+ elementCount = 0;
33
+ bufferTransform = null;
34
+ textureTransform = null;
35
+ elementIDBuffer = null;
36
+
37
+ constructor(device: Device | WebGL2RenderingContext, props: TransformProps = {}) {
38
+ this.device = WebGLDevice.attach(device);
39
+ // TODO assert webgl2?
40
+ this.gl = this.device.gl2;
41
+ this._initialize(props);
42
+ Object.seal(this);
43
+ }
44
+
45
+ /** Delete owned resources. */
46
+ destroy(): void {
47
+ const {model, bufferTransform, textureTransform} = this;
48
+ if (model) {
49
+ model.delete();
50
+ }
51
+ if (bufferTransform) {
52
+ bufferTransform.delete();
53
+ }
54
+ if (textureTransform) {
55
+ textureTransform.delete();
56
+ }
57
+ }
58
+
59
+ /** @deprecated Use destroy*() */
60
+ delete(): void {
61
+ this.destroy();
62
+ }
63
+
64
+ /** Run one transform loop. */
65
+ run(options?: TransformRunOptions): void {
66
+ const {clearRenderTarget = true} = options || {};
67
+
68
+ const updatedOpts = this._updateDrawOptions(options);
69
+
70
+ if (clearRenderTarget && updatedOpts.framebuffer) {
71
+ updatedOpts.framebuffer.clear({color: true});
72
+ }
73
+
74
+ this.model.transform(updatedOpts);
75
+ }
76
+
77
+ /** swap resources if a map is provided */
78
+ swap(): void {
79
+ let swapped = false;
80
+ const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);
81
+ for (const resourceTransform of resourceTransforms) {
82
+ swapped = swapped || resourceTransform.swap();
83
+ }
84
+ assert(swapped, 'Nothing to swap');
85
+ }
86
+
87
+ /** Return Buffer object for given varying name. */
88
+ getBuffer(varyingName: string = null): Buffer {
89
+ return this.bufferTransform && this.bufferTransform.getBuffer(varyingName);
90
+ }
91
+
92
+ /** Return data either from Buffer or from Texture */
93
+ getData(options: {packed?: boolean; varyingName?: string} = {}) {
94
+ const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);
95
+ for (const resourceTransform of resourceTransforms) {
96
+ const data = resourceTransform.getData(options);
97
+ if (data) {
98
+ return data;
99
+ }
100
+ }
101
+ return null;
102
+ }
103
+
104
+ /** Return framebuffer object if rendering to textures */
105
+ getFramebuffer(): Framebuffer | null {
106
+ return this.textureTransform && this.textureTransform.getFramebuffer();
107
+ }
108
+
109
+ /** Update some or all buffer/texture bindings. */
110
+ update(props: TransformProps): void {
111
+ if ('elementCount' in props) {
112
+ this.model.setVertexCount(props.elementCount);
113
+ }
114
+ const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);
115
+ for (const resourceTransform of resourceTransforms) {
116
+ resourceTransform.update(props);
117
+ }
118
+ }
119
+
120
+ // Private
121
+
122
+ _initialize(props: TransformProps): void {
123
+ const {gl} = this;
124
+ this._buildResourceTransforms(gl, props);
125
+
126
+ props = this._updateModelProps(props);
127
+ this.model = new Model(
128
+ this.device,
129
+ Object.assign({}, props, {
130
+ fs: props.fs || getPassthroughFS({version: getShaderInfo(props.vs).version}),
131
+ id: props.id || 'transform-model',
132
+ drawMode: props.drawMode || GL.POINTS,
133
+ vertexCount: props.elementCount
134
+ })
135
+ );
136
+
137
+ if (this.bufferTransform) {
138
+ this.bufferTransform.setupResources({model: this.model});
139
+ }
140
+ }
141
+
142
+ _updateModelProps(props: TransformProps): TransformProps {
143
+ let updatedProps = {...props};
144
+ const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);
145
+ for (const resourceTransform of resourceTransforms) {
146
+ updatedProps = resourceTransform.updateModelProps(updatedProps);
147
+ }
148
+ return updatedProps;
149
+ }
150
+
151
+ _buildResourceTransforms(gl: WebGL2RenderingContext, props: TransformProps) {
152
+ if (canCreateBufferTransform(props)) {
153
+ this.bufferTransform = new BufferTransform(gl, props);
154
+ }
155
+ if (canCreateTextureTransform(props)) {
156
+ this.textureTransform = new TextureTransform(gl, props);
157
+ }
158
+ assert(
159
+ this.bufferTransform || this.textureTransform,
160
+ 'must provide source/feedback buffers or source/target textures'
161
+ );
162
+ }
163
+
164
+ _updateDrawOptions(options: TransformRunOptions): TransformDrawOptions {
165
+ let updatedOpts = {...options};
166
+ const resourceTransforms = [this.bufferTransform, this.textureTransform].filter(Boolean);
167
+ for (const resourceTransform of resourceTransforms) {
168
+ updatedOpts = Object.assign(updatedOpts, resourceTransform.getDrawOptions(updatedOpts));
169
+ }
170
+ return updatedOpts;
171
+ }
172
+ }
173
+
174
+ // Helper Methods
175
+
176
+ function canCreateBufferTransform(props: TransformProps): boolean {
177
+ const canCreate = !isObjectEmpty(props.feedbackBuffers) ||
178
+ !isObjectEmpty(props.feedbackMap) ||
179
+ (props.varyings && props.varyings.length > 0);
180
+ return Boolean(canCreate);
181
+ }
182
+
183
+ function canCreateTextureTransform(props: TransformProps): boolean {
184
+ const canCreate =
185
+ !isObjectEmpty(props._sourceTextures) ||
186
+ props._targetTexture ||
187
+ props._targetTextureVarying
188
+ return canCreate;
189
+ }
@@ -1,6 +1,6 @@
1
1
  // ClipSpace
2
2
  import GL from '@luma.gl/constants';
3
- import Model from '../lib/model';
3
+ import Model, {ModelProps} from '../lib/model';
4
4
  import Geometry from '../geometry/geometry';
5
5
 
6
6
  const CLIPSPACE_VERTEX_SHADER = `\
@@ -23,9 +23,10 @@ void main(void) {
23
23
  /* eslint-disable indent, no-multi-spaces */
24
24
  const POSITIONS = [-1, -1, 1, -1, -1, 1, 1, 1];
25
25
 
26
+
26
27
  export default class ClipSpace extends Model {
27
- constructor(gl, opts) {
28
- const TEX_COORDS = POSITIONS.map(coord => (coord === -1 ? 0 : coord));
28
+ constructor(gl: WebGLRenderingContext, opts?: ModelProps) {
29
+ const TEX_COORDS = POSITIONS.map((coord) => (coord === -1 ? 0 : coord));
29
30
 
30
31
  super(
31
32
  gl,