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

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 (701) hide show
  1. package/LICENSE +8 -1
  2. package/dist/_deprecated/context-api.d.ts +85 -0
  3. package/dist/_deprecated/context-api.d.ts.map +1 -0
  4. package/dist/_deprecated/context-api.js +76 -0
  5. package/dist/_deprecated/context-api.js.map +1 -0
  6. package/dist/{features/webgl-features-table.d.ts → _deprecated/features.d.ts} +4 -7
  7. package/dist/_deprecated/features.d.ts.map +1 -0
  8. package/dist/_deprecated/features.js +111 -0
  9. package/dist/_deprecated/features.js.map +1 -0
  10. package/dist/adapter/converters/set-device-parameters.d.ts +5 -0
  11. package/dist/adapter/converters/set-device-parameters.d.ts.map +1 -0
  12. package/dist/adapter/converters/set-device-parameters.js +124 -0
  13. package/dist/adapter/converters/set-device-parameters.js.map +1 -0
  14. package/dist/adapter/converters/webgpu-texture-formats.d.ts +281 -0
  15. package/dist/adapter/converters/webgpu-texture-formats.d.ts.map +1 -0
  16. package/dist/adapter/converters/webgpu-texture-formats.js +285 -0
  17. package/dist/adapter/converters/webgpu-texture-formats.js.map +1 -0
  18. package/dist/adapter/device-helpers/device-features.d.ts +12 -0
  19. package/dist/adapter/device-helpers/device-features.d.ts.map +1 -0
  20. package/dist/adapter/device-helpers/device-features.js +123 -0
  21. package/dist/adapter/device-helpers/device-features.js.map +1 -0
  22. package/dist/adapter/device-helpers/device-limits.d.ts +51 -0
  23. package/dist/adapter/device-helpers/device-limits.d.ts.map +1 -0
  24. package/dist/adapter/device-helpers/device-limits.js +90 -0
  25. package/dist/adapter/device-helpers/device-limits.js.map +1 -0
  26. package/dist/adapter/device-helpers/get-device-info.d.ts +4 -0
  27. package/dist/adapter/device-helpers/get-device-info.d.ts.map +1 -0
  28. package/dist/adapter/device-helpers/get-device-info.js +44 -0
  29. package/dist/adapter/device-helpers/get-device-info.js.map +1 -0
  30. package/dist/adapter/device-helpers/is-old-ie.d.ts +2 -0
  31. package/dist/adapter/device-helpers/is-old-ie.d.ts.map +1 -0
  32. package/dist/{esm/features/check-old-ie.js → adapter/device-helpers/is-old-ie.js} +3 -3
  33. package/dist/adapter/device-helpers/is-old-ie.js.map +1 -0
  34. package/dist/adapter/webgl-device.d.ts +110 -0
  35. package/dist/adapter/webgl-device.d.ts.map +1 -0
  36. package/dist/adapter/webgl-device.js +207 -0
  37. package/dist/adapter/webgl-device.js.map +1 -0
  38. package/dist/adapter/webgl-shader.d.ts +18 -0
  39. package/dist/adapter/webgl-shader.d.ts.map +1 -0
  40. package/dist/adapter/webgl-shader.js +82 -0
  41. package/dist/adapter/webgl-shader.js.map +1 -0
  42. package/dist/classes/accessor.js +2 -2
  43. package/dist/classes/accessor.js.map +1 -1
  44. package/dist/classes/accessor.ts.disabled +1 -1
  45. package/dist/classes/clear.d.ts +3 -2
  46. package/dist/classes/clear.d.ts.map +1 -1
  47. package/dist/classes/clear.js +7 -4
  48. package/dist/classes/clear.js.map +1 -1
  49. package/dist/classes/copy-and-blit.d.ts +18 -1
  50. package/dist/classes/copy-and-blit.d.ts.map +1 -1
  51. package/dist/classes/copy-and-blit.js +30 -25
  52. package/dist/classes/copy-and-blit.js.map +1 -1
  53. package/dist/classes/framebuffer.d.ts +10 -1
  54. package/dist/classes/framebuffer.d.ts.map +1 -1
  55. package/dist/classes/framebuffer.js +15 -15
  56. package/dist/classes/framebuffer.js.map +1 -1
  57. package/dist/classes/program-configuration.d.ts +14 -17
  58. package/dist/classes/program-configuration.d.ts.map +1 -1
  59. package/dist/classes/program-configuration.js +10 -97
  60. package/dist/classes/program-configuration.js.map +1 -1
  61. package/dist/classes/program.d.ts +25 -20
  62. package/dist/classes/program.d.ts.map +1 -1
  63. package/dist/classes/program.js +39 -28
  64. package/dist/classes/program.js.map +1 -1
  65. package/dist/classes/query.d.ts.map +1 -1
  66. package/dist/classes/query.js +6 -5
  67. package/dist/classes/query.js.map +1 -1
  68. package/dist/classes/renderbuffer-formats.js +1 -1
  69. package/dist/classes/renderbuffer-formats.js.map +1 -1
  70. package/dist/classes/renderbuffer.d.ts.map +1 -1
  71. package/dist/classes/renderbuffer.js +4 -3
  72. package/dist/classes/renderbuffer.js.map +1 -1
  73. package/dist/classes/{webgl-shader.d.ts → shader.d.ts} +4 -13
  74. package/dist/classes/shader.d.ts.map +1 -0
  75. package/dist/classes/{webgl-shader.js → shader.js} +7 -79
  76. package/dist/classes/shader.js.map +1 -0
  77. package/dist/classes/texture-2d.d.ts +4 -3
  78. package/dist/classes/texture-2d.d.ts.map +1 -1
  79. package/dist/classes/texture-2d.js +5 -8
  80. package/dist/classes/texture-2d.js.map +1 -1
  81. package/dist/classes/texture-3d.d.ts +3 -2
  82. package/dist/classes/texture-3d.d.ts.map +1 -1
  83. package/dist/classes/texture-3d.js +15 -6
  84. package/dist/classes/texture-3d.js.map +1 -1
  85. package/dist/classes/texture-cube.d.ts +2 -1
  86. package/dist/classes/texture-cube.d.ts.map +1 -1
  87. package/dist/classes/texture-cube.js +3 -4
  88. package/dist/classes/texture-cube.js.map +1 -1
  89. package/dist/classes/texture-formats.js +1 -1
  90. package/dist/classes/texture-formats.js.map +1 -1
  91. package/dist/classes/texture.d.ts +14 -9
  92. package/dist/classes/texture.d.ts.map +1 -1
  93. package/dist/classes/texture.js +19 -18
  94. package/dist/classes/texture.js.map +1 -1
  95. package/dist/classes/transform-feedback.d.ts.map +1 -1
  96. package/dist/classes/transform-feedback.js +5 -4
  97. package/dist/classes/transform-feedback.js.map +1 -1
  98. package/dist/classes/uniform-buffer-layout.js +1 -1
  99. package/dist/classes/uniform-buffer-layout.js.map +1 -1
  100. package/dist/classes/uniforms.d.ts +0 -1
  101. package/dist/classes/uniforms.d.ts.map +1 -1
  102. package/dist/classes/uniforms.js +1 -2
  103. package/dist/classes/uniforms.js.map +1 -1
  104. package/dist/classes/vertex-array-object.d.ts +7 -6
  105. package/dist/classes/vertex-array-object.d.ts.map +1 -1
  106. package/dist/classes/vertex-array-object.js +11 -12
  107. package/dist/classes/vertex-array-object.js.map +1 -1
  108. package/dist/classes/vertex-array.d.ts +14 -14
  109. package/dist/classes/vertex-array.d.ts.map +1 -1
  110. package/dist/classes/vertex-array.js +3 -4
  111. package/dist/classes/vertex-array.js.map +1 -1
  112. package/dist/classes/webgl-buffer.d.ts +2 -0
  113. package/dist/classes/webgl-buffer.d.ts.map +1 -1
  114. package/dist/classes/webgl-buffer.js +8 -5
  115. package/dist/classes/webgl-buffer.js.map +1 -1
  116. package/dist/classes/webgl-resource.d.ts +6 -4
  117. package/dist/classes/webgl-resource.d.ts.map +1 -1
  118. package/dist/classes/webgl-resource.js +12 -8
  119. package/dist/classes/webgl-resource.js.map +1 -1
  120. package/dist/context/context/context-state.d.ts +18 -0
  121. package/dist/context/context/context-state.d.ts.map +1 -0
  122. package/dist/context/context/context-state.js +26 -0
  123. package/dist/context/context/context-state.js.map +1 -0
  124. package/dist/context/context/create-context.d.ts +40 -0
  125. package/dist/context/context/create-context.d.ts.map +1 -0
  126. package/dist/context/context/create-context.js +37 -0
  127. package/dist/context/context/create-context.js.map +1 -0
  128. package/dist/context/context/device-pixels.d.ts +25 -0
  129. package/dist/context/context/device-pixels.d.ts.map +1 -0
  130. package/dist/context/context/device-pixels.js +98 -0
  131. package/dist/context/context/device-pixels.js.map +1 -0
  132. package/dist/context/context/get-canvas.d.ts +13 -0
  133. package/dist/context/context/get-canvas.d.ts.map +1 -0
  134. package/dist/context/context/get-canvas.js +31 -0
  135. package/dist/context/context/get-canvas.js.map +1 -0
  136. package/dist/context/context/resize-context.d.ts +20 -0
  137. package/dist/context/context/resize-context.d.ts.map +1 -0
  138. package/dist/context/context/resize-context.js +15 -0
  139. package/dist/context/context/resize-context.js.map +1 -0
  140. package/dist/context/context/webgl-checks.d.ts +13 -0
  141. package/dist/context/context/webgl-checks.d.ts.map +1 -0
  142. package/dist/context/context/webgl-checks.js +34 -0
  143. package/dist/context/context/webgl-checks.js.map +1 -0
  144. package/dist/context/parameters/unified-parameter-api.d.ts +31 -0
  145. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -0
  146. package/dist/context/parameters/unified-parameter-api.js +65 -0
  147. package/dist/context/parameters/unified-parameter-api.js.map +1 -0
  148. package/dist/context/parameters/webgl-parameter-tables.d.ts +169 -0
  149. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -0
  150. package/dist/context/parameters/webgl-parameter-tables.js +445 -0
  151. package/dist/context/parameters/webgl-parameter-tables.js.map +1 -0
  152. package/dist/context/parameters/webgl-parameters.d.ts +144 -0
  153. package/dist/context/parameters/webgl-parameters.d.ts.map +1 -0
  154. package/dist/context/parameters/webgl-parameters.js +2 -0
  155. package/dist/context/parameters/webgl-parameters.js.map +1 -0
  156. package/dist/context/polyfill/get-parameter-polyfill.d.ts +2 -0
  157. package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +1 -0
  158. package/dist/context/polyfill/get-parameter-polyfill.js +91 -0
  159. package/dist/context/polyfill/get-parameter-polyfill.js.map +1 -0
  160. package/dist/context/polyfill/polyfill-context.d.ts +5 -0
  161. package/dist/context/polyfill/polyfill-context.d.ts.map +1 -0
  162. package/dist/context/polyfill/polyfill-context.js +91 -0
  163. package/dist/context/polyfill/polyfill-context.js.map +1 -0
  164. package/dist/context/polyfill/polyfill-table.d.ts +48 -0
  165. package/dist/context/polyfill/polyfill-table.d.ts.map +1 -0
  166. package/dist/context/polyfill/polyfill-table.js +160 -0
  167. package/dist/context/polyfill/polyfill-table.js.map +1 -0
  168. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts +2 -0
  169. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +1 -0
  170. package/dist/context/polyfill/polyfill-vertex-array-object.js +335 -0
  171. package/dist/context/polyfill/polyfill-vertex-array-object.js.map +1 -0
  172. package/dist/context/state-tracker/deep-array-equal.d.ts +3 -0
  173. package/dist/context/state-tracker/deep-array-equal.d.ts.map +1 -0
  174. package/dist/context/state-tracker/deep-array-equal.js +21 -0
  175. package/dist/context/state-tracker/deep-array-equal.js.map +1 -0
  176. package/dist/context/state-tracker/track-context-state.d.ts +22 -0
  177. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -0
  178. package/dist/context/state-tracker/track-context-state.js +169 -0
  179. package/dist/context/state-tracker/track-context-state.js.map +1 -0
  180. package/dist/context/state-tracker/with-parameters.d.ts +13 -0
  181. package/dist/context/state-tracker/with-parameters.d.ts.map +1 -0
  182. package/dist/context/state-tracker/with-parameters.js +36 -0
  183. package/dist/context/state-tracker/with-parameters.js.map +1 -0
  184. package/dist/debug/debug-uniforms.js +1 -1
  185. package/dist/debug/debug-uniforms.js.map +1 -1
  186. package/dist/debug/debug-vertex-array.js +2 -2
  187. package/dist/debug/debug-vertex-array.js.map +1 -1
  188. package/dist/es5/_deprecated/context-api.js +116 -0
  189. package/dist/es5/_deprecated/context-api.js.map +1 -0
  190. package/dist/es5/_deprecated/features.js +118 -0
  191. package/dist/es5/_deprecated/features.js.map +1 -0
  192. package/dist/es5/adapter/converters/set-device-parameters.js +138 -0
  193. package/dist/es5/adapter/converters/set-device-parameters.js.map +1 -0
  194. package/dist/es5/adapter/converters/webgpu-texture-formats.js +296 -0
  195. package/dist/es5/adapter/converters/webgpu-texture-formats.js.map +1 -0
  196. package/dist/es5/adapter/device-helpers/device-features.js +152 -0
  197. package/dist/es5/adapter/device-helpers/device-features.js.map +1 -0
  198. package/dist/es5/adapter/device-helpers/device-limits.js +64 -0
  199. package/dist/es5/adapter/device-helpers/device-limits.js.map +1 -0
  200. package/dist/es5/adapter/device-helpers/get-device-info.js +55 -0
  201. package/dist/es5/adapter/device-helpers/get-device-info.js.map +1 -0
  202. package/dist/es5/adapter/device-helpers/is-old-ie.js +16 -0
  203. package/dist/es5/adapter/device-helpers/is-old-ie.js.map +1 -0
  204. package/dist/es5/adapter/webgl-device.js +279 -0
  205. package/dist/es5/adapter/webgl-device.js.map +1 -0
  206. package/dist/es5/adapter/webgl-shader.js +155 -0
  207. package/dist/es5/adapter/webgl-shader.js.map +1 -0
  208. package/dist/es5/bundle.js +1 -1
  209. package/dist/es5/bundle.js.map +1 -1
  210. package/dist/es5/classes/accessor.js +104 -74
  211. package/dist/es5/classes/accessor.js.map +1 -1
  212. package/dist/es5/classes/accessor.ts.disabled +1 -1
  213. package/dist/es5/classes/clear.js +55 -34
  214. package/dist/es5/classes/clear.js.map +1 -1
  215. package/dist/es5/classes/copy-and-blit.js +175 -156
  216. package/dist/es5/classes/copy-and-blit.js.map +1 -1
  217. package/dist/es5/classes/framebuffer.js +647 -518
  218. package/dist/es5/classes/framebuffer.js.map +1 -1
  219. package/dist/es5/classes/program-configuration.js +78 -128
  220. package/dist/es5/classes/program-configuration.js.map +1 -1
  221. package/dist/es5/classes/program.js +379 -292
  222. package/dist/es5/classes/program.js.map +1 -1
  223. package/dist/es5/classes/query.js +172 -107
  224. package/dist/es5/classes/query.js.map +1 -1
  225. package/dist/es5/classes/renderbuffer-formats.js +126 -164
  226. package/dist/es5/classes/renderbuffer-formats.js.map +1 -1
  227. package/dist/es5/classes/renderbuffer.js +151 -98
  228. package/dist/es5/classes/renderbuffer.js.map +1 -1
  229. package/dist/es5/classes/shader.js +195 -0
  230. package/dist/es5/classes/shader.js.map +1 -0
  231. package/dist/es5/classes/texture-2d.js +44 -17
  232. package/dist/es5/classes/texture-2d.js.map +1 -1
  233. package/dist/es5/classes/texture-3d.js +107 -48
  234. package/dist/es5/classes/texture-3d.js.map +1 -1
  235. package/dist/es5/classes/texture-cube.js +169 -110
  236. package/dist/es5/classes/texture-cube.js.map +1 -1
  237. package/dist/es5/classes/texture-formats.js +42 -71
  238. package/dist/es5/classes/texture-formats.js.map +1 -1
  239. package/dist/es5/classes/texture.js +780 -665
  240. package/dist/es5/classes/texture.js.map +1 -1
  241. package/dist/es5/classes/transform-feedback.js +206 -150
  242. package/dist/es5/classes/transform-feedback.js.map +1 -1
  243. package/dist/es5/classes/uniform-buffer-layout.js +103 -89
  244. package/dist/es5/classes/uniform-buffer-layout.js.map +1 -1
  245. package/dist/es5/classes/uniforms.js +39 -80
  246. package/dist/es5/classes/uniforms.js.map +1 -1
  247. package/dist/es5/classes/vertex-array-object.js +268 -209
  248. package/dist/es5/classes/vertex-array-object.js.map +1 -1
  249. package/dist/es5/classes/vertex-array.js +348 -303
  250. package/dist/es5/classes/vertex-array.js.map +1 -1
  251. package/dist/es5/classes/webgl-buffer.js +374 -303
  252. package/dist/es5/classes/webgl-buffer.js.map +1 -1
  253. package/dist/es5/classes/webgl-resource.js +231 -161
  254. package/dist/es5/classes/webgl-resource.js.map +1 -1
  255. package/dist/es5/context/context/context-state.js +31 -0
  256. package/dist/es5/context/context/context-state.js.map +1 -0
  257. package/dist/es5/context/context/create-context.js +57 -0
  258. package/dist/es5/context/context/create-context.js.map +1 -0
  259. package/dist/es5/context/context/device-pixels.js +115 -0
  260. package/dist/es5/context/context/device-pixels.js.map +1 -0
  261. package/dist/es5/context/context/get-canvas.js +40 -0
  262. package/dist/es5/context/context/get-canvas.js.map +1 -0
  263. package/dist/es5/context/context/resize-context.js +23 -0
  264. package/dist/es5/context/context/resize-context.js.map +1 -0
  265. package/dist/es5/context/context/webgl-checks.js +54 -0
  266. package/dist/es5/context/context/webgl-checks.js.map +1 -0
  267. package/dist/es5/context/parameters/unified-parameter-api.js +95 -0
  268. package/dist/es5/context/parameters/unified-parameter-api.js.map +1 -0
  269. package/dist/es5/context/parameters/webgl-parameter-tables.js +392 -0
  270. package/dist/es5/context/parameters/webgl-parameter-tables.js.map +1 -0
  271. package/dist/es5/context/parameters/webgl-parameters.js +6 -0
  272. package/dist/es5/context/parameters/webgl-parameters.js.map +1 -0
  273. package/dist/es5/context/polyfill/get-parameter-polyfill.js +81 -0
  274. package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +1 -0
  275. package/dist/es5/context/polyfill/polyfill-context.js +134 -0
  276. package/dist/es5/context/polyfill/polyfill-context.js.map +1 -0
  277. package/dist/es5/context/polyfill/polyfill-table.js +166 -0
  278. package/dist/es5/context/polyfill/polyfill-table.js.map +1 -0
  279. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js +341 -0
  280. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js.map +1 -0
  281. package/dist/es5/context/state-tracker/deep-array-equal.js +28 -0
  282. package/dist/es5/context/state-tracker/deep-array-equal.js.map +1 -0
  283. package/dist/es5/context/state-tracker/track-context-state.js +196 -0
  284. package/dist/es5/context/state-tracker/track-context-state.js.map +1 -0
  285. package/dist/es5/context/state-tracker/with-parameters.js +44 -0
  286. package/dist/es5/context/state-tracker/with-parameters.js.map +1 -0
  287. package/dist/es5/debug/debug-program-configuration.js +48 -20
  288. package/dist/es5/debug/debug-program-configuration.js.map +1 -1
  289. package/dist/es5/debug/debug-uniforms.js +110 -70
  290. package/dist/es5/debug/debug-uniforms.js.map +1 -1
  291. package/dist/es5/debug/debug-vertex-array.js +49 -54
  292. package/dist/es5/debug/debug-vertex-array.js.map +1 -1
  293. package/dist/es5/helpers/get-program-bindings.js +274 -0
  294. package/dist/es5/helpers/get-program-bindings.js.map +1 -0
  295. package/dist/es5/helpers/program-bindings.js +2 -0
  296. package/dist/es5/helpers/program-bindings.js.map +1 -0
  297. package/dist/es5/index.js +268 -192
  298. package/dist/es5/index.js.map +1 -1
  299. package/dist/es5/init.js +18 -14
  300. package/dist/es5/init.js.map +1 -1
  301. package/dist/es5/types/accessor.d.ts +29 -0
  302. package/dist/es5/webgl-utils/attribute-utils.js +74 -87
  303. package/dist/es5/webgl-utils/attribute-utils.js.map +1 -1
  304. package/dist/es5/webgl-utils/constants-to-keys.js +7 -7
  305. package/dist/es5/webgl-utils/constants-to-keys.js.map +1 -1
  306. package/dist/es5/webgl-utils/format-utils.js +4 -4
  307. package/dist/es5/webgl-utils/format-utils.js.map +1 -1
  308. package/dist/es5/webgl-utils/get-error.js +18 -18
  309. package/dist/es5/webgl-utils/get-error.js.map +1 -1
  310. package/dist/es5/webgl-utils/index.js +10 -10
  311. package/dist/es5/webgl-utils/parse-shader-compiler-log.js +53 -25
  312. package/dist/es5/webgl-utils/parse-shader-compiler-log.js.map +1 -1
  313. package/dist/es5/webgl-utils/texture-utils.js +32 -36
  314. package/dist/es5/webgl-utils/texture-utils.js.map +1 -1
  315. package/dist/es5/webgl-utils/typed-array-utils.js +33 -32
  316. package/dist/es5/webgl-utils/typed-array-utils.js.map +1 -1
  317. package/dist/esm/_deprecated/context-api.js +76 -0
  318. package/dist/esm/_deprecated/context-api.js.map +1 -0
  319. package/dist/esm/_deprecated/features.js +111 -0
  320. package/dist/esm/_deprecated/features.js.map +1 -0
  321. package/dist/esm/adapter/converters/set-device-parameters.js +124 -0
  322. package/dist/esm/adapter/converters/set-device-parameters.js.map +1 -0
  323. package/dist/esm/adapter/converters/webgpu-texture-formats.js +285 -0
  324. package/dist/esm/adapter/converters/webgpu-texture-formats.js.map +1 -0
  325. package/dist/esm/adapter/device-helpers/device-features.js +123 -0
  326. package/dist/esm/adapter/device-helpers/device-features.js.map +1 -0
  327. package/dist/esm/adapter/device-helpers/device-limits.js +90 -0
  328. package/dist/esm/adapter/device-helpers/device-limits.js.map +1 -0
  329. package/dist/esm/adapter/device-helpers/get-device-info.js +44 -0
  330. package/dist/esm/adapter/device-helpers/get-device-info.js.map +1 -0
  331. package/dist/{features/check-old-ie.js → esm/adapter/device-helpers/is-old-ie.js} +3 -3
  332. package/dist/esm/adapter/device-helpers/is-old-ie.js.map +1 -0
  333. package/dist/esm/adapter/webgl-device.js +207 -0
  334. package/dist/esm/adapter/webgl-device.js.map +1 -0
  335. package/dist/esm/adapter/webgl-shader.js +82 -0
  336. package/dist/esm/adapter/webgl-shader.js.map +1 -0
  337. package/dist/esm/classes/accessor.js +2 -2
  338. package/dist/esm/classes/accessor.js.map +1 -1
  339. package/dist/esm/classes/accessor.ts.disabled +1 -1
  340. package/dist/esm/classes/clear.js +7 -4
  341. package/dist/esm/classes/clear.js.map +1 -1
  342. package/dist/esm/classes/copy-and-blit.js +30 -25
  343. package/dist/esm/classes/copy-and-blit.js.map +1 -1
  344. package/dist/esm/classes/framebuffer.js +15 -15
  345. package/dist/esm/classes/framebuffer.js.map +1 -1
  346. package/dist/esm/classes/program-configuration.js +10 -97
  347. package/dist/esm/classes/program-configuration.js.map +1 -1
  348. package/dist/esm/classes/program.js +39 -28
  349. package/dist/esm/classes/program.js.map +1 -1
  350. package/dist/esm/classes/query.js +6 -5
  351. package/dist/esm/classes/query.js.map +1 -1
  352. package/dist/esm/classes/renderbuffer-formats.js +1 -1
  353. package/dist/esm/classes/renderbuffer-formats.js.map +1 -1
  354. package/dist/esm/classes/renderbuffer.js +4 -3
  355. package/dist/esm/classes/renderbuffer.js.map +1 -1
  356. package/dist/esm/classes/{webgl-shader.js → shader.js} +7 -79
  357. package/dist/esm/classes/shader.js.map +1 -0
  358. package/dist/esm/classes/texture-2d.js +5 -8
  359. package/dist/esm/classes/texture-2d.js.map +1 -1
  360. package/dist/esm/classes/texture-3d.js +15 -6
  361. package/dist/esm/classes/texture-3d.js.map +1 -1
  362. package/dist/esm/classes/texture-cube.js +3 -4
  363. package/dist/esm/classes/texture-cube.js.map +1 -1
  364. package/dist/esm/classes/texture-formats.js +1 -1
  365. package/dist/esm/classes/texture-formats.js.map +1 -1
  366. package/dist/esm/classes/texture.js +19 -18
  367. package/dist/esm/classes/texture.js.map +1 -1
  368. package/dist/esm/classes/transform-feedback.js +5 -4
  369. package/dist/esm/classes/transform-feedback.js.map +1 -1
  370. package/dist/esm/classes/uniform-buffer-layout.js +1 -1
  371. package/dist/esm/classes/uniform-buffer-layout.js.map +1 -1
  372. package/dist/esm/classes/uniforms.js +1 -2
  373. package/dist/esm/classes/uniforms.js.map +1 -1
  374. package/dist/esm/classes/vertex-array-object.js +11 -12
  375. package/dist/esm/classes/vertex-array-object.js.map +1 -1
  376. package/dist/esm/classes/vertex-array.js +3 -4
  377. package/dist/esm/classes/vertex-array.js.map +1 -1
  378. package/dist/esm/classes/webgl-buffer.js +8 -5
  379. package/dist/esm/classes/webgl-buffer.js.map +1 -1
  380. package/dist/esm/classes/webgl-resource.js +12 -8
  381. package/dist/esm/classes/webgl-resource.js.map +1 -1
  382. package/dist/esm/context/context/context-state.js +26 -0
  383. package/dist/esm/context/context/context-state.js.map +1 -0
  384. package/dist/esm/context/context/create-context.js +37 -0
  385. package/dist/esm/context/context/create-context.js.map +1 -0
  386. package/dist/esm/context/context/device-pixels.js +98 -0
  387. package/dist/esm/context/context/device-pixels.js.map +1 -0
  388. package/dist/esm/context/context/get-canvas.js +31 -0
  389. package/dist/esm/context/context/get-canvas.js.map +1 -0
  390. package/dist/esm/context/context/resize-context.js +15 -0
  391. package/dist/esm/context/context/resize-context.js.map +1 -0
  392. package/dist/esm/context/context/webgl-checks.js +34 -0
  393. package/dist/esm/context/context/webgl-checks.js.map +1 -0
  394. package/dist/esm/context/parameters/unified-parameter-api.js +65 -0
  395. package/dist/esm/context/parameters/unified-parameter-api.js.map +1 -0
  396. package/dist/esm/context/parameters/webgl-parameter-tables.js +445 -0
  397. package/dist/esm/context/parameters/webgl-parameter-tables.js.map +1 -0
  398. package/dist/esm/context/parameters/webgl-parameters.js +2 -0
  399. package/dist/esm/context/parameters/webgl-parameters.js.map +1 -0
  400. package/dist/esm/context/polyfill/get-parameter-polyfill.js +91 -0
  401. package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +1 -0
  402. package/dist/esm/context/polyfill/polyfill-context.js +91 -0
  403. package/dist/esm/context/polyfill/polyfill-context.js.map +1 -0
  404. package/dist/esm/context/polyfill/polyfill-table.js +160 -0
  405. package/dist/esm/context/polyfill/polyfill-table.js.map +1 -0
  406. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js +335 -0
  407. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js.map +1 -0
  408. package/dist/esm/context/state-tracker/deep-array-equal.js +21 -0
  409. package/dist/esm/context/state-tracker/deep-array-equal.js.map +1 -0
  410. package/dist/esm/context/state-tracker/track-context-state.js +169 -0
  411. package/dist/esm/context/state-tracker/track-context-state.js.map +1 -0
  412. package/dist/esm/context/state-tracker/with-parameters.js +36 -0
  413. package/dist/esm/context/state-tracker/with-parameters.js.map +1 -0
  414. package/dist/esm/debug/debug-uniforms.js +1 -1
  415. package/dist/esm/debug/debug-uniforms.js.map +1 -1
  416. package/dist/esm/debug/debug-vertex-array.js +2 -2
  417. package/dist/esm/debug/debug-vertex-array.js.map +1 -1
  418. package/dist/esm/helpers/get-program-bindings.js +228 -0
  419. package/dist/esm/helpers/get-program-bindings.js.map +1 -0
  420. package/dist/esm/helpers/program-bindings.js +2 -0
  421. package/dist/esm/helpers/program-bindings.js.map +1 -0
  422. package/dist/esm/index.js +26 -20
  423. package/dist/esm/index.js.map +1 -1
  424. package/dist/esm/init.js +11 -8
  425. package/dist/esm/init.js.map +1 -1
  426. package/dist/esm/types/accessor.d.ts +29 -0
  427. package/dist/esm/webgl-utils/attribute-utils.js +1 -1
  428. package/dist/esm/webgl-utils/attribute-utils.js.map +1 -1
  429. package/dist/esm/webgl-utils/constants-to-keys.js +1 -1
  430. package/dist/esm/webgl-utils/constants-to-keys.js.map +1 -1
  431. package/dist/esm/webgl-utils/format-utils.js +1 -1
  432. package/dist/esm/webgl-utils/format-utils.js.map +1 -1
  433. package/dist/esm/webgl-utils/texture-utils.js +2 -2
  434. package/dist/esm/webgl-utils/texture-utils.js.map +1 -1
  435. package/dist/esm/webgl-utils/typed-array-utils.js +22 -18
  436. package/dist/esm/webgl-utils/typed-array-utils.js.map +1 -1
  437. package/dist/helpers/get-program-bindings.d.ts +8 -0
  438. package/dist/helpers/get-program-bindings.d.ts.map +1 -0
  439. package/dist/helpers/get-program-bindings.js +228 -0
  440. package/dist/helpers/get-program-bindings.js.map +1 -0
  441. package/dist/helpers/program-bindings.d.ts +41 -0
  442. package/dist/helpers/program-bindings.d.ts.map +1 -0
  443. package/dist/helpers/program-bindings.js +2 -0
  444. package/dist/helpers/program-bindings.js.map +1 -0
  445. package/dist/index.d.ts +41 -20
  446. package/dist/index.d.ts.map +1 -1
  447. package/dist/index.js +26 -20
  448. package/dist/index.js.map +1 -1
  449. package/dist/init.d.ts.map +1 -1
  450. package/dist/init.js +11 -8
  451. package/dist/init.js.map +1 -1
  452. package/dist/types/accessor.d.ts +29 -0
  453. package/dist/webgl-utils/attribute-utils.d.ts +1 -1
  454. package/dist/webgl-utils/attribute-utils.js +1 -1
  455. package/dist/webgl-utils/attribute-utils.js.map +1 -1
  456. package/dist/webgl-utils/constants-to-keys.js +1 -1
  457. package/dist/webgl-utils/constants-to-keys.js.map +1 -1
  458. package/dist/webgl-utils/format-utils.d.ts +2 -2
  459. package/dist/webgl-utils/format-utils.js +1 -1
  460. package/dist/webgl-utils/format-utils.js.map +1 -1
  461. package/dist/webgl-utils/texture-utils.d.ts +12 -8
  462. package/dist/webgl-utils/texture-utils.d.ts.map +1 -1
  463. package/dist/webgl-utils/texture-utils.js +2 -2
  464. package/dist/webgl-utils/texture-utils.js.map +1 -1
  465. package/dist/webgl-utils/typed-array-utils.d.ts +39 -32
  466. package/dist/webgl-utils/typed-array-utils.d.ts.map +1 -1
  467. package/dist/webgl-utils/typed-array-utils.js +22 -18
  468. package/dist/webgl-utils/typed-array-utils.js.map +1 -1
  469. package/package.json +5 -6
  470. package/src/.DS_Store +0 -0
  471. package/src/_deprecated/context-api.ts +146 -0
  472. package/src/_deprecated/features.ts +159 -0
  473. package/src/adapter/converters/set-device-parameters.ts +182 -0
  474. package/src/adapter/converters/webgpu-texture-formats.ts +167 -0
  475. package/src/adapter/device-helpers/device-features.ts +227 -0
  476. package/src/adapter/device-helpers/device-limits.ts +150 -0
  477. package/src/adapter/device-helpers/get-device-info.ts +49 -0
  478. package/src/{features/check-old-ie.ts → adapter/device-helpers/is-old-ie.ts} +3 -3
  479. package/src/adapter/webgl-device.ts +399 -0
  480. package/src/adapter/webgl-shader.ts +84 -0
  481. package/src/classes/accessor.js +2 -2
  482. package/src/classes/accessor.ts.disabled +1 -1
  483. package/src/classes/clear.ts +9 -4
  484. package/src/classes/copy-and-blit.ts +49 -52
  485. package/src/classes/framebuffer.ts +38 -35
  486. package/src/classes/program-configuration.ts +28 -81
  487. package/src/classes/program.ts +89 -75
  488. package/src/classes/query.ts +6 -6
  489. package/src/classes/renderbuffer-formats.ts +1 -1
  490. package/src/classes/renderbuffer.ts +5 -4
  491. package/src/classes/{webgl-shader.ts → shader.ts} +7 -78
  492. package/src/classes/texture-2d.ts +6 -11
  493. package/src/classes/texture-3d.ts +16 -11
  494. package/src/classes/texture-cube.ts +7 -7
  495. package/src/classes/texture-formats.ts +1 -1
  496. package/src/classes/texture.ts +39 -40
  497. package/src/classes/transform-feedback.ts +14 -13
  498. package/src/classes/uniform-buffer-layout.ts +1 -1
  499. package/src/classes/uniforms.ts +4 -10
  500. package/src/classes/vertex-array-object.ts +17 -20
  501. package/src/classes/vertex-array.ts +16 -11
  502. package/src/classes/webgl-buffer.ts +7 -5
  503. package/src/classes/webgl-resource.ts +20 -18
  504. package/src/context/context/context-state.ts +39 -0
  505. package/src/context/context/create-context.ts +83 -0
  506. package/src/context/context/device-pixels.ts +147 -0
  507. package/src/context/context/get-canvas.ts +37 -0
  508. package/src/context/context/resize-context.ts +37 -0
  509. package/src/context/context/webgl-checks.ts +49 -0
  510. package/src/context/parameters/unified-parameter-api.ts +128 -0
  511. package/src/context/parameters/webgl-parameter-tables.ts +625 -0
  512. package/src/context/parameters/webgl-parameters.ts +197 -0
  513. package/src/context/polyfill/get-parameter-polyfill.ts +118 -0
  514. package/src/context/polyfill/polyfill-context.ts +98 -0
  515. package/src/context/polyfill/polyfill-table.ts +162 -0
  516. package/src/context/polyfill/polyfill-vertex-array-object.ts +360 -0
  517. package/src/context/state-tracker/deep-array-equal.ts +20 -0
  518. package/src/context/state-tracker/track-context-state.ts +250 -0
  519. package/src/context/state-tracker/with-parameters.ts +50 -0
  520. package/src/debug/debug-uniforms.ts +1 -1
  521. package/src/debug/debug-vertex-array.ts +2 -4
  522. package/src/helpers/get-program-bindings.ts +244 -0
  523. package/src/helpers/program-bindings.ts +46 -0
  524. package/src/index.ts +94 -23
  525. package/src/init.ts +12 -9
  526. package/src/types/accessor.d.ts +29 -0
  527. package/src/types.ts +1 -1
  528. package/src/webgl-utils/attribute-utils.ts +1 -1
  529. package/src/webgl-utils/constants-to-keys.ts +1 -1
  530. package/src/webgl-utils/format-utils.ts +1 -1
  531. package/src/webgl-utils/{texture-utils.js → texture-utils.ts} +13 -10
  532. package/src/webgl-utils/{typed-array-utils.js → typed-array-utils.ts} +59 -16
  533. package/dist/classes/webgl-shader.d.ts.map +0 -1
  534. package/dist/classes/webgl-shader.js.map +0 -1
  535. package/dist/context/gl-context.d.ts +0 -15
  536. package/dist/context/gl-context.d.ts.map +0 -1
  537. package/dist/context/gl-context.js +0 -32
  538. package/dist/context/gl-context.js.map +0 -1
  539. package/dist/context/luma-context-data.d.ts +0 -31
  540. package/dist/context/luma-context-data.d.ts.map +0 -1
  541. package/dist/context/luma-context-data.js +0 -5
  542. package/dist/context/luma-context-data.js.map +0 -1
  543. package/dist/es5/classes/webgl-shader.js +0 -213
  544. package/dist/es5/classes/webgl-shader.js.map +0 -1
  545. package/dist/es5/context/gl-context.js +0 -46
  546. package/dist/es5/context/gl-context.js.map +0 -1
  547. package/dist/es5/context/luma-context-data.js +0 -12
  548. package/dist/es5/context/luma-context-data.js.map +0 -1
  549. package/dist/es5/features/check-glsl-extension.js +0 -40
  550. package/dist/es5/features/check-glsl-extension.js.map +0 -1
  551. package/dist/es5/features/check-old-ie.js +0 -15
  552. package/dist/es5/features/check-old-ie.js.map +0 -1
  553. package/dist/es5/features/features.js +0 -85
  554. package/dist/es5/features/features.js.map +0 -1
  555. package/dist/es5/features/index.js +0 -64
  556. package/dist/es5/features/index.js.map +0 -1
  557. package/dist/es5/features/limits.js +0 -72
  558. package/dist/es5/features/limits.js.map +0 -1
  559. package/dist/es5/features/webgl-features-table.js +0 -84
  560. package/dist/es5/features/webgl-features-table.js.map +0 -1
  561. package/dist/es5/features/webgl-limits-table.js +0 -172
  562. package/dist/es5/features/webgl-limits-table.js.map +0 -1
  563. package/dist/es5/utils/array-utils-flat.js +0 -50
  564. package/dist/es5/utils/array-utils-flat.js.map +0 -1
  565. package/dist/es5/utils/assert.js +0 -13
  566. package/dist/es5/utils/assert.js.map +0 -1
  567. package/dist/es5/utils/check-props.js +0 -50
  568. package/dist/es5/utils/check-props.js.map +0 -1
  569. package/dist/es5/utils/format-value.js +0 -57
  570. package/dist/es5/utils/format-value.js.map +0 -1
  571. package/dist/es5/utils/index.js +0 -68
  572. package/dist/es5/utils/index.js.map +0 -1
  573. package/dist/es5/utils/is-old-ie.js +0 -13
  574. package/dist/es5/utils/is-old-ie.js.map +0 -1
  575. package/dist/es5/utils/load-file.js +0 -43
  576. package/dist/es5/utils/load-file.js.map +0 -1
  577. package/dist/es5/utils/stub-methods.js +0 -25
  578. package/dist/es5/utils/stub-methods.js.map +0 -1
  579. package/dist/es5/utils/utils.js +0 -31
  580. package/dist/es5/utils/utils.js.map +0 -1
  581. package/dist/es5/webgl-utils/texture-utils.d.ts +0 -11
  582. package/dist/es5/webgl-utils/typed-array-utils.d.ts +0 -36
  583. package/dist/esm/classes/webgl-shader.js.map +0 -1
  584. package/dist/esm/context/gl-context.js +0 -32
  585. package/dist/esm/context/gl-context.js.map +0 -1
  586. package/dist/esm/context/luma-context-data.js +0 -5
  587. package/dist/esm/context/luma-context-data.js.map +0 -1
  588. package/dist/esm/features/check-glsl-extension.js +0 -27
  589. package/dist/esm/features/check-glsl-extension.js.map +0 -1
  590. package/dist/esm/features/check-old-ie.js.map +0 -1
  591. package/dist/esm/features/features.js +0 -67
  592. package/dist/esm/features/features.js.map +0 -1
  593. package/dist/esm/features/index.js +0 -5
  594. package/dist/esm/features/index.js.map +0 -1
  595. package/dist/esm/features/limits.js +0 -55
  596. package/dist/esm/features/limits.js.map +0 -1
  597. package/dist/esm/features/webgl-features-table.js +0 -71
  598. package/dist/esm/features/webgl-features-table.js.map +0 -1
  599. package/dist/esm/features/webgl-limits-table.js +0 -161
  600. package/dist/esm/features/webgl-limits-table.js.map +0 -1
  601. package/dist/esm/utils/array-utils-flat.js +0 -39
  602. package/dist/esm/utils/array-utils-flat.js.map +0 -1
  603. package/dist/esm/utils/assert.js +0 -6
  604. package/dist/esm/utils/assert.js.map +0 -1
  605. package/dist/esm/utils/check-props.js +0 -38
  606. package/dist/esm/utils/check-props.js.map +0 -1
  607. package/dist/esm/utils/format-value.js +0 -50
  608. package/dist/esm/utils/format-value.js.map +0 -1
  609. package/dist/esm/utils/index.js +0 -7
  610. package/dist/esm/utils/index.js.map +0 -1
  611. package/dist/esm/utils/is-old-ie.js +0 -5
  612. package/dist/esm/utils/is-old-ie.js.map +0 -1
  613. package/dist/esm/utils/load-file.js +0 -30
  614. package/dist/esm/utils/load-file.js.map +0 -1
  615. package/dist/esm/utils/stub-methods.js +0 -16
  616. package/dist/esm/utils/stub-methods.js.map +0 -1
  617. package/dist/esm/utils/utils.js +0 -20
  618. package/dist/esm/utils/utils.js.map +0 -1
  619. package/dist/esm/webgl-utils/texture-utils.d.ts +0 -11
  620. package/dist/esm/webgl-utils/typed-array-utils.d.ts +0 -36
  621. package/dist/features/check-glsl-extension.d.ts +0 -2
  622. package/dist/features/check-glsl-extension.d.ts.map +0 -1
  623. package/dist/features/check-glsl-extension.js +0 -27
  624. package/dist/features/check-glsl-extension.js.map +0 -1
  625. package/dist/features/check-old-ie.d.ts +0 -2
  626. package/dist/features/check-old-ie.d.ts.map +0 -1
  627. package/dist/features/check-old-ie.js.map +0 -1
  628. package/dist/features/features.d.ts +0 -6
  629. package/dist/features/features.d.ts.map +0 -1
  630. package/dist/features/features.js +0 -67
  631. package/dist/features/features.js.map +0 -1
  632. package/dist/features/index.d.ts +0 -5
  633. package/dist/features/index.d.ts.map +0 -1
  634. package/dist/features/index.js +0 -5
  635. package/dist/features/index.js.map +0 -1
  636. package/dist/features/limits.d.ts +0 -28
  637. package/dist/features/limits.d.ts.map +0 -1
  638. package/dist/features/limits.js +0 -55
  639. package/dist/features/limits.js.map +0 -1
  640. package/dist/features/webgl-features-table.d.ts.map +0 -1
  641. package/dist/features/webgl-features-table.js +0 -71
  642. package/dist/features/webgl-features-table.js.map +0 -1
  643. package/dist/features/webgl-limits-table.d.ts +0 -161
  644. package/dist/features/webgl-limits-table.d.ts.map +0 -1
  645. package/dist/features/webgl-limits-table.js +0 -161
  646. package/dist/features/webgl-limits-table.js.map +0 -1
  647. package/dist/utils/array-utils-flat.d.ts +0 -9
  648. package/dist/utils/array-utils-flat.d.ts.map +0 -1
  649. package/dist/utils/array-utils-flat.js +0 -39
  650. package/dist/utils/array-utils-flat.js.map +0 -1
  651. package/dist/utils/assert.d.ts +0 -2
  652. package/dist/utils/assert.d.ts.map +0 -1
  653. package/dist/utils/assert.js +0 -6
  654. package/dist/utils/assert.js.map +0 -1
  655. package/dist/utils/check-props.d.ts +0 -2
  656. package/dist/utils/check-props.d.ts.map +0 -1
  657. package/dist/utils/check-props.js +0 -38
  658. package/dist/utils/check-props.js.map +0 -1
  659. package/dist/utils/format-value.d.ts +0 -5
  660. package/dist/utils/format-value.d.ts.map +0 -1
  661. package/dist/utils/format-value.js +0 -50
  662. package/dist/utils/format-value.js.map +0 -1
  663. package/dist/utils/index.d.ts +0 -7
  664. package/dist/utils/index.d.ts.map +0 -1
  665. package/dist/utils/index.js +0 -7
  666. package/dist/utils/index.js.map +0 -1
  667. package/dist/utils/is-old-ie.d.ts +0 -4
  668. package/dist/utils/is-old-ie.d.ts.map +0 -1
  669. package/dist/utils/is-old-ie.js +0 -5
  670. package/dist/utils/is-old-ie.js.map +0 -1
  671. package/dist/utils/load-file.d.ts +0 -4
  672. package/dist/utils/load-file.d.ts.map +0 -1
  673. package/dist/utils/load-file.js +0 -30
  674. package/dist/utils/load-file.js.map +0 -1
  675. package/dist/utils/stub-methods.d.ts +0 -2
  676. package/dist/utils/stub-methods.d.ts.map +0 -1
  677. package/dist/utils/stub-methods.js +0 -16
  678. package/dist/utils/stub-methods.js.map +0 -1
  679. package/dist/utils/utils.d.ts +0 -15
  680. package/dist/utils/utils.d.ts.map +0 -1
  681. package/dist/utils/utils.js +0 -20
  682. package/dist/utils/utils.js.map +0 -1
  683. package/src/context/gl-context.ts +0 -31
  684. package/src/context/luma-context-data.ts +0 -27
  685. package/src/features/check-glsl-extension.ts +0 -34
  686. package/src/features/features.ts +0 -80
  687. package/src/features/index.ts +0 -5
  688. package/src/features/limits.ts +0 -66
  689. package/src/features/webgl-features-table.ts +0 -104
  690. package/src/features/webgl-limits-table.ts +0 -51
  691. package/src/utils/array-utils-flat.ts +0 -56
  692. package/src/utils/assert.ts +0 -7
  693. package/src/utils/check-props.ts +0 -68
  694. package/src/utils/format-value.ts +0 -37
  695. package/src/utils/index.ts +0 -6
  696. package/src/utils/is-old-ie.ts +0 -6
  697. package/src/utils/load-file.ts +0 -40
  698. package/src/utils/stub-methods.ts +0 -20
  699. package/src/utils/utils.ts +0 -35
  700. package/src/webgl-utils/texture-utils.d.ts +0 -11
  701. package/src/webgl-utils/typed-array-utils.d.ts +0 -36
