@luma.gl/webgl 8.6.0-alpha.1 → 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 (651) hide show
  1. package/dist/api/device2.d.ts +52 -0
  2. package/dist/api/device2.d.ts.map +1 -0
  3. package/dist/api/device2.js +23 -0
  4. package/dist/api/device2.js.map +1 -0
  5. package/dist/classes/accessor.js +2 -2
  6. package/dist/classes/accessor.js.map +1 -1
  7. package/dist/classes/accessor.ts.disabled +1 -1
  8. package/dist/classes/clear.d.ts +3 -2
  9. package/dist/classes/clear.d.ts.map +1 -1
  10. package/dist/classes/clear.js +7 -4
  11. package/dist/classes/clear.js.map +1 -1
  12. package/dist/classes/copy-and-blit.d.ts +18 -1
  13. package/dist/classes/copy-and-blit.d.ts.map +1 -1
  14. package/dist/classes/copy-and-blit.js +30 -25
  15. package/dist/classes/copy-and-blit.js.map +1 -1
  16. package/dist/classes/framebuffer.d.ts +10 -1
  17. package/dist/classes/framebuffer.d.ts.map +1 -1
  18. package/dist/classes/framebuffer.js +15 -15
  19. package/dist/classes/framebuffer.js.map +1 -1
  20. package/dist/classes/program-configuration.d.ts +2 -2
  21. package/dist/classes/program-configuration.d.ts.map +1 -1
  22. package/dist/classes/program-configuration.js +1 -1
  23. package/dist/classes/program-configuration.js.map +1 -1
  24. package/dist/classes/program.d.ts +6 -6
  25. package/dist/classes/program.d.ts.map +1 -1
  26. package/dist/classes/program.js +11 -9
  27. package/dist/classes/program.js.map +1 -1
  28. package/dist/classes/query.d.ts.map +1 -1
  29. package/dist/classes/query.js +6 -5
  30. package/dist/classes/query.js.map +1 -1
  31. package/dist/classes/renderbuffer-formats.js +1 -1
  32. package/dist/classes/renderbuffer-formats.js.map +1 -1
  33. package/dist/classes/renderbuffer.d.ts.map +1 -1
  34. package/dist/classes/renderbuffer.js +4 -3
  35. package/dist/classes/renderbuffer.js.map +1 -1
  36. package/dist/classes/texture-2d.d.ts +4 -3
  37. package/dist/classes/texture-2d.d.ts.map +1 -1
  38. package/dist/classes/texture-2d.js +5 -8
  39. package/dist/classes/texture-2d.js.map +1 -1
  40. package/dist/classes/texture-3d.d.ts +3 -2
  41. package/dist/classes/texture-3d.d.ts.map +1 -1
  42. package/dist/classes/texture-3d.js +15 -6
  43. package/dist/classes/texture-3d.js.map +1 -1
  44. package/dist/classes/texture-cube.d.ts +2 -1
  45. package/dist/classes/texture-cube.d.ts.map +1 -1
  46. package/dist/classes/texture-cube.js +3 -4
  47. package/dist/classes/texture-cube.js.map +1 -1
  48. package/dist/classes/texture-formats.js +1 -1
  49. package/dist/classes/texture-formats.js.map +1 -1
  50. package/dist/classes/texture.d.ts +14 -9
  51. package/dist/classes/texture.d.ts.map +1 -1
  52. package/dist/classes/texture.js +19 -18
  53. package/dist/classes/texture.js.map +1 -1
  54. package/dist/classes/transform-feedback.d.ts.map +1 -1
  55. package/dist/classes/transform-feedback.js +5 -4
  56. package/dist/classes/transform-feedback.js.map +1 -1
  57. package/dist/classes/uniform-buffer-layout.js +1 -1
  58. package/dist/classes/uniform-buffer-layout.js.map +1 -1
  59. package/dist/classes/uniforms.d.ts +0 -1
  60. package/dist/classes/uniforms.d.ts.map +1 -1
  61. package/dist/classes/uniforms.js +1 -2
  62. package/dist/classes/uniforms.js.map +1 -1
  63. package/dist/classes/vertex-array-object.d.ts +1 -1
  64. package/dist/classes/vertex-array-object.d.ts.map +1 -1
  65. package/dist/classes/vertex-array-object.js +8 -9
  66. package/dist/classes/vertex-array-object.js.map +1 -1
  67. package/dist/classes/vertex-array.d.ts +1 -1
  68. package/dist/classes/vertex-array.d.ts.map +1 -1
  69. package/dist/classes/vertex-array.js +1 -2
  70. package/dist/classes/vertex-array.js.map +1 -1
  71. package/dist/classes/webgl-buffer.d.ts +2 -0
  72. package/dist/classes/webgl-buffer.d.ts.map +1 -1
  73. package/dist/classes/webgl-buffer.js +8 -5
  74. package/dist/classes/webgl-buffer.js.map +1 -1
  75. package/dist/classes/webgl-resource.d.ts +6 -4
  76. package/dist/classes/webgl-resource.d.ts.map +1 -1
  77. package/dist/classes/webgl-resource.js +12 -8
  78. package/dist/classes/webgl-resource.js.map +1 -1
  79. package/dist/classes/webgl-shader.d.ts +3 -1
  80. package/dist/classes/webgl-shader.d.ts.map +1 -1
  81. package/dist/classes/webgl-shader.js +7 -4
  82. package/dist/classes/webgl-shader.js.map +1 -1
  83. package/dist/context/context/context-state.d.ts +18 -0
  84. package/dist/context/context/context-state.d.ts.map +1 -0
  85. package/dist/context/context/context-state.js +26 -0
  86. package/dist/context/context/context-state.js.map +1 -0
  87. package/dist/context/context/create-context.d.ts +40 -0
  88. package/dist/context/context/create-context.d.ts.map +1 -0
  89. package/dist/context/context/create-context.js +37 -0
  90. package/dist/context/context/create-context.js.map +1 -0
  91. package/dist/context/context/device-pixels.d.ts +25 -0
  92. package/dist/context/context/device-pixels.d.ts.map +1 -0
  93. package/dist/context/context/device-pixels.js +98 -0
  94. package/dist/context/context/device-pixels.js.map +1 -0
  95. package/dist/context/context/get-canvas.d.ts +13 -0
  96. package/dist/context/context/get-canvas.d.ts.map +1 -0
  97. package/dist/context/context/get-canvas.js +31 -0
  98. package/dist/context/context/get-canvas.js.map +1 -0
  99. package/dist/context/context/resize-context.d.ts +20 -0
  100. package/dist/context/context/resize-context.d.ts.map +1 -0
  101. package/dist/context/context/resize-context.js +15 -0
  102. package/dist/context/context/resize-context.js.map +1 -0
  103. package/dist/context/context/webgl-checks.d.ts +13 -0
  104. package/dist/context/context/webgl-checks.d.ts.map +1 -0
  105. package/dist/context/context/webgl-checks.js +34 -0
  106. package/dist/context/context/webgl-checks.js.map +1 -0
  107. package/dist/context/parameters/unified-parameter-api.d.ts +30 -0
  108. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -0
  109. package/dist/context/parameters/unified-parameter-api.js +65 -0
  110. package/dist/context/parameters/unified-parameter-api.js.map +1 -0
  111. package/dist/context/parameters/webgl-parameter-tables.d.ts +169 -0
  112. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -0
  113. package/dist/context/parameters/webgl-parameter-tables.js +445 -0
  114. package/dist/context/parameters/webgl-parameter-tables.js.map +1 -0
  115. package/dist/context/parameters/webgl-parameters.d.ts +144 -0
  116. package/dist/context/parameters/webgl-parameters.d.ts.map +1 -0
  117. package/dist/context/parameters/webgl-parameters.js +2 -0
  118. package/dist/context/parameters/webgl-parameters.js.map +1 -0
  119. package/dist/context/polyfill/get-parameter-polyfill.d.ts +2 -0
  120. package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +1 -0
  121. package/dist/context/polyfill/get-parameter-polyfill.js +91 -0
  122. package/dist/context/polyfill/get-parameter-polyfill.js.map +1 -0
  123. package/dist/context/polyfill/polyfill-context.d.ts +5 -0
  124. package/dist/context/polyfill/polyfill-context.d.ts.map +1 -0
  125. package/dist/context/polyfill/polyfill-context.js +91 -0
  126. package/dist/context/polyfill/polyfill-context.js.map +1 -0
  127. package/dist/context/polyfill/polyfill-table.d.ts +48 -0
  128. package/dist/context/polyfill/polyfill-table.d.ts.map +1 -0
  129. package/dist/context/polyfill/polyfill-table.js +160 -0
  130. package/dist/context/polyfill/polyfill-table.js.map +1 -0
  131. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts +2 -0
  132. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +1 -0
  133. package/dist/context/polyfill/polyfill-vertex-array-object.js +335 -0
  134. package/dist/context/polyfill/polyfill-vertex-array-object.js.map +1 -0
  135. package/dist/context/state-tracker/deep-array-equal.d.ts +3 -0
  136. package/dist/context/state-tracker/deep-array-equal.d.ts.map +1 -0
  137. package/dist/context/state-tracker/deep-array-equal.js +21 -0
  138. package/dist/context/state-tracker/deep-array-equal.js.map +1 -0
  139. package/dist/context/state-tracker/track-context-state.d.ts +22 -0
  140. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -0
  141. package/dist/context/state-tracker/track-context-state.js +169 -0
  142. package/dist/context/state-tracker/track-context-state.js.map +1 -0
  143. package/dist/context/state-tracker/with-parameters.d.ts +13 -0
  144. package/dist/context/state-tracker/with-parameters.d.ts.map +1 -0
  145. package/dist/context/state-tracker/with-parameters.js +36 -0
  146. package/dist/context/state-tracker/with-parameters.js.map +1 -0
  147. package/dist/debug/debug-uniforms.js +1 -1
  148. package/dist/debug/debug-uniforms.js.map +1 -1
  149. package/dist/debug/debug-vertex-array.js +2 -2
  150. package/dist/debug/debug-vertex-array.js.map +1 -1
  151. package/dist/device/check-glsl-extension.d.ts +4 -0
  152. package/dist/device/check-glsl-extension.d.ts.map +1 -0
  153. package/dist/device/check-glsl-extension.js +22 -0
  154. package/dist/device/check-glsl-extension.js.map +1 -0
  155. package/dist/device/device-features.d.ts +12 -0
  156. package/dist/device/device-features.d.ts.map +1 -0
  157. package/dist/device/device-features.js +123 -0
  158. package/dist/device/device-features.js.map +1 -0
  159. package/dist/device/device-limits.d.ts +51 -0
  160. package/dist/device/device-limits.d.ts.map +1 -0
  161. package/dist/device/device-limits.js +90 -0
  162. package/dist/device/device-limits.js.map +1 -0
  163. package/dist/device/get-device-info.d.ts +4 -0
  164. package/dist/device/get-device-info.d.ts.map +1 -0
  165. package/dist/device/get-device-info.js +44 -0
  166. package/dist/device/get-device-info.js.map +1 -0
  167. package/dist/device/webgl-device.d.ts +111 -0
  168. package/dist/device/webgl-device.d.ts.map +1 -0
  169. package/dist/device/webgl-device.js +208 -0
  170. package/dist/device/webgl-device.js.map +1 -0
  171. package/dist/es5/api/device2.js +42 -0
  172. package/dist/es5/api/device2.js.map +1 -0
  173. package/dist/es5/bundle.js +1 -1
  174. package/dist/es5/bundle.js.map +1 -1
  175. package/dist/es5/classes/accessor.js +104 -74
  176. package/dist/es5/classes/accessor.js.map +1 -1
  177. package/dist/es5/classes/accessor.ts.disabled +1 -1
  178. package/dist/es5/classes/clear.js +55 -34
  179. package/dist/es5/classes/clear.js.map +1 -1
  180. package/dist/es5/classes/copy-and-blit.js +175 -156
  181. package/dist/es5/classes/copy-and-blit.js.map +1 -1
  182. package/dist/es5/classes/framebuffer.js +647 -518
  183. package/dist/es5/classes/framebuffer.js.map +1 -1
  184. package/dist/es5/classes/program-configuration.js +138 -121
  185. package/dist/es5/classes/program-configuration.js.map +1 -1
  186. package/dist/es5/classes/program.js +368 -292
  187. package/dist/es5/classes/program.js.map +1 -1
  188. package/dist/es5/classes/query.js +172 -107
  189. package/dist/es5/classes/query.js.map +1 -1
  190. package/dist/es5/classes/renderbuffer-formats.js +126 -164
  191. package/dist/es5/classes/renderbuffer-formats.js.map +1 -1
  192. package/dist/es5/classes/renderbuffer.js +151 -98
  193. package/dist/es5/classes/renderbuffer.js.map +1 -1
  194. package/dist/es5/classes/texture-2d.js +44 -17
  195. package/dist/es5/classes/texture-2d.js.map +1 -1
  196. package/dist/es5/classes/texture-3d.js +107 -48
  197. package/dist/es5/classes/texture-3d.js.map +1 -1
  198. package/dist/es5/classes/texture-cube.js +169 -110
  199. package/dist/es5/classes/texture-cube.js.map +1 -1
  200. package/dist/es5/classes/texture-formats.js +42 -71
  201. package/dist/es5/classes/texture-formats.js.map +1 -1
  202. package/dist/es5/classes/texture.js +780 -665
  203. package/dist/es5/classes/texture.js.map +1 -1
  204. package/dist/es5/classes/transform-feedback.js +206 -150
  205. package/dist/es5/classes/transform-feedback.js.map +1 -1
  206. package/dist/es5/classes/uniform-buffer-layout.js +103 -89
  207. package/dist/es5/classes/uniform-buffer-layout.js.map +1 -1
  208. package/dist/es5/classes/uniforms.js +39 -80
  209. package/dist/es5/classes/uniforms.js.map +1 -1
  210. package/dist/es5/classes/vertex-array-object.js +268 -209
  211. package/dist/es5/classes/vertex-array-object.js.map +1 -1
  212. package/dist/es5/classes/vertex-array.js +348 -303
  213. package/dist/es5/classes/vertex-array.js.map +1 -1
  214. package/dist/es5/classes/webgl-buffer.js +374 -303
  215. package/dist/es5/classes/webgl-buffer.js.map +1 -1
  216. package/dist/es5/classes/webgl-resource.js +231 -161
  217. package/dist/es5/classes/webgl-resource.js.map +1 -1
  218. package/dist/es5/classes/webgl-shader.js +230 -134
  219. package/dist/es5/classes/webgl-shader.js.map +1 -1
  220. package/dist/es5/context/context/context-state.js +31 -0
  221. package/dist/es5/context/context/context-state.js.map +1 -0
  222. package/dist/es5/context/context/create-context.js +57 -0
  223. package/dist/es5/context/context/create-context.js.map +1 -0
  224. package/dist/es5/context/context/device-pixels.js +115 -0
  225. package/dist/es5/context/context/device-pixels.js.map +1 -0
  226. package/dist/es5/context/context/get-canvas.js +40 -0
  227. package/dist/es5/context/context/get-canvas.js.map +1 -0
  228. package/dist/es5/context/context/resize-context.js +23 -0
  229. package/dist/es5/context/context/resize-context.js.map +1 -0
  230. package/dist/es5/context/context/webgl-checks.js +54 -0
  231. package/dist/es5/context/context/webgl-checks.js.map +1 -0
  232. package/dist/es5/context/parameters/unified-parameter-api.js +95 -0
  233. package/dist/es5/context/parameters/unified-parameter-api.js.map +1 -0
  234. package/dist/es5/context/parameters/webgl-parameter-tables.js +392 -0
  235. package/dist/es5/context/parameters/webgl-parameter-tables.js.map +1 -0
  236. package/dist/es5/context/parameters/webgl-parameters.js +6 -0
  237. package/dist/es5/context/parameters/webgl-parameters.js.map +1 -0
  238. package/dist/es5/context/polyfill/get-parameter-polyfill.js +81 -0
  239. package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +1 -0
  240. package/dist/es5/context/polyfill/polyfill-context.js +134 -0
  241. package/dist/es5/context/polyfill/polyfill-context.js.map +1 -0
  242. package/dist/es5/context/polyfill/polyfill-table.js +166 -0
  243. package/dist/es5/context/polyfill/polyfill-table.js.map +1 -0
  244. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js +341 -0
  245. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js.map +1 -0
  246. package/dist/es5/context/state-tracker/deep-array-equal.js +28 -0
  247. package/dist/es5/context/state-tracker/deep-array-equal.js.map +1 -0
  248. package/dist/es5/context/state-tracker/track-context-state.js +196 -0
  249. package/dist/es5/context/state-tracker/track-context-state.js.map +1 -0
  250. package/dist/es5/context/state-tracker/with-parameters.js +44 -0
  251. package/dist/es5/context/state-tracker/with-parameters.js.map +1 -0
  252. package/dist/es5/debug/debug-program-configuration.js +48 -20
  253. package/dist/es5/debug/debug-program-configuration.js.map +1 -1
  254. package/dist/es5/debug/debug-uniforms.js +110 -70
  255. package/dist/es5/debug/debug-uniforms.js.map +1 -1
  256. package/dist/es5/debug/debug-vertex-array.js +49 -54
  257. package/dist/es5/debug/debug-vertex-array.js.map +1 -1
  258. package/dist/es5/device/check-glsl-extension.js +33 -0
  259. package/dist/es5/device/check-glsl-extension.js.map +1 -0
  260. package/dist/es5/device/device-features.js +152 -0
  261. package/dist/es5/device/device-features.js.map +1 -0
  262. package/dist/es5/device/device-limits.js +64 -0
  263. package/dist/es5/device/device-limits.js.map +1 -0
  264. package/dist/es5/device/get-device-info.js +55 -0
  265. package/dist/es5/device/get-device-info.js.map +1 -0
  266. package/dist/es5/device/webgl-device.js +279 -0
  267. package/dist/es5/device/webgl-device.js.map +1 -0
  268. package/dist/es5/index.js +179 -189
  269. package/dist/es5/index.js.map +1 -1
  270. package/dist/es5/init.js +18 -14
  271. package/dist/es5/init.js.map +1 -1
  272. package/dist/es5/webgl-utils/attribute-utils.js +74 -87
  273. package/dist/es5/webgl-utils/attribute-utils.js.map +1 -1
  274. package/dist/es5/webgl-utils/constants-to-keys.js +7 -7
  275. package/dist/es5/webgl-utils/constants-to-keys.js.map +1 -1
  276. package/dist/es5/webgl-utils/format-utils.js +4 -4
  277. package/dist/es5/webgl-utils/format-utils.js.map +1 -1
  278. package/dist/es5/webgl-utils/get-error.js +18 -18
  279. package/dist/es5/webgl-utils/get-error.js.map +1 -1
  280. package/dist/es5/webgl-utils/index.js +10 -10
  281. package/dist/es5/webgl-utils/is-old-ie.js +16 -0
  282. package/dist/es5/webgl-utils/is-old-ie.js.map +1 -0
  283. package/dist/es5/webgl-utils/parse-shader-compiler-log.js +53 -25
  284. package/dist/es5/webgl-utils/parse-shader-compiler-log.js.map +1 -1
  285. package/dist/es5/webgl-utils/texture-utils.js +32 -36
  286. package/dist/es5/webgl-utils/texture-utils.js.map +1 -1
  287. package/dist/es5/webgl-utils/typed-array-utils.js +33 -32
  288. package/dist/es5/webgl-utils/typed-array-utils.js.map +1 -1
  289. package/dist/es5/webgl-utils/webgl-info.ts.disabled +135 -0
  290. package/dist/esm/api/device2.js +23 -0
  291. package/dist/esm/api/device2.js.map +1 -0
  292. package/dist/esm/classes/accessor.js +2 -2
  293. package/dist/esm/classes/accessor.js.map +1 -1
  294. package/dist/esm/classes/accessor.ts.disabled +1 -1
  295. package/dist/esm/classes/clear.js +7 -4
  296. package/dist/esm/classes/clear.js.map +1 -1
  297. package/dist/esm/classes/copy-and-blit.js +30 -25
  298. package/dist/esm/classes/copy-and-blit.js.map +1 -1
  299. package/dist/esm/classes/framebuffer.js +15 -15
  300. package/dist/esm/classes/framebuffer.js.map +1 -1
  301. package/dist/esm/classes/program-configuration.js +1 -1
  302. package/dist/esm/classes/program-configuration.js.map +1 -1
  303. package/dist/esm/classes/program.js +11 -9
  304. package/dist/esm/classes/program.js.map +1 -1
  305. package/dist/esm/classes/query.js +6 -5
  306. package/dist/esm/classes/query.js.map +1 -1
  307. package/dist/esm/classes/renderbuffer-formats.js +1 -1
  308. package/dist/esm/classes/renderbuffer-formats.js.map +1 -1
  309. package/dist/esm/classes/renderbuffer.js +4 -3
  310. package/dist/esm/classes/renderbuffer.js.map +1 -1
  311. package/dist/esm/classes/texture-2d.js +5 -8
  312. package/dist/esm/classes/texture-2d.js.map +1 -1
  313. package/dist/esm/classes/texture-3d.js +15 -6
  314. package/dist/esm/classes/texture-3d.js.map +1 -1
  315. package/dist/esm/classes/texture-cube.js +3 -4
  316. package/dist/esm/classes/texture-cube.js.map +1 -1
  317. package/dist/esm/classes/texture-formats.js +1 -1
  318. package/dist/esm/classes/texture-formats.js.map +1 -1
  319. package/dist/esm/classes/texture.js +19 -18
  320. package/dist/esm/classes/texture.js.map +1 -1
  321. package/dist/esm/classes/transform-feedback.js +5 -4
  322. package/dist/esm/classes/transform-feedback.js.map +1 -1
  323. package/dist/esm/classes/uniform-buffer-layout.js +1 -1
  324. package/dist/esm/classes/uniform-buffer-layout.js.map +1 -1
  325. package/dist/esm/classes/uniforms.js +1 -2
  326. package/dist/esm/classes/uniforms.js.map +1 -1
  327. package/dist/esm/classes/vertex-array-object.js +8 -9
  328. package/dist/esm/classes/vertex-array-object.js.map +1 -1
  329. package/dist/esm/classes/vertex-array.js +1 -2
  330. package/dist/esm/classes/vertex-array.js.map +1 -1
  331. package/dist/esm/classes/webgl-buffer.js +8 -5
  332. package/dist/esm/classes/webgl-buffer.js.map +1 -1
  333. package/dist/esm/classes/webgl-resource.js +12 -8
  334. package/dist/esm/classes/webgl-resource.js.map +1 -1
  335. package/dist/esm/classes/webgl-shader.js +7 -4
  336. package/dist/esm/classes/webgl-shader.js.map +1 -1
  337. package/dist/esm/context/context/context-state.js +26 -0
  338. package/dist/esm/context/context/context-state.js.map +1 -0
  339. package/dist/esm/context/context/create-context.js +37 -0
  340. package/dist/esm/context/context/create-context.js.map +1 -0
  341. package/dist/esm/context/context/device-pixels.js +98 -0
  342. package/dist/esm/context/context/device-pixels.js.map +1 -0
  343. package/dist/esm/context/context/get-canvas.js +31 -0
  344. package/dist/esm/context/context/get-canvas.js.map +1 -0
  345. package/dist/esm/context/context/resize-context.js +15 -0
  346. package/dist/esm/context/context/resize-context.js.map +1 -0
  347. package/dist/esm/context/context/webgl-checks.js +34 -0
  348. package/dist/esm/context/context/webgl-checks.js.map +1 -0
  349. package/dist/esm/context/parameters/unified-parameter-api.js +65 -0
  350. package/dist/esm/context/parameters/unified-parameter-api.js.map +1 -0
  351. package/dist/esm/context/parameters/webgl-parameter-tables.js +445 -0
  352. package/dist/esm/context/parameters/webgl-parameter-tables.js.map +1 -0
  353. package/dist/esm/context/parameters/webgl-parameters.js +2 -0
  354. package/dist/esm/context/parameters/webgl-parameters.js.map +1 -0
  355. package/dist/esm/context/polyfill/get-parameter-polyfill.js +91 -0
  356. package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +1 -0
  357. package/dist/esm/context/polyfill/polyfill-context.js +91 -0
  358. package/dist/esm/context/polyfill/polyfill-context.js.map +1 -0
  359. package/dist/esm/context/polyfill/polyfill-table.js +160 -0
  360. package/dist/esm/context/polyfill/polyfill-table.js.map +1 -0
  361. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js +335 -0
  362. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js.map +1 -0
  363. package/dist/esm/context/state-tracker/deep-array-equal.js +21 -0
  364. package/dist/esm/context/state-tracker/deep-array-equal.js.map +1 -0
  365. package/dist/esm/context/state-tracker/track-context-state.js +169 -0
  366. package/dist/esm/context/state-tracker/track-context-state.js.map +1 -0
  367. package/dist/esm/context/state-tracker/with-parameters.js +36 -0
  368. package/dist/esm/context/state-tracker/with-parameters.js.map +1 -0
  369. package/dist/esm/debug/debug-uniforms.js +1 -1
  370. package/dist/esm/debug/debug-uniforms.js.map +1 -1
  371. package/dist/esm/debug/debug-vertex-array.js +2 -2
  372. package/dist/esm/debug/debug-vertex-array.js.map +1 -1
  373. package/dist/esm/device/check-glsl-extension.js +22 -0
  374. package/dist/esm/device/check-glsl-extension.js.map +1 -0
  375. package/dist/esm/device/device-features.js +123 -0
  376. package/dist/esm/device/device-features.js.map +1 -0
  377. package/dist/esm/device/device-limits.js +90 -0
  378. package/dist/esm/device/device-limits.js.map +1 -0
  379. package/dist/esm/device/get-device-info.js +44 -0
  380. package/dist/esm/device/get-device-info.js.map +1 -0
  381. package/dist/esm/device/webgl-device.js +208 -0
  382. package/dist/esm/device/webgl-device.js.map +1 -0
  383. package/dist/esm/index.js +22 -20
  384. package/dist/esm/index.js.map +1 -1
  385. package/dist/esm/init.js +11 -8
  386. package/dist/esm/init.js.map +1 -1
  387. package/dist/esm/webgl-utils/attribute-utils.js +1 -1
  388. package/dist/esm/webgl-utils/attribute-utils.js.map +1 -1
  389. package/dist/esm/webgl-utils/constants-to-keys.js +1 -1
  390. package/dist/esm/webgl-utils/constants-to-keys.js.map +1 -1
  391. package/dist/esm/webgl-utils/format-utils.js +1 -1
  392. package/dist/esm/webgl-utils/format-utils.js.map +1 -1
  393. package/dist/esm/{features/check-old-ie.js → webgl-utils/is-old-ie.js} +3 -3
  394. package/dist/esm/webgl-utils/is-old-ie.js.map +1 -0
  395. package/dist/esm/webgl-utils/texture-utils.js +2 -2
  396. package/dist/esm/webgl-utils/texture-utils.js.map +1 -1
  397. package/dist/esm/webgl-utils/typed-array-utils.js +22 -18
  398. package/dist/esm/webgl-utils/typed-array-utils.js.map +1 -1
  399. package/dist/esm/webgl-utils/webgl-info.ts.disabled +135 -0
  400. package/dist/index.d.ts +36 -20
  401. package/dist/index.d.ts.map +1 -1
  402. package/dist/index.js +22 -20
  403. package/dist/index.js.map +1 -1
  404. package/dist/init.d.ts.map +1 -1
  405. package/dist/init.js +11 -8
  406. package/dist/init.js.map +1 -1
  407. package/dist/webgl-utils/attribute-utils.d.ts +1 -1
  408. package/dist/webgl-utils/attribute-utils.js +1 -1
  409. package/dist/webgl-utils/attribute-utils.js.map +1 -1
  410. package/dist/webgl-utils/constants-to-keys.js +1 -1
  411. package/dist/webgl-utils/constants-to-keys.js.map +1 -1
  412. package/dist/webgl-utils/format-utils.d.ts +2 -2
  413. package/dist/webgl-utils/format-utils.js +1 -1
  414. package/dist/webgl-utils/format-utils.js.map +1 -1
  415. package/dist/webgl-utils/is-old-ie.d.ts +2 -0
  416. package/dist/webgl-utils/is-old-ie.d.ts.map +1 -0
  417. package/dist/{features/check-old-ie.js → webgl-utils/is-old-ie.js} +3 -3
  418. package/dist/webgl-utils/is-old-ie.js.map +1 -0
  419. package/dist/webgl-utils/texture-utils.d.ts +12 -8
  420. package/dist/webgl-utils/texture-utils.d.ts.map +1 -1
  421. package/dist/webgl-utils/texture-utils.js +2 -2
  422. package/dist/webgl-utils/texture-utils.js.map +1 -1
  423. package/dist/webgl-utils/typed-array-utils.d.ts +39 -32
  424. package/dist/webgl-utils/typed-array-utils.d.ts.map +1 -1
  425. package/dist/webgl-utils/typed-array-utils.js +22 -18
  426. package/dist/webgl-utils/typed-array-utils.js.map +1 -1
  427. package/dist/webgl-utils/webgl-info.ts.disabled +135 -0
  428. package/package.json +5 -6
  429. package/src/.DS_Store +0 -0
  430. package/src/api/device2.ts +71 -0
  431. package/src/classes/accessor.js +2 -2
  432. package/src/classes/accessor.ts.disabled +1 -1
  433. package/src/classes/clear.ts +9 -4
  434. package/src/classes/copy-and-blit.ts +49 -52
  435. package/src/classes/framebuffer.ts +38 -35
  436. package/src/classes/program-configuration.ts +6 -6
  437. package/src/classes/program.ts +21 -15
  438. package/src/classes/query.ts +6 -6
  439. package/src/classes/renderbuffer-formats.ts +1 -1
  440. package/src/classes/renderbuffer.ts +5 -4
  441. package/src/classes/texture-2d.ts +6 -11
  442. package/src/classes/texture-3d.ts +16 -11
  443. package/src/classes/texture-cube.ts +7 -7
  444. package/src/classes/texture-formats.ts +1 -1
  445. package/src/classes/texture.ts +39 -40
  446. package/src/classes/transform-feedback.ts +14 -13
  447. package/src/classes/uniform-buffer-layout.ts +1 -1
  448. package/src/classes/uniforms.ts +4 -10
  449. package/src/classes/vertex-array-object.ts +10 -14
  450. package/src/classes/vertex-array.ts +2 -3
  451. package/src/classes/webgl-buffer.ts +7 -5
  452. package/src/classes/webgl-resource.ts +20 -18
  453. package/src/classes/webgl-shader.ts +6 -4
  454. package/src/context/context/context-state.ts +39 -0
  455. package/src/context/context/create-context.ts +83 -0
  456. package/src/context/context/device-pixels.ts +147 -0
  457. package/src/context/context/get-canvas.ts +37 -0
  458. package/src/context/context/resize-context.ts +37 -0
  459. package/src/context/context/webgl-checks.ts +49 -0
  460. package/src/context/parameters/unified-parameter-api.ts +127 -0
  461. package/src/context/parameters/webgl-parameter-tables.ts +625 -0
  462. package/src/context/parameters/webgl-parameters.ts +197 -0
  463. package/src/context/polyfill/get-parameter-polyfill.ts +118 -0
  464. package/src/context/polyfill/polyfill-context.ts +98 -0
  465. package/src/context/polyfill/polyfill-table.ts +162 -0
  466. package/src/context/polyfill/polyfill-vertex-array-object.ts +360 -0
  467. package/src/context/state-tracker/deep-array-equal.ts +20 -0
  468. package/src/context/state-tracker/track-context-state.ts +250 -0
  469. package/src/context/state-tracker/with-parameters.ts +50 -0
  470. package/src/debug/debug-uniforms.ts +1 -1
  471. package/src/debug/debug-vertex-array.ts +2 -4
  472. package/src/device/check-glsl-extension.ts +44 -0
  473. package/src/device/device-features.ts +227 -0
  474. package/src/device/device-limits.ts +150 -0
  475. package/src/device/get-device-info.ts +49 -0
  476. package/src/device/webgl-device.ts +406 -0
  477. package/src/index.ts +76 -22
  478. package/src/init.ts +12 -9
  479. package/src/types.ts +1 -1
  480. package/src/webgl-utils/attribute-utils.ts +1 -1
  481. package/src/webgl-utils/constants-to-keys.ts +1 -1
  482. package/src/webgl-utils/format-utils.ts +1 -1
  483. package/src/{features/check-old-ie.ts → webgl-utils/is-old-ie.ts} +3 -3
  484. package/src/webgl-utils/{texture-utils.js → texture-utils.ts} +13 -10
  485. package/src/webgl-utils/{typed-array-utils.js → typed-array-utils.ts} +59 -16
  486. package/src/webgl-utils/webgl-info.ts.disabled +135 -0
  487. package/dist/context/gl-context.d.ts +0 -15
  488. package/dist/context/gl-context.d.ts.map +0 -1
  489. package/dist/context/gl-context.js +0 -32
  490. package/dist/context/gl-context.js.map +0 -1
  491. package/dist/context/luma-context-data.d.ts +0 -31
  492. package/dist/context/luma-context-data.d.ts.map +0 -1
  493. package/dist/context/luma-context-data.js +0 -5
  494. package/dist/context/luma-context-data.js.map +0 -1
  495. package/dist/es5/context/gl-context.js +0 -46
  496. package/dist/es5/context/gl-context.js.map +0 -1
  497. package/dist/es5/context/luma-context-data.js +0 -12
  498. package/dist/es5/context/luma-context-data.js.map +0 -1
  499. package/dist/es5/features/check-glsl-extension.js +0 -40
  500. package/dist/es5/features/check-glsl-extension.js.map +0 -1
  501. package/dist/es5/features/check-old-ie.js +0 -15
  502. package/dist/es5/features/check-old-ie.js.map +0 -1
  503. package/dist/es5/features/features.js +0 -85
  504. package/dist/es5/features/features.js.map +0 -1
  505. package/dist/es5/features/index.js +0 -64
  506. package/dist/es5/features/index.js.map +0 -1
  507. package/dist/es5/features/limits.js +0 -72
  508. package/dist/es5/features/limits.js.map +0 -1
  509. package/dist/es5/features/webgl-features-table.js +0 -84
  510. package/dist/es5/features/webgl-features-table.js.map +0 -1
  511. package/dist/es5/features/webgl-limits-table.js +0 -172
  512. package/dist/es5/features/webgl-limits-table.js.map +0 -1
  513. package/dist/es5/utils/array-utils-flat.js +0 -50
  514. package/dist/es5/utils/array-utils-flat.js.map +0 -1
  515. package/dist/es5/utils/assert.js +0 -13
  516. package/dist/es5/utils/assert.js.map +0 -1
  517. package/dist/es5/utils/check-props.js +0 -50
  518. package/dist/es5/utils/check-props.js.map +0 -1
  519. package/dist/es5/utils/format-value.js +0 -57
  520. package/dist/es5/utils/format-value.js.map +0 -1
  521. package/dist/es5/utils/index.js +0 -68
  522. package/dist/es5/utils/index.js.map +0 -1
  523. package/dist/es5/utils/is-old-ie.js +0 -13
  524. package/dist/es5/utils/is-old-ie.js.map +0 -1
  525. package/dist/es5/utils/load-file.js +0 -43
  526. package/dist/es5/utils/load-file.js.map +0 -1
  527. package/dist/es5/utils/stub-methods.js +0 -25
  528. package/dist/es5/utils/stub-methods.js.map +0 -1
  529. package/dist/es5/utils/utils.js +0 -31
  530. package/dist/es5/utils/utils.js.map +0 -1
  531. package/dist/es5/webgl-utils/texture-utils.d.ts +0 -11
  532. package/dist/es5/webgl-utils/typed-array-utils.d.ts +0 -36
  533. package/dist/esm/context/gl-context.js +0 -32
  534. package/dist/esm/context/gl-context.js.map +0 -1
  535. package/dist/esm/context/luma-context-data.js +0 -5
  536. package/dist/esm/context/luma-context-data.js.map +0 -1
  537. package/dist/esm/features/check-glsl-extension.js +0 -27
  538. package/dist/esm/features/check-glsl-extension.js.map +0 -1
  539. package/dist/esm/features/check-old-ie.js.map +0 -1
  540. package/dist/esm/features/features.js +0 -67
  541. package/dist/esm/features/features.js.map +0 -1
  542. package/dist/esm/features/index.js +0 -5
  543. package/dist/esm/features/index.js.map +0 -1
  544. package/dist/esm/features/limits.js +0 -55
  545. package/dist/esm/features/limits.js.map +0 -1
  546. package/dist/esm/features/webgl-features-table.js +0 -71
  547. package/dist/esm/features/webgl-features-table.js.map +0 -1
  548. package/dist/esm/features/webgl-limits-table.js +0 -161
  549. package/dist/esm/features/webgl-limits-table.js.map +0 -1
  550. package/dist/esm/utils/array-utils-flat.js +0 -39
  551. package/dist/esm/utils/array-utils-flat.js.map +0 -1
  552. package/dist/esm/utils/assert.js +0 -6
  553. package/dist/esm/utils/assert.js.map +0 -1
  554. package/dist/esm/utils/check-props.js +0 -38
  555. package/dist/esm/utils/check-props.js.map +0 -1
  556. package/dist/esm/utils/format-value.js +0 -50
  557. package/dist/esm/utils/format-value.js.map +0 -1
  558. package/dist/esm/utils/index.js +0 -7
  559. package/dist/esm/utils/index.js.map +0 -1
  560. package/dist/esm/utils/is-old-ie.js +0 -5
  561. package/dist/esm/utils/is-old-ie.js.map +0 -1
  562. package/dist/esm/utils/load-file.js +0 -30
  563. package/dist/esm/utils/load-file.js.map +0 -1
  564. package/dist/esm/utils/stub-methods.js +0 -16
  565. package/dist/esm/utils/stub-methods.js.map +0 -1
  566. package/dist/esm/utils/utils.js +0 -20
  567. package/dist/esm/utils/utils.js.map +0 -1
  568. package/dist/esm/webgl-utils/texture-utils.d.ts +0 -11
  569. package/dist/esm/webgl-utils/typed-array-utils.d.ts +0 -36
  570. package/dist/features/check-glsl-extension.d.ts +0 -2
  571. package/dist/features/check-glsl-extension.d.ts.map +0 -1
  572. package/dist/features/check-glsl-extension.js +0 -27
  573. package/dist/features/check-glsl-extension.js.map +0 -1
  574. package/dist/features/check-old-ie.d.ts +0 -2
  575. package/dist/features/check-old-ie.d.ts.map +0 -1
  576. package/dist/features/check-old-ie.js.map +0 -1
  577. package/dist/features/features.d.ts +0 -6
  578. package/dist/features/features.d.ts.map +0 -1
  579. package/dist/features/features.js +0 -67
  580. package/dist/features/features.js.map +0 -1
  581. package/dist/features/index.d.ts +0 -5
  582. package/dist/features/index.d.ts.map +0 -1
  583. package/dist/features/index.js +0 -5
  584. package/dist/features/index.js.map +0 -1
  585. package/dist/features/limits.d.ts +0 -28
  586. package/dist/features/limits.d.ts.map +0 -1
  587. package/dist/features/limits.js +0 -55
  588. package/dist/features/limits.js.map +0 -1
  589. package/dist/features/webgl-features-table.d.ts +0 -30
  590. package/dist/features/webgl-features-table.d.ts.map +0 -1
  591. package/dist/features/webgl-features-table.js +0 -71
  592. package/dist/features/webgl-features-table.js.map +0 -1
  593. package/dist/features/webgl-limits-table.d.ts +0 -161
  594. package/dist/features/webgl-limits-table.d.ts.map +0 -1
  595. package/dist/features/webgl-limits-table.js +0 -161
  596. package/dist/features/webgl-limits-table.js.map +0 -1
  597. package/dist/utils/array-utils-flat.d.ts +0 -9
  598. package/dist/utils/array-utils-flat.d.ts.map +0 -1
  599. package/dist/utils/array-utils-flat.js +0 -39
  600. package/dist/utils/array-utils-flat.js.map +0 -1
  601. package/dist/utils/assert.d.ts +0 -2
  602. package/dist/utils/assert.d.ts.map +0 -1
  603. package/dist/utils/assert.js +0 -6
  604. package/dist/utils/assert.js.map +0 -1
  605. package/dist/utils/check-props.d.ts +0 -2
  606. package/dist/utils/check-props.d.ts.map +0 -1
  607. package/dist/utils/check-props.js +0 -38
  608. package/dist/utils/check-props.js.map +0 -1
  609. package/dist/utils/format-value.d.ts +0 -5
  610. package/dist/utils/format-value.d.ts.map +0 -1
  611. package/dist/utils/format-value.js +0 -50
  612. package/dist/utils/format-value.js.map +0 -1
  613. package/dist/utils/index.d.ts +0 -7
  614. package/dist/utils/index.d.ts.map +0 -1
  615. package/dist/utils/index.js +0 -7
  616. package/dist/utils/index.js.map +0 -1
  617. package/dist/utils/is-old-ie.d.ts +0 -4
  618. package/dist/utils/is-old-ie.d.ts.map +0 -1
  619. package/dist/utils/is-old-ie.js +0 -5
  620. package/dist/utils/is-old-ie.js.map +0 -1
  621. package/dist/utils/load-file.d.ts +0 -4
  622. package/dist/utils/load-file.d.ts.map +0 -1
  623. package/dist/utils/load-file.js +0 -30
  624. package/dist/utils/load-file.js.map +0 -1
  625. package/dist/utils/stub-methods.d.ts +0 -2
  626. package/dist/utils/stub-methods.d.ts.map +0 -1
  627. package/dist/utils/stub-methods.js +0 -16
  628. package/dist/utils/stub-methods.js.map +0 -1
  629. package/dist/utils/utils.d.ts +0 -15
  630. package/dist/utils/utils.d.ts.map +0 -1
  631. package/dist/utils/utils.js +0 -20
  632. package/dist/utils/utils.js.map +0 -1
  633. package/src/context/gl-context.ts +0 -31
  634. package/src/context/luma-context-data.ts +0 -27
  635. package/src/features/check-glsl-extension.ts +0 -34
  636. package/src/features/features.ts +0 -80
  637. package/src/features/index.ts +0 -5
  638. package/src/features/limits.ts +0 -66
  639. package/src/features/webgl-features-table.ts +0 -104
  640. package/src/features/webgl-limits-table.ts +0 -51
  641. package/src/utils/array-utils-flat.ts +0 -56
  642. package/src/utils/assert.ts +0 -7
  643. package/src/utils/check-props.ts +0 -68
  644. package/src/utils/format-value.ts +0 -37
  645. package/src/utils/index.ts +0 -6
  646. package/src/utils/is-old-ie.ts +0 -6
  647. package/src/utils/load-file.ts +0 -40
  648. package/src/utils/stub-methods.ts +0 -20
  649. package/src/utils/utils.ts +0 -35
  650. package/src/webgl-utils/texture-utils.d.ts +0 -11
  651. package/src/webgl-utils/typed-array-utils.d.ts +0 -36
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/classes/vertex-array.ts"],"names":["ERR_ATTRIBUTE_TYPE","MULTI_LOCATION_ATTRIBUTE_REGEXP","VertexArray","constructor","gl","props","id","program","vertexArrayObject","VertexArrayObject","configuration","initialize","Object","seal","delete","buffer","reset","bindOnUse","setProps","elements","elementsAccessor","MAX_ATTRIBUTES","values","Array","fill","accessors","unused","drawParams","setAttributes","attributes","setElementBuffer","clearDrawParams","getDrawParams","_updateDrawParams","assign","bind","locationOrName","value","_setAttribute","bindBuffer","GL","ARRAY_BUFFER","elementBuffer","accessor","setBuffer","appAccessor","target","ELEMENT_ARRAY_BUFFER","location","_resolveLocationAndAccessor","setConstant","arrayValue","size","length","_normalizeConstantArrayValue","enable","unbindBuffers","Buffer","disableVertexAttribArray","handle","vertexAttribPointer","FLOAT","bindBuffers","bindForDraw","vertexCount","instanceCount","func","_setConstantAttributes","valueAccessor","INVALID_RESULT","name","_getAttributeIndex","Number","isFinite","log","once","accessInfo","_getAttributeInfo","currentAccessor","Accessor","resolve","type","attributeName","getAttributeInfo","multiLocation","exec","locationOffset","getAttributeLocation","isArray","ArrayBuffer","isView","constant","Error","elementCount","Math","max","_setConstantAttributeZero","_setConstantAttribute","isSupported","constantAttributeZero","getConstantBuffer","indexType","Uint16Array","indexOffset","isIndexed","isInstanced","indexCount","Infinity","_updateDrawParamsForLocation","getElementCount","offset","divisor","getVertexCount","min","setElements","deprecated"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAGA;;AACA;;AAEA,MAAMA,kBAAkB,GACtB,yEADF;AAMA,MAAMC,+BAA+B,GAAG,2BAAxC;;AAsBe,MAAMC,WAAN,CAAkB;AAmB/BC,EAAAA,WAAW,CAACC,EAAD,EAA4BC,KAA5B,EAAsD;AAAA;AAAA;AAAA,sDAhBnC,EAgBmC;AAAA;AAAA,qDAbzC,EAayC;AAAA,yDAZpB,IAYoB;AAAA,oDATtD,IASsD;AAAA,4DAR9C,IAQ8C;AAAA,kDAPxD,IAOwD;AAAA,kDANxD,IAMwD;AAAA,sDALpD,IAKoD;AAAA,kDAJxD,IAIwD;AAAA,qDAFrD,KAEqD;AAE/D,UAAMC,EAAE,GAAG,CAAAD,KAAK,SAAL,IAAAA,KAAK,WAAL,YAAAA,KAAK,CAAEC,EAAP,KAAc,CAAAD,KAAK,SAAL,IAAAA,KAAK,WAAL,YAAAA,KAAK,CAAEE,OAAP,MAAkBF,KAAlB,aAAkBA,KAAlB,uBAAkBA,KAAK,CAAEE,OAAP,CAAeD,EAAjC,CAAzB;AAGA,SAAKE,iBAAL,GAAyB,IAAIC,0BAAJ,CAAsBL,EAAtB,CAAzB;AAEA,SAAKE,EAAL,GAAUA,EAAV;AACA,SAAKF,EAAL,GAAUA,EAAV;AACA,SAAKM,aAAL,GAAqB,IAArB;AAEA,SAAKC,UAAL,CAAgBN,KAAhB;AACAO,IAAAA,MAAM,CAACC,IAAP,CAAY,IAAZ;AACD;;AAEDC,EAAAA,MAAM,GAAS;AACb,QAAI,KAAKC,MAAT,EAAiB;AACf,WAAKA,MAAL,CAAYD,MAAZ;AACD;;AAED,SAAKN,iBAAL,CAAuBM,MAAvB;AACD;;AAEDH,EAAAA,UAAU,CAACN,KAAD,EAA2B;AACnC,SAAKW,KAAL;AACA,SAAKN,aAAL,GAAqB,IAArB;AACA,SAAKO,SAAL,GAAiB,KAAjB;AACA,WAAO,KAAKC,QAAL,CAAcb,KAAK,IAAI,EAAvB,CAAP;AACD;;AAGDW,EAAAA,KAAK,GAAG;AAGN,SAAKG,QAAL,GAAgB,IAAhB;AACA,SAAKC,gBAAL,GAAwB,IAAxB;AACA,UAAM;AAACC,MAAAA;AAAD,QAAmB,KAAKb,iBAA9B;AACA,SAAKc,MAAL,GAAc,IAAIC,KAAJ,CAAUF,cAAV,EAA0BG,IAA1B,CAA+B,IAA/B,CAAd;AACA,SAAKC,SAAL,GAAiB,IAAIF,KAAJ,CAAUF,cAAV,EAA0BG,IAA1B,CAA+B,IAA/B,CAAjB;AACA,SAAKE,MAAL,GAAc,EAAd;AAGA,SAAKC,UAAL,GAAkB,IAAlB;AAEA,WAAO,IAAP;AACD;;AAEDT,EAAAA,QAAQ,CAACb,KAAD,EAA0B;AAChC,QAAI,aAAaA,KAAjB,EAAwB;AACtB,WAAKK,aAAL,GAAqBL,KAAK,CAACE,OAAN,IAAiBF,KAAK,CAACE,OAAN,CAAcG,aAApD;AACD;;AACD,QAAI,mBAAmBL,KAAvB,EAA8B;AAC5B,WAAKK,aAAL,GAAqBL,KAAK,CAACK,aAA3B;AACD;;AACD,QAAI,gBAAgBL,KAApB,EAA2B;AACzB,WAAKuB,aAAL,CAAmBvB,KAAK,CAACwB,UAAzB;AACD;;AACD,QAAI,cAAcxB,KAAlB,EAAyB;AACvB,WAAKyB,gBAAL,CAAsBzB,KAAK,CAACc,QAA5B;AACD;;AACD,QAAI,eAAed,KAAnB,EAA0B;AAExBA,MAAAA,KAAK,GAAGA,KAAK,CAACY,SAAd;AACD;;AACD,WAAO,IAAP;AACD;;AAGDc,EAAAA,eAAe,GAAS;AACtB,SAAKJ,UAAL,GAAkB,IAAlB;AACD;;AAEDK,EAAAA,aAAa,GAAe;AAE1B,SAAKL,UAAL,GAAkB,KAAKA,UAAL,IAAmB,KAAKM,iBAAL,EAArC;AAEA,WAAO,KAAKN,UAAZ;AACD;;AASDC,EAAAA,aAAa,CAACC,UAAD,EAAmB;AAC9BjB,IAAAA,MAAM,CAACsB,MAAP,CAAc,KAAKL,UAAnB,EAA+BA,UAA/B;AACA,SAAKrB,iBAAL,CAAuB2B,IAAvB,CAA4B,MAAM;AAChC,WAAK,MAAMC,cAAX,IAA6BP,UAA7B,EAAyC;AACvC,cAAMQ,KAAK,GAAGR,UAAU,CAACO,cAAD,CAAxB;;AACA,aAAKE,aAAL,CAAmBF,cAAnB,EAAmCC,KAAnC;AACD;;AAED,WAAKjC,EAAL,CAAQmC,UAAR,CAAmBC,mBAAGC,YAAtB,EAAoC,IAApC;AACD,KAPD;AASA,WAAO,IAAP;AACD;;AAIDX,EAAAA,gBAAgB,CAACY,aAA4B,GAAG,IAAhC,EAAsCC,QAAQ,GAAG,EAAjD,EAA2D;AACzE,SAAKxB,QAAL,GAAgBuB,aAAhB;AACA,SAAKtB,gBAAL,GAAwBuB,QAAxB;AACA,SAAKZ,eAAL;AACA,SAAKvB,iBAAL,CAAuBsB,gBAAvB,CAAwCY,aAAxC,EAAuDC,QAAvD;AAEA,WAAO,IAAP;AACD;;AAGDC,EAAAA,SAAS,CAACR,cAAD,EAAiBrB,MAAjB,EAAiC8B,WAAW,GAAG,EAA/C,EAAyD;AAEhE,QAAI9B,MAAM,CAAC+B,MAAP,KAAkBN,mBAAGO,oBAAzB,EAA+C;AAC7C,WAAKjB,gBAAL,CAAsBf,MAAtB,EAA8B8B,WAA9B;AACA,aAAO,IAAP;AACD;;AAED,UAAM;AAACG,MAAAA,QAAD;AAAWL,MAAAA;AAAX,QAAuB,KAAKM,2BAAL,CAC3Bb,cAD2B,EAE3BrB,MAF2B,EAG3BA,MAAM,CAAC4B,QAHoB,EAI3BE,WAJ2B,CAA7B;;AAOA,QAAIG,QAAQ,IAAI,CAAhB,EAAmB;AACjB,WAAK1B,MAAL,CAAY0B,QAAZ,IAAwBjC,MAAxB;AACA,WAAKU,SAAL,CAAeuB,QAAf,IAA2BL,QAA3B;AACA,WAAKZ,eAAL;AACA,WAAKvB,iBAAL,CAAuBoC,SAAvB,CAAiCI,QAAjC,EAA2CjC,MAA3C,EAAmD4B,QAAnD;AACD;;AAED,WAAO,IAAP;AACD;;AAGDO,EAAAA,WAAW,CAACd,cAAD,EAAiBe,UAAjB,EAA6BN,WAAW,GAAG,EAA3C,EAAqD;AAE9D,UAAM;AAACG,MAAAA,QAAD;AAAWL,MAAAA;AAAX,QAAuB,KAAKM,2BAAL,CAC3Bb,cAD2B,EAE3Be,UAF2B,EAK3B;AAACC,MAAAA,IAAI,EAAED,UAAU,CAACE,MAAlB;AAA0B,SAAGR;AAA7B,KAL2B,CAA7B;;AAQA,QAAIG,QAAQ,IAAI,CAAhB,EAAmB;AACjBG,MAAAA,UAAU,GAAG,KAAK3C,iBAAL,CAAuB8C,4BAAvB,CAAoDH,UAApD,CAAb;AAEA,WAAK7B,MAAL,CAAY0B,QAAZ,IAAwBG,UAAxB;AACA,WAAK1B,SAAL,CAAeuB,QAAf,IAA2BL,QAA3B;AACA,WAAKZ,eAAL;AAMA,WAAKvB,iBAAL,CAAuB+C,MAAvB,CAA8BP,QAA9B,EAAwC,KAAxC;AACD;;AAED,WAAO,IAAP;AACD;;AAIDQ,EAAAA,aAAa,GAAS;AACpB,SAAKhD,iBAAL,CAAuB2B,IAAvB,CAA4B,MAAM;AAChC,UAAI,KAAKhB,QAAT,EAAmB;AACjB,aAAKX,iBAAL,CAAuBsB,gBAAvB,CAAwC,IAAxC;AACD;;AAMD,WAAKf,MAAL,GAAc,KAAKA,MAAL,IAAe,IAAI0C,oBAAJ,CAAW,KAAKrD,EAAhB,EAAoB;AAACuC,QAAAA,QAAQ,EAAE;AAACS,UAAAA,IAAI,EAAE;AAAP;AAAX,OAApB,CAA7B;;AAEA,WAAK,IAAIJ,QAAQ,GAAG,CAApB,EAAuBA,QAAQ,GAAG,KAAKxC,iBAAL,CAAuBa,cAAzD,EAAyE2B,QAAQ,EAAjF,EAAqF;AACnF,YAAI,KAAK1B,MAAL,CAAY0B,QAAZ,aAAiCS,oBAArC,EAA6C;AAC3C,eAAKrD,EAAL,CAAQsD,wBAAR,CAAiCV,QAAjC;AACA,eAAK5C,EAAL,CAAQmC,UAAR,CAAmBC,mBAAGC,YAAtB,EAAoC,KAAK1B,MAAL,CAAY4C,MAAhD;AACA,eAAKvD,EAAL,CAAQwD,mBAAR,CAA4BZ,QAA5B,EAAsC,CAAtC,EAAyCR,mBAAGqB,KAA5C,EAAmD,KAAnD,EAA0D,CAA1D,EAA6D,CAA7D;AACD;AACF;AACF,KAlBD;AAmBA,WAAO,IAAP;AACD;;AAIDC,EAAAA,WAAW,GAAS;AAClB,SAAKtD,iBAAL,CAAuB2B,IAAvB,CAA4B,MAAM;AAChC,UAAI,KAAKhB,QAAT,EAAmB;AACjB,aAAKW,gBAAL,CAAsB,KAAKX,QAA3B;AACD;;AAED,WAAK,IAAI6B,QAAQ,GAAG,CAApB,EAAuBA,QAAQ,GAAG,KAAKxC,iBAAL,CAAuBa,cAAzD,EAAyE2B,QAAQ,EAAjF,EAAqF;AACnF,cAAMjC,MAAM,GAAG,KAAKO,MAAL,CAAY0B,QAAZ,CAAf;;AACA,YAAIjC,MAAM,YAAY0C,oBAAtB,EAA8B;AAC5B,eAAKb,SAAL,CAAeI,QAAf,EAAyBjC,MAAzB;AACD;AACF;AACF,KAXD;AAYA,WAAO,IAAP;AACD;;AAMDgD,EAAAA,WAAW,CAACC,WAAD,EAAcC,aAAd,EAA6BC,IAA7B,EAAmC;AAC5C,QAAI7B,KAAJ;AAEA,SAAK7B,iBAAL,CAAuB2B,IAAvB,CAA4B,MAAM;AAGhC,WAAKgC,sBAAL,CAA4BH,WAA5B,EAAyCC,aAAzC;;AAEA5B,MAAAA,KAAK,GAAG6B,IAAI,EAAZ;AACD,KAND;AAQA,WAAO7B,KAAP;AACD;;AAKDY,EAAAA,2BAA2B,CAACb,cAAD,EAAiBC,KAAjB,EAAwB+B,aAAxB,EAAuCvB,WAAvC,EAAoD;AAC7E,UAAMwB,cAAc,GAAG;AACrBrB,MAAAA,QAAQ,EAAE,CAAC,CADU;AAErBL,MAAAA,QAAQ,EAAE;AAFW,KAAvB;;AAKA,UAAM;AAACK,MAAAA,QAAD;AAAWsB,MAAAA;AAAX,QAAmB,KAAKC,kBAAL,CAAwBnC,cAAxB,CAAzB;;AACA,QAAI,CAACoC,MAAM,CAACC,QAAP,CAAgBzB,QAAhB,CAAD,IAA8BA,QAAQ,GAAG,CAA7C,EAAgD;AAC9C,WAAKtB,MAAL,CAAYU,cAAZ,IAA8BC,KAA9B;;AACAqC,mBAAIC,IAAJ,CAAS,CAAT,EAAY,6BAAsBvC,cAAtB,iBAA2C,KAAK9B,EAAhD,CAAZ;;AACA,aAAO+D,cAAP;AACD;;AAED,UAAMO,UAAU,GAAG,KAAKC,iBAAL,CAAuBP,IAAI,IAAItB,QAA/B,CAAnB;;AAIA,QAAI,CAAC4B,UAAL,EAAiB;AACf,aAAOP,cAAP;AACD;;AAGD,UAAMS,eAAe,GAAG,KAAKrD,SAAL,CAAeuB,QAAf,KAA4B,EAApD;;AACA,UAAML,QAAQ,GAAGoC,kBAASC,OAAT,CACfJ,UAAU,CAACjC,QADI,EAEfmC,eAFe,EAGfV,aAHe,EAIfvB,WAJe,CAAjB;;AAOA,UAAM;AAACO,MAAAA,IAAD;AAAO6B,MAAAA;AAAP,QAAetC,QAArB;AACA,uBAAO6B,MAAM,CAACC,QAAP,CAAgBrB,IAAhB,KAAyBoB,MAAM,CAACC,QAAP,CAAgBQ,IAAhB,CAAhC;AAEA,WAAO;AAACjC,MAAAA,QAAD;AAAWL,MAAAA;AAAX,KAAP;AACD;;AAEDkC,EAAAA,iBAAiB,CAACK,aAAD,EAAgB;AAC/B,WAAO,KAAKxE,aAAL,IAAsB,KAAKA,aAAL,CAAmByE,gBAAnB,CAAoCD,aAApC,CAA7B;AACD;;AAEDX,EAAAA,kBAAkB,CAACnC,cAAD,EAAiB;AACjC,UAAMY,QAAQ,GAAGwB,MAAM,CAACpC,cAAD,CAAvB;;AACA,QAAIoC,MAAM,CAACC,QAAP,CAAgBzB,QAAhB,CAAJ,EAA+B;AAC7B,aAAO;AAACA,QAAAA;AAAD,OAAP;AACD;;AAED,UAAMoC,aAAa,GAAGnF,+BAA+B,CAACoF,IAAhC,CAAqCjD,cAArC,CAAtB;AACA,UAAMkC,IAAI,GAAGc,aAAa,GAAGA,aAAa,CAAC,CAAD,CAAhB,GAAsBhD,cAAhD;AACA,UAAMkD,cAAc,GAAGF,aAAa,GAAGZ,MAAM,CAACY,aAAa,CAAC,CAAD,CAAd,CAAT,GAA8B,CAAlE;;AAEA,QAAI,KAAK1E,aAAT,EAAwB;AACtB,aAAO;AACLsC,QAAAA,QAAQ,EAAE,KAAKtC,aAAL,CAAmB6E,oBAAnB,CAAwCjB,IAAxC,IAAgDgB,cADrD;AAELhB,QAAAA;AAFK,OAAP;AAID;;AAED,WAAO;AAACtB,MAAAA,QAAQ,EAAE,CAAC;AAAZ,KAAP;AACD;;AAEDV,EAAAA,aAAa,CAACF,cAAD,EAAiBC,KAAjB,EAA8B;AACzC,QAAIA,KAAK,YAAYoB,oBAArB,EAA6B;AAE3B,WAAKb,SAAL,CAAeR,cAAf,EAA+BC,KAA/B;AACD,KAHD,MAGO,IAAId,KAAK,CAACiE,OAAN,CAAcnD,KAAd,KAAwBA,KAAK,CAACgB,MAA9B,IAAwChB,KAAK,CAAC,CAAD,CAAL,YAAoBoB,oBAAhE,EAAwE;AAE7E,YAAM1C,MAAM,GAAGsB,KAAK,CAAC,CAAD,CAApB;AACA,YAAMM,QAAQ,GAAGN,KAAK,CAAC,CAAD,CAAtB;AACA,WAAKO,SAAL,CAAeR,cAAf,EAA+BrB,MAA/B,EAAuC4B,QAAvC;AACD,KALM,MAKA,IAAI8C,WAAW,CAACC,MAAZ,CAAmBrD,KAAnB,KAA6Bd,KAAK,CAACiE,OAAN,CAAcnD,KAAd,CAAjC,EAAuD;AAE5D,YAAMsD,QAAQ,GAAGtD,KAAjB;AACA,WAAKa,WAAL,CAAiBd,cAAjB,EAAiCuD,QAAjC;AACD,KAJM,MAIA,IAAItD,KAAK,CAACtB,MAAN,YAAwB0C,oBAA5B,EAAoC;AAIzC,YAAMd,QAAQ,GAAGN,KAAjB;AACA,WAAKO,SAAL,CAAeR,cAAf,EAA+BO,QAAQ,CAAC5B,MAAxC,EAAgD4B,QAAhD;AACD,KANM,MAMA;AACL,YAAM,IAAIiD,KAAJ,CAAU5F,kBAAV,CAAN;AACD;AACF;;AAKDmE,EAAAA,sBAAsB,CAACH,WAAD,EAAcC,aAAd,EAAmC;AAEvD,UAAM4B,YAAY,GAAGC,IAAI,CAACC,GAAL,CAAS/B,WAAW,GAAG,CAAvB,EAA0BC,aAAa,GAAG,CAA1C,CAArB;AACA,QAAI0B,QAAQ,GAAG,KAAKrE,MAAL,CAAY,CAAZ,CAAf;;AACA,QAAImE,WAAW,CAACC,MAAZ,CAAmBC,QAAnB,CAAJ,EAAkC;AAChC,WAAKK,yBAAL,CAA+BL,QAA/B,EAAyCE,YAAzC;AACD;;AAED,SAAK,IAAI7C,QAAQ,GAAG,CAApB,EAAuBA,QAAQ,GAAG,KAAKxC,iBAAL,CAAuBa,cAAzD,EAAyE2B,QAAQ,EAAjF,EAAqF;AACnF2C,MAAAA,QAAQ,GAAG,KAAKrE,MAAL,CAAY0B,QAAZ,CAAX;;AACA,UAAIyC,WAAW,CAACC,MAAZ,CAAmBC,QAAnB,CAAJ,EAAkC;AAChC,aAAKM,qBAAL,CAA2BjD,QAA3B,EAAqC2C,QAArC;AACD;AACF;AACF;;AAEDK,EAAAA,yBAAyB,CAACL,QAAD,EAAWE,YAAX,EAAuC;AAC9D,QAAIpF,2BAAkByF,WAAlB,CAA8B,KAAK9F,EAAnC,EAAuC;AAAC+F,MAAAA,qBAAqB,EAAE;AAAxB,KAAvC,CAAJ,EAA2E;AACzE,WAAKF,qBAAL,CAA2B,CAA3B,EAA8BN,QAA9B;;AACA;AACD;;AAGD,UAAM5E,MAAM,GAAG,KAAKP,iBAAL,CAAuB4F,iBAAvB,CAAyCP,YAAzC,EAAuDF,QAAvD,CAAf;AAGA,SAAKnF,iBAAL,CAAuBoC,SAAvB,CAAiC,CAAjC,EAAoC7B,MAApC,EAA4C,KAAKU,SAAL,CAAe,CAAf,CAA5C;AACD;;AAEDwE,EAAAA,qBAAqB,CAACjD,QAAD,EAAW2C,QAAX,EAA2B;AAC9ClF,+BAAkByC,WAAlB,CAA8B,KAAK9C,EAAnC,EAAuC4C,QAAvC,EAAiD2C,QAAjD;AACD;;AAGD1D,EAAAA,iBAAiB,GAAe;AAC9B,UAAMN,UAAU,GAAG;AACjBkE,MAAAA,YAAY,EAAE,CADG;AAEjBQ,MAAAA,SAAS,EAAEC,WAFM;AAGjBC,MAAAA,WAAW,EAAE,CAHI;AAIjBC,MAAAA,SAAS,EAAE,KAJM;AAKjBC,MAAAA,WAAW,EAAE,KALI;AAMjBC,MAAAA,UAAU,EAAEC,QANK;AAOjB3C,MAAAA,WAAW,EAAE2C,QAPI;AAQjB1C,MAAAA,aAAa,EAAE0C;AARE,KAAnB;;AAWA,SAAK,IAAI3D,QAAQ,GAAG,CAApB,EAAuBA,QAAQ,GAAG,KAAKxC,iBAAL,CAAuBa,cAAzD,EAAyE2B,QAAQ,EAAjF,EAAqF;AACnF,WAAK4D,4BAAL,CAAkCjF,UAAlC,EAA8CqB,QAA9C;AACD;;AAED,QAAI,KAAK7B,QAAT,EAAmB;AAGjBQ,MAAAA,UAAU,CAACkE,YAAX,GAA0B,KAAK1E,QAAL,CAAc0F,eAAd,CAA8B,KAAK1F,QAAL,CAAcwB,QAA5C,CAA1B;AACAhB,MAAAA,UAAU,CAAC6E,SAAX,GAAuB,IAAvB;AACA7E,MAAAA,UAAU,CAAC0E,SAAX,GAAuB,KAAKjF,gBAAL,CAAsB6D,IAAtB,IAA8B,KAAK9D,QAAL,CAAcwB,QAAd,CAAuBsC,IAA5E;AACAtD,MAAAA,UAAU,CAAC4E,WAAX,GAAyB,KAAKnF,gBAAL,CAAsB0F,MAAtB,IAAgC,CAAzD;AACD;;AAGD,QAAInF,UAAU,CAAC+E,UAAX,KAA0BC,QAA9B,EAAwC;AACtChF,MAAAA,UAAU,CAAC+E,UAAX,GAAwB,CAAxB;AACD;;AACD,QAAI/E,UAAU,CAACqC,WAAX,KAA2B2C,QAA/B,EAAyC;AACvChF,MAAAA,UAAU,CAACqC,WAAX,GAAyB,CAAzB;AACD;;AACD,QAAIrC,UAAU,CAACsC,aAAX,KAA6B0C,QAAjC,EAA2C;AACzChF,MAAAA,UAAU,CAACsC,aAAX,GAA2B,CAA3B;AACD;;AAED,WAAOtC,UAAP;AACD;;AAEDiF,EAAAA,4BAA4B,CAACjF,UAAD,EAAyBqB,QAAzB,EAAyC;AACnE,UAAMX,KAAK,GAAG,KAAKf,MAAL,CAAY0B,QAAZ,CAAd;AACA,UAAML,QAAQ,GAAG,KAAKlB,SAAL,CAAeuB,QAAf,CAAjB;;AAEA,QAAI,CAACX,KAAL,EAAY;AACV;AACD;;AAGD,UAAM;AAAC0E,MAAAA;AAAD,QAAYpE,QAAlB;AACA,UAAM8D,WAAW,GAAGM,OAAO,GAAG,CAA9B;AACApF,IAAAA,UAAU,CAAC8E,WAAX,GAAyB9E,UAAU,CAAC8E,WAAX,IAA0BA,WAAnD;;AAEA,QAAIpE,KAAK,YAAYoB,oBAArB,EAA6B;AAC3B,YAAM1C,MAAM,GAAGsB,KAAf;;AAEA,UAAIoE,WAAJ,EAAiB;AAEf,cAAMxC,aAAa,GAAGlD,MAAM,CAACiG,cAAP,CAAsBrE,QAAtB,CAAtB;AACAhB,QAAAA,UAAU,CAACsC,aAAX,GAA2B6B,IAAI,CAACmB,GAAL,CAAStF,UAAU,CAACsC,aAApB,EAAmCA,aAAnC,CAA3B;AACD,OAJD,MAIO;AAEL,cAAMD,WAAW,GAAGjD,MAAM,CAACiG,cAAP,CAAsBrE,QAAtB,CAApB;AACAhB,QAAAA,UAAU,CAACqC,WAAX,GAAyB8B,IAAI,CAACmB,GAAL,CAAStF,UAAU,CAACqC,WAApB,EAAiCA,WAAjC,CAAzB;AACD;AACF;AACF;;AAIDkD,EAAAA,WAAW,CAACxE,aAAa,GAAG,IAAjB,EAAuBC,QAAQ,GAAG,EAAlC,EAAsC;AAC/C+B,iBAAIyC,UAAJ,CAAe,aAAf,EAA8B,kBAA9B;;AACA,WAAO,KAAKrF,gBAAL,CAAsBY,aAAtB,EAAqCC,QAArC,CAAP;AACD;;AAxb8B","sourcesContent":["import GL from '@luma.gl/constants';\nimport {log} from '@luma.gl/gltools';\nimport Accessor from './accessor';\nimport Buffer from './webgl-buffer';\nimport Program from './program'; \nimport ProgramConfiguration from './program-configuration';\nimport VertexArrayObject, {VertexArrayObjectProps} from './vertex-array-object';\nimport {assert, stubRemovedMethods} from '../utils';\n\nconst ERR_ATTRIBUTE_TYPE =\n 'VertexArray: attributes must be Buffers or constants (i.e. typed array)';\n\n// This is done to support mat type attributes.\n// See section \"Notes about setting mat type attributes\"\n// in vertex-array.md\nconst MULTI_LOCATION_ATTRIBUTE_REGEXP = /^(.+)__LOCATION_([0-9]+)$/;\n\nexport type VertexArrayProps = {\n id?: string;\n program?: Program;\n configuration?: ProgramConfiguration;\n attributes?: any[];\n elements?: any;\n bindOnUse?: boolean;\n};\n\nexport type DrawParams = {\n elementCount: number;\n indexType: Uint16ArrayConstructor | Uint32ArrayConstructor;\n indexOffset: number;\n isIndexed: boolean;\n isInstanced: boolean;\n indexCount: number;\n vertexCount: number;\n instanceCount: number;\n};\n\nexport default class VertexArray {\n id: string;\n gl: WebGLRenderingContext;\n readonly attributes: object = {};\n\n vertexArrayObject: VertexArrayObject;\n accessors: Accessor[] = [];\n configuration: ProgramConfiguration | null = null;\n\n // Extracted information\n elements = null;\n elementsAccessor = null;\n values = null;\n unused = null;\n drawParams = null;\n buffer = null; // For attribute 0 on desktops, and created when unbinding buffers\n \n bindOnUse = false;\n\n constructor(gl: WebGLRenderingContext, props?: VertexArrayProps) {\n // Use program's id if program is supplied but no id is supplied\n const id = props?.id || (props?.program && props?.program.id);\n // super(gl, Object.assign({}, props, {id}));\n\n this.vertexArrayObject = new VertexArrayObject(gl);\n\n this.id = id;\n this.gl = gl;\n this.configuration = null;\n\n this.initialize(props);\n Object.seal(this);\n }\n\n delete(): void {\n if (this.buffer) {\n this.buffer.delete();\n }\n\n this.vertexArrayObject.delete();\n }\n\n initialize(props?: VertexArrayProps) {\n this.reset();\n this.configuration = null;\n this.bindOnUse = false;\n return this.setProps(props || {});\n }\n\n // Resets all attributes (to default valued constants)\n reset() {\n // this.vertexArrayObject.reset();\n\n this.elements = null;\n this.elementsAccessor = null;\n const {MAX_ATTRIBUTES} = this.vertexArrayObject;\n this.values = new Array(MAX_ATTRIBUTES).fill(null);\n this.accessors = new Array(MAX_ATTRIBUTES).fill(null);\n this.unused = {};\n\n // Auto detects draw params\n this.drawParams = null;\n\n return this;\n }\n\n setProps(props: VertexArrayProps) {\n if ('program' in props) {\n this.configuration = props.program && props.program.configuration;\n }\n if ('configuration' in props) {\n this.configuration = props.configuration;\n }\n if ('attributes' in props) {\n this.setAttributes(props.attributes);\n }\n if ('elements' in props) {\n this.setElementBuffer(props.elements);\n }\n if ('bindOnUse' in props) {\n // @ts-expect-error\n props = props.bindOnUse;\n }\n return this;\n }\n\n // Automatically called if buffers changed through VertexArray API\n clearDrawParams(): void {\n this.drawParams = null;\n }\n\n getDrawParams(): DrawParams {\n // Auto deduced draw parameters\n this.drawParams = this.drawParams || this._updateDrawParams();\n\n return this.drawParams;\n }\n\n // Set (bind) an array or map of vertex array buffers, either in numbered or named locations.\n // For names that are not present in `location`, the supplied buffers will be ignored.\n // if a single buffer of type GL.ELEMENT_ARRAY_BUFFER is present, it will be set as elements\n // Signatures:\n // {attributeName: buffer}\n // {attributeName: [buffer, accessor]}\n // {attributeName: (typed) array} => constant\n setAttributes(attributes): this {\n Object.assign(this.attributes, attributes);\n this.vertexArrayObject.bind(() => {\n for (const locationOrName in attributes) {\n const value = attributes[locationOrName];\n this._setAttribute(locationOrName, value);\n }\n // Make sure we don't leave any bindings\n this.gl.bindBuffer(GL.ARRAY_BUFFER, null);\n });\n\n return this;\n }\n\n // Set (bind) an elements buffer, for indexed rendering.\n // Must be a Buffer bound to GL.ELEMENT_ARRAY_BUFFER. Constants not supported\n setElementBuffer(elementBuffer: Buffer | null = null, accessor = {}): this {\n this.elements = elementBuffer; // Save value for debugging\n this.elementsAccessor = accessor;\n this.clearDrawParams();\n this.vertexArrayObject.setElementBuffer(elementBuffer, accessor);\n\n return this;\n }\n\n // Set a location in vertex attributes array to a buffer\n setBuffer(locationOrName, buffer: Buffer, appAccessor = {}): this {\n // Check target\n if (buffer.target === GL.ELEMENT_ARRAY_BUFFER) {\n this.setElementBuffer(buffer, appAccessor);\n return this;\n }\n\n const {location, accessor} = this._resolveLocationAndAccessor(\n locationOrName,\n buffer,\n buffer.accessor,\n appAccessor\n );\n\n if (location >= 0) {\n this.values[location] = buffer;\n this.accessors[location] = accessor;\n this.clearDrawParams();\n this.vertexArrayObject.setBuffer(location, buffer, accessor);\n }\n\n return this;\n }\n\n // Set attribute to constant value (small typed array corresponding to one vertex' worth of data)\n setConstant(locationOrName, arrayValue, appAccessor = {}): this {\n // @ts-expect-error\n const {location, accessor} = this._resolveLocationAndAccessor(\n locationOrName,\n arrayValue,\n // Ensure that size isn't taken from program for multi-column\n // attributes\n {size: arrayValue.length, ...appAccessor}\n );\n\n if (location >= 0) {\n arrayValue = this.vertexArrayObject._normalizeConstantArrayValue(arrayValue);\n\n this.values[location] = arrayValue;\n this.accessors[location] = accessor;\n this.clearDrawParams();\n\n // NOTE: We set the actual constant value later on bind. We can't set the value now since\n // constants are global and affect all other VertexArrays that have disabled attributes\n // in the same location.\n // We do disable the attribute which makes it use the global constant value at that location\n this.vertexArrayObject.enable(location, false);\n }\n\n return this;\n }\n\n // Workaround for Chrome TransformFeedback binding issue\n // If required, unbind temporarily to avoid conflicting with TransformFeedback\n unbindBuffers(): this {\n this.vertexArrayObject.bind(() => {\n if (this.elements) {\n this.vertexArrayObject.setElementBuffer(null);\n }\n\n // Chrome does not like buffers that are bound to several binding points,\n // so we need to offer and unbind facility\n // WebGL offers disabling, but no clear way to set a VertexArray buffer to `null`\n // So we just bind all the attributes to the dummy \"attribute zero\" buffer\n this.buffer = this.buffer || new Buffer(this.gl, {accessor: {size: 4}});\n\n for (let location = 0; location < this.vertexArrayObject.MAX_ATTRIBUTES; location++) {\n if (this.values[location] instanceof Buffer) {\n this.gl.disableVertexAttribArray(location);\n this.gl.bindBuffer(GL.ARRAY_BUFFER, this.buffer.handle);\n this.gl.vertexAttribPointer(location, 1, GL.FLOAT, false, 0, 0);\n }\n }\n });\n return this;\n }\n\n // Workaround for Chrome TransformFeedback binding issue\n // If required, rebind rebind after temporary unbind\n bindBuffers(): this {\n this.vertexArrayObject.bind(() => {\n if (this.elements) {\n this.setElementBuffer(this.elements);\n }\n\n for (let location = 0; location < this.vertexArrayObject.MAX_ATTRIBUTES; location++) {\n const buffer = this.values[location];\n if (buffer instanceof Buffer) {\n this.setBuffer(location, buffer);\n }\n }\n });\n return this;\n }\n\n // Bind for use\n // When a vertex array is about to be used, we must:\n // - Set constant attributes (since these are stored on the context and reset on bind)\n // - Check if we need to initialize the buffer\n bindForDraw(vertexCount, instanceCount, func) {\n let value;\n\n this.vertexArrayObject.bind(() => {\n // Make sure that any constant attributes are updated (stored on the context, not the VAO)\n // Also handles attribute 0\n this._setConstantAttributes(vertexCount, instanceCount);\n\n value = func();\n });\n\n return value;\n }\n\n // PRIVATE\n\n // Resolve locations and accessors\n _resolveLocationAndAccessor(locationOrName, value, valueAccessor, appAccessor) {\n const INVALID_RESULT = {\n location: -1,\n accessor: null\n };\n\n const {location, name} = this._getAttributeIndex(locationOrName);\n if (!Number.isFinite(location) || location < 0) {\n this.unused[locationOrName] = value;\n log.once(3, () => `unused value ${locationOrName} in ${this.id}`)();\n return INVALID_RESULT;\n }\n\n const accessInfo = this._getAttributeInfo(name || location);\n\n // Attribute location wasn't directly found.\n // Likely due to multi-location attributes (e.g. matrix)\n if (!accessInfo) {\n return INVALID_RESULT;\n }\n\n // Resolve the partial accessors into a final accessor\n const currentAccessor = this.accessors[location] || {};\n const accessor = Accessor.resolve(\n accessInfo.accessor,\n currentAccessor,\n valueAccessor,\n appAccessor\n );\n\n const {size, type} = accessor;\n assert(Number.isFinite(size) && Number.isFinite(type));\n\n return {location, accessor};\n }\n\n _getAttributeInfo(attributeName) {\n return this.configuration && this.configuration.getAttributeInfo(attributeName);\n }\n\n _getAttributeIndex(locationOrName) {\n const location = Number(locationOrName);\n if (Number.isFinite(location)) {\n return {location};\n }\n\n const multiLocation = MULTI_LOCATION_ATTRIBUTE_REGEXP.exec(locationOrName);\n const name = multiLocation ? multiLocation[1] : locationOrName;\n const locationOffset = multiLocation ? Number(multiLocation[2]) : 0;\n\n if (this.configuration) {\n return {\n location: this.configuration.getAttributeLocation(name) + locationOffset,\n name\n };\n }\n\n return {location: -1};\n }\n\n _setAttribute(locationOrName, value): void {\n if (value instanceof Buffer) {\n // Signature: {attributeName: Buffer}\n this.setBuffer(locationOrName, value);\n } else if (Array.isArray(value) && value.length && value[0] instanceof Buffer) {\n // Signature: {attributeName: [buffer, accessor]}\n const buffer = value[0];\n const accessor = value[1];\n this.setBuffer(locationOrName, buffer, accessor);\n } else if (ArrayBuffer.isView(value) || Array.isArray(value)) {\n // Signature: {attributeName: constant}, constant == short (typed) array\n const constant = value;\n this.setConstant(locationOrName, constant);\n } else if (value.buffer instanceof Buffer) {\n // luma.gl v7: Support accessor objects with 'buffer' field\n // for interleaved data\n // Signature: {attributeName: {...accessor, buffer}}\n const accessor = value;\n this.setBuffer(locationOrName, accessor.buffer, accessor);\n } else {\n throw new Error(ERR_ATTRIBUTE_TYPE);\n }\n }\n\n // Updates all constant attribute values (constants are used when vertex attributes are disabled).\n // This needs to be done repeatedly since in contrast to buffer bindings,\n // constants are stored on the WebGL context, not the VAO\n _setConstantAttributes(vertexCount, instanceCount): void {\n // TODO - use accessor to determine what length to use\n const elementCount = Math.max(vertexCount | 0, instanceCount | 0);\n let constant = this.values[0];\n if (ArrayBuffer.isView(constant)) {\n this._setConstantAttributeZero(constant, elementCount);\n }\n\n for (let location = 1; location < this.vertexArrayObject.MAX_ATTRIBUTES; location++) {\n constant = this.values[location];\n if (ArrayBuffer.isView(constant)) {\n this._setConstantAttribute(location, constant);\n }\n }\n }\n\n _setConstantAttributeZero(constant, elementCount: number): void {\n if (VertexArrayObject.isSupported(this.gl, {constantAttributeZero: true})) {\n this._setConstantAttribute(0, constant);\n return;\n }\n\n // Get a dummy buffer populated with repeated constants\n const buffer = this.vertexArrayObject.getConstantBuffer(elementCount, constant);\n\n // Set the buffer on location 0\n this.vertexArrayObject.setBuffer(0, buffer, this.accessors[0]);\n }\n\n _setConstantAttribute(location, constant): void {\n VertexArrayObject.setConstant(this.gl, location, constant);\n }\n\n // Walks the buffers and updates draw parameters\n _updateDrawParams(): DrawParams {\n const drawParams = {\n elementCount: 0,\n indexType: Uint16Array,\n indexOffset: 0,\n isIndexed: false,\n isInstanced: false,\n indexCount: Infinity,\n vertexCount: Infinity,\n instanceCount: Infinity\n };\n\n for (let location = 0; location < this.vertexArrayObject.MAX_ATTRIBUTES; location++) {\n this._updateDrawParamsForLocation(drawParams, location);\n }\n\n if (this.elements) {\n // indexing is autodetected - buffer with target GL.ELEMENT_ARRAY_BUFFER\n // index type is saved for drawElement calls\n drawParams.elementCount = this.elements.getElementCount(this.elements.accessor);\n drawParams.isIndexed = true;\n drawParams.indexType = this.elementsAccessor.type || this.elements.accessor.type;\n drawParams.indexOffset = this.elementsAccessor.offset || 0;\n }\n\n // Post-calculation checks\n if (drawParams.indexCount === Infinity) {\n drawParams.indexCount = 0;\n }\n if (drawParams.vertexCount === Infinity) {\n drawParams.vertexCount = 0;\n }\n if (drawParams.instanceCount === Infinity) {\n drawParams.instanceCount = 0;\n }\n\n return drawParams;\n }\n\n _updateDrawParamsForLocation(drawParams: DrawParams, location): void {\n const value = this.values[location];\n const accessor = this.accessors[location];\n\n if (!value) {\n return;\n }\n\n // Check if instanced (whether buffer or constant)\n const {divisor} = accessor;\n const isInstanced = divisor > 0;\n drawParams.isInstanced = drawParams.isInstanced || isInstanced;\n\n if (value instanceof Buffer) {\n const buffer = value;\n\n if (isInstanced) {\n // instance attribute\n const instanceCount = buffer.getVertexCount(accessor);\n drawParams.instanceCount = Math.min(drawParams.instanceCount, instanceCount);\n } else {\n // normal attribute\n const vertexCount = buffer.getVertexCount(accessor);\n drawParams.vertexCount = Math.min(drawParams.vertexCount, vertexCount);\n }\n }\n }\n\n // DEPRECATED in v6.x - but not warnings not properly implemented\n\n setElements(elementBuffer = null, accessor = {}) {\n log.deprecated('setElements', 'setElementBuffer')();\n return this.setElementBuffer(elementBuffer, accessor);\n }\n}\n"],"file":"vertex-array.js"}
1
+ {"version":3,"sources":["../../../src/classes/vertex-array.ts"],"names":["ERR_ATTRIBUTE_TYPE","MULTI_LOCATION_ATTRIBUTE_REGEXP","VertexArray","gl","props","id","program","vertexArrayObject","VertexArrayObject","configuration","initialize","Object","seal","buffer","delete","reset","bindOnUse","setProps","elements","elementsAccessor","MAX_ATTRIBUTES","values","Array","fill","accessors","unused","drawParams","setAttributes","attributes","setElementBuffer","_updateDrawParams","assign","bind","locationOrName","value","_setAttribute","bindBuffer","GL","ARRAY_BUFFER","elementBuffer","accessor","clearDrawParams","appAccessor","target","ELEMENT_ARRAY_BUFFER","_resolveLocationAndAccessor","location","setBuffer","arrayValue","size","length","_normalizeConstantArrayValue","enable","Buffer","disableVertexAttribArray","handle","vertexAttribPointer","FLOAT","vertexCount","instanceCount","func","_setConstantAttributes","valueAccessor","INVALID_RESULT","_getAttributeIndex","name","Number","isFinite","log","once","accessInfo","_getAttributeInfo","currentAccessor","Accessor","resolve","type","attributeName","getAttributeInfo","multiLocation","exec","locationOffset","getAttributeLocation","isArray","ArrayBuffer","isView","constant","setConstant","Error","elementCount","Math","max","_setConstantAttributeZero","_setConstantAttribute","isSupported","constantAttributeZero","getConstantBuffer","indexType","Uint16Array","indexOffset","isIndexed","isInstanced","indexCount","Infinity","_updateDrawParamsForLocation","getElementCount","offset","divisor","getVertexCount","min","deprecated"],"mappings":"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","sourcesContent":["import {log, assert} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport Accessor from './accessor';\nimport Buffer from './webgl-buffer';\nimport Program from './program'; \nimport ProgramConfiguration from './program-configuration';\nimport VertexArrayObject, {VertexArrayObjectProps} from './vertex-array-object';\n\nconst ERR_ATTRIBUTE_TYPE =\n 'VertexArray: attributes must be Buffers or constants (i.e. typed array)';\n\n// This is done to support mat type attributes.\n// See section \"Notes about setting mat type attributes\"\n// in vertex-array.md\nconst MULTI_LOCATION_ATTRIBUTE_REGEXP = /^(.+)__LOCATION_([0-9]+)$/;\n\nexport type VertexArrayProps = {\n id?: string;\n program?: Program;\n configuration?: ProgramConfiguration;\n attributes?: Record<string, any>;\n elements?: any;\n bindOnUse?: boolean;\n};\n\nexport type DrawParams = {\n elementCount: number;\n indexType: Uint16ArrayConstructor | Uint32ArrayConstructor;\n indexOffset: number;\n isIndexed: boolean;\n isInstanced: boolean;\n indexCount: number;\n vertexCount: number;\n instanceCount: number;\n};\n\nexport default class VertexArray {\n id: string;\n gl: WebGLRenderingContext;\n readonly attributes: object = {};\n\n vertexArrayObject: VertexArrayObject;\n accessors: Accessor[] = [];\n configuration: ProgramConfiguration | null = null;\n\n // Extracted information\n elements = null;\n elementsAccessor = null;\n values = null;\n unused = null;\n drawParams = null;\n buffer = null; // For attribute 0 on desktops, and created when unbinding buffers\n \n bindOnUse = false;\n\n constructor(gl: WebGLRenderingContext, props?: VertexArrayProps) {\n // Use program's id if program is supplied but no id is supplied\n const id = props?.id || (props?.program && props?.program.id);\n // super(gl, Object.assign({}, props, {id}));\n\n this.vertexArrayObject = new VertexArrayObject(gl);\n\n this.id = id;\n this.gl = gl;\n this.configuration = null;\n\n this.initialize(props);\n Object.seal(this);\n }\n\n delete(): void {\n if (this.buffer) {\n this.buffer.delete();\n }\n\n this.vertexArrayObject.delete();\n }\n\n initialize(props?: VertexArrayProps) {\n this.reset();\n this.configuration = null;\n this.bindOnUse = false;\n return this.setProps(props || {});\n }\n\n // Resets all attributes (to default valued constants)\n reset() {\n // this.vertexArrayObject.reset();\n\n this.elements = null;\n this.elementsAccessor = null;\n const {MAX_ATTRIBUTES} = this.vertexArrayObject;\n this.values = new Array(MAX_ATTRIBUTES).fill(null);\n this.accessors = new Array(MAX_ATTRIBUTES).fill(null);\n this.unused = {};\n\n // Auto detects draw params\n this.drawParams = null;\n\n return this;\n }\n\n setProps(props: VertexArrayProps) {\n if ('program' in props) {\n this.configuration = props.program && props.program.configuration;\n }\n if ('configuration' in props) {\n this.configuration = props.configuration;\n }\n if ('attributes' in props) {\n this.setAttributes(props.attributes);\n }\n if ('elements' in props) {\n this.setElementBuffer(props.elements);\n }\n if ('bindOnUse' in props) {\n // @ts-expect-error\n props = props.bindOnUse;\n }\n return this;\n }\n\n // Automatically called if buffers changed through VertexArray API\n clearDrawParams(): void {\n this.drawParams = null;\n }\n\n getDrawParams(): DrawParams {\n // Auto deduced draw parameters\n this.drawParams = this.drawParams || this._updateDrawParams();\n\n return this.drawParams;\n }\n\n // Set (bind) an array or map of vertex array buffers, either in numbered or named locations.\n // For names that are not present in `location`, the supplied buffers will be ignored.\n // if a single buffer of type GL.ELEMENT_ARRAY_BUFFER is present, it will be set as elements\n // Signatures:\n // {attributeName: buffer}\n // {attributeName: [buffer, accessor]}\n // {attributeName: (typed) array} => constant\n setAttributes(attributes): this {\n Object.assign(this.attributes, attributes);\n this.vertexArrayObject.bind(() => {\n for (const locationOrName in attributes) {\n const value = attributes[locationOrName];\n this._setAttribute(locationOrName, value);\n }\n // Make sure we don't leave any bindings\n this.gl.bindBuffer(GL.ARRAY_BUFFER, null);\n });\n\n return this;\n }\n\n // Set (bind) an elements buffer, for indexed rendering.\n // Must be a Buffer bound to GL.ELEMENT_ARRAY_BUFFER. Constants not supported\n setElementBuffer(elementBuffer: Buffer | null = null, accessor = {}): this {\n this.elements = elementBuffer; // Save value for debugging\n this.elementsAccessor = accessor;\n this.clearDrawParams();\n this.vertexArrayObject.setElementBuffer(elementBuffer, accessor);\n\n return this;\n }\n\n // Set a location in vertex attributes array to a buffer\n setBuffer(locationOrName, buffer: Buffer, appAccessor = {}): this {\n // Check target\n if (buffer.target === GL.ELEMENT_ARRAY_BUFFER) {\n this.setElementBuffer(buffer, appAccessor);\n return this;\n }\n\n const {location, accessor} = this._resolveLocationAndAccessor(\n locationOrName,\n buffer,\n buffer.accessor,\n appAccessor\n );\n\n if (location >= 0) {\n this.values[location] = buffer;\n this.accessors[location] = accessor;\n this.clearDrawParams();\n this.vertexArrayObject.setBuffer(location, buffer, accessor);\n }\n\n return this;\n }\n\n // Set attribute to constant value (small typed array corresponding to one vertex' worth of data)\n setConstant(locationOrName, arrayValue, appAccessor = {}): this {\n // @ts-expect-error\n const {location, accessor} = this._resolveLocationAndAccessor(\n locationOrName,\n arrayValue,\n // Ensure that size isn't taken from program for multi-column\n // attributes\n {size: arrayValue.length, ...appAccessor}\n );\n\n if (location >= 0) {\n arrayValue = this.vertexArrayObject._normalizeConstantArrayValue(arrayValue);\n\n this.values[location] = arrayValue;\n this.accessors[location] = accessor;\n this.clearDrawParams();\n\n // NOTE: We set the actual constant value later on bind. We can't set the value now since\n // constants are global and affect all other VertexArrays that have disabled attributes\n // in the same location.\n // We do disable the attribute which makes it use the global constant value at that location\n this.vertexArrayObject.enable(location, false);\n }\n\n return this;\n }\n\n // Workaround for Chrome TransformFeedback binding issue\n // If required, unbind temporarily to avoid conflicting with TransformFeedback\n unbindBuffers(): this {\n this.vertexArrayObject.bind(() => {\n if (this.elements) {\n this.vertexArrayObject.setElementBuffer(null);\n }\n\n // Chrome does not like buffers that are bound to several binding points,\n // so we need to offer and unbind facility\n // WebGL offers disabling, but no clear way to set a VertexArray buffer to `null`\n // So we just bind all the attributes to the dummy \"attribute zero\" buffer\n this.buffer = this.buffer || new Buffer(this.gl, {accessor: {size: 4}});\n\n for (let location = 0; location < this.vertexArrayObject.MAX_ATTRIBUTES; location++) {\n if (this.values[location] instanceof Buffer) {\n this.gl.disableVertexAttribArray(location);\n this.gl.bindBuffer(GL.ARRAY_BUFFER, this.buffer.handle);\n this.gl.vertexAttribPointer(location, 1, GL.FLOAT, false, 0, 0);\n }\n }\n });\n return this;\n }\n\n // Workaround for Chrome TransformFeedback binding issue\n // If required, rebind rebind after temporary unbind\n bindBuffers(): this {\n this.vertexArrayObject.bind(() => {\n if (this.elements) {\n this.setElementBuffer(this.elements);\n }\n\n for (let location = 0; location < this.vertexArrayObject.MAX_ATTRIBUTES; location++) {\n const buffer = this.values[location];\n if (buffer instanceof Buffer) {\n this.setBuffer(location, buffer);\n }\n }\n });\n return this;\n }\n\n // Bind for use\n // When a vertex array is about to be used, we must:\n // - Set constant attributes (since these are stored on the context and reset on bind)\n // - Check if we need to initialize the buffer\n bindForDraw(vertexCount, instanceCount, func) {\n let value;\n\n this.vertexArrayObject.bind(() => {\n // Make sure that any constant attributes are updated (stored on the context, not the VAO)\n // Also handles attribute 0\n this._setConstantAttributes(vertexCount, instanceCount);\n\n value = func();\n });\n\n return value;\n }\n\n // PRIVATE\n\n // Resolve locations and accessors\n _resolveLocationAndAccessor(locationOrName, value, valueAccessor, appAccessor) {\n const INVALID_RESULT = {\n location: -1,\n accessor: null\n };\n\n const {location, name} = this._getAttributeIndex(locationOrName);\n if (!Number.isFinite(location) || location < 0) {\n this.unused[locationOrName] = value;\n log.once(3, () => `unused value ${locationOrName} in ${this.id}`)();\n return INVALID_RESULT;\n }\n\n const accessInfo = this._getAttributeInfo(name || location);\n\n // Attribute location wasn't directly found.\n // Likely due to multi-location attributes (e.g. matrix)\n if (!accessInfo) {\n return INVALID_RESULT;\n }\n\n // Resolve the partial accessors into a final accessor\n const currentAccessor = this.accessors[location] || {};\n const accessor = Accessor.resolve(\n accessInfo.accessor,\n currentAccessor,\n valueAccessor,\n appAccessor\n );\n\n const {size, type} = accessor;\n assert(Number.isFinite(size) && Number.isFinite(type));\n\n return {location, accessor};\n }\n\n _getAttributeInfo(attributeName) {\n return this.configuration && this.configuration.getAttributeInfo(attributeName);\n }\n\n _getAttributeIndex(locationOrName) {\n const location = Number(locationOrName);\n if (Number.isFinite(location)) {\n return {location};\n }\n\n const multiLocation = MULTI_LOCATION_ATTRIBUTE_REGEXP.exec(locationOrName);\n const name = multiLocation ? multiLocation[1] : locationOrName;\n const locationOffset = multiLocation ? Number(multiLocation[2]) : 0;\n\n if (this.configuration) {\n return {\n location: this.configuration.getAttributeLocation(name) + locationOffset,\n name\n };\n }\n\n return {location: -1};\n }\n\n _setAttribute(locationOrName, value): void {\n if (value instanceof Buffer) {\n // Signature: {attributeName: Buffer}\n this.setBuffer(locationOrName, value);\n } else if (Array.isArray(value) && value.length && value[0] instanceof Buffer) {\n // Signature: {attributeName: [buffer, accessor]}\n const buffer = value[0];\n const accessor = value[1];\n this.setBuffer(locationOrName, buffer, accessor);\n } else if (ArrayBuffer.isView(value) || Array.isArray(value)) {\n // Signature: {attributeName: constant}, constant == short (typed) array\n const constant = value;\n this.setConstant(locationOrName, constant);\n } else if (value.buffer instanceof Buffer) {\n // luma.gl v7: Support accessor objects with 'buffer' field\n // for interleaved data\n // Signature: {attributeName: {...accessor, buffer}}\n const accessor = value;\n this.setBuffer(locationOrName, accessor.buffer, accessor);\n } else {\n throw new Error(ERR_ATTRIBUTE_TYPE);\n }\n }\n\n // Updates all constant attribute values (constants are used when vertex attributes are disabled).\n // This needs to be done repeatedly since in contrast to buffer bindings,\n // constants are stored on the WebGL context, not the VAO\n _setConstantAttributes(vertexCount, instanceCount): void {\n // TODO - use accessor to determine what length to use\n const elementCount = Math.max(vertexCount | 0, instanceCount | 0);\n let constant = this.values[0];\n if (ArrayBuffer.isView(constant)) {\n this._setConstantAttributeZero(constant, elementCount);\n }\n\n for (let location = 1; location < this.vertexArrayObject.MAX_ATTRIBUTES; location++) {\n constant = this.values[location];\n if (ArrayBuffer.isView(constant)) {\n this._setConstantAttribute(location, constant);\n }\n }\n }\n\n _setConstantAttributeZero(constant, elementCount: number): void {\n if (VertexArrayObject.isSupported(this.gl, {constantAttributeZero: true})) {\n this._setConstantAttribute(0, constant);\n return;\n }\n\n // Get a dummy buffer populated with repeated constants\n const buffer = this.vertexArrayObject.getConstantBuffer(elementCount, constant);\n\n // Set the buffer on location 0\n this.vertexArrayObject.setBuffer(0, buffer, this.accessors[0]);\n }\n\n _setConstantAttribute(location, constant): void {\n VertexArrayObject.setConstant(this.gl, location, constant);\n }\n\n // Walks the buffers and updates draw parameters\n _updateDrawParams(): DrawParams {\n const drawParams = {\n elementCount: 0,\n indexType: Uint16Array,\n indexOffset: 0,\n isIndexed: false,\n isInstanced: false,\n indexCount: Infinity,\n vertexCount: Infinity,\n instanceCount: Infinity\n };\n\n for (let location = 0; location < this.vertexArrayObject.MAX_ATTRIBUTES; location++) {\n this._updateDrawParamsForLocation(drawParams, location);\n }\n\n if (this.elements) {\n // indexing is autodetected - buffer with target GL.ELEMENT_ARRAY_BUFFER\n // index type is saved for drawElement calls\n drawParams.elementCount = this.elements.getElementCount(this.elements.accessor);\n drawParams.isIndexed = true;\n drawParams.indexType = this.elementsAccessor.type || this.elements.accessor.type;\n drawParams.indexOffset = this.elementsAccessor.offset || 0;\n }\n\n // Post-calculation checks\n if (drawParams.indexCount === Infinity) {\n drawParams.indexCount = 0;\n }\n if (drawParams.vertexCount === Infinity) {\n drawParams.vertexCount = 0;\n }\n if (drawParams.instanceCount === Infinity) {\n drawParams.instanceCount = 0;\n }\n\n return drawParams;\n }\n\n _updateDrawParamsForLocation(drawParams: DrawParams, location): void {\n const value = this.values[location];\n const accessor = this.accessors[location];\n\n if (!value) {\n return;\n }\n\n // Check if instanced (whether buffer or constant)\n const {divisor} = accessor;\n const isInstanced = divisor > 0;\n drawParams.isInstanced = drawParams.isInstanced || isInstanced;\n\n if (value instanceof Buffer) {\n const buffer = value;\n\n if (isInstanced) {\n // instance attribute\n const instanceCount = buffer.getVertexCount(accessor);\n drawParams.instanceCount = Math.min(drawParams.instanceCount, instanceCount);\n } else {\n // normal attribute\n const vertexCount = buffer.getVertexCount(accessor);\n drawParams.vertexCount = Math.min(drawParams.vertexCount, vertexCount);\n }\n }\n }\n\n // DEPRECATED in v6.x - but not warnings not properly implemented\n\n setElements(elementBuffer = null, accessor = {}) {\n log.deprecated('setElements', 'setElementBuffer')();\n return this.setElementBuffer(elementBuffer, accessor);\n }\n}\n"],"file":"vertex-array.js"}