@luma.gl/webgl 9.0.0-alpha.3 → 9.0.0-alpha.31

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 (512) hide show
  1. package/LICENSE +2 -1
  2. package/dist/adapter/converters/device-parameters.d.ts +14 -4
  3. package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
  4. package/dist/adapter/converters/device-parameters.js +28 -46
  5. package/dist/adapter/converters/device-parameters.js.map +1 -1
  6. package/dist/adapter/converters/sampler-parameters.d.ts +5 -5
  7. package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
  8. package/dist/adapter/converters/sampler-parameters.js +20 -56
  9. package/dist/adapter/converters/sampler-parameters.js.map +1 -1
  10. package/dist/adapter/converters/shader-formats.d.ts +9 -0
  11. package/dist/adapter/converters/shader-formats.d.ts.map +1 -0
  12. package/dist/adapter/converters/shader-formats.js +53 -0
  13. package/dist/adapter/converters/shader-formats.js.map +1 -0
  14. package/dist/adapter/converters/texture-formats.d.ts +32 -44
  15. package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
  16. package/dist/adapter/converters/texture-formats.js +165 -201
  17. package/dist/adapter/converters/texture-formats.js.map +1 -1
  18. package/dist/adapter/converters/vertex-formats.d.ts +9 -3
  19. package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
  20. package/dist/adapter/converters/vertex-formats.js +48 -16
  21. package/dist/adapter/converters/vertex-formats.js.map +1 -1
  22. package/dist/adapter/device-helpers/device-features.d.ts +1 -1
  23. package/dist/adapter/device-helpers/device-features.d.ts.map +1 -1
  24. package/dist/adapter/device-helpers/device-features.js +13 -20
  25. package/dist/adapter/device-helpers/device-features.js.map +1 -1
  26. package/dist/adapter/device-helpers/device-limits.d.ts +3 -3
  27. package/dist/adapter/device-helpers/device-limits.d.ts.map +1 -1
  28. package/dist/adapter/device-helpers/device-limits.js +2 -5
  29. package/dist/adapter/device-helpers/device-limits.js.map +1 -1
  30. package/dist/adapter/device-helpers/get-device-info.d.ts +1 -1
  31. package/dist/adapter/device-helpers/get-device-info.d.ts.map +1 -1
  32. package/dist/adapter/device-helpers/get-device-info.js +9 -11
  33. package/dist/adapter/device-helpers/get-device-info.js.map +1 -1
  34. package/dist/adapter/device-helpers/is-old-ie.js +2 -1
  35. package/dist/adapter/device-helpers/is-old-ie.js.map +1 -1
  36. package/dist/adapter/helpers/decode-webgl-types.d.ts +26 -0
  37. package/dist/adapter/helpers/decode-webgl-types.d.ts.map +1 -0
  38. package/dist/adapter/helpers/{uniforms.js → decode-webgl-types.js} +20 -29
  39. package/dist/adapter/helpers/decode-webgl-types.js.map +1 -0
  40. package/dist/adapter/helpers/get-shader-info.d.ts +9 -0
  41. package/dist/adapter/helpers/get-shader-info.d.ts.map +1 -0
  42. package/dist/adapter/helpers/get-shader-info.js +25 -0
  43. package/dist/adapter/helpers/get-shader-info.js.map +1 -0
  44. package/dist/adapter/helpers/get-shader-layout.d.ts +1 -48
  45. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
  46. package/dist/adapter/helpers/get-shader-layout.js +58 -113
  47. package/dist/adapter/helpers/get-shader-layout.js.map +1 -1
  48. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts +1 -1
  49. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
  50. package/dist/adapter/helpers/parse-shader-compiler-log.js +0 -7
  51. package/dist/adapter/helpers/parse-shader-compiler-log.js.map +1 -1
  52. package/dist/adapter/helpers/set-uniform.d.ts +2 -2
  53. package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
  54. package/dist/adapter/helpers/set-uniform.js +3 -33
  55. package/dist/adapter/helpers/set-uniform.js.map +1 -1
  56. package/dist/adapter/helpers/webgl-topology-utils.d.ts +11 -0
  57. package/dist/adapter/helpers/webgl-topology-utils.d.ts.map +1 -0
  58. package/dist/adapter/helpers/{attribute-utils.js → webgl-topology-utils.js} +2 -19
  59. package/dist/adapter/helpers/webgl-topology-utils.js.map +1 -0
  60. package/dist/adapter/objects/constants-to-keys.d.ts +1 -3
  61. package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
  62. package/dist/adapter/objects/constants-to-keys.js +1 -28
  63. package/dist/adapter/objects/constants-to-keys.js.map +1 -1
  64. package/dist/adapter/objects/webgl-renderbuffer.d.ts +15 -12
  65. package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
  66. package/dist/adapter/objects/webgl-renderbuffer.js +35 -41
  67. package/dist/adapter/objects/webgl-renderbuffer.js.map +1 -1
  68. package/dist/adapter/objects/webgl-resource.d.ts +6 -9
  69. package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
  70. package/dist/adapter/objects/webgl-resource.js +19 -75
  71. package/dist/adapter/objects/webgl-resource.js.map +1 -1
  72. package/dist/adapter/objects/webgl-vertex-array-object.d.ts +39 -11
  73. package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +1 -1
  74. package/dist/adapter/objects/webgl-vertex-array-object.js +122 -32
  75. package/dist/adapter/objects/webgl-vertex-array-object.js.map +1 -1
  76. package/dist/adapter/resources/webgl-buffer.d.ts +18 -10
  77. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  78. package/dist/adapter/resources/webgl-buffer.js +43 -71
  79. package/dist/adapter/resources/webgl-buffer.js.map +1 -1
  80. package/dist/adapter/resources/webgl-command-buffer.d.ts +15 -9
  81. package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
  82. package/dist/adapter/resources/webgl-command-buffer.js +169 -41
  83. package/dist/adapter/resources/webgl-command-buffer.js.map +1 -1
  84. package/dist/adapter/resources/webgl-command-encoder.d.ts +7 -6
  85. package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
  86. package/dist/adapter/resources/webgl-command-encoder.js +9 -18
  87. package/dist/adapter/resources/webgl-command-encoder.js.map +1 -1
  88. package/dist/adapter/resources/webgl-external-texture.js.map +1 -1
  89. package/dist/adapter/resources/webgl-framebuffer.d.ts +21 -24
  90. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  91. package/dist/adapter/resources/webgl-framebuffer.js +41 -149
  92. package/dist/adapter/resources/webgl-framebuffer.js.map +1 -1
  93. package/dist/adapter/resources/webgl-render-pass.d.ts +19 -4
  94. package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
  95. package/dist/adapter/resources/webgl-render-pass.js +88 -9
  96. package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
  97. package/dist/adapter/resources/webgl-render-pipeline.d.ts +52 -14
  98. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  99. package/dist/adapter/resources/webgl-render-pipeline.js +119 -182
  100. package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
  101. package/dist/adapter/resources/webgl-sampler.d.ts +6 -5
  102. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
  103. package/dist/adapter/resources/webgl-sampler.js +7 -15
  104. package/dist/adapter/resources/webgl-sampler.js.map +1 -1
  105. package/dist/adapter/resources/webgl-shader.d.ts +3 -4
  106. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  107. package/dist/adapter/resources/webgl-shader.js +9 -22
  108. package/dist/adapter/resources/webgl-shader.js.map +1 -1
  109. package/dist/adapter/resources/webgl-texture.d.ts +64 -44
  110. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  111. package/dist/adapter/resources/webgl-texture.js +98 -213
  112. package/dist/adapter/resources/webgl-texture.js.map +1 -1
  113. package/dist/adapter/webgl-canvas-context.d.ts +6 -7
  114. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
  115. package/dist/adapter/webgl-canvas-context.js +8 -20
  116. package/dist/adapter/webgl-canvas-context.js.map +1 -1
  117. package/dist/adapter/webgl-device.d.ts +64 -41
  118. package/dist/adapter/webgl-device.d.ts.map +1 -1
  119. package/dist/adapter/webgl-device.js +133 -113
  120. package/dist/adapter/webgl-device.js.map +1 -1
  121. package/dist/classic/accessor.d.ts +3 -3
  122. package/dist/classic/accessor.d.ts.map +1 -1
  123. package/dist/classic/accessor.js +14 -38
  124. package/dist/classic/accessor.js.map +1 -1
  125. package/dist/classic/{buffer.d.ts → buffer-with-accessor.d.ts} +16 -28
  126. package/dist/classic/buffer-with-accessor.d.ts.map +1 -0
  127. package/dist/classic/{buffer.js → buffer-with-accessor.js} +54 -122
  128. package/dist/classic/buffer-with-accessor.js.map +1 -0
  129. package/dist/classic/clear.d.ts +22 -0
  130. package/dist/classic/clear.d.ts.map +1 -0
  131. package/dist/classic/clear.js +88 -0
  132. package/dist/classic/clear.js.map +1 -0
  133. package/dist/classic/copy-and-blit.d.ts +62 -0
  134. package/dist/classic/copy-and-blit.d.ts.map +1 -0
  135. package/dist/classic/copy-and-blit.js +202 -0
  136. package/dist/classic/copy-and-blit.js.map +1 -0
  137. package/dist/classic/format-utils.d.ts +3 -0
  138. package/dist/classic/format-utils.d.ts.map +1 -0
  139. package/dist/classic/format-utils.js +38 -0
  140. package/dist/classic/format-utils.js.map +1 -0
  141. package/dist/classic/typed-array-utils.d.ts +15 -17
  142. package/dist/classic/typed-array-utils.d.ts.map +1 -1
  143. package/dist/classic/typed-array-utils.js +1 -21
  144. package/dist/classic/typed-array-utils.js.map +1 -1
  145. package/dist/context/context/create-browser-context.d.ts +40 -0
  146. package/dist/context/context/create-browser-context.d.ts.map +1 -0
  147. package/dist/{esm/context/context/create-context.js → context/context/create-browser-context.js} +23 -19
  148. package/dist/context/context/create-browser-context.js.map +1 -0
  149. package/dist/context/context/create-headless-context.d.ts +9 -0
  150. package/dist/context/context/create-headless-context.d.ts.map +1 -0
  151. package/dist/context/context/create-headless-context.js +42 -0
  152. package/dist/context/context/create-headless-context.js.map +1 -0
  153. package/dist/context/context/webgl-checks.js +1 -4
  154. package/dist/context/context/webgl-checks.js.map +1 -1
  155. package/dist/context/debug/spector.d.ts +1 -2
  156. package/dist/context/debug/spector.d.ts.map +1 -1
  157. package/dist/context/debug/spector.js +8 -20
  158. package/dist/context/debug/spector.js.map +1 -1
  159. package/dist/context/debug/webgl-developer-tools.d.ts +2 -2
  160. package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
  161. package/dist/context/debug/webgl-developer-tools.js +11 -34
  162. package/dist/context/debug/webgl-developer-tools.js.map +1 -1
  163. package/dist/context/parameters/unified-parameter-api.d.ts +8 -7
  164. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  165. package/dist/context/parameters/unified-parameter-api.js +8 -18
  166. package/dist/context/parameters/unified-parameter-api.js.map +1 -1
  167. package/dist/context/parameters/webgl-parameter-tables.d.ts +105 -106
  168. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  169. package/dist/context/parameters/webgl-parameter-tables.js +18 -36
  170. package/dist/context/parameters/webgl-parameter-tables.js.map +1 -1
  171. package/dist/context/polyfill/context-data.d.ts +13 -0
  172. package/dist/context/polyfill/context-data.d.ts.map +1 -0
  173. package/dist/context/polyfill/context-data.js +12 -0
  174. package/dist/context/polyfill/context-data.js.map +1 -0
  175. package/dist/context/polyfill/get-parameter-polyfill.d.ts +1 -1
  176. package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +1 -1
  177. package/dist/context/polyfill/get-parameter-polyfill.js +4 -9
  178. package/dist/context/polyfill/get-parameter-polyfill.js.map +1 -1
  179. package/dist/context/polyfill/polyfill-context.js +21 -29
  180. package/dist/context/polyfill/polyfill-context.js.map +1 -1
  181. package/dist/context/polyfill/polyfill-table.d.ts +8 -8
  182. package/dist/context/polyfill/polyfill-table.d.ts.map +1 -1
  183. package/dist/context/polyfill/polyfill-table.js +10 -32
  184. package/dist/context/polyfill/polyfill-table.js.map +1 -1
  185. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +1 -1
  186. package/dist/context/polyfill/polyfill-vertex-array-object.js +0 -70
  187. package/dist/context/polyfill/polyfill-vertex-array-object.js.map +1 -1
  188. package/dist/context/state-tracker/deep-array-equal.js +0 -4
  189. package/dist/context/state-tracker/deep-array-equal.js.map +1 -1
  190. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
  191. package/dist/context/state-tracker/track-context-state.js +16 -51
  192. package/dist/context/state-tracker/track-context-state.js.map +1 -1
  193. package/dist/context/state-tracker/with-parameters.d.ts +2 -1
  194. package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
  195. package/dist/context/state-tracker/with-parameters.js +7 -9
  196. package/dist/context/state-tracker/with-parameters.js.map +1 -1
  197. package/dist/dist.dev.js +10245 -0
  198. package/dist/index.cjs +6550 -0
  199. package/dist/index.d.ts +25 -22
  200. package/dist/index.d.ts.map +1 -1
  201. package/dist/index.js +27 -26
  202. package/dist/index.js.map +1 -1
  203. package/dist/types.d.ts +3 -1
  204. package/dist/types.d.ts.map +1 -1
  205. package/dist/types.js.map +1 -1
  206. package/dist.min.js +37 -0
  207. package/package.json +21 -9
  208. package/src/adapter/converters/device-parameters.ts +88 -35
  209. package/src/adapter/converters/sampler-parameters.ts +19 -9
  210. package/src/adapter/converters/shader-formats.ts +41 -0
  211. package/src/adapter/converters/texture-formats.ts +264 -194
  212. package/src/adapter/converters/vertex-formats.ts +68 -10
  213. package/src/adapter/device-helpers/device-features.ts +10 -3
  214. package/src/adapter/device-helpers/device-limits.ts +3 -3
  215. package/src/adapter/device-helpers/get-device-info.ts +14 -10
  216. package/src/adapter/helpers/{uniforms.ts → decode-webgl-types.ts} +36 -21
  217. package/src/adapter/helpers/get-shader-info.ts +40 -0
  218. package/src/adapter/helpers/get-shader-layout.ts +120 -146
  219. package/src/adapter/helpers/parse-shader-compiler-log.ts +2 -2
  220. package/src/adapter/helpers/set-uniform.ts +7 -6
  221. package/src/adapter/helpers/{attribute-utils.ts → webgl-topology-utils.ts} +4 -5
  222. package/src/adapter/objects/constants-to-keys.ts +3 -25
  223. package/src/adapter/objects/webgl-renderbuffer.ts +40 -37
  224. package/src/adapter/objects/webgl-resource.ts +14 -23
  225. package/src/adapter/objects/webgl-vertex-array-object.ts +202 -37
  226. package/src/adapter/resources/webgl-buffer.ts +56 -58
  227. package/src/adapter/resources/webgl-command-buffer.ts +332 -25
  228. package/src/adapter/resources/webgl-command-encoder.ts +17 -12
  229. package/src/adapter/resources/webgl-external-texture.ts +2 -2
  230. package/src/adapter/resources/webgl-framebuffer.ts +88 -133
  231. package/src/adapter/resources/webgl-render-pass.ts +155 -4
  232. package/src/adapter/resources/webgl-render-pipeline.ts +232 -131
  233. package/src/adapter/resources/webgl-sampler.ts +13 -8
  234. package/src/adapter/resources/webgl-shader.ts +11 -10
  235. package/src/adapter/resources/webgl-texture.ts +113 -85
  236. package/src/adapter/webgl-canvas-context.ts +14 -14
  237. package/src/adapter/webgl-device.ts +192 -77
  238. package/src/classic/accessor.ts +4 -17
  239. package/src/classic/{buffer.ts → buffer-with-accessor.ts} +67 -75
  240. package/src/classic/clear.ts +110 -0
  241. package/src/classic/copy-and-blit.ts +308 -0
  242. package/src/classic/format-utils.ts +43 -0
  243. package/src/classic/typed-array-utils.ts +18 -27
  244. package/src/context/context/{create-context.ts → create-browser-context.ts} +48 -31
  245. package/src/context/context/create-headless-context.ts +48 -0
  246. package/src/context/context/webgl-checks.ts +1 -1
  247. package/src/context/debug/spector.ts +7 -6
  248. package/src/context/debug/webgl-developer-tools.ts +21 -15
  249. package/src/context/parameters/unified-parameter-api.ts +20 -14
  250. package/src/context/parameters/webgl-parameter-tables.ts +117 -98
  251. package/src/context/polyfill/context-data.ts +27 -0
  252. package/src/context/polyfill/get-parameter-polyfill.ts +8 -7
  253. package/src/context/polyfill/polyfill-context.ts +7 -9
  254. package/src/context/polyfill/polyfill-table.ts +18 -16
  255. package/src/context/polyfill/polyfill-vertex-array-object.ts +2 -0
  256. package/src/context/state-tracker/track-context-state.ts +14 -13
  257. package/src/context/state-tracker/with-parameters.ts +8 -2
  258. package/src/index.ts +42 -33
  259. package/src/types.ts +2 -0
  260. package/dist/adapter/converters/renderbuffer-formats.d.ts +0 -16
  261. package/dist/adapter/converters/renderbuffer-formats.d.ts.map +0 -1
  262. package/dist/adapter/converters/renderbuffer-formats.js +0 -185
  263. package/dist/adapter/converters/renderbuffer-formats.js.map +0 -1
  264. package/dist/adapter/helpers/attribute-utils.d.ts +0 -11
  265. package/dist/adapter/helpers/attribute-utils.d.ts.map +0 -1
  266. package/dist/adapter/helpers/attribute-utils.js.map +0 -1
  267. package/dist/adapter/helpers/uniforms.d.ts +0 -26
  268. package/dist/adapter/helpers/uniforms.d.ts.map +0 -1
  269. package/dist/adapter/helpers/uniforms.js.map +0 -1
  270. package/dist/bundle.d.ts +0 -2
  271. package/dist/bundle.d.ts.map +0 -1
  272. package/dist/bundle.js +0 -5
  273. package/dist/bundle.js.map +0 -1
  274. package/dist/classic/buffer.d.ts.map +0 -1
  275. package/dist/classic/buffer.js.map +0 -1
  276. package/dist/context/context/context-state.d.ts +0 -18
  277. package/dist/context/context/context-state.d.ts.map +0 -1
  278. package/dist/context/context/context-state.js +0 -26
  279. package/dist/context/context/context-state.js.map +0 -1
  280. package/dist/context/context/create-context.d.ts +0 -41
  281. package/dist/context/context/create-context.d.ts.map +0 -1
  282. package/dist/context/context/create-context.js +0 -49
  283. package/dist/context/context/create-context.js.map +0 -1
  284. package/dist/context/context/device-pixels.d.ts +0 -25
  285. package/dist/context/context/device-pixels.d.ts.map +0 -1
  286. package/dist/context/context/device-pixels.js +0 -98
  287. package/dist/context/context/device-pixels.js.map +0 -1
  288. package/dist/es5/adapter/converters/device-parameters.js +0 -170
  289. package/dist/es5/adapter/converters/device-parameters.js.map +0 -1
  290. package/dist/es5/adapter/converters/renderbuffer-formats.js +0 -163
  291. package/dist/es5/adapter/converters/renderbuffer-formats.js.map +0 -1
  292. package/dist/es5/adapter/converters/sampler-parameters.js +0 -226
  293. package/dist/es5/adapter/converters/sampler-parameters.js.map +0 -1
  294. package/dist/es5/adapter/converters/texture-formats.js +0 -1031
  295. package/dist/es5/adapter/converters/texture-formats.js.map +0 -1
  296. package/dist/es5/adapter/converters/vertex-formats.js +0 -45
  297. package/dist/es5/adapter/converters/vertex-formats.js.map +0 -1
  298. package/dist/es5/adapter/device-helpers/device-features.js +0 -144
  299. package/dist/es5/adapter/device-helpers/device-features.js.map +0 -1
  300. package/dist/es5/adapter/device-helpers/device-limits.js +0 -64
  301. package/dist/es5/adapter/device-helpers/device-limits.js.map +0 -1
  302. package/dist/es5/adapter/device-helpers/get-device-info.js +0 -55
  303. package/dist/es5/adapter/device-helpers/get-device-info.js.map +0 -1
  304. package/dist/es5/adapter/device-helpers/is-old-ie.js +0 -16
  305. package/dist/es5/adapter/device-helpers/is-old-ie.js.map +0 -1
  306. package/dist/es5/adapter/helpers/attribute-utils.js +0 -91
  307. package/dist/es5/adapter/helpers/attribute-utils.js.map +0 -1
  308. package/dist/es5/adapter/helpers/get-shader-layout.js +0 -371
  309. package/dist/es5/adapter/helpers/get-shader-layout.js.map +0 -1
  310. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js +0 -72
  311. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  312. package/dist/es5/adapter/helpers/set-uniform.js +0 -125
  313. package/dist/es5/adapter/helpers/set-uniform.js.map +0 -1
  314. package/dist/es5/adapter/helpers/uniforms.js +0 -112
  315. package/dist/es5/adapter/helpers/uniforms.js.map +0 -1
  316. package/dist/es5/adapter/objects/constants-to-keys.js +0 -54
  317. package/dist/es5/adapter/objects/constants-to-keys.js.map +0 -1
  318. package/dist/es5/adapter/objects/webgl-renderbuffer.js +0 -150
  319. package/dist/es5/adapter/objects/webgl-renderbuffer.js.map +0 -1
  320. package/dist/es5/adapter/objects/webgl-resource.js +0 -292
  321. package/dist/es5/adapter/objects/webgl-resource.js.map +0 -1
  322. package/dist/es5/adapter/objects/webgl-vertex-array-object.js +0 -137
  323. package/dist/es5/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  324. package/dist/es5/adapter/resources/webgl-buffer.js +0 -243
  325. package/dist/es5/adapter/resources/webgl-buffer.js.map +0 -1
  326. package/dist/es5/adapter/resources/webgl-command-buffer.js +0 -96
  327. package/dist/es5/adapter/resources/webgl-command-buffer.js.map +0 -1
  328. package/dist/es5/adapter/resources/webgl-command-encoder.js +0 -98
  329. package/dist/es5/adapter/resources/webgl-command-encoder.js.map +0 -1
  330. package/dist/es5/adapter/resources/webgl-external-texture.js +0 -2
  331. package/dist/es5/adapter/resources/webgl-external-texture.js.map +0 -1
  332. package/dist/es5/adapter/resources/webgl-framebuffer.js +0 -345
  333. package/dist/es5/adapter/resources/webgl-framebuffer.js.map +0 -1
  334. package/dist/es5/adapter/resources/webgl-render-pass.js +0 -61
  335. package/dist/es5/adapter/resources/webgl-render-pass.js.map +0 -1
  336. package/dist/es5/adapter/resources/webgl-render-pipeline.js +0 -505
  337. package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +0 -1
  338. package/dist/es5/adapter/resources/webgl-sampler.js +0 -96
  339. package/dist/es5/adapter/resources/webgl-sampler.js.map +0 -1
  340. package/dist/es5/adapter/resources/webgl-shader.js +0 -149
  341. package/dist/es5/adapter/resources/webgl-shader.js.map +0 -1
  342. package/dist/es5/adapter/resources/webgl-texture.js +0 -986
  343. package/dist/es5/adapter/resources/webgl-texture.js.map +0 -1
  344. package/dist/es5/adapter/webgl-canvas-context.js +0 -97
  345. package/dist/es5/adapter/webgl-canvas-context.js.map +0 -1
  346. package/dist/es5/adapter/webgl-device.js +0 -399
  347. package/dist/es5/adapter/webgl-device.js.map +0 -1
  348. package/dist/es5/bundle.js +0 -7
  349. package/dist/es5/bundle.js.map +0 -1
  350. package/dist/es5/classic/accessor.js +0 -181
  351. package/dist/es5/classic/accessor.js.map +0 -1
  352. package/dist/es5/classic/buffer.js +0 -470
  353. package/dist/es5/classic/buffer.js.map +0 -1
  354. package/dist/es5/classic/typed-array-utils.js +0 -126
  355. package/dist/es5/classic/typed-array-utils.js.map +0 -1
  356. package/dist/es5/context/context/context-state.js +0 -31
  357. package/dist/es5/context/context/context-state.js.map +0 -1
  358. package/dist/es5/context/context/create-context.js +0 -69
  359. package/dist/es5/context/context/create-context.js.map +0 -1
  360. package/dist/es5/context/context/device-pixels.js +0 -115
  361. package/dist/es5/context/context/device-pixels.js.map +0 -1
  362. package/dist/es5/context/context/webgl-checks.js +0 -54
  363. package/dist/es5/context/context/webgl-checks.js.map +0 -1
  364. package/dist/es5/context/debug/spector.js +0 -133
  365. package/dist/es5/context/debug/spector.js.map +0 -1
  366. package/dist/es5/context/debug/webgl-developer-tools.js +0 -198
  367. package/dist/es5/context/debug/webgl-developer-tools.js.map +0 -1
  368. package/dist/es5/context/parameters/unified-parameter-api.js +0 -97
  369. package/dist/es5/context/parameters/unified-parameter-api.js.map +0 -1
  370. package/dist/es5/context/parameters/webgl-parameter-tables.js +0 -392
  371. package/dist/es5/context/parameters/webgl-parameter-tables.js.map +0 -1
  372. package/dist/es5/context/polyfill/get-parameter-polyfill.js +0 -81
  373. package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +0 -1
  374. package/dist/es5/context/polyfill/polyfill-context.js +0 -135
  375. package/dist/es5/context/polyfill/polyfill-context.js.map +0 -1
  376. package/dist/es5/context/polyfill/polyfill-table.js +0 -166
  377. package/dist/es5/context/polyfill/polyfill-table.js.map +0 -1
  378. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js +0 -341
  379. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  380. package/dist/es5/context/state-tracker/deep-array-equal.js +0 -28
  381. package/dist/es5/context/state-tracker/deep-array-equal.js.map +0 -1
  382. package/dist/es5/context/state-tracker/track-context-state.js +0 -211
  383. package/dist/es5/context/state-tracker/track-context-state.js.map +0 -1
  384. package/dist/es5/context/state-tracker/with-parameters.js +0 -44
  385. package/dist/es5/context/state-tracker/with-parameters.js.map +0 -1
  386. package/dist/es5/index.js +0 -276
  387. package/dist/es5/index.js.map +0 -1
  388. package/dist/es5/init.js +0 -10
  389. package/dist/es5/init.js.map +0 -1
  390. package/dist/es5/types/webgl.js +0 -6
  391. package/dist/es5/types/webgl.js.map +0 -1
  392. package/dist/es5/types.js +0 -2
  393. package/dist/es5/types.js.map +0 -1
  394. package/dist/esm/adapter/converters/device-parameters.js +0 -155
  395. package/dist/esm/adapter/converters/device-parameters.js.map +0 -1
  396. package/dist/esm/adapter/converters/renderbuffer-formats.js +0 -185
  397. package/dist/esm/adapter/converters/renderbuffer-formats.js.map +0 -1
  398. package/dist/esm/adapter/converters/sampler-parameters.js +0 -208
  399. package/dist/esm/adapter/converters/sampler-parameters.js.map +0 -1
  400. package/dist/esm/adapter/converters/texture-formats.js +0 -954
  401. package/dist/esm/adapter/converters/texture-formats.js.map +0 -1
  402. package/dist/esm/adapter/converters/vertex-formats.js +0 -35
  403. package/dist/esm/adapter/converters/vertex-formats.js.map +0 -1
  404. package/dist/esm/adapter/device-helpers/device-features.js +0 -102
  405. package/dist/esm/adapter/device-helpers/device-features.js.map +0 -1
  406. package/dist/esm/adapter/device-helpers/device-limits.js +0 -91
  407. package/dist/esm/adapter/device-helpers/device-limits.js.map +0 -1
  408. package/dist/esm/adapter/device-helpers/get-device-info.js +0 -44
  409. package/dist/esm/adapter/device-helpers/get-device-info.js.map +0 -1
  410. package/dist/esm/adapter/device-helpers/is-old-ie.js +0 -8
  411. package/dist/esm/adapter/device-helpers/is-old-ie.js.map +0 -1
  412. package/dist/esm/adapter/helpers/attribute-utils.js +0 -81
  413. package/dist/esm/adapter/helpers/attribute-utils.js.map +0 -1
  414. package/dist/esm/adapter/helpers/get-shader-layout.js +0 -306
  415. package/dist/esm/adapter/helpers/get-shader-layout.js.map +0 -1
  416. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js +0 -37
  417. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  418. package/dist/esm/adapter/helpers/set-uniform.js +0 -115
  419. package/dist/esm/adapter/helpers/set-uniform.js.map +0 -1
  420. package/dist/esm/adapter/helpers/uniforms.js +0 -99
  421. package/dist/esm/adapter/helpers/uniforms.js.map +0 -1
  422. package/dist/esm/adapter/objects/constants-to-keys.js +0 -42
  423. package/dist/esm/adapter/objects/constants-to-keys.js.map +0 -1
  424. package/dist/esm/adapter/objects/webgl-renderbuffer.js +0 -94
  425. package/dist/esm/adapter/objects/webgl-renderbuffer.js.map +0 -1
  426. package/dist/esm/adapter/objects/webgl-resource.js +0 -216
  427. package/dist/esm/adapter/objects/webgl-resource.js.map +0 -1
  428. package/dist/esm/adapter/objects/webgl-vertex-array-object.js +0 -84
  429. package/dist/esm/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  430. package/dist/esm/adapter/resources/webgl-buffer.js +0 -164
  431. package/dist/esm/adapter/resources/webgl-buffer.js.map +0 -1
  432. package/dist/esm/adapter/resources/webgl-command-buffer.js +0 -65
  433. package/dist/esm/adapter/resources/webgl-command-buffer.js.map +0 -1
  434. package/dist/esm/adapter/resources/webgl-command-encoder.js +0 -53
  435. package/dist/esm/adapter/resources/webgl-command-encoder.js.map +0 -1
  436. package/dist/esm/adapter/resources/webgl-external-texture.js +0 -2
  437. package/dist/esm/adapter/resources/webgl-external-texture.js.map +0 -1
  438. package/dist/esm/adapter/resources/webgl-framebuffer.js +0 -265
  439. package/dist/esm/adapter/resources/webgl-framebuffer.js.map +0 -1
  440. package/dist/esm/adapter/resources/webgl-render-pass.js +0 -19
  441. package/dist/esm/adapter/resources/webgl-render-pass.js.map +0 -1
  442. package/dist/esm/adapter/resources/webgl-render-pipeline.js +0 -400
  443. package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +0 -1
  444. package/dist/esm/adapter/resources/webgl-sampler.js +0 -50
  445. package/dist/esm/adapter/resources/webgl-sampler.js.map +0 -1
  446. package/dist/esm/adapter/resources/webgl-shader.js +0 -75
  447. package/dist/esm/adapter/resources/webgl-shader.js.map +0 -1
  448. package/dist/esm/adapter/resources/webgl-texture.js +0 -831
  449. package/dist/esm/adapter/resources/webgl-texture.js.map +0 -1
  450. package/dist/esm/adapter/webgl-canvas-context.js +0 -54
  451. package/dist/esm/adapter/webgl-canvas-context.js.map +0 -1
  452. package/dist/esm/adapter/webgl-device.js +0 -280
  453. package/dist/esm/adapter/webgl-device.js.map +0 -1
  454. package/dist/esm/bundle.js +0 -5
  455. package/dist/esm/bundle.js.map +0 -1
  456. package/dist/esm/classic/accessor.js +0 -144
  457. package/dist/esm/classic/accessor.js.map +0 -1
  458. package/dist/esm/classic/buffer.js +0 -384
  459. package/dist/esm/classic/buffer.js.map +0 -1
  460. package/dist/esm/classic/typed-array-utils.js +0 -112
  461. package/dist/esm/classic/typed-array-utils.js.map +0 -1
  462. package/dist/esm/context/context/context-state.js +0 -26
  463. package/dist/esm/context/context/context-state.js.map +0 -1
  464. package/dist/esm/context/context/create-context.js.map +0 -1
  465. package/dist/esm/context/context/device-pixels.js +0 -98
  466. package/dist/esm/context/context/device-pixels.js.map +0 -1
  467. package/dist/esm/context/context/webgl-checks.js +0 -34
  468. package/dist/esm/context/context/webgl-checks.js.map +0 -1
  469. package/dist/esm/context/debug/spector.js +0 -76
  470. package/dist/esm/context/debug/spector.js.map +0 -1
  471. package/dist/esm/context/debug/webgl-developer-tools.js +0 -121
  472. package/dist/esm/context/debug/webgl-developer-tools.js.map +0 -1
  473. package/dist/esm/context/parameters/unified-parameter-api.js +0 -65
  474. package/dist/esm/context/parameters/unified-parameter-api.js.map +0 -1
  475. package/dist/esm/context/parameters/webgl-parameter-tables.js +0 -445
  476. package/dist/esm/context/parameters/webgl-parameter-tables.js.map +0 -1
  477. package/dist/esm/context/polyfill/get-parameter-polyfill.js +0 -91
  478. package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +0 -1
  479. package/dist/esm/context/polyfill/polyfill-context.js +0 -92
  480. package/dist/esm/context/polyfill/polyfill-context.js.map +0 -1
  481. package/dist/esm/context/polyfill/polyfill-table.js +0 -160
  482. package/dist/esm/context/polyfill/polyfill-table.js.map +0 -1
  483. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js +0 -335
  484. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  485. package/dist/esm/context/state-tracker/deep-array-equal.js +0 -21
  486. package/dist/esm/context/state-tracker/deep-array-equal.js.map +0 -1
  487. package/dist/esm/context/state-tracker/track-context-state.js +0 -183
  488. package/dist/esm/context/state-tracker/track-context-state.js.map +0 -1
  489. package/dist/esm/context/state-tracker/with-parameters.js +0 -36
  490. package/dist/esm/context/state-tracker/with-parameters.js.map +0 -1
  491. package/dist/esm/index.js +0 -27
  492. package/dist/esm/index.js.map +0 -1
  493. package/dist/esm/init.js +0 -4
  494. package/dist/esm/init.js.map +0 -1
  495. package/dist/esm/types/webgl.js +0 -2
  496. package/dist/esm/types/webgl.js.map +0 -1
  497. package/dist/esm/types.js +0 -2
  498. package/dist/esm/types.js.map +0 -1
  499. package/dist/init.d.ts +0 -2
  500. package/dist/init.d.ts.map +0 -1
  501. package/dist/init.js +0 -4
  502. package/dist/init.js.map +0 -1
  503. package/dist/types/webgl.d.ts +0 -144
  504. package/dist/types/webgl.d.ts.map +0 -1
  505. package/dist/types/webgl.js +0 -2
  506. package/dist/types/webgl.js.map +0 -1
  507. package/src/adapter/converters/renderbuffer-formats.ts +0 -92
  508. package/src/bundle.ts +0 -4
  509. package/src/context/context/context-state.ts +0 -41
  510. package/src/context/context/device-pixels.ts +0 -152
  511. package/src/init.ts +0 -4
  512. package/src/types/webgl.ts +0 -283
