@luma.gl/webgl 8.5.10 → 8.6.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (633) hide show
  1. package/dist/bundle.d.ts +2 -0
  2. package/dist/bundle.d.ts.map +1 -0
  3. package/dist/bundle.js +5 -0
  4. package/dist/bundle.js.map +1 -0
  5. package/dist/classes/accessor.d.ts +28 -0
  6. package/dist/classes/accessor.d.ts.map +1 -0
  7. package/dist/classes/accessor.js +112 -0
  8. package/dist/classes/accessor.js.map +1 -0
  9. package/dist/classes/accessor.ts.disabled +159 -0
  10. package/dist/classes/clear.d.ts +16 -0
  11. package/dist/classes/clear.d.ts.map +1 -0
  12. package/dist/classes/clear.js +102 -0
  13. package/dist/classes/clear.js.map +1 -0
  14. package/dist/classes/copy-and-blit.d.ts +69 -0
  15. package/dist/classes/copy-and-blit.d.ts.map +1 -0
  16. package/dist/classes/copy-and-blit.js +333 -0
  17. package/dist/classes/copy-and-blit.js.map +1 -0
  18. package/dist/classes/framebuffer.d.ts +130 -0
  19. package/dist/classes/framebuffer.d.ts.map +1 -0
  20. package/dist/classes/framebuffer.js +656 -0
  21. package/dist/classes/framebuffer.js.map +1 -0
  22. package/dist/classes/program-configuration.d.ts +27 -0
  23. package/dist/classes/program-configuration.d.ts.map +1 -0
  24. package/dist/classes/program-configuration.js +160 -0
  25. package/dist/classes/program-configuration.js.map +1 -0
  26. package/dist/classes/program.d.ts +61 -0
  27. package/dist/classes/program.d.ts.map +1 -0
  28. package/dist/classes/program.js +368 -0
  29. package/dist/classes/program.js.map +1 -0
  30. package/dist/classes/query.d.ts +27 -0
  31. package/dist/classes/query.d.ts.map +1 -0
  32. package/dist/classes/query.js +144 -0
  33. package/dist/classes/query.js.map +1 -0
  34. package/dist/classes/renderbuffer-formats.d.ts +16 -0
  35. package/dist/classes/renderbuffer-formats.d.ts.map +1 -0
  36. package/dist/classes/renderbuffer-formats.js +185 -0
  37. package/dist/classes/renderbuffer-formats.js.map +1 -0
  38. package/dist/classes/renderbuffer.d.ts +60 -0
  39. package/dist/classes/renderbuffer.d.ts.map +1 -0
  40. package/dist/classes/renderbuffer.js +127 -0
  41. package/dist/classes/renderbuffer.js.map +1 -0
  42. package/dist/classes/texture-2d.d.ts +8 -0
  43. package/dist/classes/texture-2d.d.ts.map +1 -0
  44. package/dist/classes/texture-2d.js +39 -0
  45. package/dist/classes/texture-2d.js.map +1 -0
  46. package/dist/classes/texture-3d.d.ts +28 -0
  47. package/dist/classes/texture-3d.d.ts.map +1 -0
  48. package/dist/classes/texture-3d.js +67 -0
  49. package/dist/classes/texture-3d.js.map +1 -0
  50. package/dist/classes/texture-cube.d.ts +27 -0
  51. package/dist/classes/texture-cube.d.ts.map +1 -0
  52. package/dist/classes/texture-cube.js +131 -0
  53. package/dist/classes/texture-cube.js.map +1 -0
  54. package/dist/classes/texture-formats.d.ts +37 -0
  55. package/dist/classes/texture-formats.d.ts.map +1 -0
  56. package/dist/classes/texture-formats.js +98 -0
  57. package/dist/classes/texture-formats.js.map +1 -0
  58. package/dist/classes/texture.d.ts +118 -0
  59. package/dist/classes/texture.d.ts.map +1 -0
  60. package/dist/classes/texture.js +785 -0
  61. package/dist/classes/texture.js.map +1 -0
  62. package/dist/classes/transform-feedback.d.ts +33 -0
  63. package/dist/classes/transform-feedback.d.ts.map +1 -0
  64. package/dist/classes/transform-feedback.js +197 -0
  65. package/dist/classes/transform-feedback.js.map +1 -0
  66. package/dist/classes/uniform-buffer-layout.d.ts +17 -0
  67. package/dist/classes/uniform-buffer-layout.d.ts.map +1 -0
  68. package/dist/classes/uniform-buffer-layout.js +104 -0
  69. package/dist/classes/uniform-buffer-layout.js.map +1 -0
  70. package/dist/classes/uniforms.d.ts +38 -0
  71. package/dist/classes/uniforms.d.ts.map +1 -0
  72. package/dist/classes/uniforms.js +251 -0
  73. package/dist/classes/uniforms.js.map +1 -0
  74. package/dist/classes/vertex-array-object.d.ts +75 -0
  75. package/dist/classes/vertex-array-object.d.ts.map +1 -0
  76. package/dist/classes/vertex-array-object.js +262 -0
  77. package/dist/classes/vertex-array-object.js.map +1 -0
  78. package/dist/classes/vertex-array.d.ts +75 -0
  79. package/dist/classes/vertex-array.d.ts.map +1 -0
  80. package/dist/classes/vertex-array.js +409 -0
  81. package/dist/classes/vertex-array.js.map +1 -0
  82. package/dist/classes/webgl-buffer.d.ts +98 -0
  83. package/dist/classes/webgl-buffer.d.ts.map +1 -0
  84. package/dist/{esm/classes/buffer.js → classes/webgl-buffer.js} +97 -73
  85. package/dist/classes/webgl-buffer.js.map +1 -0
  86. package/dist/classes/webgl-resource.d.ts +54 -0
  87. package/dist/classes/webgl-resource.d.ts.map +1 -0
  88. package/dist/{esm/classes/resource.js → classes/webgl-resource.js} +31 -52
  89. package/dist/classes/webgl-resource.js.map +1 -0
  90. package/dist/classes/webgl-shader.d.ts +51 -0
  91. package/dist/classes/webgl-shader.d.ts.map +1 -0
  92. package/dist/classes/webgl-shader.js +190 -0
  93. package/dist/classes/webgl-shader.js.map +1 -0
  94. package/dist/context/gl-context.d.ts +15 -0
  95. package/dist/context/gl-context.d.ts.map +1 -0
  96. package/dist/context/gl-context.js +32 -0
  97. package/dist/context/gl-context.js.map +1 -0
  98. package/dist/context/luma-context-data.d.ts +31 -0
  99. package/dist/context/luma-context-data.d.ts.map +1 -0
  100. package/dist/context/luma-context-data.js +5 -0
  101. package/dist/context/luma-context-data.js.map +1 -0
  102. package/dist/debug/debug-program-configuration.d.ts +2 -0
  103. package/dist/debug/debug-program-configuration.d.ts.map +1 -0
  104. package/dist/debug/debug-program-configuration.js +40 -0
  105. package/dist/debug/debug-program-configuration.js.map +1 -0
  106. package/dist/debug/debug-uniforms.d.ts +12 -0
  107. package/dist/debug/debug-uniforms.d.ts.map +1 -0
  108. package/dist/debug/debug-uniforms.js +108 -0
  109. package/dist/debug/debug-uniforms.js.map +1 -0
  110. package/dist/debug/debug-vertex-array.d.ts +5 -0
  111. package/dist/debug/debug-vertex-array.d.ts.map +1 -0
  112. package/dist/debug/debug-vertex-array.js +118 -0
  113. package/dist/debug/debug-vertex-array.js.map +1 -0
  114. package/dist/es5/bundle.js +3 -5
  115. package/dist/es5/bundle.js.map +1 -1
  116. package/dist/es5/classes/accessor.js +76 -108
  117. package/dist/es5/classes/accessor.js.map +1 -1
  118. package/dist/es5/classes/accessor.ts.disabled +159 -0
  119. package/dist/es5/classes/clear.js +33 -48
  120. package/dist/es5/classes/clear.js.map +1 -1
  121. package/dist/es5/classes/copy-and-blit.js +177 -192
  122. package/dist/es5/classes/copy-and-blit.js.map +1 -1
  123. package/dist/es5/classes/framebuffer.js +538 -655
  124. package/dist/es5/classes/framebuffer.js.map +1 -1
  125. package/dist/es5/classes/program-configuration.js +127 -141
  126. package/dist/es5/classes/program-configuration.js.map +1 -1
  127. package/dist/es5/classes/program.js +294 -358
  128. package/dist/es5/classes/program.js.map +1 -1
  129. package/dist/es5/classes/query.js +115 -181
  130. package/dist/es5/classes/query.js.map +1 -1
  131. package/dist/es5/classes/renderbuffer-formats.js +186 -121
  132. package/dist/es5/classes/renderbuffer-formats.js.map +1 -1
  133. package/dist/es5/classes/renderbuffer.js +104 -128
  134. package/dist/es5/classes/renderbuffer.js.map +1 -1
  135. package/dist/es5/classes/texture-2d.js +16 -39
  136. package/dist/es5/classes/texture-2d.js.map +1 -1
  137. package/dist/es5/classes/texture-3d.js +50 -89
  138. package/dist/es5/classes/texture-3d.js.map +1 -1
  139. package/dist/es5/classes/texture-cube.js +112 -162
  140. package/dist/es5/classes/texture-cube.js.map +1 -1
  141. package/dist/es5/classes/texture-formats.js +73 -42
  142. package/dist/es5/classes/texture-formats.js.map +1 -1
  143. package/dist/es5/classes/texture.js +670 -673
  144. package/dist/es5/classes/texture.js.map +1 -1
  145. package/dist/es5/classes/transform-feedback.js +150 -203
  146. package/dist/es5/classes/transform-feedback.js.map +1 -1
  147. package/dist/es5/classes/uniform-buffer-layout.js +89 -103
  148. package/dist/es5/classes/uniform-buffer-layout.js.map +1 -1
  149. package/dist/es5/classes/uniforms.js +134 -93
  150. package/dist/es5/classes/uniforms.js.map +1 -1
  151. package/dist/es5/classes/vertex-array-object.js +204 -306
  152. package/dist/es5/classes/vertex-array-object.js.map +1 -1
  153. package/dist/es5/classes/vertex-array.js +317 -353
  154. package/dist/es5/classes/vertex-array.js.map +1 -1
  155. package/dist/es5/classes/webgl-buffer.js +391 -0
  156. package/dist/es5/classes/webgl-buffer.js.map +1 -0
  157. package/dist/es5/classes/webgl-resource.js +217 -0
  158. package/dist/es5/classes/webgl-resource.js.map +1 -0
  159. package/dist/es5/classes/webgl-shader.js +213 -0
  160. package/dist/es5/classes/webgl-shader.js.map +1 -0
  161. package/dist/es5/context/gl-context.js +46 -0
  162. package/dist/es5/context/gl-context.js.map +1 -0
  163. package/dist/es5/context/luma-context-data.js +12 -0
  164. package/dist/es5/context/luma-context-data.js.map +1 -0
  165. package/dist/es5/debug/debug-program-configuration.js +20 -48
  166. package/dist/es5/debug/debug-program-configuration.js.map +1 -1
  167. package/dist/es5/debug/debug-uniforms.js +72 -114
  168. package/dist/es5/debug/debug-uniforms.js.map +1 -1
  169. package/dist/es5/debug/debug-vertex-array.js +56 -51
  170. package/dist/es5/debug/debug-vertex-array.js.map +1 -1
  171. package/dist/es5/features/check-glsl-extension.js +9 -10
  172. package/dist/es5/features/check-glsl-extension.js.map +1 -1
  173. package/dist/es5/features/check-old-ie.js +5 -6
  174. package/dist/es5/features/check-old-ie.js.map +1 -1
  175. package/dist/es5/features/features.js +23 -37
  176. package/dist/es5/features/features.js.map +1 -1
  177. package/dist/es5/features/index.js +8 -8
  178. package/dist/es5/features/index.js.map +1 -1
  179. package/dist/es5/features/limits.js +36 -28
  180. package/dist/es5/features/limits.js.map +1 -1
  181. package/dist/es5/features/webgl-features-table.js +35 -15
  182. package/dist/es5/features/webgl-features-table.js.map +1 -1
  183. package/dist/es5/features/webgl-limits-table.js +160 -120
  184. package/dist/es5/features/webgl-limits-table.js.map +1 -1
  185. package/dist/es5/index.js +144 -90
  186. package/dist/es5/index.js.map +1 -1
  187. package/dist/es5/init.js +12 -36
  188. package/dist/es5/init.js.map +1 -1
  189. package/dist/es5/types.js +2 -0
  190. package/dist/es5/types.js.map +1 -0
  191. package/dist/es5/utils/array-utils-flat.js +13 -14
  192. package/dist/es5/utils/array-utils-flat.js.map +1 -1
  193. package/dist/es5/utils/assert.js +1 -1
  194. package/dist/es5/utils/assert.js.map +1 -1
  195. package/dist/es5/utils/check-props.js +20 -21
  196. package/dist/es5/utils/check-props.js.map +1 -1
  197. package/dist/es5/utils/format-value.js +14 -14
  198. package/dist/es5/utils/format-value.js.map +1 -1
  199. package/dist/es5/utils/index.js +68 -0
  200. package/dist/es5/utils/index.js.map +1 -0
  201. package/dist/es5/utils/is-old-ie.js +2 -3
  202. package/dist/es5/utils/is-old-ie.js.map +1 -1
  203. package/dist/es5/utils/load-file.js +11 -18
  204. package/dist/es5/utils/load-file.js.map +1 -1
  205. package/dist/es5/utils/stub-methods.js +4 -4
  206. package/dist/es5/utils/stub-methods.js.map +1 -1
  207. package/dist/es5/utils/utils.js +5 -10
  208. package/dist/es5/utils/utils.js.map +1 -1
  209. package/dist/es5/webgl-utils/attribute-utils.js +87 -74
  210. package/dist/es5/webgl-utils/attribute-utils.js.map +1 -1
  211. package/dist/es5/webgl-utils/constants-to-keys.js +7 -7
  212. package/dist/es5/webgl-utils/constants-to-keys.js.map +1 -1
  213. package/dist/es5/webgl-utils/format-utils.js +21 -17
  214. package/dist/es5/webgl-utils/format-utils.js.map +1 -1
  215. package/dist/es5/webgl-utils/get-error.js +18 -18
  216. package/dist/es5/webgl-utils/get-error.js.map +1 -1
  217. package/dist/es5/webgl-utils/index.js +74 -0
  218. package/dist/es5/webgl-utils/index.js.map +1 -0
  219. package/dist/es5/webgl-utils/parse-shader-compiler-log.js +44 -0
  220. package/dist/es5/webgl-utils/parse-shader-compiler-log.js.map +1 -0
  221. package/dist/es5/webgl-utils/request-animation-frame.js.map +1 -1
  222. package/dist/es5/webgl-utils/texture-utils.js +35 -29
  223. package/dist/es5/webgl-utils/texture-utils.js.map +1 -1
  224. package/dist/es5/webgl-utils/typed-array-utils.js +51 -47
  225. package/dist/es5/webgl-utils/typed-array-utils.js.map +1 -1
  226. package/dist/esm/bundle.js +2 -4
  227. package/dist/esm/bundle.js.map +1 -1
  228. package/dist/esm/classes/accessor.js +7 -7
  229. package/dist/esm/classes/accessor.js.map +1 -1
  230. package/dist/esm/classes/accessor.ts.disabled +159 -0
  231. package/dist/esm/classes/clear.js +15 -13
  232. package/dist/esm/classes/clear.js.map +1 -1
  233. package/dist/esm/classes/copy-and-blit.js +41 -43
  234. package/dist/esm/classes/copy-and-blit.js.map +1 -1
  235. package/dist/esm/classes/framebuffer.js +336 -308
  236. package/dist/esm/classes/framebuffer.js.map +1 -1
  237. package/dist/esm/classes/program-configuration.js +17 -9
  238. package/dist/esm/classes/program-configuration.js.map +1 -1
  239. package/dist/esm/classes/program.js +69 -44
  240. package/dist/esm/classes/program.js.map +1 -1
  241. package/dist/esm/classes/query.js +17 -14
  242. package/dist/esm/classes/query.js.map +1 -1
  243. package/dist/esm/classes/renderbuffer-formats.js +72 -49
  244. package/dist/esm/classes/renderbuffer-formats.js.map +1 -1
  245. package/dist/esm/classes/renderbuffer.js +84 -72
  246. package/dist/esm/classes/renderbuffer.js.map +1 -1
  247. package/dist/esm/classes/texture-2d.js +10 -3
  248. package/dist/esm/classes/texture-2d.js.map +1 -1
  249. package/dist/esm/classes/texture-3d.js +14 -11
  250. package/dist/esm/classes/texture-3d.js.map +1 -1
  251. package/dist/esm/classes/texture-cube.js +43 -28
  252. package/dist/esm/classes/texture-cube.js.map +1 -1
  253. package/dist/esm/classes/texture-formats.js +51 -50
  254. package/dist/esm/classes/texture-formats.js.map +1 -1
  255. package/dist/esm/classes/texture.js +164 -49
  256. package/dist/esm/classes/texture.js.map +1 -1
  257. package/dist/esm/classes/transform-feedback.js +24 -13
  258. package/dist/esm/classes/transform-feedback.js.map +1 -1
  259. package/dist/esm/classes/uniform-buffer-layout.js +1 -1
  260. package/dist/esm/classes/uniform-buffer-layout.js.map +1 -1
  261. package/dist/esm/classes/uniforms.js +111 -112
  262. package/dist/esm/classes/uniforms.js.map +1 -1
  263. package/dist/esm/classes/vertex-array-object.js +52 -88
  264. package/dist/esm/classes/vertex-array-object.js.map +1 -1
  265. package/dist/esm/classes/vertex-array.js +50 -28
  266. package/dist/esm/classes/vertex-array.js.map +1 -1
  267. package/dist/esm/classes/webgl-buffer.js +379 -0
  268. package/dist/esm/classes/webgl-buffer.js.map +1 -0
  269. package/dist/esm/classes/webgl-resource.js +208 -0
  270. package/dist/esm/classes/webgl-resource.js.map +1 -0
  271. package/dist/esm/classes/webgl-shader.js +190 -0
  272. package/dist/esm/classes/webgl-shader.js.map +1 -0
  273. package/dist/esm/context/gl-context.js +32 -0
  274. package/dist/esm/context/gl-context.js.map +1 -0
  275. package/dist/esm/context/luma-context-data.js +5 -0
  276. package/dist/esm/context/luma-context-data.js.map +1 -0
  277. package/dist/esm/debug/debug-program-configuration.js +4 -4
  278. package/dist/esm/debug/debug-program-configuration.js.map +1 -1
  279. package/dist/esm/debug/debug-uniforms.js +9 -9
  280. package/dist/esm/debug/debug-uniforms.js.map +1 -1
  281. package/dist/esm/debug/debug-vertex-array.js +19 -17
  282. package/dist/esm/debug/debug-vertex-array.js.map +1 -1
  283. package/dist/esm/features/check-glsl-extension.js +4 -4
  284. package/dist/esm/features/check-glsl-extension.js.map +1 -1
  285. package/dist/esm/features/check-old-ie.js.map +1 -1
  286. package/dist/esm/features/features.js +14 -13
  287. package/dist/esm/features/features.js.map +1 -1
  288. package/dist/esm/features/index.js.map +1 -1
  289. package/dist/esm/features/limits.js +25 -22
  290. package/dist/esm/features/limits.js.map +1 -1
  291. package/dist/esm/features/webgl-features-table.js +6 -6
  292. package/dist/esm/features/webgl-features-table.js.map +1 -1
  293. package/dist/esm/features/webgl-limits-table.js +43 -42
  294. package/dist/esm/features/webgl-limits-table.js.map +1 -1
  295. package/dist/esm/index.js +13 -15
  296. package/dist/esm/index.js.map +1 -1
  297. package/dist/esm/init.js +4 -23
  298. package/dist/esm/init.js.map +1 -1
  299. package/dist/esm/types.js +2 -0
  300. package/dist/esm/types.js.map +1 -0
  301. package/dist/esm/utils/array-utils-flat.js.map +1 -1
  302. package/dist/esm/utils/assert.js +1 -1
  303. package/dist/esm/utils/assert.js.map +1 -1
  304. package/dist/esm/utils/check-props.js +4 -4
  305. package/dist/esm/utils/check-props.js.map +1 -1
  306. package/dist/esm/utils/format-value.js +4 -4
  307. package/dist/esm/utils/format-value.js.map +1 -1
  308. package/dist/esm/utils/index.js +7 -0
  309. package/dist/esm/utils/index.js.map +1 -0
  310. package/dist/esm/utils/is-old-ie.js +1 -1
  311. package/dist/esm/utils/is-old-ie.js.map +1 -1
  312. package/dist/esm/utils/load-file.js +2 -2
  313. package/dist/esm/utils/load-file.js.map +1 -1
  314. package/dist/esm/utils/stub-methods.js +2 -3
  315. package/dist/esm/utils/stub-methods.js.map +1 -1
  316. package/dist/esm/utils/utils.js +1 -3
  317. package/dist/esm/utils/utils.js.map +1 -1
  318. package/dist/esm/webgl-utils/attribute-utils.js +1 -1
  319. package/dist/esm/webgl-utils/attribute-utils.js.map +1 -1
  320. package/dist/esm/webgl-utils/constants-to-keys.js +4 -4
  321. package/dist/esm/webgl-utils/constants-to-keys.js.map +1 -1
  322. package/dist/esm/webgl-utils/format-utils.js +16 -15
  323. package/dist/esm/webgl-utils/format-utils.js.map +1 -1
  324. package/dist/esm/webgl-utils/get-error.js +1 -1
  325. package/dist/esm/webgl-utils/get-error.js.map +1 -1
  326. package/dist/esm/webgl-utils/index.js +5 -0
  327. package/dist/esm/webgl-utils/index.js.map +1 -0
  328. package/dist/esm/webgl-utils/parse-shader-compiler-log.js +37 -0
  329. package/dist/esm/webgl-utils/parse-shader-compiler-log.js.map +1 -0
  330. package/dist/esm/webgl-utils/request-animation-frame.js.map +1 -1
  331. package/dist/esm/webgl-utils/texture-utils.js +4 -3
  332. package/dist/esm/webgl-utils/texture-utils.js.map +1 -1
  333. package/dist/esm/webgl-utils/typed-array-utils.js +19 -18
  334. package/dist/esm/webgl-utils/typed-array-utils.js.map +1 -1
  335. package/dist/features/check-glsl-extension.d.ts +2 -0
  336. package/dist/features/check-glsl-extension.d.ts.map +1 -0
  337. package/dist/features/check-glsl-extension.js +27 -0
  338. package/dist/features/check-glsl-extension.js.map +1 -0
  339. package/dist/features/check-old-ie.d.ts +2 -0
  340. package/dist/features/check-old-ie.d.ts.map +1 -0
  341. package/dist/features/check-old-ie.js +8 -0
  342. package/dist/features/check-old-ie.js.map +1 -0
  343. package/dist/features/features.d.ts +6 -0
  344. package/dist/features/features.d.ts.map +1 -0
  345. package/dist/features/features.js +67 -0
  346. package/dist/features/features.js.map +1 -0
  347. package/dist/features/index.d.ts +5 -0
  348. package/dist/features/index.d.ts.map +1 -0
  349. package/dist/features/index.js +5 -0
  350. package/dist/features/index.js.map +1 -0
  351. package/dist/features/limits.d.ts +28 -0
  352. package/dist/features/limits.d.ts.map +1 -0
  353. package/dist/features/limits.js +55 -0
  354. package/dist/features/limits.js.map +1 -0
  355. package/dist/features/webgl-features-table.d.ts +30 -0
  356. package/dist/features/webgl-features-table.d.ts.map +1 -0
  357. package/dist/features/webgl-features-table.js +71 -0
  358. package/dist/features/webgl-features-table.js.map +1 -0
  359. package/dist/features/webgl-limits-table.d.ts +161 -0
  360. package/dist/features/webgl-limits-table.d.ts.map +1 -0
  361. package/dist/features/webgl-limits-table.js +161 -0
  362. package/dist/features/webgl-limits-table.js.map +1 -0
  363. package/dist/index.d.ts +33 -0
  364. package/dist/index.d.ts.map +1 -0
  365. package/dist/index.js +33 -0
  366. package/dist/index.js.map +1 -0
  367. package/dist/init.d.ts +5 -0
  368. package/dist/init.d.ts.map +1 -0
  369. package/dist/init.js +30 -0
  370. package/dist/init.js.map +1 -0
  371. package/dist/types.d.ts +9 -0
  372. package/dist/types.d.ts.map +1 -0
  373. package/dist/types.js +2 -0
  374. package/dist/types.js.map +1 -0
  375. package/dist/utils/array-utils-flat.d.ts +9 -0
  376. package/dist/utils/array-utils-flat.d.ts.map +1 -0
  377. package/dist/utils/array-utils-flat.js +39 -0
  378. package/dist/utils/array-utils-flat.js.map +1 -0
  379. package/dist/utils/assert.d.ts +2 -0
  380. package/dist/utils/assert.d.ts.map +1 -0
  381. package/dist/utils/assert.js +6 -0
  382. package/dist/utils/assert.js.map +1 -0
  383. package/dist/utils/check-props.d.ts +2 -0
  384. package/dist/utils/check-props.d.ts.map +1 -0
  385. package/dist/utils/check-props.js +38 -0
  386. package/dist/utils/check-props.js.map +1 -0
  387. package/dist/utils/format-value.d.ts +5 -0
  388. package/dist/utils/format-value.d.ts.map +1 -0
  389. package/dist/utils/format-value.js +50 -0
  390. package/dist/utils/format-value.js.map +1 -0
  391. package/dist/utils/index.d.ts +7 -0
  392. package/dist/utils/index.d.ts.map +1 -0
  393. package/dist/utils/index.js +7 -0
  394. package/dist/utils/index.js.map +1 -0
  395. package/dist/utils/is-old-ie.d.ts +4 -0
  396. package/dist/utils/is-old-ie.d.ts.map +1 -0
  397. package/dist/utils/is-old-ie.js +5 -0
  398. package/dist/utils/is-old-ie.js.map +1 -0
  399. package/dist/utils/load-file.d.ts +4 -0
  400. package/dist/utils/load-file.d.ts.map +1 -0
  401. package/dist/utils/load-file.js +30 -0
  402. package/dist/utils/load-file.js.map +1 -0
  403. package/dist/utils/stub-methods.d.ts +2 -0
  404. package/dist/utils/stub-methods.d.ts.map +1 -0
  405. package/dist/utils/stub-methods.js +16 -0
  406. package/dist/utils/stub-methods.js.map +1 -0
  407. package/dist/utils/utils.d.ts +15 -0
  408. package/dist/utils/utils.d.ts.map +1 -0
  409. package/dist/utils/utils.js +20 -0
  410. package/dist/utils/utils.js.map +1 -0
  411. package/dist/webgl-utils/attribute-utils.d.ts +18 -0
  412. package/dist/webgl-utils/attribute-utils.d.ts.map +1 -0
  413. package/dist/webgl-utils/attribute-utils.js +182 -0
  414. package/dist/webgl-utils/attribute-utils.js.map +1 -0
  415. package/dist/webgl-utils/constants-to-keys.d.ts +4 -0
  416. package/dist/webgl-utils/constants-to-keys.d.ts.map +1 -0
  417. package/dist/webgl-utils/constants-to-keys.js +41 -0
  418. package/dist/webgl-utils/constants-to-keys.js.map +1 -0
  419. package/dist/webgl-utils/format-utils.d.ts +3 -0
  420. package/dist/webgl-utils/format-utils.d.ts.map +1 -0
  421. package/dist/webgl-utils/format-utils.js +45 -0
  422. package/dist/webgl-utils/format-utils.js.map +1 -0
  423. package/dist/webgl-utils/get-error.d.ts +3 -0
  424. package/dist/webgl-utils/get-error.d.ts.map +1 -0
  425. package/dist/webgl-utils/get-error.js +41 -0
  426. package/dist/webgl-utils/get-error.js.map +1 -0
  427. package/dist/webgl-utils/index.d.ts +5 -0
  428. package/dist/webgl-utils/index.d.ts.map +1 -0
  429. package/dist/webgl-utils/index.js +5 -0
  430. package/dist/webgl-utils/index.js.map +1 -0
  431. package/dist/webgl-utils/parse-shader-compiler-log.d.ts +8 -0
  432. package/dist/webgl-utils/parse-shader-compiler-log.d.ts.map +1 -0
  433. package/dist/webgl-utils/parse-shader-compiler-log.js +37 -0
  434. package/dist/webgl-utils/parse-shader-compiler-log.js.map +1 -0
  435. package/dist/webgl-utils/request-animation-frame.d.ts +4 -0
  436. package/dist/webgl-utils/request-animation-frame.d.ts.map +1 -0
  437. package/dist/webgl-utils/request-animation-frame.js +7 -0
  438. package/dist/webgl-utils/request-animation-frame.js.map +1 -0
  439. package/dist/webgl-utils/texture-utils.d.ts +11 -0
  440. package/dist/webgl-utils/texture-utils.d.ts.map +1 -0
  441. package/dist/webgl-utils/texture-utils.js +48 -0
  442. package/dist/webgl-utils/texture-utils.js.map +1 -0
  443. package/dist/webgl-utils/typed-array-utils.d.ts +36 -0
  444. package/dist/webgl-utils/typed-array-utils.d.ts.map +1 -0
  445. package/dist/webgl-utils/typed-array-utils.js +108 -0
  446. package/dist/webgl-utils/typed-array-utils.js.map +1 -0
  447. package/package.json +9 -8
  448. package/src/bundle.ts +4 -0
  449. package/src/classes/accessor.js +3 -4
  450. package/src/classes/accessor.ts.disabled +159 -0
  451. package/src/classes/{clear.js → clear.ts} +13 -9
  452. package/src/classes/{copy-and-blit.js → copy-and-blit.ts} +113 -22
  453. package/src/classes/{framebuffer.js → framebuffer.ts} +355 -298
  454. package/src/classes/{program-configuration.js → program-configuration.ts} +18 -11
  455. package/src/classes/{program.js → program.ts} +56 -36
  456. package/src/classes/{query.js → query.ts} +28 -22
  457. package/src/classes/{renderbuffer-formats.js → renderbuffer-formats.ts} +42 -14
  458. package/src/classes/renderbuffer.ts +153 -0
  459. package/src/classes/{texture-2d.js → texture-2d.ts} +15 -5
  460. package/src/classes/{texture-3d.js → texture-3d.ts} +35 -10
  461. package/src/classes/{texture-cube.js → texture-cube.ts} +46 -28
  462. package/src/classes/{texture-formats.js → texture-formats.ts} +9 -1
  463. package/src/classes/{texture.js → texture.ts} +204 -37
  464. package/src/classes/{transform-feedback.js → transform-feedback.ts} +22 -14
  465. package/src/classes/{uniform-buffer-layout.js → uniform-buffer-layout.ts} +10 -6
  466. package/src/classes/{uniforms.js → uniforms.ts} +122 -70
  467. package/src/classes/{vertex-array-object.js → vertex-array-object.ts} +132 -107
  468. package/src/classes/{vertex-array.js → vertex-array.ts} +74 -54
  469. package/src/classes/{buffer.js → webgl-buffer.ts} +125 -51
  470. package/src/classes/{resource.js → webgl-resource.ts} +43 -36
  471. package/src/classes/webgl-shader.ts +200 -0
  472. package/src/context/gl-context.ts +31 -0
  473. package/src/context/luma-context-data.ts +27 -0
  474. package/src/debug/{debug-program-configuration.js → debug-program-configuration.ts} +0 -0
  475. package/src/debug/{debug-uniforms.js → debug-uniforms.ts} +18 -8
  476. package/src/debug/{debug-vertex-array.js → debug-vertex-array.ts} +7 -4
  477. package/src/features/{check-glsl-extension.js → check-glsl-extension.ts} +1 -1
  478. package/src/features/{check-old-ie.js → check-old-ie.ts} +0 -0
  479. package/src/features/{features.js → features.ts} +14 -13
  480. package/src/features/{index.js → index.ts} +0 -0
  481. package/src/features/{limits.js → limits.ts} +18 -17
  482. package/src/features/{webgl-features-table.js → webgl-features-table.ts} +0 -0
  483. package/src/features/{webgl-limits-table.js → webgl-limits-table.ts} +0 -0
  484. package/{dist/es5/index.d.ts → src/index.ts} +18 -16
  485. package/src/{init.js → init.ts} +1 -18
  486. package/{dist/es5/types.d.ts → src/types.ts} +0 -0
  487. package/src/utils/{array-utils-flat.js → array-utils-flat.ts} +0 -0
  488. package/src/utils/{assert.js → assert.ts} +1 -1
  489. package/src/utils/{check-props.js → check-props.ts} +0 -0
  490. package/src/utils/{format-value.js → format-value.ts} +2 -2
  491. package/src/utils/index.ts +6 -0
  492. package/src/utils/{is-old-ie.js → is-old-ie.ts} +1 -1
  493. package/src/utils/{load-file.js → load-file.ts} +3 -2
  494. package/src/utils/{stub-methods.js → stub-methods.ts} +1 -1
  495. package/src/utils/utils.ts +35 -0
  496. package/src/webgl-utils/{attribute-utils.js → attribute-utils.ts} +1 -2
  497. package/src/webgl-utils/{constants-to-keys.js → constants-to-keys.ts} +1 -1
  498. package/src/webgl-utils/{format-utils.js → format-utils.ts} +1 -1
  499. package/src/webgl-utils/{get-error.js → get-error.ts} +0 -0
  500. package/src/webgl-utils/index.ts +12 -0
  501. package/src/webgl-utils/parse-shader-compiler-log.ts +48 -0
  502. package/src/webgl-utils/{request-animation-frame.js → request-animation-frame.ts} +3 -2
  503. package/src/webgl-utils/texture-utils.js +2 -1
  504. package/dist/dist.js +0 -13555
  505. package/dist/dist.min.js +0 -1
  506. package/dist/es5/classes/buffer.d.ts +0 -84
  507. package/dist/es5/classes/buffer.js +0 -453
  508. package/dist/es5/classes/buffer.js.map +0 -1
  509. package/dist/es5/classes/clear.d.ts +0 -11
  510. package/dist/es5/classes/copy-and-blit.d.ts +0 -101
  511. package/dist/es5/classes/framebuffer.d.ts +0 -96
  512. package/dist/es5/classes/program-configuration.d.ts +0 -15
  513. package/dist/es5/classes/program.d.ts +0 -44
  514. package/dist/es5/classes/query.d.ts +0 -21
  515. package/dist/es5/classes/renderbuffer.d.ts +0 -34
  516. package/dist/es5/classes/resource.d.ts +0 -47
  517. package/dist/es5/classes/resource.js +0 -308
  518. package/dist/es5/classes/resource.js.map +0 -1
  519. package/dist/es5/classes/shader.d.ts +0 -29
  520. package/dist/es5/classes/shader.js +0 -221
  521. package/dist/es5/classes/shader.js.map +0 -1
  522. package/dist/es5/classes/texture-2d.d.ts +0 -11
  523. package/dist/es5/classes/texture-3d.d.ts +0 -29
  524. package/dist/es5/classes/texture-cube.d.ts +0 -23
  525. package/dist/es5/classes/texture.d.ts +0 -80
  526. package/dist/es5/classes/transform-feedback.d.ts +0 -16
  527. package/dist/es5/classes/uniform-buffer-layout.d.ts +0 -18
  528. package/dist/es5/classes/uniforms.d.ts +0 -63
  529. package/dist/es5/classes/vertex-array-object.d.ts +0 -25
  530. package/dist/es5/classes/vertex-array.d.ts +0 -37
  531. package/dist/es5/debug/debug-program-configuration.d.ts +0 -1
  532. package/dist/es5/debug/debug-uniforms.d.ts +0 -11
  533. package/dist/es5/debug/debug-vertex-array.d.ts +0 -1
  534. package/dist/es5/glsl-utils/format-glsl-error.d.ts +0 -16
  535. package/dist/es5/glsl-utils/format-glsl-error.js +0 -108
  536. package/dist/es5/glsl-utils/format-glsl-error.js.map +0 -1
  537. package/dist/es5/glsl-utils/get-shader-name.js +0 -14
  538. package/dist/es5/glsl-utils/get-shader-name.js.map +0 -1
  539. package/dist/es5/glsl-utils/get-shader-type-name.js +0 -22
  540. package/dist/es5/glsl-utils/get-shader-type-name.js.map +0 -1
  541. package/dist/es5/glsl-utils/get-shader-version.js +0 -22
  542. package/dist/es5/glsl-utils/get-shader-version.js.map +0 -1
  543. package/dist/es5/glsl-utils/index.js +0 -48
  544. package/dist/es5/glsl-utils/index.js.map +0 -1
  545. package/dist/es5/init.d.ts +0 -12
  546. package/dist/es5/utils/assert.d.ts +0 -1
  547. package/dist/es5/utils/is-old-ie.d.ts +0 -1
  548. package/dist/es5/utils/utils.d.ts +0 -13
  549. package/dist/es5/webgl-utils/request-animation-frame.d.ts +0 -3
  550. package/dist/esm/classes/buffer.d.ts +0 -84
  551. package/dist/esm/classes/buffer.js.map +0 -1
  552. package/dist/esm/classes/clear.d.ts +0 -11
  553. package/dist/esm/classes/copy-and-blit.d.ts +0 -101
  554. package/dist/esm/classes/framebuffer.d.ts +0 -96
  555. package/dist/esm/classes/program-configuration.d.ts +0 -15
  556. package/dist/esm/classes/program.d.ts +0 -44
  557. package/dist/esm/classes/query.d.ts +0 -21
  558. package/dist/esm/classes/renderbuffer.d.ts +0 -34
  559. package/dist/esm/classes/resource.d.ts +0 -47
  560. package/dist/esm/classes/resource.js.map +0 -1
  561. package/dist/esm/classes/shader.d.ts +0 -29
  562. package/dist/esm/classes/shader.js +0 -138
  563. package/dist/esm/classes/shader.js.map +0 -1
  564. package/dist/esm/classes/texture-2d.d.ts +0 -11
  565. package/dist/esm/classes/texture-3d.d.ts +0 -29
  566. package/dist/esm/classes/texture-cube.d.ts +0 -23
  567. package/dist/esm/classes/texture.d.ts +0 -80
  568. package/dist/esm/classes/transform-feedback.d.ts +0 -16
  569. package/dist/esm/classes/uniform-buffer-layout.d.ts +0 -18
  570. package/dist/esm/classes/uniforms.d.ts +0 -63
  571. package/dist/esm/classes/vertex-array-object.d.ts +0 -25
  572. package/dist/esm/classes/vertex-array.d.ts +0 -37
  573. package/dist/esm/debug/debug-program-configuration.d.ts +0 -1
  574. package/dist/esm/debug/debug-uniforms.d.ts +0 -11
  575. package/dist/esm/debug/debug-vertex-array.d.ts +0 -1
  576. package/dist/esm/glsl-utils/format-glsl-error.d.ts +0 -16
  577. package/dist/esm/glsl-utils/format-glsl-error.js +0 -93
  578. package/dist/esm/glsl-utils/format-glsl-error.js.map +0 -1
  579. package/dist/esm/glsl-utils/get-shader-name.js +0 -6
  580. package/dist/esm/glsl-utils/get-shader-name.js.map +0 -1
  581. package/dist/esm/glsl-utils/get-shader-type-name.js +0 -15
  582. package/dist/esm/glsl-utils/get-shader-type-name.js.map +0 -1
  583. package/dist/esm/glsl-utils/get-shader-version.js +0 -15
  584. package/dist/esm/glsl-utils/get-shader-version.js.map +0 -1
  585. package/dist/esm/glsl-utils/index.js +0 -5
  586. package/dist/esm/glsl-utils/index.js.map +0 -1
  587. package/dist/esm/index.d.ts +0 -71
  588. package/dist/esm/init.d.ts +0 -12
  589. package/dist/esm/types.d.ts +0 -8
  590. package/dist/esm/utils/assert.d.ts +0 -1
  591. package/dist/esm/utils/is-old-ie.d.ts +0 -1
  592. package/dist/esm/utils/utils.d.ts +0 -13
  593. package/dist/esm/webgl-utils/request-animation-frame.d.ts +0 -3
  594. package/src/bundle.js +0 -8
  595. package/src/classes/buffer.d.ts +0 -84
  596. package/src/classes/clear.d.ts +0 -11
  597. package/src/classes/copy-and-blit.d.ts +0 -101
  598. package/src/classes/framebuffer.d.ts +0 -96
  599. package/src/classes/program-configuration.d.ts +0 -15
  600. package/src/classes/program.d.ts +0 -44
  601. package/src/classes/query.d.ts +0 -21
  602. package/src/classes/renderbuffer.d.ts +0 -34
  603. package/src/classes/renderbuffer.js +0 -105
  604. package/src/classes/resource.d.ts +0 -47
  605. package/src/classes/shader.d.ts +0 -29
  606. package/src/classes/shader.js +0 -147
  607. package/src/classes/texture-2d.d.ts +0 -11
  608. package/src/classes/texture-3d.d.ts +0 -29
  609. package/src/classes/texture-cube.d.ts +0 -23
  610. package/src/classes/texture.d.ts +0 -80
  611. package/src/classes/transform-feedback.d.ts +0 -16
  612. package/src/classes/uniform-buffer-layout.d.ts +0 -18
  613. package/src/classes/uniforms.d.ts +0 -63
  614. package/src/classes/vertex-array-object.d.ts +0 -25
  615. package/src/classes/vertex-array.d.ts +0 -37
  616. package/src/debug/debug-program-configuration.d.ts +0 -1
  617. package/src/debug/debug-uniforms.d.ts +0 -11
  618. package/src/debug/debug-vertex-array.d.ts +0 -1
  619. package/src/glsl-utils/format-glsl-error.d.ts +0 -16
  620. package/src/glsl-utils/format-glsl-error.js +0 -107
  621. package/src/glsl-utils/get-shader-name.js +0 -7
  622. package/src/glsl-utils/get-shader-type-name.js +0 -13
  623. package/src/glsl-utils/get-shader-version.js +0 -12
  624. package/src/glsl-utils/index.js +0 -8
  625. package/src/index.d.ts +0 -71
  626. package/src/index.js +0 -70
  627. package/src/init.d.ts +0 -12
  628. package/src/types.d.ts +0 -8
  629. package/src/utils/assert.d.ts +0 -1
  630. package/src/utils/is-old-ie.d.ts +0 -1
  631. package/src/utils/utils.d.ts +0 -13
  632. package/src/utils/utils.js +0 -36
  633. package/src/webgl-utils/request-animation-frame.d.ts +0 -3
