@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
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/classes/vertex-array-object.ts"],"names":["GL","assertWebGL2Context","isWebGL2","getBrowser","WebGLResource","Buffer","getScratchArray","fillArray","assert","getLumaContextData","ERR_ELEMENTS","VertexArrayObject","isSupported","gl","options","constantAttributeZero","getDefaultArray","lumaContextData","defaultVertexArray","handle","isDefaultArray","getMaxAttributes","MAX_ATTRIBUTES","getParameter","MAX_VERTEX_ATTRIBS","setConstant","location","array","constructor","Float32Array","_setConstantFloatArray","Int32Array","_setConstantIntArray","Uint32Array","_setConstantUintArray","opts","id","program","buffer","bufferValue","Object","seal","delete","setElementBuffer","elementBuffer","target","ELEMENT_ARRAY_BUFFER","bind","bindBuffer","setBuffer","accessor","size","type","stride","offset","normalized","integer","divisor","gl2","Number","ARRAY_BUFFER","vertexAttribIPointer","vertexAttribPointer","enableVertexAttribArray","vertexAttribDivisor","enable","disablingAttributeZero","disableVertexAttribArray","getConstantBuffer","elementCount","value","constantValue","_normalizeConstantArrayValue","byteLength","length","updateNeeded","reallocate","_compareConstantArrayValues","typedArray","source","start","count","subData","initialize","props","setProps","arrayValue","Array","isArray","v1","v2","i","vertexAttrib1fv","vertexAttrib2fv","vertexAttrib3fv","vertexAttrib4fv","vertexAttribI4iv","vertexAttribI4uiv","_createHandle","createVertexArray","_deleteHandle","deleteVertexArray","elements","_bindHandle","bindVertexArray","_getParameter","pname","isFinite","VERTEX_ATTRIB_ARRAY_POINTER","getVertexAttribOffset","getVertexAttrib"],"mappings":"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","sourcesContent":["import GL from '@luma.gl/constants';\nimport {assertWebGL2Context, isWebGL2} from '@luma.gl/gltools';\nimport {getBrowser} from 'probe.gl';\nimport Program from './program';\nimport WebGLResource, {ResourceProps} from './webgl-resource';\nimport Buffer from './webgl-buffer';\nimport {getScratchArray, fillArray} from '../utils/array-utils-flat';\nimport {assert} from '../utils';\nimport {getLumaContextData} from '../context/luma-context-data';\n\nconst ERR_ELEMENTS = 'elements must be GL.ELEMENT_ARRAY_BUFFER';\n\n/**\n * VertexArrayObject properties\n * @param constantAttributeZero Attribute 0 can not be disable on most desktop OpenGL based browsers\n * and on iOS Safari browser.\n */\nexport type VertexArrayObjectProps = ResourceProps & {\n constantAttributeZero?: boolean;\n program?: Program;\n isDefaultArray?: boolean;\n};\n\nexport default class VertexArrayObject extends WebGLResource<VertexArrayObjectProps> {\n private static MAX_ATTRIBUTES: number;\n\n static isSupported(gl: WebGLRenderingContext, options?: VertexArrayObjectProps): boolean {\n if (options?.constantAttributeZero) {\n return isWebGL2(gl) || getBrowser() === 'Chrome';\n }\n\n // Whether additional objects can be created\n return true;\n }\n\n /**\n * Returns the global (null) vertex array object. Exists even when no extension available.\n * @todo (Tarek): VAOs are now polyfilled. Deprecate this in 9.0\n */\n static getDefaultArray(gl: WebGLRenderingContext): VertexArrayObject {\n const lumaContextData = getLumaContextData(gl);\n lumaContextData.defaultVertexArray = lumaContextData.defaultVertexArray || \n new VertexArrayObject(gl, {handle: null, isDefaultArray: true});\n return lumaContextData.defaultVertexArray;\n }\n\n /** Get maximum number of attributes in a vertex array */\n static getMaxAttributes(gl: WebGLRenderingContext): number {\n // TODO - should be cached per context\n // @ts-ignore\n VertexArrayObject.MAX_ATTRIBUTES =\n // @ts-ignore\n VertexArrayObject.MAX_ATTRIBUTES || gl.getParameter(gl.MAX_VERTEX_ATTRIBS);\n // @ts-ignore\n return VertexArrayObject.MAX_ATTRIBUTES;\n }\n\n /**\n * Set an attribute to a constant value\n * @param gl \n * @param location \n * @param array \n * \n * @note Constants are stored globally on the WebGL context, not the VAO\n * so they need to be updated before every render\n * @todo - use known type (in configuration or passed in) to allow non-typed arrays?\n * @todo - remember/cache values to avoid setting them unnecessarily?\n */\n static setConstant(gl: WebGLRenderingContext, location: any, array: any): void {\n switch (array.constructor) {\n case Float32Array:\n VertexArrayObject._setConstantFloatArray(gl, location, array);\n break;\n case Int32Array:\n VertexArrayObject._setConstantIntArray(assertWebGL2Context(gl), location, array);\n break;\n case Uint32Array:\n VertexArrayObject._setConstantUintArray(assertWebGL2Context(gl), location, array);\n break;\n default:\n assert(false);\n }\n }\n\n private buffer: Buffer | null = null;\n private bufferValue = null;\n private isDefaultArray: boolean = false;\n\n // Create a VertexArray\n constructor(gl: WebGLRenderingContext, opts?: VertexArrayObjectProps) {\n // Use program's id if program but no id is supplied\n super(gl, {...opts, id: opts?.id || (opts?.program && opts?.program.id)}, {} as any);\n\n this.buffer = null;\n this.bufferValue = null;\n this.isDefaultArray = opts?.isDefaultArray || false;\n\n Object.seal(this);\n }\n\n delete(): this {\n super.delete();\n if (this.buffer) {\n this.buffer.delete();\n }\n return this;\n }\n\n get MAX_ATTRIBUTES(): number {\n return VertexArrayObject.getMaxAttributes(this.gl);\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 = null, opts = {}) {\n assert(!elementBuffer || elementBuffer.target === GL.ELEMENT_ARRAY_BUFFER, ERR_ELEMENTS);\n\n // The GL.ELEMENT_ARRAY_BUFFER_BINDING is stored on the VertexArrayObject...\n this.bind(() => {\n this.gl.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, elementBuffer ? elementBuffer.handle : null);\n });\n\n return this;\n }\n\n /** Set a location in vertex attributes array to a buffer, enables the location, sets divisor */\n setBuffer(location, buffer, accessor): this {\n // Check target\n if (buffer.target === GL.ELEMENT_ARRAY_BUFFER) {\n return this.setElementBuffer(buffer, accessor);\n }\n\n const {size, type, stride, offset, normalized, integer, divisor} = accessor;\n\n const {gl, gl2} = this;\n location = Number(location);\n\n this.bind(() => {\n // A non-zero buffer object must be bound to the GL_ARRAY_BUFFER target\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer.handle);\n\n // WebGL2 supports *integer* data formats, i.e. GPU will see integer values\n if (integer) {\n assert(isWebGL2(gl));\n gl2.vertexAttribIPointer(location, size, type, stride, offset);\n } else {\n // Attaches ARRAY_BUFFER with specified buffer format to location\n gl.vertexAttribPointer(location, size, type, normalized, stride, offset);\n }\n gl.enableVertexAttribArray(location);\n gl2.vertexAttribDivisor(location, divisor || 0);\n\n // NOTE We don't unbind buffer here, typically another buffer will be bound just after\n });\n\n return this;\n }\n\n /**\n * Enabling an attribute location makes it reference the currently bound buffer\n * Disabling an attribute location makes it reference the global constant value\n * TODO - handle single values for size 1 attributes?\n * TODO - convert classic arrays based on known type?\n */ \n enable(location, enable = true): this {\n // Attribute 0 cannot be disabled in most desktop OpenGL based browsers\n const disablingAttributeZero =\n !enable &&\n location === 0 &&\n !VertexArrayObject.isSupported(this.gl, {constantAttributeZero: true});\n\n if (!disablingAttributeZero) {\n location = Number(location);\n this.bind(() =>\n enable\n ? this.gl.enableVertexAttribArray(location)\n : this.gl.disableVertexAttribArray(location)\n );\n }\n return this;\n }\n\n /**\n * Provide a means to create a buffer that is equivalent to a constant.\n * NOTE: Desktop OpenGL cannot disable attribute 0.\n * https://stackoverflow.com/questions/20305231/webgl-warning-attribute-0-is-disabled-\n * this-has-significant-performance-penalty\n */ \n getConstantBuffer(elementCount: number, value): Buffer {\n // Create buffer only when needed, and reuse it (avoids inflating buffer creation statistics)\n\n const constantValue = this._normalizeConstantArrayValue(value);\n\n const byteLength = constantValue.byteLength * elementCount;\n const length = constantValue.length * elementCount;\n\n let updateNeeded = !this.buffer;\n\n this.buffer = this.buffer || new Buffer(this.gl, byteLength);\n updateNeeded = updateNeeded || this.buffer.reallocate(byteLength);\n\n // Reallocate and update contents if needed\n updateNeeded =\n updateNeeded || !this._compareConstantArrayValues(constantValue, this.bufferValue);\n\n if (updateNeeded) {\n // Create a typed array that is big enough, and fill it with the required data\n const typedArray = getScratchArray(value.constructor, length);\n fillArray({target: typedArray, source: constantValue, start: 0, count: length});\n this.buffer.subData(typedArray);\n this.bufferValue = value;\n }\n\n return this.buffer;\n }\n\n // DEPRECATED\n\n /** @deprecated this function has no effect */\n initialize(props?: VertexArrayObjectProps): this {\n return this.setProps(props);\n }\n\n /** @deprecated this function is not implemented */\n setProps(props: VertexArrayObjectProps): this {\n // TODO: decide which props should be supported\n return this;\n } \n\n // PRIVATE\n\n // TODO - convert Arrays based on known type? (read type from accessor, don't assume Float32Array)\n // TODO - handle single values for size 1 attributes?\n _normalizeConstantArrayValue(arrayValue) {\n if (Array.isArray(arrayValue)) {\n return new Float32Array(arrayValue);\n }\n return arrayValue;\n }\n\n _compareConstantArrayValues(v1, v2): boolean {\n if (!v1 || !v2 || v1.length !== v2.length || v1.constructor !== v2.constructor) {\n return false;\n }\n for (let i = 0; i < v1.length; ++i) {\n if (v1[i] !== v2[i]) {\n return false;\n }\n }\n return true;\n }\n\n static _setConstantFloatArray(gl: WebGLRenderingContext, location, array): void {\n switch (array.length) {\n case 1:\n gl.vertexAttrib1fv(location, array);\n break;\n case 2:\n gl.vertexAttrib2fv(location, array);\n break;\n case 3:\n gl.vertexAttrib3fv(location, array);\n break;\n case 4:\n gl.vertexAttrib4fv(location, array);\n break;\n default:\n assert(false);\n }\n }\n\n static _setConstantIntArray(gl: WebGL2RenderingContext, location, array) {\n assert(isWebGL2(gl));\n gl.vertexAttribI4iv(location, array);\n // switch (array.length) {\n // case 1:\n // gl.vertexAttribI1iv(location, array);\n // break;\n // case 2:\n // gl.vertexAttribI2iv(location, array);\n // break;\n // case 3:\n // gl.vertexAttribI3iv(location, array);\n // break;\n // case 4:\n // break;\n // default:\n // assert(false);\n // }\n }\n\n static _setConstantUintArray(gl: WebGL2RenderingContext, location, array) {\n assert(isWebGL2(gl));\n gl.vertexAttribI4uiv(location, array);\n // switch (array.length) {\n // case 1:\n // gl.vertexAttribI1uiv(location, array);\n // break;\n // case 2:\n // gl.vertexAttribI2uiv(location, array);\n // break;\n // case 3:\n // gl.vertexAttribI3uiv(location, array);\n // break;\n // case 4:\n // gl.vertexAttribI4uiv(location, array);\n // break;\n // default:\n // assert(false);\n // }\n }\n\n // RESOURCE IMPLEMENTATION\n\n _createHandle() {\n return this.gl2.createVertexArray();\n }\n\n _deleteHandle(): void {\n this.gl2.deleteVertexArray(this.handle);\n // @ts-ignore\n return [this.elements];\n // return [this.elements, ...this.buffers];\n }\n\n _bindHandle(handle): void {\n this.gl2.bindVertexArray(handle);\n }\n\n // Generic getter for information about a vertex attribute at a given position\n _getParameter(pname: number, {location}) {\n assert(Number.isFinite(location));\n return this.bind(() => {\n switch (pname) {\n case GL.VERTEX_ATTRIB_ARRAY_POINTER:\n return this.gl.getVertexAttribOffset(location, pname);\n default:\n return this.gl.getVertexAttrib(location, pname);\n }\n });\n }\n}\n"],"file":"vertex-array-object.js"}
@@ -0,0 +1,75 @@
1
+ import Accessor from './accessor';
2
+ import Buffer from './webgl-buffer';
3
+ import Program from './program';
4
+ import ProgramConfiguration from './program-configuration';
5
+ import VertexArrayObject from './vertex-array-object';
6
+ export declare type VertexArrayProps = {
7
+ id?: string;
8
+ program?: Program;
9
+ configuration?: ProgramConfiguration;
10
+ attributes?: any[];
11
+ elements?: any;
12
+ bindOnUse?: boolean;
13
+ };
14
+ export declare type DrawParams = {
15
+ elementCount: number;
16
+ indexType: Uint16ArrayConstructor | Uint32ArrayConstructor;
17
+ indexOffset: number;
18
+ isIndexed: boolean;
19
+ isInstanced: boolean;
20
+ indexCount: number;
21
+ vertexCount: number;
22
+ instanceCount: number;
23
+ };
24
+ export default class VertexArray {
25
+ id: string;
26
+ gl: WebGLRenderingContext;
27
+ readonly attributes: object;
28
+ vertexArrayObject: VertexArrayObject;
29
+ accessors: Accessor[];
30
+ configuration: ProgramConfiguration | null;
31
+ elements: any;
32
+ elementsAccessor: any;
33
+ values: any;
34
+ unused: any;
35
+ drawParams: any;
36
+ buffer: any;
37
+ bindOnUse: boolean;
38
+ constructor(gl: WebGLRenderingContext, props?: VertexArrayProps);
39
+ delete(): void;
40
+ initialize(props?: VertexArrayProps): this;
41
+ reset(): this;
42
+ setProps(props: VertexArrayProps): this;
43
+ clearDrawParams(): void;
44
+ getDrawParams(): DrawParams;
45
+ setAttributes(attributes: any): this;
46
+ setElementBuffer(elementBuffer?: Buffer | null, accessor?: {}): this;
47
+ setBuffer(locationOrName: any, buffer: Buffer, appAccessor?: {}): this;
48
+ setConstant(locationOrName: any, arrayValue: any, appAccessor?: {}): this;
49
+ unbindBuffers(): this;
50
+ bindBuffers(): this;
51
+ bindForDraw(vertexCount: any, instanceCount: any, func: any): any;
52
+ _resolveLocationAndAccessor(locationOrName: any, value: any, valueAccessor: any, appAccessor: any): {
53
+ location: number;
54
+ accessor: any;
55
+ } | {
56
+ location: any;
57
+ accessor: Accessor;
58
+ };
59
+ _getAttributeInfo(attributeName: any): any;
60
+ _getAttributeIndex(locationOrName: any): {
61
+ location: number;
62
+ name?: undefined;
63
+ } | {
64
+ location: any;
65
+ name: any;
66
+ };
67
+ _setAttribute(locationOrName: any, value: any): void;
68
+ _setConstantAttributes(vertexCount: any, instanceCount: any): void;
69
+ _setConstantAttributeZero(constant: any, elementCount: number): void;
70
+ _setConstantAttribute(location: any, constant: any): void;
71
+ _updateDrawParams(): DrawParams;
72
+ _updateDrawParamsForLocation(drawParams: DrawParams, location: any): void;
73
+ setElements(elementBuffer?: any, accessor?: {}): this;
74
+ }
75
+ //# sourceMappingURL=vertex-array.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vertex-array.d.ts","sourceRoot":"","sources":["../../src/classes/vertex-array.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,409 @@
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
+ import GL from '@luma.gl/constants';
3
+ import { log } from '@luma.gl/gltools';
4
+ import Accessor from './accessor';
5
+ import Buffer from './webgl-buffer';
6
+ import VertexArrayObject from './vertex-array-object';
7
+ import { assert } from '../utils';
8
+ const ERR_ATTRIBUTE_TYPE = 'VertexArray: attributes must be Buffers or constants (i.e. typed array)';
9
+ const MULTI_LOCATION_ATTRIBUTE_REGEXP = /^(.+)__LOCATION_([0-9]+)$/;
10
+ export default class VertexArray {
11
+ constructor(gl, props) {
12
+ _defineProperty(this, "id", void 0);
13
+
14
+ _defineProperty(this, "gl", void 0);
15
+
16
+ _defineProperty(this, "attributes", {});
17
+
18
+ _defineProperty(this, "vertexArrayObject", void 0);
19
+
20
+ _defineProperty(this, "accessors", []);
21
+
22
+ _defineProperty(this, "configuration", null);
23
+
24
+ _defineProperty(this, "elements", null);
25
+
26
+ _defineProperty(this, "elementsAccessor", null);
27
+
28
+ _defineProperty(this, "values", null);
29
+
30
+ _defineProperty(this, "unused", null);
31
+
32
+ _defineProperty(this, "drawParams", null);
33
+
34
+ _defineProperty(this, "buffer", null);
35
+
36
+ _defineProperty(this, "bindOnUse", false);
37
+
38
+ const id = (props === null || props === void 0 ? void 0 : props.id) || (props === null || props === void 0 ? void 0 : props.program) && (props === null || props === void 0 ? void 0 : props.program.id);
39
+ this.vertexArrayObject = new VertexArrayObject(gl);
40
+ this.id = id;
41
+ this.gl = gl;
42
+ this.configuration = null;
43
+ this.initialize(props);
44
+ Object.seal(this);
45
+ }
46
+
47
+ delete() {
48
+ if (this.buffer) {
49
+ this.buffer.delete();
50
+ }
51
+
52
+ this.vertexArrayObject.delete();
53
+ }
54
+
55
+ initialize(props) {
56
+ this.reset();
57
+ this.configuration = null;
58
+ this.bindOnUse = false;
59
+ return this.setProps(props || {});
60
+ }
61
+
62
+ reset() {
63
+ this.elements = null;
64
+ this.elementsAccessor = null;
65
+ const {
66
+ MAX_ATTRIBUTES
67
+ } = this.vertexArrayObject;
68
+ this.values = new Array(MAX_ATTRIBUTES).fill(null);
69
+ this.accessors = new Array(MAX_ATTRIBUTES).fill(null);
70
+ this.unused = {};
71
+ this.drawParams = null;
72
+ return this;
73
+ }
74
+
75
+ setProps(props) {
76
+ if ('program' in props) {
77
+ this.configuration = props.program && props.program.configuration;
78
+ }
79
+
80
+ if ('configuration' in props) {
81
+ this.configuration = props.configuration;
82
+ }
83
+
84
+ if ('attributes' in props) {
85
+ this.setAttributes(props.attributes);
86
+ }
87
+
88
+ if ('elements' in props) {
89
+ this.setElementBuffer(props.elements);
90
+ }
91
+
92
+ if ('bindOnUse' in props) {
93
+ props = props.bindOnUse;
94
+ }
95
+
96
+ return this;
97
+ }
98
+
99
+ clearDrawParams() {
100
+ this.drawParams = null;
101
+ }
102
+
103
+ getDrawParams() {
104
+ this.drawParams = this.drawParams || this._updateDrawParams();
105
+ return this.drawParams;
106
+ }
107
+
108
+ setAttributes(attributes) {
109
+ Object.assign(this.attributes, attributes);
110
+ this.vertexArrayObject.bind(() => {
111
+ for (const locationOrName in attributes) {
112
+ const value = attributes[locationOrName];
113
+
114
+ this._setAttribute(locationOrName, value);
115
+ }
116
+
117
+ this.gl.bindBuffer(GL.ARRAY_BUFFER, null);
118
+ });
119
+ return this;
120
+ }
121
+
122
+ setElementBuffer(elementBuffer = null, accessor = {}) {
123
+ this.elements = elementBuffer;
124
+ this.elementsAccessor = accessor;
125
+ this.clearDrawParams();
126
+ this.vertexArrayObject.setElementBuffer(elementBuffer, accessor);
127
+ return this;
128
+ }
129
+
130
+ setBuffer(locationOrName, buffer, appAccessor = {}) {
131
+ if (buffer.target === GL.ELEMENT_ARRAY_BUFFER) {
132
+ this.setElementBuffer(buffer, appAccessor);
133
+ return this;
134
+ }
135
+
136
+ const {
137
+ location,
138
+ accessor
139
+ } = this._resolveLocationAndAccessor(locationOrName, buffer, buffer.accessor, appAccessor);
140
+
141
+ if (location >= 0) {
142
+ this.values[location] = buffer;
143
+ this.accessors[location] = accessor;
144
+ this.clearDrawParams();
145
+ this.vertexArrayObject.setBuffer(location, buffer, accessor);
146
+ }
147
+
148
+ return this;
149
+ }
150
+
151
+ setConstant(locationOrName, arrayValue, appAccessor = {}) {
152
+ const {
153
+ location,
154
+ accessor
155
+ } = this._resolveLocationAndAccessor(locationOrName, arrayValue, {
156
+ size: arrayValue.length,
157
+ ...appAccessor
158
+ });
159
+
160
+ if (location >= 0) {
161
+ arrayValue = this.vertexArrayObject._normalizeConstantArrayValue(arrayValue);
162
+ this.values[location] = arrayValue;
163
+ this.accessors[location] = accessor;
164
+ this.clearDrawParams();
165
+ this.vertexArrayObject.enable(location, false);
166
+ }
167
+
168
+ return this;
169
+ }
170
+
171
+ unbindBuffers() {
172
+ this.vertexArrayObject.bind(() => {
173
+ if (this.elements) {
174
+ this.vertexArrayObject.setElementBuffer(null);
175
+ }
176
+
177
+ this.buffer = this.buffer || new Buffer(this.gl, {
178
+ accessor: {
179
+ size: 4
180
+ }
181
+ });
182
+
183
+ for (let location = 0; location < this.vertexArrayObject.MAX_ATTRIBUTES; location++) {
184
+ if (this.values[location] instanceof Buffer) {
185
+ this.gl.disableVertexAttribArray(location);
186
+ this.gl.bindBuffer(GL.ARRAY_BUFFER, this.buffer.handle);
187
+ this.gl.vertexAttribPointer(location, 1, GL.FLOAT, false, 0, 0);
188
+ }
189
+ }
190
+ });
191
+ return this;
192
+ }
193
+
194
+ bindBuffers() {
195
+ this.vertexArrayObject.bind(() => {
196
+ if (this.elements) {
197
+ this.setElementBuffer(this.elements);
198
+ }
199
+
200
+ for (let location = 0; location < this.vertexArrayObject.MAX_ATTRIBUTES; location++) {
201
+ const buffer = this.values[location];
202
+
203
+ if (buffer instanceof Buffer) {
204
+ this.setBuffer(location, buffer);
205
+ }
206
+ }
207
+ });
208
+ return this;
209
+ }
210
+
211
+ bindForDraw(vertexCount, instanceCount, func) {
212
+ let value;
213
+ this.vertexArrayObject.bind(() => {
214
+ this._setConstantAttributes(vertexCount, instanceCount);
215
+
216
+ value = func();
217
+ });
218
+ return value;
219
+ }
220
+
221
+ _resolveLocationAndAccessor(locationOrName, value, valueAccessor, appAccessor) {
222
+ const INVALID_RESULT = {
223
+ location: -1,
224
+ accessor: null
225
+ };
226
+
227
+ const {
228
+ location,
229
+ name
230
+ } = this._getAttributeIndex(locationOrName);
231
+
232
+ if (!Number.isFinite(location) || location < 0) {
233
+ this.unused[locationOrName] = value;
234
+ log.once(3, () => "unused value ".concat(locationOrName, " in ").concat(this.id))();
235
+ return INVALID_RESULT;
236
+ }
237
+
238
+ const accessInfo = this._getAttributeInfo(name || location);
239
+
240
+ if (!accessInfo) {
241
+ return INVALID_RESULT;
242
+ }
243
+
244
+ const currentAccessor = this.accessors[location] || {};
245
+ const accessor = Accessor.resolve(accessInfo.accessor, currentAccessor, valueAccessor, appAccessor);
246
+ const {
247
+ size,
248
+ type
249
+ } = accessor;
250
+ assert(Number.isFinite(size) && Number.isFinite(type));
251
+ return {
252
+ location,
253
+ accessor
254
+ };
255
+ }
256
+
257
+ _getAttributeInfo(attributeName) {
258
+ return this.configuration && this.configuration.getAttributeInfo(attributeName);
259
+ }
260
+
261
+ _getAttributeIndex(locationOrName) {
262
+ const location = Number(locationOrName);
263
+
264
+ if (Number.isFinite(location)) {
265
+ return {
266
+ location
267
+ };
268
+ }
269
+
270
+ const multiLocation = MULTI_LOCATION_ATTRIBUTE_REGEXP.exec(locationOrName);
271
+ const name = multiLocation ? multiLocation[1] : locationOrName;
272
+ const locationOffset = multiLocation ? Number(multiLocation[2]) : 0;
273
+
274
+ if (this.configuration) {
275
+ return {
276
+ location: this.configuration.getAttributeLocation(name) + locationOffset,
277
+ name
278
+ };
279
+ }
280
+
281
+ return {
282
+ location: -1
283
+ };
284
+ }
285
+
286
+ _setAttribute(locationOrName, value) {
287
+ if (value instanceof Buffer) {
288
+ this.setBuffer(locationOrName, value);
289
+ } else if (Array.isArray(value) && value.length && value[0] instanceof Buffer) {
290
+ const buffer = value[0];
291
+ const accessor = value[1];
292
+ this.setBuffer(locationOrName, buffer, accessor);
293
+ } else if (ArrayBuffer.isView(value) || Array.isArray(value)) {
294
+ const constant = value;
295
+ this.setConstant(locationOrName, constant);
296
+ } else if (value.buffer instanceof Buffer) {
297
+ const accessor = value;
298
+ this.setBuffer(locationOrName, accessor.buffer, accessor);
299
+ } else {
300
+ throw new Error(ERR_ATTRIBUTE_TYPE);
301
+ }
302
+ }
303
+
304
+ _setConstantAttributes(vertexCount, instanceCount) {
305
+ const elementCount = Math.max(vertexCount | 0, instanceCount | 0);
306
+ let constant = this.values[0];
307
+
308
+ if (ArrayBuffer.isView(constant)) {
309
+ this._setConstantAttributeZero(constant, elementCount);
310
+ }
311
+
312
+ for (let location = 1; location < this.vertexArrayObject.MAX_ATTRIBUTES; location++) {
313
+ constant = this.values[location];
314
+
315
+ if (ArrayBuffer.isView(constant)) {
316
+ this._setConstantAttribute(location, constant);
317
+ }
318
+ }
319
+ }
320
+
321
+ _setConstantAttributeZero(constant, elementCount) {
322
+ if (VertexArrayObject.isSupported(this.gl, {
323
+ constantAttributeZero: true
324
+ })) {
325
+ this._setConstantAttribute(0, constant);
326
+
327
+ return;
328
+ }
329
+
330
+ const buffer = this.vertexArrayObject.getConstantBuffer(elementCount, constant);
331
+ this.vertexArrayObject.setBuffer(0, buffer, this.accessors[0]);
332
+ }
333
+
334
+ _setConstantAttribute(location, constant) {
335
+ VertexArrayObject.setConstant(this.gl, location, constant);
336
+ }
337
+
338
+ _updateDrawParams() {
339
+ const drawParams = {
340
+ elementCount: 0,
341
+ indexType: Uint16Array,
342
+ indexOffset: 0,
343
+ isIndexed: false,
344
+ isInstanced: false,
345
+ indexCount: Infinity,
346
+ vertexCount: Infinity,
347
+ instanceCount: Infinity
348
+ };
349
+
350
+ for (let location = 0; location < this.vertexArrayObject.MAX_ATTRIBUTES; location++) {
351
+ this._updateDrawParamsForLocation(drawParams, location);
352
+ }
353
+
354
+ if (this.elements) {
355
+ drawParams.elementCount = this.elements.getElementCount(this.elements.accessor);
356
+ drawParams.isIndexed = true;
357
+ drawParams.indexType = this.elementsAccessor.type || this.elements.accessor.type;
358
+ drawParams.indexOffset = this.elementsAccessor.offset || 0;
359
+ }
360
+
361
+ if (drawParams.indexCount === Infinity) {
362
+ drawParams.indexCount = 0;
363
+ }
364
+
365
+ if (drawParams.vertexCount === Infinity) {
366
+ drawParams.vertexCount = 0;
367
+ }
368
+
369
+ if (drawParams.instanceCount === Infinity) {
370
+ drawParams.instanceCount = 0;
371
+ }
372
+
373
+ return drawParams;
374
+ }
375
+
376
+ _updateDrawParamsForLocation(drawParams, location) {
377
+ const value = this.values[location];
378
+ const accessor = this.accessors[location];
379
+
380
+ if (!value) {
381
+ return;
382
+ }
383
+
384
+ const {
385
+ divisor
386
+ } = accessor;
387
+ const isInstanced = divisor > 0;
388
+ drawParams.isInstanced = drawParams.isInstanced || isInstanced;
389
+
390
+ if (value instanceof Buffer) {
391
+ const buffer = value;
392
+
393
+ if (isInstanced) {
394
+ const instanceCount = buffer.getVertexCount(accessor);
395
+ drawParams.instanceCount = Math.min(drawParams.instanceCount, instanceCount);
396
+ } else {
397
+ const vertexCount = buffer.getVertexCount(accessor);
398
+ drawParams.vertexCount = Math.min(drawParams.vertexCount, vertexCount);
399
+ }
400
+ }
401
+ }
402
+
403
+ setElements(elementBuffer = null, accessor = {}) {
404
+ log.deprecated('setElements', 'setElementBuffer')();
405
+ return this.setElementBuffer(elementBuffer, accessor);
406
+ }
407
+
408
+ }
409
+ //# sourceMappingURL=vertex-array.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/classes/vertex-array.ts"],"names":["GL","log","Accessor","Buffer","VertexArrayObject","assert","ERR_ATTRIBUTE_TYPE","MULTI_LOCATION_ATTRIBUTE_REGEXP","VertexArray","constructor","gl","props","id","program","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","ARRAY_BUFFER","elementBuffer","accessor","setBuffer","appAccessor","target","ELEMENT_ARRAY_BUFFER","location","_resolveLocationAndAccessor","setConstant","arrayValue","size","length","_normalizeConstantArrayValue","enable","unbindBuffers","disableVertexAttribArray","handle","vertexAttribPointer","FLOAT","bindBuffers","bindForDraw","vertexCount","instanceCount","func","_setConstantAttributes","valueAccessor","INVALID_RESULT","name","_getAttributeIndex","Number","isFinite","once","accessInfo","_getAttributeInfo","currentAccessor","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":"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","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"}