@@ -1,21 +1,19 @@
1
1
  // luma.gl, MIT license
2
- import {Resource, assert, uid, stubRemovedMethods} from '@luma.gl/api';
3
- import type {Device, ResourceProps} from '@luma.gl/api';
4
- import GL from '@luma.gl/constants';
2
+ import {Resource, assert, uid, stubRemovedMethods} from '@luma.gl/core';
3
+ import type {Device, ResourceProps} from '@luma.gl/core';
4
+ import {GL} from '@luma.gl/constants';
5
5
  import {isWebGL2, assertWebGLContext} from '../../context/context/webgl-checks';
6
- import WebGLDevice from '../webgl-device';
6
+ import {WebGLDevice} from '../webgl-device';
7
7
 
8
8
  // Requires full GL enum to be bundled... Make these bindings dependent on dynamic import (debug)?
9
- import {getKey, getKeyValue} from './constants-to-keys';
9
+ import {getKeyValue} from './constants-to-keys';
10
10
 
11
11
  const ERR_RESOURCE_METHOD_UNDEFINED = 'Resource subclass must define virtual methods';
12
12
 
13
13
  /**
14
14
  * Base class for WebGL object wrappers
15
15
  */
16
- export default abstract class WebGLResource<Props> extends Resource<Props> {
17
- id: string;
18
- userData: any;
16
+ export abstract class WebGLResource<Props extends ResourceProps> extends Resource<Props> {
19
17
  readonly device: WebGLDevice;
20
18
  readonly gl: WebGLRenderingContext;
21
19
  readonly gl2: WebGL2RenderingContext;
@@ -34,12 +32,10 @@ const ERR_RESOURCE_METHOD_UNDEFINED = 'Resource subclass must define virtual met
34
32
  assertWebGLContext(gl);
35
33
 
36
34
  // extends
37
- // @ts-expect-error
38
- const {id, userData = {}} = props || {};
35
+ const {id} = props || {};
39
36
  this.gl = gl;
40
37
  this.gl2 = gl as WebGL2RenderingContext;
41
38
  this.id = id || uid(this.constructor.name);
42
- this.userData = userData;
43
39
 
44
40
  // Set the handle
45
41
  // If handle was provided, use it, otherwise create a new handle
@@ -48,7 +44,6 @@ const ERR_RESOURCE_METHOD_UNDEFINED = 'Resource subclass must define virtual met
48
44
  // this.glCount = glGetContextLossCount(this.gl);
49
45
 
50
46
  // Default VertexArray needs to be created with null handle, so compare against undefined
51
- // @ts-expect-error
52
47
  this._handle = props?.handle;
53
48
  if (this._handle === undefined) {
54
49
  this._handle = this._createHandle();
@@ -57,7 +52,7 @@ const ERR_RESOURCE_METHOD_UNDEFINED = 'Resource subclass must define virtual met
57
52
  this.byteLength = 0;
58
53
  }
59
54
 
60
- toString(): string {
55
+ override toString(): string {
61
56
  return `${this.constructor.name}(${this.id})`;
62
57
  }
63
58
 
@@ -74,11 +69,7 @@ const ERR_RESOURCE_METHOD_UNDEFINED = 'Resource subclass must define virtual met
74
69
  return this._handle;
75
70
  }
76
71
 
77
- destroy(): void {
78
- this.delete();
79
- }
80
-
81
- delete({deleteChildren = false} = {}) {
72
+ override delete({deleteChildren = false} = {}) {
82
73
  // Delete this object, and get refs to any children
83
74
  // @ts-expect-error
84
75
  const children = this._handle && this._deleteHandle(this._handle);
@@ -91,7 +82,7 @@ const ERR_RESOURCE_METHOD_UNDEFINED = 'Resource subclass must define virtual met
91
82
  // @ts-expect-error
92
83
  if (children && deleteChildren) {
93
84
  // @ts-expect-error
94
- children.filter(Boolean).forEach((child) => child.delete());
85
+ children.filter(Boolean).forEach((child) => child.destroy());
95
86
  }
96
87
 
97
88
  return this;
@@ -130,7 +121,7 @@ const ERR_RESOURCE_METHOD_UNDEFINED = 'Resource subclass must define virtual met
130
121
  * @param name
131
122
  * @return param
132
123
  */
133
- getParameter(pname: number, props = {}): any {
124
+ getParameter(pname: number, props: any = {}): any {
134
125
  pname = getKeyValue(this.gl, pname);
135
126
  assert(pname);
136
127
 
@@ -163,7 +154,7 @@ const ERR_RESOURCE_METHOD_UNDEFINED = 'Resource subclass must define virtual met
163
154
  // Many resources support a getParameter call -
164
155
  // getParameters will get all parameters - slow but useful for debugging
165
156
  // eslint-disable-next-line complexity
166
- getParameters(options: {parameters?, keys?} = {}) {
157
+ getParameters(options: {parameters?: any, keys?: any} = {}) {
167
158
  const {parameters, keys} = options;
168
159
 
169
160
  // Get parameter definitions for this Resource
@@ -188,10 +179,10 @@ const ERR_RESOURCE_METHOD_UNDEFINED = 'Resource subclass must define virtual met
188
179
  (!('extension' in parameter) || this.gl.getExtension(parameter.extension));
189
180
 
190
181
  if (parameterAvailable) {
191
- const key = keys ? getKey(this.gl, pname) : pname;
182
+ const key = keys ? this.device.getGLKey(pname) : pname;
192
183
  values[key] = this.getParameter(pname, options);
193
184
  if (keys && parameter.type === 'GLenum') {
194
- values[key] = getKey(this.gl, values[key]);
185
+ values[key] = this.device.getGLKey(values[key]);
195
186
  }
196
187
  }
197
188
  }
@@ -1,64 +1,104 @@
1
- import {assert, ResourceProps} from '@luma.gl/api';
2
- import GL from '@luma.gl/constants';
1
+ import type {Device, Buffer, ResourceProps, TypedArray, NumericArray} from '@luma.gl/core';
2
+ import {Resource, assert, getScratchArray, fillArray} from '@luma.gl/core';
3
+ import {GL} from '@luma.gl/constants';
3
4
  import {getBrowser} from '@probe.gl/env';
4
5
 
5
- import WebGLDevice from '../webgl-device';
6
- import WebGLResource from './webgl-resource';
6
+ import {WebGLDevice} from '../webgl-device';
7
+ import {WebGLResource} from './webgl-resource';
8
+ import {WEBGLBuffer} from '../resources/webgl-buffer';
7
9
 
8
- import Buffer from '../resources/webgl-buffer';
10
+ import {BufferWithAccessor} from '../../classic/buffer-with-accessor';
11
+ import {AccessorObject} from '../..';
9
12
 
10
13
  const ERR_ELEMENTS = 'elements must be GL.ELEMENT_ARRAY_BUFFER';
11
14
 
12
15
  /**
13
16
  * VertexArrayObject properties
17
+ * @param constantAttributeZero Attribute 0 can not be disable on most desktop OpenGL based browsers
18
+ * and on iOS Safari browser.
14
19
  */
15
20
  export type VertexArrayObjectProps = ResourceProps & {
21
+ constantAttributeZero?: boolean;
16
22
  };
17
23
 
18
24
  /** VertexArrayObject wrapper */
19
- export default class WEBGLVertexArrayObject extends WebGLResource<VertexArrayObjectProps> {
20
- get [Symbol.toStringTag](): string {
25
+ export class WEBGLVertexArrayObject extends WebGLResource<VertexArrayObjectProps> {
26
+ override get [Symbol.toStringTag](): string {
21
27
  return 'BaseVertexArrayObject';
22
28
  }
23
29
 
24
- constructor(device: WebGLDevice, props?: VertexArrayObjectProps) {
25
- // @ts-expect-error
26
- super(device, props, {});
30
+ /** Buffer constant */
31
+ private buffer: BufferWithAccessor | null = null;
32
+ private bufferValue = null;
33
+
34
+ static isConstantAttributeZeroSupported(device: Device): boolean {
35
+ return device.info.type === 'webgl2' || getBrowser() === 'Chrome';
27
36
  }
28
37
 
29
- _createHandle() {
38
+ // Create a VertexArray
39
+ constructor(device: Device, props?: VertexArrayObjectProps) {
40
+ super(device, props, {...Resource.defaultProps, constantAttributeZero: false});
41
+ Object.seal(this);
42
+ }
43
+
44
+ override destroy(): void {
45
+ super.destroy();
46
+ if (this.buffer) {
47
+ this.buffer?.destroy();
48
+ } }
49
+
50
+ override _createHandle() {
30
51
  return this.gl2.createVertexArray();
31
52
  }
32
53
 
33
- _deleteHandle(): void {
54
+ override _deleteHandle(): void {
34
55
  this.gl2.deleteVertexArray(this.handle);
35
56
  // @ts-expect-error
36
57
  return [this.elements];
37
58
  // return [this.elements, ...this.buffers];
38
59
  }
39
60
 
40
- _bindHandle(handle: WEBGLVertexArrayObject): void {
61
+ override _bindHandle(handle: WEBGLVertexArrayObject): void {
41
62
  this.gl2.bindVertexArray(handle);
42
63
  }
43
64
 
65
+ /**
66
+ * Enabling an attribute location makes it reference the currently bound buffer
67
+ * Disabling an attribute location makes it reference the global constant value
68
+ * TODO - handle single values for size 1 attributes?
69
+ * TODO - convert classic arrays based on known type?
70
+ */
71
+ enable(location: number, enable = true): void {
72
+ // Attribute 0 cannot be disabled in most desktop OpenGL based browsers...
73
+ const canDisableAttributeZero = this.device.isWebGL2 || getBrowser() === 'Chrome';
74
+ const canDisableAttribute = canDisableAttributeZero || location !== 0;
75
+
76
+ if (enable || canDisableAttribute) {
77
+ location = Number(location);
78
+ this.bind(() =>
79
+ enable
80
+ ? this.gl.enableVertexAttribArray(location)
81
+ : this.gl.disableVertexAttribArray(location)
82
+ );
83
+ } }
84
+
44
85
  // Set (bind) an elements buffer, for indexed rendering.
45
86
  // Must be a Buffer bound to GL.ELEMENT_ARRAY_BUFFER. Constants not supported
46
- setElementBuffer(elementBuffer: Buffer = null, opts = {}) {
47
- assert(!elementBuffer || elementBuffer.target === GL.ELEMENT_ARRAY_BUFFER, ERR_ELEMENTS);
87
+ setElementBuffer(elementBuffer: WEBGLBuffer | null = null, opts = {}) {
88
+ assert(!elementBuffer || elementBuffer.glTarget === GL.ELEMENT_ARRAY_BUFFER, ERR_ELEMENTS);
48
89
 
49
90
  // The GL.ELEMENT_ARRAY_BUFFER_BINDING is stored on the VertexArrayObject...
50
91
  this.bind(() => {
51
92
  this.gl.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, elementBuffer ? elementBuffer.handle : null);
52
93
  });
53
-
54
- return this;
55
94
  }
56
95
 
57
96
  /** Set a location in vertex attributes array to a buffer, enables the location, sets divisor */
58
- setBuffer(location: number, buffer: Buffer, accessor: any): this {
97
+ setBuffer(location: number, buffer: WEBGLBuffer, accessor: AccessorObject): void {
59
98
  // Check target
60
- if (buffer.target === GL.ELEMENT_ARRAY_BUFFER) {
61
- return this.setElementBuffer(buffer, accessor);
99
+ if (buffer.glTarget === GL.ELEMENT_ARRAY_BUFFER) {
100
+ this.setElementBuffer(buffer, accessor);
101
+ return;
62
102
  }
63
103
 
64
104
  const {size, type, stride, offset, normalized, integer, divisor} = accessor;
@@ -83,29 +123,154 @@ export default class WEBGLVertexArrayObject extends WebGLResource<VertexArrayObj
83
123
 
84
124
  // NOTE We don't unbind buffer here, typically another buffer will be bound just after
85
125
  });
126
+ }
86
127
 
87
- return this;
128
+ /**
129
+ * Set an attribute to a constant value
130
+ * @param device
131
+ * @param location
132
+ * @param array
133
+ *
134
+ * @note Constants are stored globally on the WebGL context, not the VAO
135
+ * so they need to be updated before every render
136
+ * @todo - use known type (in configuration or passed in) to allow non-typed arrays?
137
+ * @todo - remember/cache values to avoid setting them unnecessarily?
138
+ */
139
+ setConstant(location: any, array: TypedArray): void {
140
+ switch (array.constructor) {
141
+ case Float32Array:
142
+ setConstantFloatArray(this.device, location, array as Float32Array);
143
+ break;
144
+ case Int32Array:
145
+ setConstantIntArray(this.device, location, array as Int32Array);
146
+ break;
147
+ case Uint32Array:
148
+ setConstantUintArray(this.device, location, array as Uint32Array);
149
+ break;
150
+ default:
151
+ assert(false);
152
+ }
88
153
  }
89
154
 
90
155
  /**
91
- * Enabling an attribute location makes it reference the currently bound buffer
92
- * Disabling an attribute location makes it reference the global constant value
93
- * TODO - handle single values for size 1 attributes?
94
- * TODO - convert classic arrays based on known type?
156
+ * Provide a means to create a buffer that is equivalent to a constant.
157
+ * NOTE: Desktop OpenGL cannot disable attribute 0.
158
+ * https://stackoverflow.com/questions/20305231/webgl-warning-attribute-0-is-disabled-
159
+ * this-has-significant-performance-penalty
95
160
  */
96
- enable(location: number, enable = true): this {
97
- // Attribute 0 cannot be disabled in most desktop OpenGL based browsers...
98
- const canDisableAttributeZero = this.device.isWebGL2 || getBrowser() === 'Chrome';
99
- const canDisableAttribute = canDisableAttributeZero || location !== 0;
161
+ getConstantBuffer(elementCount: number, value): Buffer {
162
+ // Create buffer only when needed, and reuse it (avoids inflating buffer creation statistics)
100
163
 
101
- if (enable || canDisableAttribute) {
102
- location = Number(location);
103
- this.bind(() =>
104
- enable
105
- ? this.gl.enableVertexAttribArray(location)
106
- : this.gl.disableVertexAttribArray(location)
107
- );
164
+ const constantValue = normalizeConstantArrayValue(value);
165
+
166
+ const byteLength = constantValue.byteLength * elementCount;
167
+ const length = constantValue.length * elementCount;
168
+
169
+ let updateNeeded = !this.buffer;
170
+
171
+ this.buffer = this.buffer || this.device.createBuffer({byteLength}) as BufferWithAccessor;
172
+ updateNeeded = updateNeeded || this.buffer.reallocate(byteLength);
173
+
174
+ // Reallocate and update contents if needed
175
+ updateNeeded =
176
+ updateNeeded || !compareConstantArrayValues(constantValue, this.bufferValue);
177
+
178
+ if (updateNeeded) {
179
+ // Create a typed array that is big enough, and fill it with the required data
180
+ const typedArray = getScratchArray(value.constructor, length);
181
+ fillArray({target: typedArray, source: constantValue, start: 0, count: length});
182
+ this.buffer.subData(typedArray);
183
+ this.bufferValue = value;
184
+ }
185
+
186
+ return this.buffer;
187
+ }
188
+ }
189
+
190
+ function setConstantFloatArray(device: WebGLDevice, location: number, array: Float32Array): void {
191
+ switch (array.length) {
192
+ case 1:
193
+ device.gl.vertexAttrib1fv(location, array);
194
+ break;
195
+ case 2:
196
+ device.gl.vertexAttrib2fv(location, array);
197
+ break;
198
+ case 3:
199
+ device.gl.vertexAttrib3fv(location, array);
200
+ break;
201
+ case 4:
202
+ device.gl.vertexAttrib4fv(location, array);
203
+ break;
204
+ default:
205
+ assert(false);
206
+ }
207
+ }
208
+
209
+ function setConstantIntArray(device: WebGLDevice, location: number, array: Int32Array): void {
210
+ device.assertWebGL2();
211
+ device.gl2?.vertexAttribI4iv(location, array);
212
+ // switch (array.length) {
213
+ // case 1:
214
+ // gl.vertexAttribI1iv(location, array);
215
+ // break;
216
+ // case 2:
217
+ // gl.vertexAttribI2iv(location, array);
218
+ // break;
219
+ // case 3:
220
+ // gl.vertexAttribI3iv(location, array);
221
+ // break;
222
+ // case 4:
223
+ // break;
224
+ // default:
225
+ // assert(false);
226
+ // }
227
+ }
228
+
229
+ function setConstantUintArray(device: WebGLDevice, location: number, array: Uint32Array) {
230
+ device.assertWebGL2();
231
+ device.gl2?.vertexAttribI4uiv(location, array);
232
+ // switch (array.length) {
233
+ // case 1:
234
+ // gl.vertexAttribI1uiv(location, array);
235
+ // break;
236
+ // case 2:
237
+ // gl.vertexAttribI2uiv(location, array);
238
+ // break;
239
+ // case 3:
240
+ // gl.vertexAttribI3uiv(location, array);
241
+ // break;
242
+ // case 4:
243
+ // gl.vertexAttribI4uiv(location, array);
244
+ // break;
245
+ // default:
246
+ // assert(false);
247
+ // }
248
+ }
249
+
250
+ // HELPERS
251
+
252
+ /**
253
+ * TODO - convert Arrays based on known type? (read type from accessor, don't assume Float32Array)
254
+ * TODO - handle single values for size 1 attributes?
255
+ */
256
+ function normalizeConstantArrayValue(arrayValue: NumericArray) {
257
+ if (Array.isArray(arrayValue)) {
258
+ return new Float32Array(arrayValue);
259
+ }
260
+ return arrayValue;
261
+ }
262
+
263
+ /**
264
+ *
265
+ */
266
+ function compareConstantArrayValues(v1: NumericArray, v2: NumericArray): boolean {
267
+ if (!v1 || !v2 || v1.length !== v2.length || v1.constructor !== v2.constructor) {
268
+ return false;
269
+ }
270
+ for (let i = 0; i < v1.length; ++i) {
271
+ if (v1[i] !== v2[i]) {
272
+ return false;
108
273
  }
109
- return this;
110
274
  }
275
+ return true;
111
276
  }
@@ -1,25 +1,30 @@
1
- import type {BufferProps} from '@luma.gl/api';
2
- import {Buffer, assert} from '@luma.gl/api';
3
- import GL from '@luma.gl/constants';
4
- import WebGLDevice from '../webgl-device';
1
+ import type {BufferProps} from '@luma.gl/core';
2
+ import {Buffer, assert} from '@luma.gl/core';
3
+ import {GL} from '@luma.gl/constants';
4
+ import {WebGLDevice} from '../webgl-device';
5
5
 
6
6
  const DEBUG_DATA_LENGTH = 10;
7
7
 
8
8
  /** WebGL Buffer interface */
9
- export default class WEBGLBuffer extends Buffer {
9
+ export class WEBGLBuffer extends Buffer {
10
10
  readonly device: WebGLDevice;
11
11
  readonly gl: WebGLRenderingContext;
12
12
  readonly gl2: WebGL2RenderingContext | null;
13
13
  readonly handle: WebGLBuffer;
14
- readonly target: number;
15
14
 
15
+ /** Target in OpenGL defines the type of buffer */
16
+ readonly glTarget: GL.ARRAY_BUFFER | GL.ELEMENT_ARRAY_BUFFER | GL.UNIFORM_BUFFER;
17
+ /** Usage is a hint on how frequently the buffer will be updates */
18
+ readonly glUsage: GL.STATIC_DRAW | GL.DYNAMIC_DRAW;
19
+ /** Index type is needed when issuing draw calls, so we pre-compute it */
20
+ readonly glIndexType: GL.UNSIGNED_SHORT | GL.UNSIGNED_INT = GL.UNSIGNED_SHORT;
21
+
22
+ /** Number of bytes allocated on the GPU for this buffer */
16
23
  byteLength: number;
24
+ /** Number of bytes used */
17
25
  bytesUsed: number;
18
- debugData: ArrayBuffer;
19
-
20
- webglUsage: number;
21
-
22
- accessor: {};
26
+ /** A partial CPU-side copy of the data in this buffer, for debugging purposes */
27
+ debugData: ArrayBuffer | null = null;
23
28
 
24
29
  constructor(device: WebGLDevice, props: BufferProps = {}) {
25
30
  super(device, props);
@@ -28,18 +33,17 @@ export default class WEBGLBuffer extends Buffer {
28
33
  this.gl = this.device.gl;
29
34
  this.gl2 = this.device.gl2;
30
35
 
31
- const handle = typeof props === 'object' ? (props as BufferProps).handle : undefined;
36
+ const handle = typeof props === 'object' ? (props ).handle : undefined;
32
37
  this.handle = handle || this.gl.createBuffer();
33
- // @ts-expect-error Add metadata for spector
34
- this.handle.__SPECTOR_Metadata = {...this.props, data: typeof this.props.data}; // {name: this.props.id};
35
-
36
- // In WebGL1, need to make sure we use GL.ELEMENT_ARRAY_BUFFER when initializing element buffers
37
- // otherwise buffer type will lock to generic (non-element) buffer
38
- // In WebGL2, we can use GL.COPY_READ_BUFFER which avoids locking the type here
39
- // @ts-expect-error Hack - Checking for subclass prop
40
- this.target = this.props.target || getWebGLTarget(this.props.usage);
41
- // @ts-expect-error Hack - Checking for subclass prop
42
- this.webglUsage = this.props.webglUsage || getWebGLUsage(this.props.usage);
38
+ device.setSpectorMetadata(this.handle, {...this.props, data: typeof this.props.data});
39
+
40
+ // - In WebGL1, need to make sure we use GL.ELEMENT_ARRAY_BUFFER when initializing element buffers
41
+ // otherwise buffer type will lock to generic (non-element) buffer
42
+ // - In WebGL2, we can use GL.COPY_READ_BUFFER which avoids locking the type here
43
+ this.glTarget = getWebGLTarget(this.props.usage);
44
+ this.glUsage = getWebGLUsage(this.props.usage);
45
+ this.glIndexType = this.props.indexType === 'uint32' ? GL.UNSIGNED_INT : GL.UNSIGNED_SHORT;
46
+
43
47
  this.debugData = null;
44
48
 
45
49
  // Set data: (re)initializes the buffer
@@ -48,25 +52,19 @@ export default class WEBGLBuffer extends Buffer {
48
52
  } else {
49
53
  this._initWithByteLength(props.byteLength || 0);
50
54
  }
51
-
52
- // Deprecated: Merge main props and accessor
53
- // this.accessor = {...props.accessor};
54
-
55
- // Object.seal(this);
56
55
  }
57
56
 
58
- // PRIVATE METHODS
57
+ // PRIVATE METHODS
59
58
 
60
- // Allocate a new buffer and initialize to contents of typed array
59
+ /** Allocate a new buffer and initialize to contents of typed array */
61
60
  _initWithData(data, byteOffset: number = 0, byteLength: number = data.byteLength + byteOffset): this {
62
61
  assert(ArrayBuffer.isView(data));
63
62
 
64
- const target = this._getWriteTarget();
65
-
66
- this.gl.bindBuffer(target, this.handle);
67
- this.gl.bufferData(target, byteLength, this.webglUsage);
68
- this.gl.bufferSubData(target, byteOffset, data);
69
- this.gl.bindBuffer(target, null);
63
+ const glTarget = this._getWriteTarget();
64
+ this.gl.bindBuffer(glTarget, this.handle);
65
+ this.gl.bufferData(glTarget, byteLength, this.glUsage);
66
+ this.gl.bufferSubData(glTarget, byteOffset, data);
67
+ this.gl.bindBuffer(glTarget, null);
70
68
 
71
69
  this.debugData = data.slice(0, DEBUG_DATA_LENGTH);
72
70
  this.bytesUsed = byteLength;
@@ -88,11 +86,11 @@ export default class WEBGLBuffer extends Buffer {
88
86
  data = new Float32Array(0);
89
87
  }
90
88
 
91
- const target = this._getWriteTarget();
89
+ const glTarget = this._getWriteTarget();
92
90
 
93
- this.gl.bindBuffer(target, this.handle);
94
- this.gl.bufferData(target, data, this.webglUsage);
95
- this.gl.bindBuffer(target, null);
91
+ this.gl.bindBuffer(glTarget, this.handle);
92
+ this.gl.bufferData(glTarget, data, this.glUsage);
93
+ this.gl.bindBuffer(glTarget, null);
96
94
 
97
95
  this.debugData = null;
98
96
  this.bytesUsed = byteLength;
@@ -101,41 +99,40 @@ export default class WEBGLBuffer extends Buffer {
101
99
  return this;
102
100
  }
103
101
 
104
- destroy(): void {
105
- if (this.handle) {
102
+ override destroy(): void {
103
+ if (!this.destroyed && this.handle) {
106
104
  this.removeStats();
107
105
  this.trackDeallocatedMemory();
108
106
  this.gl.deleteBuffer(this.handle);
107
+ this.destroyed = true;
109
108
  // @ts-expect-error
110
109
  this.handle = null;
111
110
  }
112
111
  }
113
112
 
114
- write(data: ArrayBufferView, byteOffset: number = 0): void {
113
+ override write(data: ArrayBufferView, byteOffset: number = 0): void {
115
114
  const srcOffset = 0;
116
- const byteLength = data.byteLength;
115
+ const byteLength = undefined; // data.byteLength;
117
116
 
118
117
  // Create the buffer - binding it here for the first time locks the type
119
118
  // In WebGL2, use GL.COPY_WRITE_BUFFER to avoid locking the type
120
- const target = this.device.isWebGL2 ? GL.COPY_WRITE_BUFFER : this.target;
121
- this.gl.bindBuffer(target, this.handle);
119
+ const glTarget = this.device.isWebGL2 ? GL.COPY_WRITE_BUFFER : this.glTarget;
120
+ this.gl.bindBuffer(glTarget, this.handle);
122
121
  // WebGL2: subData supports additional srcOffset and length parameters
123
122
  if (srcOffset !== 0 || byteLength !== undefined) {
124
123
  this.device.assertWebGL2();
125
-
126
- // @ts-expect-error
127
- this.gl.bufferSubData(this.target, offset, data, srcOffset, byteLength);
124
+ this.gl2.bufferSubData(glTarget, byteOffset, data, srcOffset, byteLength);
128
125
  } else {
129
- this.gl.bufferSubData(target, byteOffset, data);
126
+ this.gl.bufferSubData(glTarget, byteOffset, data);
130
127
  }
131
- this.gl.bindBuffer(target, null);
128
+ this.gl.bindBuffer(glTarget, null);
132
129
 
133
130
  // TODO - update local `data` if offsets are right
134
131
  // this.debugData = data.slice(byteOffset, 40);
135
132
  }
136
133
 
137
134
  /** Read data from the buffer */
138
- async readAsync(
135
+ override async readAsync(
139
136
  byteOffset: number = 0,
140
137
  byteLength?: number
141
138
  ): Promise<ArrayBuffer> {
@@ -162,13 +159,13 @@ export default class WEBGLBuffer extends Buffer {
162
159
  }
163
160
 
164
161
  _getWriteTarget() {
165
- return this.target;
166
- // return this.device.isWebGL2 ? GL.COPY_WRITE_BUFFER : this.target;
162
+ return this.glTarget;
163
+ // return this.device.isWebGL2 ? GL.COPY_WRITE_BUFFER : this.glTarget;
167
164
  }
168
165
 
169
166
  _getReadTarget() {
170
- return this.target;
171
- return this.device.isWebGL2 ? GL.COPY_READ_BUFFER : this.target;
167
+ return this.glTarget;
168
+ // return this.device.isWebGL2 ? GL.COPY_READ_BUFFER : this.glTarget;
172
169
  }
173
170
  }
174
171
 
@@ -183,7 +180,7 @@ export default class WEBGLBuffer extends Buffer {
183
180
  // static INDIRECT = 0x0100;
184
181
  // static QUERY_RESOLVE = 0x0200;
185
182
 
186
- function getWebGLTarget(usage: number): GL {
183
+ function getWebGLTarget(usage: number): GL.ARRAY_BUFFER | GL.ELEMENT_ARRAY_BUFFER | GL.UNIFORM_BUFFER {
187
184
  if (usage & Buffer.INDEX) {
188
185
  return GL.ELEMENT_ARRAY_BUFFER;
189
186
  }
@@ -205,7 +202,8 @@ function getWebGLTarget(usage: number): GL {
205
202
  return GL.ARRAY_BUFFER;
206
203
  }
207
204
 
208
- function getWebGLUsage(usage: number): GL {
205
+ /** @todo usage is not passed correctly */
206
+ function getWebGLUsage(usage: number): GL.STATIC_DRAW | GL.DYNAMIC_DRAW {
209
207
  if (usage & Buffer.INDEX) {
210
208
  return GL.STATIC_DRAW;
211
209
  }
@@ -215,5 +213,5 @@ function getWebGLUsage(usage: number): GL {
215
213
  if (usage & Buffer.UNIFORM) {
216
214
  return GL.DYNAMIC_DRAW;
217
215
  }
218
- return GL.DYNAMIC_DRAW;
216
+ return GL.STATIC_DRAW;
219
217
  }