@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
@@ -11,8 +11,8 @@ const GLTF_TO_LUMA_ATTRIBUTE_MAP = {
11
11
  TEXCOORD_2: 'texCoords2'
12
12
  };
13
13
 
14
- export function getBuffersFromGeometry(gl, geometry, options) {
15
- const buffers = {};
14
+ export function getBuffersFromGeometry(gl: WebGLRenderingContext, geometry, options?) {
15
+ const buffers: Record<string, Buffer | [Buffer, {}]> = {};
16
16
  let indices = geometry.indices;
17
17
 
18
18
  for (const name in geometry.attributes) {
@@ -1,9 +1,9 @@
1
- /* eslint-disable complexity */
2
-
1
+ // luma.gl, MIT license
2
+ import {Device} from '@luma.gl/api';
3
3
  import GL from '@luma.gl/constants';
4
- import {isWebGL} from '@luma.gl/gltools';
5
- import ProgramManager from './program-manager';
4
+ import type {ProgramProps} from '@luma.gl/webgl';
6
5
  import {
6
+ WebGLDevice,
7
7
  Program,
8
8
  VertexArray,
9
9
  clear,
@@ -19,6 +19,7 @@ import {
19
19
  getDebugTableForVertexArray,
20
20
  getDebugTableForProgramConfiguration
21
21
  } from '@luma.gl/webgl';
22
+ import ProgramManager from './program-manager';
22
23
  import {getBuffersFromGeometry} from './model-utils';
23
24
 
24
25
  const LOG_DRAW_PRIORITY = 2;
@@ -29,23 +30,149 @@ const ERR_MODEL_PARAMS = 'Model needs drawMode and vertexCount';
29
30
  const NOOP = () => {};
30
31
  const DRAW_PARAMS = {};
31
32
 
33
+ export type ModelProps = ProgramProps & {
34
+ id?: string;
35
+
36
+ // program props
37
+ // vs,
38
+ // fs,
39
+ // varyings,
40
+ // bufferMode,
41
+
42
+ program?: Program;
43
+ modules?: any[];
44
+ defines?: Record<string, number | boolean>;
45
+ inject?: Record<string, any>;
46
+ transpileToGLSL100?: boolean;
47
+
48
+ moduleSettings?: object; // UniformsOptions
49
+ attributes?: object;
50
+ uniforms?: object; // Uniforms
51
+ geometry?: object; // Geometry
52
+ vertexCount?: number
53
+ drawMode?: number
54
+ isInstanced?: boolean
55
+ instanceCount?: number
56
+ programManager?: ProgramManager
57
+ onBeforeRender?: () => void
58
+ onAfterRender?: () => void
59
+ _feedbackBuffers?: object; // FeedbackBuffers
60
+
61
+ // Deprecated?
62
+ isIndexed?: boolean;
63
+ indexType?;
64
+ indexOffset?: number;
65
+ vertexArrayInstanced?: boolean;
66
+
67
+ /** @deprecated Use isInstanced */
68
+ instanced?: boolean
69
+ };
70
+
71
+
72
+ export type ModelDrawOptions = {
73
+ moduleSettings?;
74
+ framebuffer?;
75
+ uniforms?;
76
+ attributes?;
77
+ transformFeedback?;
78
+ parameters?;
79
+ vertexArray?;
80
+ };
81
+
82
+ /* TODO - from autogenerated declarations, copy types and delete
83
+ interface ModelProps extends ProgramProps {
84
+ id?: string
85
+ moduleSettings?: UniformsOptions
86
+ uniforms?: Uniforms
87
+ geometry?: Geometry
88
+ vertexCount?: number
89
+ drawMode?: number
90
+ programManager?: ProgramManager
91
+ onBeforeRender?: () => void
92
+ onAfterRender?: () => void
93
+ _feedbackBuffers?: FeedbackBuffers
94
+ }
95
+
96
+ interface DrawOpts {
97
+ moduleSettings?: UniformsOptions
98
+ framebuffer: Framebuffer
99
+ uniforms?: Uniforms
100
+ attributes?: Attributes
101
+ parameters?: Parameters
102
+ transformFeedback?: TransformFeedback
103
+ vertexArray?: VertexArray
104
+ }
105
+
106
+ interface ClearOpts {
107
+ framebuffer?: Framebuffer
108
+ color?: boolean
109
+ depth?: boolean
110
+ stencil?: boolean
111
+ }
112
+
113
+ interface TransformOpts extends DrawOpts {
114
+ discard: boolean
115
+ feedbackBuffers: FeedbackBuffers
116
+ unbindModels: Array<Model>
117
+ parameters: Parameters
118
+ }
119
+ */
120
+
32
121
  export default class Model {
33
- constructor(gl, props = {}) {
122
+ readonly device: Device;
123
+ readonly gl: WebGLRenderingContext;
124
+
125
+ readonly id: string;
126
+ readonly animated: boolean = false;
127
+ programManager: ProgramManager;
128
+ vertexCount: number;
129
+
130
+ lastLogTime: number = 0; // TODO - move to probe.gl
131
+
132
+ props: ModelProps;
133
+ userData: Record<string, any> = {};
134
+ needsRedraw: boolean = true;
135
+ attributes: Record<string, any> = {};
136
+ _attributes: Record<string, any> = {};
137
+ uniforms: Record<string, any> = {};
138
+
139
+ drawMode;
140
+ instanceCount: number;
141
+ pickable: boolean = true;
142
+
143
+ programProps: ProgramProps & {program?: Program; modules; inject; defines; varyings; bufferMode; transpileToGLSL100;};
144
+ vertexArray: VertexArray;
145
+ program: Program;
146
+ transformFeedback: TransformFeedback | undefined;
147
+ _programDirty = true;
148
+ _programManagerState;
149
+ _managedProgram;
150
+
151
+ // Track buffers created by setGeometry
152
+ geometryBuffers = {};
153
+ // geometry might have set drawMode and vertexCount
154
+ isInstanced: boolean;
155
+ // TODO - just to unbreak deck.gl 7.0-beta, remove as soon as updated
156
+ geometry = {};
157
+
158
+ constructor(device: Device, props?: ModelProps);
159
+ /* @deprecated */
160
+ constructor(gl: WebGLRenderingContext, props?: ModelProps);
161
+ constructor(device, props: ModelProps = {}) {
34
162
  // Deduce a helpful id
35
163
  const {id = uid('model')} = props;
36
- assert(isWebGL(gl));
37
164
  this.id = id;
38
- this.gl = gl;
165
+ const webglDevice = WebGLDevice.attach(device);
166
+ this.device = webglDevice;
167
+ this.gl = webglDevice.gl;
39
168
  this.id = props.id || uid('Model');
40
- this.lastLogTime = 0; // TODO - move to probe.gl
41
- this.animated = false;
42
169
  this.initialize(props);
43
170
  }
44
171
 
45
- initialize(props) {
172
+ initialize(props: ModelProps) {
46
173
  this.props = {};
47
174
 
48
- this.programManager = props.programManager || ProgramManager.getDefaultProgramManager(this.gl);
175
+ this.programManager = props.programManager || ProgramManager.getDefaultProgramManager(this.device);
49
176
  this._programManagerState = -1;
50
177
  this._managedProgram = false;
51
178
 
@@ -63,9 +190,9 @@ export default class Model {
63
190
 
64
191
  this.programProps = {
65
192
  program,
193
+ modules,
66
194
  vs,
67
195
  fs,
68
- modules,
69
196
  defines,
70
197
  inject,
71
198
  varyings,
@@ -122,7 +249,7 @@ export default class Model {
122
249
  this._setModelProps(props);
123
250
  }
124
251
 
125
- delete() {
252
+ destroy(): void {
126
253
  // delete all attributes created by this model
127
254
  // TODO - should buffer deletes be handled by vertex array?
128
255
  for (const key in this._attributes) {
@@ -141,17 +268,22 @@ export default class Model {
141
268
  this._deleteGeometryBuffers();
142
269
  }
143
270
 
271
+ /** @deprecated Use .destroy() */
272
+ delete(): void {
273
+ this.destroy();
274
+ }
275
+
144
276
  // GETTERS
145
277
 
146
278
  getDrawMode() {
147
279
  return this.drawMode;
148
280
  }
149
281
 
150
- getVertexCount() {
282
+ getVertexCount(): number {
151
283
  return this.vertexCount;
152
284
  }
153
285
 
154
- getInstanceCount() {
286
+ getInstanceCount(): number {
155
287
  return this.instanceCount;
156
288
  }
157
289
 
@@ -159,22 +291,13 @@ export default class Model {
159
291
  return this.attributes;
160
292
  }
161
293
 
162
- getProgram() {
294
+ getProgram(): Program {
163
295
  return this.program;
164
296
  }
165
297
 
166
- setProgram(props) {
167
- const {
168
- program,
169
- vs,
170
- fs,
171
- modules,
172
- defines,
173
- inject,
174
- varyings,
175
- bufferMode,
176
- transpileToGLSL100
177
- } = props;
298
+ setProgram(props): void {
299
+ const {program, vs, fs, modules, defines, inject, varyings, bufferMode, transpileToGLSL100} =
300
+ props;
178
301
  this.programProps = {
179
302
  program,
180
303
  vs,
@@ -195,24 +318,24 @@ export default class Model {
195
318
 
196
319
  // SETTERS
197
320
 
198
- setDrawMode(drawMode) {
321
+ setDrawMode(drawMode): this {
199
322
  this.drawMode = drawMode;
200
323
  return this;
201
324
  }
202
325
 
203
- setVertexCount(vertexCount) {
326
+ setVertexCount(vertexCount): this {
204
327
  assert(Number.isFinite(vertexCount));
205
328
  this.vertexCount = vertexCount;
206
329
  return this;
207
330
  }
208
331
 
209
- setInstanceCount(instanceCount) {
332
+ setInstanceCount(instanceCount): this {
210
333
  assert(Number.isFinite(instanceCount));
211
334
  this.instanceCount = instanceCount;
212
335
  return this;
213
336
  }
214
337
 
215
- setGeometry(geometry) {
338
+ setGeometry(geometry): this {
216
339
  this.drawMode = geometry.drawMode;
217
340
  this.vertexCount = geometry.getVertexCount();
218
341
 
@@ -223,7 +346,7 @@ export default class Model {
223
346
  return this;
224
347
  }
225
348
 
226
- setAttributes(attributes = {}) {
349
+ setAttributes(attributes = {}): this {
227
350
  // Avoid setting needsRedraw if no attributes
228
351
  if (isObjectEmpty(attributes)) {
229
352
  return this;
@@ -242,13 +365,12 @@ export default class Model {
242
365
  }
243
366
 
244
367
  // TODO - should actually set the uniforms
245
- setUniforms(uniforms = {}) {
368
+ setUniforms(uniforms = {}): this {
246
369
  Object.assign(this.uniforms, uniforms);
247
-
248
370
  return this;
249
371
  }
250
372
 
251
- getModuleUniforms(opts) {
373
+ getModuleUniforms(opts?) {
252
374
  this._checkProgram();
253
375
 
254
376
  const getUniforms = this.programManager.getUniforms(this.program);
@@ -260,19 +382,19 @@ export default class Model {
260
382
  return {};
261
383
  }
262
384
 
263
- updateModuleSettings(opts) {
385
+ updateModuleSettings(opts?): this {
264
386
  const uniforms = this.getModuleUniforms(opts || {});
265
387
  return this.setUniforms(uniforms);
266
388
  }
267
389
 
268
390
  // DRAW CALLS
269
391
 
270
- clear(opts) {
392
+ clear(opts): this {
271
393
  clear(this.program.gl, opts);
272
394
  return this;
273
395
  }
274
396
 
275
- draw(opts = {}) {
397
+ draw(opts: ModelDrawOptions = {}): boolean {
276
398
  // Lazy update program and vertex array
277
399
  this._checkProgram();
278
400
 
@@ -344,8 +466,9 @@ export default class Model {
344
466
  return didDraw;
345
467
  }
346
468
 
347
- // Draw call for transform feedback
348
- transform(opts = {}) {
469
+ // Draw call for transform feedback, TBD...
470
+ transform(opts: ModelDrawOptions = {}): this {
471
+ // @ts-expect-error
349
472
  const {discard = true, feedbackBuffers, unbindModels = []} = opts;
350
473
 
351
474
  let {parameters} = opts;
@@ -358,11 +481,11 @@ export default class Model {
358
481
  parameters = Object.assign({}, parameters, {[GL.RASTERIZER_DISCARD]: discard});
359
482
  }
360
483
 
361
- unbindModels.forEach(model => model.vertexArray.unbindBuffers());
484
+ unbindModels.forEach((model) => model.vertexArray.unbindBuffers());
362
485
  try {
363
486
  this.draw(Object.assign({}, opts, {parameters}));
364
487
  } finally {
365
- unbindModels.forEach(model => model.vertexArray.bindBuffers());
488
+ unbindModels.forEach((model) => model.vertexArray.bindBuffers());
366
489
  }
367
490
 
368
491
  return this;
@@ -370,14 +493,14 @@ export default class Model {
370
493
 
371
494
  // DEPRECATED METHODS
372
495
 
373
- render(uniforms = {}) {
496
+ render(uniforms = {}): boolean {
374
497
  log.warn('Model.render() is deprecated. Use Model.setUniforms() and Model.draw()')();
375
498
  return this.setUniforms(uniforms).draw();
376
499
  }
377
500
 
378
501
  // PRIVATE METHODS
379
502
 
380
- _setModelProps(props) {
503
+ _setModelProps(props): void {
381
504
  Object.assign(this.props, props);
382
505
 
383
506
  if ('uniforms' in props) {
@@ -404,7 +527,7 @@ export default class Model {
404
527
  }
405
528
  }
406
529
 
407
- _checkProgram() {
530
+ _checkProgram(): void {
408
531
  const needsUpdate =
409
532
  this._programDirty || this.programManager.stateHash !== this._programManagerState;
410
533
 
@@ -417,16 +540,8 @@ export default class Model {
417
540
  if (program) {
418
541
  this._managedProgram = false;
419
542
  } else {
420
- const {
421
- vs,
422
- fs,
423
- modules,
424
- inject,
425
- defines,
426
- varyings,
427
- bufferMode,
428
- transpileToGLSL100
429
- } = this.programProps;
543
+ const {vs, fs, modules, inject, defines, varyings, bufferMode, transpileToGLSL100} =
544
+ this.programProps;
430
545
  program = this.programManager.get({
431
546
  vs,
432
547
  fs,
@@ -455,7 +570,6 @@ export default class Model {
455
570
  this.program = program;
456
571
 
457
572
  if (this.vertexArray) {
458
- // @ts-ignore TODO
459
573
  this.vertexArray.setProps({program: this.program, attributes: this.vertexArray.attributes});
460
574
  } else {
461
575
  this.vertexArray = new VertexArray(this.gl, {program: this.program});
@@ -470,19 +584,19 @@ export default class Model {
470
584
  );
471
585
  }
472
586
 
473
- _deleteGeometryBuffers() {
587
+ _deleteGeometryBuffers(): void {
474
588
  for (const name in this.geometryBuffers) {
475
589
  // Buffer is raw value (for indices) or first element of [buffer, accessor] pair
476
590
  const buffer = this.geometryBuffers[name][0] || this.geometryBuffers[name];
477
591
  if (buffer instanceof Buffer) {
478
- buffer.delete();
592
+ buffer.destroy();
479
593
  }
480
594
  }
481
595
  }
482
596
 
483
597
  // Updates (evaluates) all function valued uniforms based on a new set of animationProps
484
598
  // experimental
485
- _setAnimationProps(animationProps) {
599
+ _setAnimationProps(animationProps): void {
486
600
  if (this.animated) {
487
601
  assert(animationProps, 'Model.draw(): animated uniforms but no animationProps');
488
602
  // const animatedUniforms = this._evaluateAnimateUniforms(animationProps);
@@ -492,7 +606,7 @@ export default class Model {
492
606
 
493
607
  // Transform Feedback
494
608
 
495
- _setFeedbackBuffers(feedbackBuffers = {}) {
609
+ _setFeedbackBuffers(feedbackBuffers = {}): this {
496
610
  // Avoid setting needsRedraw if no feedbackBuffers
497
611
  if (isObjectEmpty(feedbackBuffers)) {
498
612
  return this;
@@ -509,7 +623,7 @@ export default class Model {
509
623
  return this;
510
624
  }
511
625
 
512
- _logDrawCallStart(logLevel) {
626
+ _logDrawCallStart(logLevel: number): number {
513
627
  const logDrawTimeout = logLevel > 3 ? 0 : LOG_DRAW_TIMEOUT;
514
628
  if (Date.now() - this.lastLogTime < logDrawTimeout) {
515
629
  return undefined;
@@ -522,7 +636,7 @@ export default class Model {
522
636
  return logLevel;
523
637
  }
524
638
 
525
- _logDrawCallEnd(logLevel, vertexArray, uniforms, framebuffer) {
639
+ _logDrawCallEnd(logLevel, vertexArray, uniforms, framebuffer?): void {
526
640
  // HACK: logLevel === undefined means logDrawCallStart didn't run
527
641
  if (logLevel === undefined) {
528
642
  return;
@@ -531,11 +645,15 @@ export default class Model {
531
645
  const attributeTable = getDebugTableForVertexArray({
532
646
  vertexArray,
533
647
  header: `${this.id} attributes`,
534
- // @ts-ignore
648
+ // @ts-expect-error
535
649
  attributes: this._attributes
536
650
  });
537
651
 
538
- const {table: uniformTable, unusedTable, unusedCount} = getDebugTableForUniforms({
652
+ const {
653
+ table: uniformTable,
654
+ unusedTable,
655
+ unusedCount
656
+ } = getDebugTableForUniforms({
539
657
  header: `${this.id} uniforms`,
540
658
  program: this.program,
541
659
  uniforms: Object.assign({}, this.program.uniforms, uniforms)
@@ -570,6 +688,6 @@ export default class Model {
570
688
  framebuffer.log({logLevel: LOG_DRAW_PRIORITY, message: `Rendered to ${framebuffer.id}`});
571
689
  }
572
690
 
573
- log.groupEnd(LOG_DRAW_PRIORITY, `>>> DRAWING MODEL ${this.id}`)();
691
+ log.groupEnd(LOG_DRAW_PRIORITY)();
574
692
  }
575
693
  }
@@ -1,54 +1,70 @@
1
+ import {Device} from '@luma.gl/api/';
1
2
  import {assembleShaders} from '@luma.gl/shadertools';
2
3
  import {Program} from '@luma.gl/webgl';
3
4
 
4
- export default class ProgramManager {
5
- static getDefaultProgramManager(gl) {
6
- gl.luma = gl.luma || {};
7
- gl.luma.defaultProgramManager = gl.luma.defaultProgramManager || new ProgramManager(gl);
8
-
9
- return gl.luma.defaultProgramManager;
10
- }
5
+ type Module = 'string' | {name: string}; // TODO
11
6
 
12
- constructor(gl) {
13
- this.gl = gl;
7
+ type GetProgramOptions = {
8
+ vs?: string,
9
+ fs?: string,
10
+ defines?: {},
11
+ inject?: {},
12
+ varyings?: string[],
13
+ bufferMode?: number,
14
+ modules?: Module[];
15
+ transpileToGLSL100?: boolean
16
+ };
14
17
 
15
- this._programCache = {};
16
- this._getUniforms = {};
17
- this._registeredModules = {}; // TODO: Remove? This isn't used anywhere in luma.gl
18
- this._hookFunctions = [];
19
- this._defaultModules = [];
18
+ export default class ProgramManager {
19
+ readonly device: Device;
20
+
21
+ stateHash = 0; // Used change hashing if hooks are modified
22
+ private _hashCounter = 0;
23
+ private readonly _hashes = {};
24
+ private readonly _useCounts = {};
25
+
26
+ private readonly _programCache = {};
27
+ private readonly _getUniforms = {};
28
+ private readonly _registeredModules = {}; // TODO: Remove? This isn't used anywhere in luma.gl
29
+ private readonly _hookFunctions = [];
30
+ private _defaultModules = [];
31
+
32
+ static getDefaultProgramManager(device: Device): ProgramManager {
33
+ // @ts-expect-error
34
+ device.defaultProgramManager = device.defaultProgramManager || new ProgramManager(device);
35
+ // @ts-expect-error
36
+ return device.defaultProgramManager;
37
+ }
20
38
 
21
- this._hashes = {};
22
- this._hashCounter = 0;
23
- this.stateHash = 0; // Used change hashing if hooks are modified
24
- this._useCounts = {};
39
+ constructor(device: Device) {
40
+ this.device = device;
25
41
  }
26
42
 
27
- addDefaultModule(module) {
28
- if (!this._defaultModules.find(m => m.name === module.name)) {
43
+ addDefaultModule(module: Module): void {
44
+ // @ts-expect-error
45
+ if (!this._defaultModules.find((m) => m.name === module.name)) {
29
46
  this._defaultModules.push(module);
30
47
  }
31
48
 
32
49
  this.stateHash++;
33
50
  }
34
51
 
35
- removeDefaultModule(module) {
52
+ removeDefaultModule(module: Module): void {
36
53
  const moduleName = typeof module === 'string' ? module : module.name;
37
- this._defaultModules = this._defaultModules.filter(m => m.name !== moduleName);
54
+ this._defaultModules = this._defaultModules.filter((m) => m.name !== moduleName);
38
55
  this.stateHash++;
39
56
  }
40
57
 
41
- addShaderHook(hook, opts) {
58
+ addShaderHook(hook, opts?): void {
42
59
  if (opts) {
43
60
  hook = Object.assign(opts, {hook});
44
61
  }
45
62
 
46
63
  this._hookFunctions.push(hook);
47
-
48
64
  this.stateHash++;
49
65
  }
50
66
 
51
- get(props = {}) {
67
+ get(props: GetProgramOptions = {}): Program {
52
68
  const {
53
69
  vs = '',
54
70
  fs = '',
@@ -63,8 +79,9 @@ export default class ProgramManager {
63
79
 
64
80
  const vsHash = this._getHash(vs);
65
81
  const fsHash = this._getHash(fs);
66
- const moduleHashes = modules.map(m => this._getHash(m.name)).sort();
67
- const varyingHashes = varyings.map(v => this._getHash(v));
82
+ // @ts-expect-error
83
+ const moduleHashes = modules.map((m) => this._getHash(m.name)).sort();
84
+ const varyingHashes = varyings.map((v) => this._getHash(v));
68
85
 
69
86
  const defineKeys = Object.keys(defines).sort();
70
87
  const injectKeys = Object.keys(inject).sort();
@@ -88,7 +105,7 @@ export default class ProgramManager {
88
105
  }`;
89
106
 
90
107
  if (!this._programCache[hash]) {
91
- const assembled = assembleShaders(this.gl, {
108
+ const assembled = assembleShaders(this.device, {
92
109
  vs,
93
110
  fs,
94
111
  modules,
@@ -98,7 +115,8 @@ export default class ProgramManager {
98
115
  transpileToGLSL100
99
116
  });
100
117
 
101
- this._programCache[hash] = new Program(this.gl, {
118
+ // @ts-expect-error TODO - program should be created from device
119
+ this._programCache[hash] = new Program(this.device.gl, {
102
120
  hash,
103
121
  vs: assembled.vs,
104
122
  fs: assembled.fs,
@@ -106,7 +124,7 @@ export default class ProgramManager {
106
124
  bufferMode
107
125
  });
108
126
 
109
- this._getUniforms[hash] = assembled.getUniforms || (x => {});
127
+ this._getUniforms[hash] = assembled.getUniforms || ((x) => {});
110
128
  this._useCounts[hash] = 0;
111
129
  }
112
130
 
@@ -115,11 +133,11 @@ export default class ProgramManager {
115
133
  return this._programCache[hash];
116
134
  }
117
135
 
118
- getUniforms(program) {
136
+ getUniforms(program: Program) {
119
137
  return this._getUniforms[program.hash] || null;
120
138
  }
121
139
 
122
- release(program) {
140
+ release(program: Program): void {
123
141
  const hash = program.hash;
124
142
  this._useCounts[hash]--;
125
143
 
@@ -131,7 +149,7 @@ export default class ProgramManager {
131
149
  }
132
150
  }
133
151
 
134
- _getHash(key) {
152
+ _getHash(key: string): string {
135
153
  if (this._hashes[key] === undefined) {
136
154
  this._hashes[key] = this._hashCounter++;
137
155
  }
@@ -140,7 +158,7 @@ export default class ProgramManager {
140
158
  }
141
159
 
142
160
  // Dedup and combine with default modules
143
- _getModuleList(appModules = []) {
161
+ _getModuleList(appModules: Module[] = []): Module[] {
144
162
  const modules = new Array(this._defaultModules.length + appModules.length);
145
163
  const seen = {};
146
164
  let count = 0;
@@ -154,6 +172,7 @@ export default class ProgramManager {
154
172
 
155
173
  for (let i = 0, len = appModules.length; i < len; ++i) {
156
174
  const module = appModules[i];
175
+ // @ts-expect-error
157
176
  const name = module.name;
158
177
  if (!seen[name]) {
159
178
  modules[count++] = module;