@@ -7,271 +7,330 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.default = void 0;
9
9
 
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
11
 
12
- var _constants = _interopRequireDefault(require("@luma.gl/constants"));
12
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
13
 
14
- var _gltools = require("@luma.gl/gltools");
14
+ var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
15
15
 
16
- var _probe = require("probe.gl");
16
+ var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
17
17
 
18
- var _webglResource = _interopRequireDefault(require("./webgl-resource"));
18
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
19
19
 
20
- var _webglBuffer = _interopRequireDefault(require("./webgl-buffer"));
20
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
21
21
 
22
- var _arrayUtilsFlat = require("../utils/array-utils-flat");
22
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
23
23
 
24
- var _utils = require("../utils");
24
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
25
25
 
26
- var _lumaContextData = require("../context/luma-context-data");
26
+ var _api = require("@luma.gl/api");
27
27
 
28
- const ERR_ELEMENTS = 'elements must be GL.ELEMENT_ARRAY_BUFFER';
28
+ var _constants = _interopRequireDefault(require("@luma.gl/constants"));
29
29
 
30
- class VertexArrayObject extends _webglResource.default {
31
- static isSupported(gl, options) {
32
- if (options !== null && options !== void 0 && options.constantAttributeZero) {
33
- return (0, _gltools.isWebGL2)(gl) || (0, _probe.getBrowser)() === 'Chrome';
34
- }
30
+ var _env = require("@probe.gl/env");
35
31
 
36
- return true;
37
- }
32
+ var _webglDevice = _interopRequireDefault(require("../adapter/webgl-device"));
38
33
 
39
- static getDefaultArray(gl) {
40
- const lumaContextData = (0, _lumaContextData.getLumaContextData)(gl);
41
- lumaContextData.defaultVertexArray = lumaContextData.defaultVertexArray || new VertexArrayObject(gl, {
42
- handle: null,
43
- isDefaultArray: true
44
- });
45
- return lumaContextData.defaultVertexArray;
46
- }
34
+ var _webglChecks = require("../context/context/webgl-checks");
47
35
 
48
- static getMaxAttributes(gl) {
49
- VertexArrayObject.MAX_ATTRIBUTES = VertexArrayObject.MAX_ATTRIBUTES || gl.getParameter(gl.MAX_VERTEX_ATTRIBS);
50
- return VertexArrayObject.MAX_ATTRIBUTES;
51
- }
36
+ var _webglResource = _interopRequireDefault(require("./webgl-resource"));
52
37
 
53
- static setConstant(gl, location, array) {
54
- switch (array.constructor) {
55
- case Float32Array:
56
- VertexArrayObject._setConstantFloatArray(gl, location, array);
38
+ var _webglBuffer = _interopRequireDefault(require("./webgl-buffer"));
57
39
 
58
- break;
40
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
59
41
 
60
- case Int32Array:
61
- VertexArrayObject._setConstantIntArray((0, _gltools.assertWebGL2Context)(gl), location, array);
42
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
62
43
 
63
- break;
44
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
64
45
 
65
- case Uint32Array:
66
- VertexArrayObject._setConstantUintArray((0, _gltools.assertWebGL2Context)(gl), location, array);
46
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
67
47
 
68
- break;
48
+ var ERR_ELEMENTS = 'elements must be GL.ELEMENT_ARRAY_BUFFER';
69
49
 
70
- default:
71
- (0, _utils.assert)(false);
72
- }
73
- }
50
+ var VertexArrayObject = function (_WebGLResource) {
51
+ (0, _inherits2.default)(VertexArrayObject, _WebGLResource);
74
52
 
75
- constructor(gl, opts) {
76
- super(gl, { ...opts,
77
- id: (opts === null || opts === void 0 ? void 0 : opts.id) || (opts === null || opts === void 0 ? void 0 : opts.program) && (opts === null || opts === void 0 ? void 0 : opts.program.id)
78
- }, {});
79
- (0, _defineProperty2.default)(this, "buffer", null);
80
- (0, _defineProperty2.default)(this, "bufferValue", null);
81
- (0, _defineProperty2.default)(this, "isDefaultArray", false);
82
- this.buffer = null;
83
- this.bufferValue = null;
84
- this.isDefaultArray = (opts === null || opts === void 0 ? void 0 : opts.isDefaultArray) || false;
85
- Object.seal(this);
86
- }
53
+ var _super = _createSuper(VertexArrayObject);
87
54
 
88
- delete() {
89
- super.delete();
55
+ function VertexArrayObject(gl, props) {
56
+ var _this;
90
57
 
91
- if (this.buffer) {
92
- this.buffer.delete();
93
- }
94
-
95
- return this;
58
+ (0, _classCallCheck2.default)(this, VertexArrayObject);
59
+ _this = _super.call(this, _webglDevice.default.attach(gl), _objectSpread(_objectSpread({}, props), {}, {
60
+ 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)
61
+ }), {});
62
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "buffer", null);
63
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "bufferValue", null);
64
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "isDefaultArray", false);
65
+ _this.buffer = null;
66
+ _this.bufferValue = null;
67
+ _this.isDefaultArray = (props === null || props === void 0 ? void 0 : props.isDefaultArray) || false;
68
+ Object.seal((0, _assertThisInitialized2.default)(_this));
69
+ return _this;
96
70
  }