@@ -2,11 +2,54 @@
2
2
 
3
3
  import GL from '@luma.gl/constants';
4
4
  import {log} from '@luma.gl/gltools';
5
+ import {Matrix4} from '@math.gl/core';
5
6
 
6
7
  import Framebuffer from './framebuffer';
7
8
  import Renderbuffer from './renderbuffer';
8
9
  import Texture from './texture';
9
- import {assert} from '../utils/assert';
10
+ import {assert} from '../utils';
11
+
12
+ type NumberUniformInfo = {
13
+ type: 'number'
14
+ value: number
15
+ min: number
16
+ max: number
17
+ }
18
+
19
+ type BooleanUniformInfo = {
20
+ type: 'boolean'
21
+ value: boolean
22
+ }
23
+
24
+ type ArrayUniformInfo = {
25
+ type: 'array'
26
+ value: Array<any>
27
+ }
28
+
29
+ type ObjectUniformInfo = {
30
+ type: 'object'
31
+ value: Object
32
+ }
33
+
34
+ type UniformInfo = NumberUniformInfo |
35
+ BooleanUniformInfo |
36
+ ArrayUniformInfo |
37
+ ObjectUniformInfo
38
+
39
+ // https://luma.gl/docs/developer-guide/shader-modules#getuniforms
40
+ type UniformsOptions = {
41
+ [uniformName: string]: UniformInfo
42
+ }
43
+
44
+ type Uniform = UniformInfo |
45
+ Buffer | (() => Buffer) | Framebuffer |
46
+ Texture |
47
+ Matrix4 | // TODO: which other math.gl classes?
48
+ number | [number, number] | [number, number, number] | [number, number, number, number]
49
+
50
+ type Uniforms = {
51
+ [uniformName: string]: Uniform
52
+ }
10
53
 