97
71
 
98
- get MAX_ATTRIBUTES() {
99
- return VertexArrayObject.getMaxAttributes(this.gl);
100
- }
72
+ (0, _createClass2.default)(VertexArrayObject, [{
73
+ key: "delete",
74
+ value: function _delete() {
75
+ (0, _get2.default)((0, _getPrototypeOf2.default)(VertexArrayObject.prototype), "delete", this).call(this);
101
76
 
102
- setElementBuffer(elementBuffer = null, opts = {}) {
103
- (0, _utils.assert)(!elementBuffer || elementBuffer.target === _constants.default.ELEMENT_ARRAY_BUFFER, ERR_ELEMENTS);
104
- this.bind(() => {
105
- this.gl.bindBuffer(_constants.default.ELEMENT_ARRAY_BUFFER, elementBuffer ? elementBuffer.handle : null);
106
- });
107
- return this;
108
- }
77
+ if (this.buffer) {
78
+ this.buffer.delete();
79
+ }
109
80
 
110
- setBuffer(location, buffer, accessor) {
111
- if (buffer.target === _constants.default.ELEMENT_ARRAY_BUFFER) {
112
- return this.setElementBuffer(buffer, accessor);
81
+ return this;
113
82
  }
114
-
115
- const {
116
- size,
117
- type,
118
- stride,
119
- offset,
120
- normalized,
121
- integer,
122
- divisor
123
- } = accessor;
124
- const {
125
- gl,
126
- gl2
127
- } = this;
128
- location = Number(location);
129
- this.bind(() => {
130
- gl.bindBuffer(gl.ARRAY_BUFFER, buffer.handle);
131
-
132
- if (integer) {
133
- (0, _utils.assert)((0, _gltools.isWebGL2)(gl));
134
- gl2.vertexAttribIPointer(location, size, type, stride, offset);
135
- } else {
136
- gl.vertexAttribPointer(location, size, type, normalized, stride, offset);
83
+ }, {
84
+ key: "MAX_ATTRIBUTES",
85
+ get: function get() {
86
+ return VertexArrayObject.getMaxAttributes(this.gl);
87
+ }
88
+ }, {
89
+ key: "setElementBuffer",
90
+ value: function setElementBuffer() {
91
+ var _this2 = this;
92
+
93
+ var elementBuffer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
94
+ var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
95
+ (0, _api.assert)(!elementBuffer || elementBuffer.target === _constants.default.ELEMENT_ARRAY_BUFFER, ERR_ELEMENTS);
96
+ this.bind(function () {
97
+ _this2.gl.bindBuffer(_constants.default.ELEMENT_ARRAY_BUFFER, elementBuffer ? elementBuffer.handle : null);
98
+ });
99
+ return this;
100
+ }
101
+ }, {
102
+ key: "setBuffer",
103
+ value: function setBuffer(location, buffer, accessor) {
104
+ if (buffer.target === _constants.default.ELEMENT_ARRAY_BUFFER) {
105
+ return this.setElementBuffer(buffer, accessor);
137
106
  }
138
107
 
139
- gl.enableVertexAttribArray(location);
140
- gl2.vertexAttribDivisor(location, divisor || 0);
141
- });
142
- return this;
143
- }
144
-
145
- enable(location, enable = true) {
146
- const disablingAttributeZero = !enable && location === 0 && !VertexArrayObject.isSupported(this.gl, {
147
- constantAttributeZero: true
148
- });
149
-
150
- if (!disablingAttributeZero) {
108
+ var size = accessor.size,
109
+ type = accessor.type,
110
+ stride = accessor.stride,
111
+ offset = accessor.offset,
112
+ normalized = accessor.normalized,
113
+ integer = accessor.integer,
114
+ divisor = accessor.divisor;
115
+ var gl = this.gl,
116
+ gl2 = this.gl2;
151
117
  location = Number(location);
152
- this.bind(() => enable ? this.gl.enableVertexAttribArray(location) : this.gl.disableVertexAttribArray(location));
153
- }
154
-
155
- return this;
156
- }
157
-
158
- getConstantBuffer(elementCount, value) {
159
- const constantValue = this._normalizeConstantArrayValue(value);
160
-
161
- const byteLength = constantValue.byteLength * elementCount;
162
- const length = constantValue.length * elementCount;
163
- let updateNeeded = !this.buffer;
164
- this.buffer = this.buffer || new _webglBuffer.default(this.gl, byteLength);
165
- updateNeeded = updateNeeded || this.buffer.reallocate(byteLength);
166
- updateNeeded = updateNeeded || !this._compareConstantArrayValues(constantValue, this.bufferValue);
167
-
168
- if (updateNeeded) {
169
- const typedArray = (0, _arrayUtilsFlat.getScratchArray)(value.constructor, length);
170
- (0, _arrayUtilsFlat.fillArray)({
171
- target: typedArray,
172
- source: constantValue,
173
- start: 0,
174
- count: length
118
+ this.bind(function () {
119
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer.handle);
120
+
121
+ if (integer) {
122
+ (0, _api.assert)((0, _webglChecks.isWebGL2)(gl));
123
+ gl2.vertexAttribIPointer(location, size, type, stride, offset);
124
+ } else {
125
+ gl.vertexAttribPointer(location, size, type, normalized, stride, offset);
126
+ }
127
+
128
+ gl.enableVertexAttribArray(location);
129
+ gl2.vertexAttribDivisor(location, divisor || 0);
175
130
  });
176
- this.buffer.subData(typedArray);
177
- this.bufferValue = value;
131
+ return this;
178
132
  }
133
+ }, {
134
+ key: "enable",
135
+ value: function enable(location) {
136
+ var _this3 = this;
179
137
 
180
- return this.buffer;
181
- }
138
+ var _enable = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
182
139
 
183
- initialize(props) {
184
- return this.setProps(props);
185
- }
140
+ var disablingAttributeZero = !_enable && location === 0 && !VertexArrayObject.isSupported(this.gl, {
141
+ constantAttributeZero: true
142
+ });
186
143
 
187
- setProps(props) {
188
- return this;
189
- }
144
+ if (!disablingAttributeZero) {
145
+ location = Number(location);
146
+ this.bind(function () {
147
+ return _enable ? _this3.gl.enableVertexAttribArray(location) : _this3.gl.disableVertexAttribArray(location);
148
+ });
149
+ }
190
150
 
191
- _normalizeConstantArrayValue(arrayValue) {
192
- if (Array.isArray(arrayValue)) {
193
- return new Float32Array(arrayValue);
151
+ return this;
194
152
  }
153
+ }, {
154
+ key: "getConstantBuffer",
155
+ value: function getConstantBuffer(elementCount, value) {
156
+ var constantValue = this._normalizeConstantArrayValue(value);
157
+
158
+ var byteLength = constantValue.byteLength * elementCount;
159
+ var length = constantValue.length * elementCount;
160
+ var updateNeeded = !this.buffer;
161
+ this.buffer = this.buffer || new _webglBuffer.default(this.gl, byteLength);
162
+ updateNeeded = updateNeeded || this.buffer.reallocate(byteLength);
163
+ updateNeeded = updateNeeded || !this._compareConstantArrayValues(constantValue, this.bufferValue);
164
+
165
+ if (updateNeeded) {
166
+ var typedArray = (0, _api.getScratchArray)(value.constructor, length);
167
+ (0, _api.fillArray)({
168
+ target: typedArray,
169
+ source: constantValue,
170
+ start: 0,
171
+ count: length
172
+ });
173
+ this.buffer.subData(typedArray);
174
+ this.bufferValue = value;
175
+ }
195
176
 
196
- return arrayValue;
197
- }
198
-
199
- _compareConstantArrayValues(v1, v2) {
200
- if (!v1 || !v2 || v1.length !== v2.length || v1.constructor !== v2.constructor) {
201
- return false;
177
+ return this.buffer;
178
+ }
179
+ }, {
180
+ key: "initialize",
181
+ value: function initialize(props) {
182
+ return this.setProps(props);
202
183
  }
184
+ }, {
185
+ key: "setProps",
186
+ value: function setProps(props) {
187
+ return this;
188
+ }
189
+ }, {
190
+ key: "_normalizeConstantArrayValue",
191
+ value: function _normalizeConstantArrayValue(arrayValue) {
192
+ if (Array.isArray(arrayValue)) {
193
+ return new Float32Array(arrayValue);
194
+ }
203
195
 
204
- for (let i = 0; i < v1.length; ++i) {
205
- if (v1[i] !== v2[i]) {
196
+ return arrayValue;
197
+ }
198
+ }, {
199
+ key: "_compareConstantArrayValues",
200
+ value: function _compareConstantArrayValues(v1, v2) {
201
+ if (!v1 || !v2 || v1.length !== v2.length || v1.constructor !== v2.constructor) {
206
202
  return false;
207
203
  }
208
- }
209
-
210
- return true;
211
- }
212
204
 
213
- static _setConstantFloatArray(gl, location, array) {
214
- switch (array.length) {
215
- case 1:
216
- gl.vertexAttrib1fv(location, array);
217
- break;
218
-
219
- case 2:
220
- gl.vertexAttrib2fv(location, array);
221
- break;
222
-
223
- case 3:
224
- gl.vertexAttrib3fv(location, array);
225
- break;
226
-
227
- case 4:
228
- gl.vertexAttrib4fv(location, array);
229
- break;
205
+ for (var i = 0; i < v1.length; ++i) {
206
+ if (v1[i] !== v2[i]) {
207
+ return false;
208
+ }
209
+ }
230
210
 
231
- default:
232
- (0, _utils.assert)(false);
211
+ return true;
233
212
  }
234
- }
213
+ }, {
214
+ key: "_createHandle",
215
+ value: function _createHandle() {
216
+ return this.gl2.createVertexArray();
217
+ }
218
+ }, {
219
+ key: "_deleteHandle",
220
+ value: function _deleteHandle() {
221
+ this.gl2.deleteVertexArray(this.handle);
222
+ return [this.elements];
223
+ }
224
+ }, {
225
+ key: "_bindHandle",
226
+ value: function _bindHandle(handle) {
227
+ this.gl2.bindVertexArray(handle);
228
+ }
229
+ }, {
230
+ key: "_getParameter",
231
+ value: function _getParameter(pname, _ref) {
232
+ var _this4 = this;
233
+
234
+ var location = _ref.location;
235
+ (0, _api.assert)(Number.isFinite(location));
236
+ return this.bind(function () {
237
+ switch (pname) {
238
+ case _constants.default.VERTEX_ATTRIB_ARRAY_POINTER:
239
+ return _this4.gl.getVertexAttribOffset(location, pname);
240
+
241
+ default:
242
+ return _this4.gl.getVertexAttrib(location, pname);
243
+ }
244
+ });
245
+ }
246
+ }], [{
247
+ key: "isSupported",
248
+ value: function isSupported(gl, options) {
249
+ if (options !== null && options !== void 0 && options.constantAttributeZero) {
250
+ return (0, _webglChecks.isWebGL2)(gl) || (0, _env.getBrowser)() === 'Chrome';
251
+ }
235
252
 
236
- static _setConstantIntArray(gl, location, array) {
237
- (0, _utils.assert)((0, _gltools.isWebGL2)(gl));
238
- gl.vertexAttribI4iv(location, array);
239
- }
253
+ return true;
254
+ }
255
+ }, {
256
+ key: "getDefaultArray",
257
+ value: function getDefaultArray(gl) {
258
+ var webglDevice = _webglDevice.default.fromContext(gl);
259
+
260
+ webglDevice.defaultVertexArray = webglDevice.defaultVertexArray || new VertexArrayObject(gl, {
261
+ handle: null,
262
+ isDefaultArray: true
263
+ });
264
+ return webglDevice.defaultVertexArray;
265
+ }
266
+ }, {
267
+ key: "getMaxAttributes",
268
+ value: function getMaxAttributes(gl) {
269
+ VertexArrayObject.MAX_ATTRIBUTES = VertexArrayObject.MAX_ATTRIBUTES || gl.getParameter(gl.MAX_VERTEX_ATTRIBS);
270
+ return VertexArrayObject.MAX_ATTRIBUTES;
271
+ }
272
+ }, {
273
+ key: "setConstant",
274
+ value: function setConstant(gl, location, array) {
275
+ switch (array.constructor) {
276
+ case Float32Array:
277
+ VertexArrayObject._setConstantFloatArray(gl, location, array);
240
278
 
241
- static _setConstantUintArray(gl, location, array) {
242
- (0, _utils.assert)((0, _gltools.isWebGL2)(gl));
243
- gl.vertexAttribI4uiv(location, array);
244
- }
279
+ break;
245
280
 
246
- _createHandle() {
247
- return this.gl2.createVertexArray();
248
- }
281
+ case Int32Array:
282
+ VertexArrayObject._setConstantIntArray((0, _webglChecks.assertWebGL2Context)(gl), location, array);
249
283
 
250
- _deleteHandle() {
251
- this.gl2.deleteVertexArray(this.handle);
252
- return [this.elements];
253
- }
284
+ break;
254
285
 
255
- _bindHandle(handle) {
256
- this.gl2.bindVertexArray(handle);
257
- }
286
+ case Uint32Array:
287
+ VertexArrayObject._setConstantUintArray((0, _webglChecks.assertWebGL2Context)(gl), location, array);
258
288
 
259
- _getParameter(pname, {
260
- location
261
- }) {
262
- (0, _utils.assert)(Number.isFinite(location));
263
- return this.bind(() => {
264
- switch (pname) {
265
- case _constants.default.VERTEX_ATTRIB_ARRAY_POINTER:
266
- return this.gl.getVertexAttribOffset(location, pname);
289
+ break;
267
290
 
268
291
  default:
269
- return this.gl.getVertexAttrib(location, pname);
292
+ (0, _api.assert)(false);
270
293
  }
271
- });
272
- }
294
+ }
295
+ }, {
296
+ key: "_setConstantFloatArray",
297
+ value: function _setConstantFloatArray(gl, location, array) {
298
+ switch (array.length) {
299
+ case 1:
300
+ gl.vertexAttrib1fv(location, array);
301
+ break;
302
+
303
+ case 2:
304
+ gl.vertexAttrib2fv(location, array);
305
+ break;
306
+
307
+ case 3:
308
+ gl.vertexAttrib3fv(location, array);
309
+ break;
310
+
311
+ case 4:
312
+ gl.vertexAttrib4fv(location, array);
313
+ break;
273
314
 
274
- }
315
+ default:
316
+ (0, _api.assert)(false);
317
+ }
318
+ }
319
+ }, {
320
+ key: "_setConstantIntArray",
321
+ value: function _setConstantIntArray(gl, location, array) {
322
+ (0, _api.assert)((0, _webglChecks.isWebGL2)(gl));
323
+ gl.vertexAttribI4iv(location, array);
324
+ }
325
+ }, {
326
+ key: "_setConstantUintArray",
327
+ value: function _setConstantUintArray(gl, location, array) {
328
+ (0, _api.assert)((0, _webglChecks.isWebGL2)(gl));
329
+ gl.vertexAttribI4uiv(location, array);
330
+ }
331
+ }]);
332
+ return VertexArrayObject;
333
+ }(_webglResource.default);
275
334
 
276
335
  exports.default = VertexArrayObject;
277
336
  (0, _defineProperty2.default)(VertexArrayObject, "MAX_ATTRIBUTES", void 0);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/classes/vertex-array-object.ts"],"names":["ERR_ELEMENTS","VertexArrayObject","WebGLResource","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","GL","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","Buffer","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"}
1
+ {"version":3,"sources":["../../../src/classes/vertex-array-object.ts"],"names":["ERR_ELEMENTS","VertexArrayObject","gl","props","WebGLDevice","attach","id","program","buffer","bufferValue","isDefaultArray","Object","seal","delete","getMaxAttributes","elementBuffer","opts","target","GL","ELEMENT_ARRAY_BUFFER","bind","bindBuffer","handle","location","accessor","setElementBuffer","size","type","stride","offset","normalized","integer","divisor","gl2","Number","ARRAY_BUFFER","vertexAttribIPointer","vertexAttribPointer","enableVertexAttribArray","vertexAttribDivisor","enable","disablingAttributeZero","isSupported","constantAttributeZero","disableVertexAttribArray","elementCount","value","constantValue","_normalizeConstantArrayValue","byteLength","length","updateNeeded","Buffer","reallocate","_compareConstantArrayValues","typedArray","constructor","source","start","count","subData","setProps","arrayValue","Array","isArray","Float32Array","v1","v2","i","createVertexArray","deleteVertexArray","elements","bindVertexArray","pname","isFinite","VERTEX_ATTRIB_ARRAY_POINTER","getVertexAttribOffset","getVertexAttrib","options","webglDevice","fromContext","defaultVertexArray","MAX_ATTRIBUTES","getParameter","MAX_VERTEX_ATTRIBS","array","_setConstantFloatArray","Int32Array","_setConstantIntArray","Uint32Array","_setConstantUintArray","vertexAttrib1fv","vertexAttrib2fv","vertexAttrib3fv","vertexAttrib4fv","vertexAttribI4iv","vertexAttribI4uiv","WebGLResource"],"mappings":"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","sourcesContent":["import type {NumberArray} from '@luma.gl/api';\nimport {assert, getScratchArray, fillArray} from '@luma.gl/api';\nimport GL from '@luma.gl/constants';\nimport {getBrowser} from '@probe.gl/env';\nimport WebGLDevice from '../adapter/webgl-device';\nimport {assertWebGL2Context, isWebGL2} from '../context/context/webgl-checks';\nimport Program from './program';\nimport WebGLResource, {ResourceProps} from './webgl-resource';\nimport Buffer from './webgl-buffer';\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 | WebGL2RenderingContext, 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 webglDevice = WebGLDevice.fromContext(gl);\n webglDevice.defaultVertexArray = webglDevice.defaultVertexArray || \n new VertexArrayObject(gl, {handle: null, isDefaultArray: true});\n return webglDevice.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 VertexArrayObject.MAX_ATTRIBUTES =\n VertexArrayObject.MAX_ATTRIBUTES || gl.getParameter(gl.MAX_VERTEX_ATTRIBS);\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, props?: VertexArrayObjectProps) {\n // Use program's id if program but no id is supplied\n super(WebGLDevice.attach(gl), {...props, id: props?.id || (props?.program && props?.program.id)}, {} as any);\n\n this.buffer = null;\n this.bufferValue = null;\n this.isDefaultArray = props?.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: Buffer = 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: number, buffer: Buffer, accessor: any): 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: number, 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: NumberArray) {\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-expect-error\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"}