11
54
  const UNIFORM_SETTERS = {
12
55
  // WEBGL1
@@ -136,52 +179,10 @@ const UINT_ARRAY = {};
136
179
 
137
180
  const array1 = [0];
138
181
 
139
- // Functions to ensure the type of uniform values
140
- // This is done because uniform*v functions
141
- // are extremely slow when consuming JS arrays directly.
142
- function toTypedArray(value, uniformLength, Type, cache) {
143
- // convert boolean uniforms to Number
144
- if (uniformLength === 1 && typeof value === 'boolean') {
145
- value = value ? 1 : 0;
146
- }
147
- if (Number.isFinite(value)) {
148
- array1[0] = value;
149
- value = array1;
150
- }
151
- const length = value.length;
152
- if (length % uniformLength) {
153
- log.warn(`Uniform size should be multiples of ${uniformLength}`, value)();
154
- }
155
-
156
- if (value instanceof Type) {
157
- return value;
158
- }
159
- let result = cache[length];
160
- if (!result) {
161
- result = new Type(length);
162
- cache[length] = result;
163
- }
164
- for (let i = 0; i < length; i++) {
165
- result[i] = value[i];
166
- }
167
- return result;
168
- }
169
-
170
- function toFloatArray(value, uniformLength) {
171
- return toTypedArray(value, uniformLength, Float32Array, FLOAT_ARRAY);
172
- }
173
-
174
- function toIntArray(value, uniformLength) {
175
- return toTypedArray(value, uniformLength, Int32Array, INT_ARRAY);
176
- }
177
-
178
- function toUIntArray(value, uniformLength) {
179
- return toTypedArray(value, uniformLength, Uint32Array, UINT_ARRAY);
180
- } // Returns a Magic Uniform Setter
181
-
182
182
  // PUBLIC API
183
183
 
184
- /** @type {types['getUniformSetter']} */ export function getUniformSetter(gl, location, info) {
184
+ /** Returns a Magic Uniform Setter */
185
+ export function getUniformSetter(gl: WebGLRenderingContext, location: number, info: UniformInfo): any {
185
186
  const setter = UNIFORM_SETTERS[info.type];
186
187
  if (!setter) {
187
188
  throw new Error(`Unknown GLSL uniform type ${info.type}`);
@@ -192,8 +193,7 @@ function toUIntArray(value, uniformLength) {
192
193
  return setter().bind(null, gl, location);
193
194
  }
194
195
 
195
- /** @type {types['parseUniformName']} */
196
- export function parseUniformName(name) {
196
+ export function parseUniformName(name: string): {name: string; isArray: boolean, length: number} {
197
197
  // Shortcut to avoid redundant or bad matches
198
198
  if (name[name.length - 1] !== ']') {
199
199
  return {
@@ -212,15 +212,20 @@ export function parseUniformName(name) {
212
212
 
213
213
  return {
214
214
  name: matches[1],
215
- length: matches[2] || 1,
215
+ length: Number(matches[2]) || 1,
216
216
  isArray: Boolean(matches[2])
217
217
  };
218
- } // To facilitate early detection of e.g. undefined values in JavaScript
218
+ }
219
+
220
+ // To facilitate early detection of e.g. undefined values in JavaScript
219
221
 
220
222
  // Basic checks of uniform values (with or without knowledge of program)
221
223
 
222
- /** @type {types['checkUniformValues']} */
223
- export function checkUniformValues(uniforms, source, uniformMap) {
224
+ /**
225
+ * Basic checks of uniform values (with or without knowledge of program)
226
+ * To facilitate early detection of e.g. undefined values in JavaScript
227
+ */
228
+ export function checkUniformValues(uniforms: object, source?: string, uniformMap?: object): boolean {
224
229
  for (const uniformName in uniforms) {
225
230
  const value = uniforms[uniformName];
226
231
  const shouldCheck = !uniformMap || Boolean(uniformMap[uniformName]);
@@ -236,6 +241,28 @@ export function checkUniformValues(uniforms, source, uniformMap) {
236
241
  return true;
237
242
  }
238
243
 
244
+ /**
245
+ * Creates a copy of the uniform
246
+ */
247
+ export function copyUniform(uniforms: object, key: string, value: any): void {
248
+ if (Array.isArray(value) || ArrayBuffer.isView(value)) {
249
+ if (uniforms[key]) {
250
+ const dest = uniforms[key];
251
+ // @ts-ignore
252
+ for (let i = 0, len = value.length; i < len; ++i) {
253
+ dest[i] = value[i];
254
+ }
255
+ } else {
256
+ // @ts-ignore
257
+ uniforms[key] = value.slice();
258
+ }
259
+ } else {
260
+ uniforms[key] = value;
261
+ }
262
+ }
263
+
264
+ // HELPERS
265
+
239
266
  // TODO use type information during validation
240
267
  function checkUniformValue(value) {
241
268
  if (Array.isArray(value) || ArrayBuffer.isView(value)) {
@@ -257,25 +284,6 @@ function checkUniformValue(value) {
257
284
  return false;
258
285
  }
259
286
 
260
- /** @type {types['copyUniform']} */
261
- export function copyUniform(uniforms, key, value) {
262
- if (Array.isArray(value) || ArrayBuffer.isView(value)) {
263
- if (uniforms[key]) {
264
- const dest = uniforms[key];
265
- // @ts-ignore
266
- for (let i = 0, len = value.length; i < len; ++i) {
267
- dest[i] = value[i];
268
- }
269
- } else {
270
- // @ts-ignore
271
- uniforms[key] = value.slice();
272
- }
273
- } else {
274
- uniforms[key] = value;
275
- }
276
- }
277
-
278
- // HELPERS
279
287
 
280
288
  function checkUniformArray(value) {
281
289
  // Check that every element in array is a number, and at least 1 element
@@ -346,3 +354,47 @@ function setVectorUniform(gl, functionName, location, value) {
346
354
  function setMatrixUniform(gl, functionName, location, value) {
347
355
  gl[functionName](location, false, value);
348
356
  }
357
+
358
+ // Functions to ensure the type of uniform values
359
+ // This is done because uniform*v functions
360
+ // are extremely slow when consuming JS arrays directly.
361
+
362
+ function toTypedArray(value, uniformLength, Type, cache) {
363
+ // convert boolean uniforms to Number
364
+ if (uniformLength === 1 && typeof value === 'boolean') {
365
+ value = value ? 1 : 0;
366
+ }
367
+ if (Number.isFinite(value)) {
368
+ array1[0] = value;
369
+ value = array1;
370
+ }
371
+ const length = value.length;
372
+ if (length % uniformLength) {
373
+ log.warn(`Uniform size should be multiples of ${uniformLength}`, value)();
374
+ }
375
+
376
+ if (value instanceof Type) {
377
+ return value;
378
+ }
379
+ let result = cache[length];
380
+ if (!result) {
381
+ result = new Type(length);
382
+ cache[length] = result;
383
+ }
384
+ for (let i = 0; i < length; i++) {
385
+ result[i] = value[i];
386
+ }
387
+ return result;
388
+ }
389
+
390
+ function toFloatArray(value, uniformLength) {
391
+ return toTypedArray(value, uniformLength, Float32Array, FLOAT_ARRAY);
392
+ }
393
+
394
+ function toIntArray(value, uniformLength) {
395
+ return toTypedArray(value, uniformLength, Int32Array, INT_ARRAY);
396
+ }
397
+
398
+ function toUIntArray(value, uniformLength) {
399
+ return toTypedArray(value, uniformLength, Uint32Array, UINT_ARRAY);
400
+ }
@@ -1,18 +1,31 @@
1
1
  import GL from '@luma.gl/constants';
2
- import Resource from './resource';
3
- import Buffer from './buffer';
4
- import {isWebGL2} from '@luma.gl/gltools';
5
- import {getScratchArray, fillArray} from '../utils/array-utils-flat';
6
- import {assert} from '../utils/assert';
2
+ import {assertWebGL2Context, isWebGL2} from '@luma.gl/gltools';
7
3
  import {getBrowser} from 'probe.gl';
4
+ import Program from './program';
5
+ import WebGLResource, {ResourceProps} from './webgl-resource';
6
+ import Buffer from './webgl-buffer';
7
+ import {getScratchArray, fillArray} from '../utils/array-utils-flat';
8
+ import {assert} from '../utils';
9
+ import {getLumaContextData} from '../context/luma-context-data';
8
10
 
9
11
  const ERR_ELEMENTS = 'elements must be GL.ELEMENT_ARRAY_BUFFER';
10
12
 
11
- export default class VertexArrayObject extends Resource {
12
- static isSupported(gl, options = {}) {
13
- // Attribute 0 can not be disable on most desktop OpenGL based browsers
14
- // and on iOS Safari browser.
15
- if (options.constantAttributeZero) {
13
+ /**
14
+ * VertexArrayObject properties
15
+ * @param constantAttributeZero Attribute 0 can not be disable on most desktop OpenGL based browsers
16
+ * and on iOS Safari browser.
17
+ */
18
+ export type VertexArrayObjectProps = ResourceProps & {
19
+ constantAttributeZero?: boolean;
20
+ program?: Program;
21
+ isDefaultArray?: boolean;
22
+ };
23
+
24
+ export default class VertexArrayObject extends WebGLResource<VertexArrayObjectProps> {
25
+ private static MAX_ATTRIBUTES: number;
26
+
27
+ static isSupported(gl: WebGLRenderingContext, options?: VertexArrayObjectProps): boolean {
28
+ if (options?.constantAttributeZero) {
16
29
  return isWebGL2(gl) || getBrowser() === 'Chrome';
17
30
  }
18
31
 
@@ -20,17 +33,19 @@ export default class VertexArrayObject extends Resource {
20
33
  return true;
21
34
  }
22
35
 
23
- // Returns the global (null) vertex array object. Exists even when no extension available
24
- // TODO(Tarek): VAOs are now polyfilled. Deprecate this in 9.0
25
- static getDefaultArray(gl) {
26
- gl.luma = gl.luma || {};
27
- if (!gl.luma.defaultVertexArray) {
28
- gl.luma.defaultVertexArray = new VertexArrayObject(gl, {handle: null, isDefaultArray: true});
29
- }
30
- return gl.luma.defaultVertexArray;
36
+ /**
37
+ * Returns the global (null) vertex array object. Exists even when no extension available.
38
+ * @todo (Tarek): VAOs are now polyfilled. Deprecate this in 9.0
39
+ */
40
+ static getDefaultArray(gl: WebGLRenderingContext): VertexArrayObject {
41
+ const lumaContextData = getLumaContextData(gl);
42
+ lumaContextData.defaultVertexArray = lumaContextData.defaultVertexArray ||
43
+ new VertexArrayObject(gl, {handle: null, isDefaultArray: true});
44
+ return lumaContextData.defaultVertexArray;
31
45
  }
32
46
 
33
- static getMaxAttributes(gl) {
47
+ /** Get maximum number of attributes in a vertex array */
48
+ static getMaxAttributes(gl: WebGLRenderingContext): number {
34
49
  // TODO - should be cached per context
35
50
  // @ts-ignore
36
51
  VertexArrayObject.MAX_ATTRIBUTES =
@@ -40,45 +55,50 @@ export default class VertexArrayObject extends Resource {
40
55
  return VertexArrayObject.MAX_ATTRIBUTES;
41
56
  }
42
57
 
43
- // Note: Constants are stored globally on the WebGL context, not the VAO
44
- // So they need to be updated before every render
45
- // TODO - use known type (in configuration or passed in) to allow non-typed arrays?
46
- // TODO - remember/cache values to avoid setting them unnecessarily?
47
- static setConstant(gl, location, array) {
58
+ /**
59
+ * Set an attribute to a constant value
60
+ * @param gl
61
+ * @param location
62
+ * @param array
63
+ *
64
+ * @note Constants are stored globally on the WebGL context, not the VAO
65
+ * so they need to be updated before every render
66
+ * @todo - use known type (in configuration or passed in) to allow non-typed arrays?
67
+ * @todo - remember/cache values to avoid setting them unnecessarily?
68
+ */
69
+ static setConstant(gl: WebGLRenderingContext, location: any, array: any): void {
48
70
  switch (array.constructor) {
49
71
  case Float32Array:
50
72
  VertexArrayObject._setConstantFloatArray(gl, location, array);
51
73
  break;
52
74
  case Int32Array:
53
- VertexArrayObject._setConstantIntArray(gl, location, array);
75
+ VertexArrayObject._setConstantIntArray(assertWebGL2Context(gl), location, array);
54
76
  break;
55
77
  case Uint32Array:
56
- VertexArrayObject._setConstantUintArray(gl, location, array);
78
+ VertexArrayObject._setConstantUintArray(assertWebGL2Context(gl), location, array);
57
79
  break;
58
80
  default:
59
81
  assert(false);
60
82
  }
61
83
  }
62
84
 
85
+ private buffer: Buffer | null = null;
86
+ private bufferValue = null;
87
+ private isDefaultArray: boolean = false;
88
+
63
89
  // Create a VertexArray
64
- constructor(gl, opts = {}) {
90
+ constructor(gl: WebGLRenderingContext, opts?: VertexArrayObjectProps) {
65
91
  // Use program's id if program but no id is supplied
66
- const id = opts.id || (opts.program && opts.program.id);
67
- super(gl, Object.assign({}, opts, {id}));
92
+ super(gl, {...opts, id: opts?.id || (opts?.program && opts?.program.id)}, {} as any);
68
93
 
69
94
  this.buffer = null;
70
95
  this.bufferValue = null;
71
- this.isDefaultArray = opts.isDefaultArray || false;
72
-
73
- /** @type {WebGL2RenderingContext} */
74
- this.gl2 = gl;
75
-
76
- this.initialize(opts);
96
+ this.isDefaultArray = opts?.isDefaultArray || false;
77
97
 
78
98
  Object.seal(this);
79
99
  }
80
100
 
81
- delete() {
101
+ delete(): this {
82
102
  super.delete();
83
103
  if (this.buffer) {
84
104
  this.buffer.delete();
@@ -86,19 +106,10 @@ export default class VertexArrayObject extends Resource {
86
106
  return this;
87
107
  }
88
108
 
89
- get MAX_ATTRIBUTES() {
109
+ get MAX_ATTRIBUTES(): number {
90
110
  return VertexArrayObject.getMaxAttributes(this.gl);
91
111
  }
92
112
 
93
- initialize(props = {}) {
94
- return this.setProps(props);
95
- }
96
-
97
- setProps(props) {
98
- // TODO: decide which props should be supported
99
- return this;
100
- }
101
-
102
113
  // Set (bind) an elements buffer, for indexed rendering.
103
114
  // Must be a Buffer bound to GL.ELEMENT_ARRAY_BUFFER. Constants not supported
104
115
  setElementBuffer(elementBuffer = null, opts = {}) {
@@ -112,8 +123,8 @@ export default class VertexArrayObject extends Resource {
112
123
  return this;
113
124
  }
114
125
 
115
- // Set a location in vertex attributes array to a bufferk, enables the location, sets divisor
116
- setBuffer(location, buffer, accessor) {
126
+ /** Set a location in vertex attributes array to a buffer, enables the location, sets divisor */
127
+ setBuffer(location, buffer, accessor): this {
117
128
  // Check target
118
129
  if (buffer.target === GL.ELEMENT_ARRAY_BUFFER) {
119
130
  return this.setElementBuffer(buffer, accessor);
@@ -145,11 +156,13 @@ export default class VertexArrayObject extends Resource {
145
156
  return this;
146
157
  }
147
158
 
148
- // Enabling an attribute location makes it reference the currently bound buffer
149
- // Disabling an attribute location makes it reference the global constant value
150
- // TODO - handle single values for size 1 attributes?
151
- // TODO - convert classic arrays based on known type?
152
- enable(location, enable = true) {
159
+ /**
160
+ * Enabling an attribute location makes it reference the currently bound buffer
161
+ * Disabling an attribute location makes it reference the global constant value
162
+ * TODO - handle single values for size 1 attributes?
163
+ * TODO - convert classic arrays based on known type?
164
+ */
165
+ enable(location, enable = true): this {
153
166
  // Attribute 0 cannot be disabled in most desktop OpenGL based browsers
154
167
  const disablingAttributeZero =
155
168
  !enable &&
@@ -158,21 +171,22 @@ export default class VertexArrayObject extends Resource {
158
171
 
159
172
  if (!disablingAttributeZero) {
160
173
  location = Number(location);
161
- this.bind(
162
- () =>
163
- enable
164
- ? this.gl.enableVertexAttribArray(location)
165
- : this.gl.disableVertexAttribArray(location)
174
+ this.bind(() =>
175
+ enable
176
+ ? this.gl.enableVertexAttribArray(location)
177
+ : this.gl.disableVertexAttribArray(location)
166
178
  );
167
179
  }
168
180
  return this;
169
181
  }
170
182
 
171
- // Provide a means to create a buffer that is equivalent to a constant.
172
- // NOTE: Desktop OpenGL cannot disable attribute 0.
173
- // https://stackoverflow.com/questions/20305231/webgl-warning-attribute-0-is-disabled-
174
- // this-has-significant-performance-penalt
175
- getConstantBuffer(elementCount, value) {
183
+ /**
184
+ * Provide a means to create a buffer that is equivalent to a constant.
185
+ * NOTE: Desktop OpenGL cannot disable attribute 0.
186
+ * https://stackoverflow.com/questions/20305231/webgl-warning-attribute-0-is-disabled-
187
+ * this-has-significant-performance-penalty
188
+ */
189
+ getConstantBuffer(elementCount: number, value): Buffer {
176
190
  // Create buffer only when needed, and reuse it (avoids inflating buffer creation statistics)
177
191
 
178
192
  const constantValue = this._normalizeConstantArrayValue(value);
@@ -200,6 +214,19 @@ export default class VertexArrayObject extends Resource {
200
214
  return this.buffer;
201
215
  }
202
216
 
217
+ // DEPRECATED
218
+
219
+ /** @deprecated this function has no effect */
220
+ initialize(props?: VertexArrayObjectProps): this {
221
+ return this.setProps(props);
222
+ }
223
+
224
+ /** @deprecated this function is not implemented */
225
+ setProps(props: VertexArrayObjectProps): this {
226
+ // TODO: decide which props should be supported
227
+ return this;
228
+ }
229
+
203
230
  // PRIVATE
204
231
 
205
232
  // TODO - convert Arrays based on known type? (read type from accessor, don't assume Float32Array)
@@ -211,7 +238,7 @@ export default class VertexArrayObject extends Resource {
211
238
  return arrayValue;
212
239
  }
213
240
 
214
- _compareConstantArrayValues(v1, v2) {
241
+ _compareConstantArrayValues(v1, v2): boolean {
215
242
  if (!v1 || !v2 || v1.length !== v2.length || v1.constructor !== v2.constructor) {
216
243
  return false;
217
244
  }
@@ -223,7 +250,7 @@ export default class VertexArrayObject extends Resource {
223
250
  return true;
224
251
  }
225
252
 
226
- static _setConstantFloatArray(gl, location, array) {
253
+ static _setConstantFloatArray(gl: WebGLRenderingContext, location, array): void {
227
254
  switch (array.length) {
228
255
  case 1:
229
256
  gl.vertexAttrib1fv(location, array);
@@ -242,68 +269,66 @@ export default class VertexArrayObject extends Resource {
242
269
  }
243
270
  }
244
271
 
245
- static _setConstantIntArray(gl, location, array) {
272
+ static _setConstantIntArray(gl: WebGL2RenderingContext, location, array) {
246
273
  assert(isWebGL2(gl));
247
- switch (array.length) {
248
- case 1:
249
- gl.vertexAttribI1iv(location, array);
250
- break;
251
- case 2:
252
- gl.vertexAttribI2iv(location, array);
253
- break;
254
- case 3:
255
- gl.vertexAttribI3iv(location, array);
256
- break;
257
- case 4:
258
- gl.vertexAttribI4iv(location, array);
259
- break;
260
- default:
261
- assert(false);
262
- }
274
+ gl.vertexAttribI4iv(location, array);
275
+ // switch (array.length) {
276
+ // case 1:
277
+ // gl.vertexAttribI1iv(location, array);
278
+ // break;
279
+ // case 2:
280
+ // gl.vertexAttribI2iv(location, array);
281
+ // break;
282
+ // case 3:
283
+ // gl.vertexAttribI3iv(location, array);
284
+ // break;
285
+ // case 4:
286
+ // break;
287
+ // default:
288
+ // assert(false);
289
+ // }
263
290
  }
264
291
 
265
- static _setConstantUintArray(gl, location, array) {
292
+ static _setConstantUintArray(gl: WebGL2RenderingContext, location, array) {
266
293
  assert(isWebGL2(gl));
267
- switch (array.length) {
268
- case 1:
269
- gl.vertexAttribI1uiv(location, array);
270
- break;
271
- case 2:
272
- gl.vertexAttribI2uiv(location, array);
273
- break;
274
- case 3:
275
- gl.vertexAttribI3uiv(location, array);
276
- break;
277
- case 4:
278
- gl.vertexAttribI4uiv(location, array);
279
- break;
280
- default:
281
- assert(false);
282
- }
294
+ gl.vertexAttribI4uiv(location, array);
295
+ // switch (array.length) {
296
+ // case 1:
297
+ // gl.vertexAttribI1uiv(location, array);
298
+ // break;
299
+ // case 2:
300
+ // gl.vertexAttribI2uiv(location, array);
301
+ // break;
302
+ // case 3:
303
+ // gl.vertexAttribI3uiv(location, array);
304
+ // break;
305
+ // case 4:
306
+ // gl.vertexAttribI4uiv(location, array);
307
+ // break;
308
+ // default:
309
+ // assert(false);
310
+ // }
283
311
  }
284
312
 
285
313
  // RESOURCE IMPLEMENTATION
286
314
 
287
315
  _createHandle() {
288
- /** @type {WebGL2RenderingContext} */
289
- // @ts-ignore
290
- const gl2 = this.gl;
291
- return gl2.createVertexArray();
316
+ return this.gl2.createVertexArray();
292
317
  }
293
318
 
294
- _deleteHandle(handle) {
295
- this.gl2.deleteVertexArray(handle);
319
+ _deleteHandle(): void {
320
+ this.gl2.deleteVertexArray(this.handle);
296
321
  // @ts-ignore
297
322
  return [this.elements];
298
323
  // return [this.elements, ...this.buffers];
299
324
  }
300
325
 
301
- _bindHandle(handle) {
326
+ _bindHandle(handle): void {
302
327
  this.gl2.bindVertexArray(handle);
303
328
  }
304
329
 
305
330
  // Generic getter for information about a vertex attribute at a given position
306
- _getParameter(pname, {location}) {
331
+ _getParameter(pname: number, {location}) {
307
332
  assert(Number.isFinite(location));
308
333
  return this.bind(() => {
309
334
  switch (pname) {