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

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 (500) 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/texture-formats.d.ts +31 -42
  11. package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
  12. package/dist/adapter/converters/texture-formats.js +163 -178
  13. package/dist/adapter/converters/texture-formats.js.map +1 -1
  14. package/dist/adapter/converters/vertex-formats.d.ts +2 -2
  15. package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
  16. package/dist/adapter/converters/vertex-formats.js +3 -9
  17. package/dist/adapter/converters/vertex-formats.js.map +1 -1
  18. package/dist/adapter/device-helpers/device-features.d.ts +1 -1
  19. package/dist/adapter/device-helpers/device-features.d.ts.map +1 -1
  20. package/dist/adapter/device-helpers/device-features.js +13 -20
  21. package/dist/adapter/device-helpers/device-features.js.map +1 -1
  22. package/dist/adapter/device-helpers/device-limits.d.ts +3 -3
  23. package/dist/adapter/device-helpers/device-limits.d.ts.map +1 -1
  24. package/dist/adapter/device-helpers/device-limits.js +2 -5
  25. package/dist/adapter/device-helpers/device-limits.js.map +1 -1
  26. package/dist/adapter/device-helpers/get-device-info.d.ts +1 -1
  27. package/dist/adapter/device-helpers/get-device-info.d.ts.map +1 -1
  28. package/dist/adapter/device-helpers/get-device-info.js +9 -11
  29. package/dist/adapter/device-helpers/get-device-info.js.map +1 -1
  30. package/dist/adapter/device-helpers/is-old-ie.js +2 -1
  31. package/dist/adapter/device-helpers/is-old-ie.js.map +1 -1
  32. package/dist/adapter/helpers/attribute-utils.d.ts +4 -4
  33. package/dist/adapter/helpers/attribute-utils.d.ts.map +1 -1
  34. package/dist/adapter/helpers/attribute-utils.js +1 -18
  35. package/dist/adapter/helpers/attribute-utils.js.map +1 -1
  36. package/dist/adapter/helpers/get-shader-info.d.ts +9 -0
  37. package/dist/adapter/helpers/get-shader-info.d.ts.map +1 -0
  38. package/dist/adapter/helpers/get-shader-info.js +25 -0
  39. package/dist/adapter/helpers/get-shader-info.js.map +1 -0
  40. package/dist/adapter/helpers/get-shader-layout.d.ts +10 -7
  41. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
  42. package/dist/adapter/helpers/get-shader-layout.js +101 -84
  43. package/dist/adapter/helpers/get-shader-layout.js.map +1 -1
  44. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts +1 -1
  45. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
  46. package/dist/adapter/helpers/parse-shader-compiler-log.js +0 -7
  47. package/dist/adapter/helpers/parse-shader-compiler-log.js.map +1 -1
  48. package/dist/adapter/helpers/set-uniform.d.ts +2 -2
  49. package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
  50. package/dist/adapter/helpers/set-uniform.js +3 -33
  51. package/dist/adapter/helpers/set-uniform.js.map +1 -1
  52. package/dist/adapter/helpers/uniforms.d.ts +9 -10
  53. package/dist/adapter/helpers/uniforms.d.ts.map +1 -1
  54. package/dist/adapter/helpers/uniforms.js +8 -18
  55. package/dist/adapter/helpers/uniforms.js.map +1 -1
  56. package/dist/adapter/objects/constants-to-keys.d.ts +1 -3
  57. package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
  58. package/dist/adapter/objects/constants-to-keys.js +1 -28
  59. package/dist/adapter/objects/constants-to-keys.js.map +1 -1
  60. package/dist/adapter/objects/webgl-renderbuffer.d.ts +15 -12
  61. package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
  62. package/dist/adapter/objects/webgl-renderbuffer.js +35 -41
  63. package/dist/adapter/objects/webgl-renderbuffer.js.map +1 -1
  64. package/dist/adapter/objects/webgl-resource.d.ts +6 -9
  65. package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
  66. package/dist/adapter/objects/webgl-resource.js +19 -75
  67. package/dist/adapter/objects/webgl-resource.js.map +1 -1
  68. package/dist/adapter/objects/webgl-vertex-array-object.d.ts +38 -11
  69. package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +1 -1
  70. package/dist/adapter/objects/webgl-vertex-array-object.js +122 -32
  71. package/dist/adapter/objects/webgl-vertex-array-object.js.map +1 -1
  72. package/dist/adapter/resources/webgl-buffer.d.ts +18 -10
  73. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  74. package/dist/adapter/resources/webgl-buffer.js +43 -71
  75. package/dist/adapter/resources/webgl-buffer.js.map +1 -1
  76. package/dist/adapter/resources/webgl-command-buffer.d.ts +15 -9
  77. package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
  78. package/dist/adapter/resources/webgl-command-buffer.js +169 -41
  79. package/dist/adapter/resources/webgl-command-buffer.js.map +1 -1
  80. package/dist/adapter/resources/webgl-command-encoder.d.ts +7 -6
  81. package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
  82. package/dist/adapter/resources/webgl-command-encoder.js +8 -17
  83. package/dist/adapter/resources/webgl-command-encoder.js.map +1 -1
  84. package/dist/adapter/resources/webgl-external-texture.js.map +1 -1
  85. package/dist/adapter/resources/webgl-framebuffer.d.ts +21 -24
  86. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  87. package/dist/adapter/resources/webgl-framebuffer.js +41 -149
  88. package/dist/adapter/resources/webgl-framebuffer.js.map +1 -1
  89. package/dist/adapter/resources/webgl-render-pass.d.ts +19 -4
  90. package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
  91. package/dist/adapter/resources/webgl-render-pass.js +88 -9
  92. package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
  93. package/dist/adapter/resources/webgl-render-pipeline.d.ts +44 -11
  94. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  95. package/dist/adapter/resources/webgl-render-pipeline.js +90 -152
  96. package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
  97. package/dist/adapter/resources/webgl-sampler.d.ts +6 -5
  98. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
  99. package/dist/adapter/resources/webgl-sampler.js +7 -15
  100. package/dist/adapter/resources/webgl-sampler.js.map +1 -1
  101. package/dist/adapter/resources/webgl-shader.d.ts +3 -4
  102. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  103. package/dist/adapter/resources/webgl-shader.js +9 -22
  104. package/dist/adapter/resources/webgl-shader.js.map +1 -1
  105. package/dist/adapter/resources/webgl-texture.d.ts +64 -44
  106. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  107. package/dist/adapter/resources/webgl-texture.js +98 -213
  108. package/dist/adapter/resources/webgl-texture.js.map +1 -1
  109. package/dist/adapter/webgl-canvas-context.d.ts +6 -7
  110. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
  111. package/dist/adapter/webgl-canvas-context.js +8 -20
  112. package/dist/adapter/webgl-canvas-context.js.map +1 -1
  113. package/dist/adapter/webgl-device.d.ts +64 -41
  114. package/dist/adapter/webgl-device.d.ts.map +1 -1
  115. package/dist/adapter/webgl-device.js +133 -113
  116. package/dist/adapter/webgl-device.js.map +1 -1
  117. package/dist/classic/accessor.d.ts +3 -3
  118. package/dist/classic/accessor.d.ts.map +1 -1
  119. package/dist/classic/accessor.js +14 -38
  120. package/dist/classic/accessor.js.map +1 -1
  121. package/dist/classic/{buffer.d.ts → buffer-with-accessor.d.ts} +16 -28
  122. package/dist/classic/buffer-with-accessor.d.ts.map +1 -0
  123. package/dist/classic/{buffer.js → buffer-with-accessor.js} +54 -122
  124. package/dist/classic/buffer-with-accessor.js.map +1 -0
  125. package/dist/classic/clear.d.ts +22 -0
  126. package/dist/classic/clear.d.ts.map +1 -0
  127. package/dist/classic/clear.js +88 -0
  128. package/dist/classic/clear.js.map +1 -0
  129. package/dist/classic/copy-and-blit.d.ts +62 -0
  130. package/dist/classic/copy-and-blit.d.ts.map +1 -0
  131. package/dist/classic/copy-and-blit.js +202 -0
  132. package/dist/classic/copy-and-blit.js.map +1 -0
  133. package/dist/classic/format-utils.d.ts +3 -0
  134. package/dist/classic/format-utils.d.ts.map +1 -0
  135. package/dist/classic/format-utils.js +38 -0
  136. package/dist/classic/format-utils.js.map +1 -0
  137. package/dist/classic/typed-array-utils.d.ts +15 -17
  138. package/dist/classic/typed-array-utils.d.ts.map +1 -1
  139. package/dist/classic/typed-array-utils.js +1 -21
  140. package/dist/classic/typed-array-utils.js.map +1 -1
  141. package/dist/context/context/create-browser-context.d.ts +40 -0
  142. package/dist/context/context/create-browser-context.d.ts.map +1 -0
  143. package/dist/{esm/context/context/create-context.js → context/context/create-browser-context.js} +23 -19
  144. package/dist/context/context/create-browser-context.js.map +1 -0
  145. package/dist/context/context/create-headless-context.d.ts +9 -0
  146. package/dist/context/context/create-headless-context.d.ts.map +1 -0
  147. package/dist/context/context/create-headless-context.js +42 -0
  148. package/dist/context/context/create-headless-context.js.map +1 -0
  149. package/dist/context/context/webgl-checks.js +1 -4
  150. package/dist/context/context/webgl-checks.js.map +1 -1
  151. package/dist/context/debug/spector.d.ts +1 -2
  152. package/dist/context/debug/spector.d.ts.map +1 -1
  153. package/dist/context/debug/spector.js +8 -20
  154. package/dist/context/debug/spector.js.map +1 -1
  155. package/dist/context/debug/webgl-developer-tools.d.ts +2 -2
  156. package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
  157. package/dist/context/debug/webgl-developer-tools.js +11 -34
  158. package/dist/context/debug/webgl-developer-tools.js.map +1 -1
  159. package/dist/context/parameters/unified-parameter-api.d.ts +8 -7
  160. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  161. package/dist/context/parameters/unified-parameter-api.js +8 -18
  162. package/dist/context/parameters/unified-parameter-api.js.map +1 -1
  163. package/dist/context/parameters/webgl-parameter-tables.d.ts +105 -106
  164. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  165. package/dist/context/parameters/webgl-parameter-tables.js +18 -36
  166. package/dist/context/parameters/webgl-parameter-tables.js.map +1 -1
  167. package/dist/context/polyfill/context-data.d.ts +13 -0
  168. package/dist/context/polyfill/context-data.d.ts.map +1 -0
  169. package/dist/context/polyfill/context-data.js +12 -0
  170. package/dist/context/polyfill/context-data.js.map +1 -0
  171. package/dist/context/polyfill/get-parameter-polyfill.d.ts +1 -1
  172. package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +1 -1
  173. package/dist/context/polyfill/get-parameter-polyfill.js +4 -9
  174. package/dist/context/polyfill/get-parameter-polyfill.js.map +1 -1
  175. package/dist/context/polyfill/polyfill-context.js +21 -29
  176. package/dist/context/polyfill/polyfill-context.js.map +1 -1
  177. package/dist/context/polyfill/polyfill-table.d.ts +8 -8
  178. package/dist/context/polyfill/polyfill-table.d.ts.map +1 -1
  179. package/dist/context/polyfill/polyfill-table.js +10 -32
  180. package/dist/context/polyfill/polyfill-table.js.map +1 -1
  181. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +1 -1
  182. package/dist/context/polyfill/polyfill-vertex-array-object.js +0 -70
  183. package/dist/context/polyfill/polyfill-vertex-array-object.js.map +1 -1
  184. package/dist/context/state-tracker/deep-array-equal.js +0 -4
  185. package/dist/context/state-tracker/deep-array-equal.js.map +1 -1
  186. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
  187. package/dist/context/state-tracker/track-context-state.js +16 -51
  188. package/dist/context/state-tracker/track-context-state.js.map +1 -1
  189. package/dist/context/state-tracker/with-parameters.d.ts +2 -1
  190. package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
  191. package/dist/context/state-tracker/with-parameters.js +7 -9
  192. package/dist/context/state-tracker/with-parameters.js.map +1 -1
  193. package/dist/dist.dev.js +10158 -0
  194. package/dist/index.cjs +6604 -0
  195. package/dist/index.d.ts +25 -22
  196. package/dist/index.d.ts.map +1 -1
  197. package/dist/index.js +27 -26
  198. package/dist/index.js.map +1 -1
  199. package/dist/types.d.ts +1 -1
  200. package/dist/types.d.ts.map +1 -1
  201. package/dist/types.js.map +1 -1
  202. package/dist.min.js +37 -0
  203. package/package.json +21 -9
  204. package/src/adapter/converters/device-parameters.ts +88 -35
  205. package/src/adapter/converters/sampler-parameters.ts +19 -9
  206. package/src/adapter/converters/texture-formats.ts +261 -178
  207. package/src/adapter/converters/vertex-formats.ts +3 -2
  208. package/src/adapter/device-helpers/device-features.ts +10 -3
  209. package/src/adapter/device-helpers/device-limits.ts +3 -3
  210. package/src/adapter/device-helpers/get-device-info.ts +14 -10
  211. package/src/adapter/helpers/attribute-utils.ts +4 -5
  212. package/src/adapter/helpers/get-shader-info.ts +40 -0
  213. package/src/adapter/helpers/get-shader-layout.ts +150 -68
  214. package/src/adapter/helpers/parse-shader-compiler-log.ts +2 -2
  215. package/src/adapter/helpers/set-uniform.ts +7 -6
  216. package/src/adapter/helpers/uniforms.ts +23 -13
  217. package/src/adapter/objects/constants-to-keys.ts +3 -25
  218. package/src/adapter/objects/webgl-renderbuffer.ts +40 -37
  219. package/src/adapter/objects/webgl-resource.ts +14 -23
  220. package/src/adapter/objects/webgl-vertex-array-object.ts +201 -37
  221. package/src/adapter/resources/webgl-buffer.ts +56 -58
  222. package/src/adapter/resources/webgl-command-buffer.ts +332 -25
  223. package/src/adapter/resources/webgl-command-encoder.ts +16 -11
  224. package/src/adapter/resources/webgl-external-texture.ts +2 -2
  225. package/src/adapter/resources/webgl-framebuffer.ts +88 -133
  226. package/src/adapter/resources/webgl-render-pass.ts +155 -4
  227. package/src/adapter/resources/webgl-render-pipeline.ts +161 -104
  228. package/src/adapter/resources/webgl-sampler.ts +13 -8
  229. package/src/adapter/resources/webgl-shader.ts +11 -10
  230. package/src/adapter/resources/webgl-texture.ts +113 -85
  231. package/src/adapter/webgl-canvas-context.ts +14 -14
  232. package/src/adapter/webgl-device.ts +192 -77
  233. package/src/classic/accessor.ts +4 -17
  234. package/src/classic/{buffer.ts → buffer-with-accessor.ts} +67 -75
  235. package/src/classic/clear.ts +110 -0
  236. package/src/classic/copy-and-blit.ts +308 -0
  237. package/src/classic/format-utils.ts +43 -0
  238. package/src/classic/typed-array-utils.ts +18 -27
  239. package/src/context/context/{create-context.ts → create-browser-context.ts} +48 -31
  240. package/src/context/context/create-headless-context.ts +48 -0
  241. package/src/context/context/webgl-checks.ts +1 -1
  242. package/src/context/debug/spector.ts +7 -6
  243. package/src/context/debug/webgl-developer-tools.ts +21 -15
  244. package/src/context/parameters/unified-parameter-api.ts +20 -14
  245. package/src/context/parameters/webgl-parameter-tables.ts +117 -98
  246. package/src/context/polyfill/context-data.ts +27 -0
  247. package/src/context/polyfill/get-parameter-polyfill.ts +8 -7
  248. package/src/context/polyfill/polyfill-context.ts +7 -9
  249. package/src/context/polyfill/polyfill-table.ts +18 -16
  250. package/src/context/polyfill/polyfill-vertex-array-object.ts +2 -0
  251. package/src/context/state-tracker/track-context-state.ts +14 -13
  252. package/src/context/state-tracker/with-parameters.ts +8 -2
  253. package/src/index.ts +42 -33
  254. package/dist/adapter/converters/renderbuffer-formats.d.ts +0 -16
  255. package/dist/adapter/converters/renderbuffer-formats.d.ts.map +0 -1
  256. package/dist/adapter/converters/renderbuffer-formats.js +0 -185
  257. package/dist/adapter/converters/renderbuffer-formats.js.map +0 -1
  258. package/dist/bundle.d.ts +0 -2
  259. package/dist/bundle.d.ts.map +0 -1
  260. package/dist/bundle.js +0 -5
  261. package/dist/bundle.js.map +0 -1
  262. package/dist/classic/buffer.d.ts.map +0 -1
  263. package/dist/classic/buffer.js.map +0 -1
  264. package/dist/context/context/context-state.d.ts +0 -18
  265. package/dist/context/context/context-state.d.ts.map +0 -1
  266. package/dist/context/context/context-state.js +0 -26
  267. package/dist/context/context/context-state.js.map +0 -1
  268. package/dist/context/context/create-context.d.ts +0 -41
  269. package/dist/context/context/create-context.d.ts.map +0 -1
  270. package/dist/context/context/create-context.js +0 -49
  271. package/dist/context/context/create-context.js.map +0 -1
  272. package/dist/context/context/device-pixels.d.ts +0 -25
  273. package/dist/context/context/device-pixels.d.ts.map +0 -1
  274. package/dist/context/context/device-pixels.js +0 -98
  275. package/dist/context/context/device-pixels.js.map +0 -1
  276. package/dist/es5/adapter/converters/device-parameters.js +0 -170
  277. package/dist/es5/adapter/converters/device-parameters.js.map +0 -1
  278. package/dist/es5/adapter/converters/renderbuffer-formats.js +0 -163
  279. package/dist/es5/adapter/converters/renderbuffer-formats.js.map +0 -1
  280. package/dist/es5/adapter/converters/sampler-parameters.js +0 -226
  281. package/dist/es5/adapter/converters/sampler-parameters.js.map +0 -1
  282. package/dist/es5/adapter/converters/texture-formats.js +0 -1031
  283. package/dist/es5/adapter/converters/texture-formats.js.map +0 -1
  284. package/dist/es5/adapter/converters/vertex-formats.js +0 -45
  285. package/dist/es5/adapter/converters/vertex-formats.js.map +0 -1
  286. package/dist/es5/adapter/device-helpers/device-features.js +0 -144
  287. package/dist/es5/adapter/device-helpers/device-features.js.map +0 -1
  288. package/dist/es5/adapter/device-helpers/device-limits.js +0 -64
  289. package/dist/es5/adapter/device-helpers/device-limits.js.map +0 -1
  290. package/dist/es5/adapter/device-helpers/get-device-info.js +0 -55
  291. package/dist/es5/adapter/device-helpers/get-device-info.js.map +0 -1
  292. package/dist/es5/adapter/device-helpers/is-old-ie.js +0 -16
  293. package/dist/es5/adapter/device-helpers/is-old-ie.js.map +0 -1
  294. package/dist/es5/adapter/helpers/attribute-utils.js +0 -91
  295. package/dist/es5/adapter/helpers/attribute-utils.js.map +0 -1
  296. package/dist/es5/adapter/helpers/get-shader-layout.js +0 -371
  297. package/dist/es5/adapter/helpers/get-shader-layout.js.map +0 -1
  298. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js +0 -72
  299. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  300. package/dist/es5/adapter/helpers/set-uniform.js +0 -125
  301. package/dist/es5/adapter/helpers/set-uniform.js.map +0 -1
  302. package/dist/es5/adapter/helpers/uniforms.js +0 -112
  303. package/dist/es5/adapter/helpers/uniforms.js.map +0 -1
  304. package/dist/es5/adapter/objects/constants-to-keys.js +0 -54
  305. package/dist/es5/adapter/objects/constants-to-keys.js.map +0 -1
  306. package/dist/es5/adapter/objects/webgl-renderbuffer.js +0 -150
  307. package/dist/es5/adapter/objects/webgl-renderbuffer.js.map +0 -1
  308. package/dist/es5/adapter/objects/webgl-resource.js +0 -292
  309. package/dist/es5/adapter/objects/webgl-resource.js.map +0 -1
  310. package/dist/es5/adapter/objects/webgl-vertex-array-object.js +0 -137
  311. package/dist/es5/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  312. package/dist/es5/adapter/resources/webgl-buffer.js +0 -243
  313. package/dist/es5/adapter/resources/webgl-buffer.js.map +0 -1
  314. package/dist/es5/adapter/resources/webgl-command-buffer.js +0 -96
  315. package/dist/es5/adapter/resources/webgl-command-buffer.js.map +0 -1
  316. package/dist/es5/adapter/resources/webgl-command-encoder.js +0 -98
  317. package/dist/es5/adapter/resources/webgl-command-encoder.js.map +0 -1
  318. package/dist/es5/adapter/resources/webgl-external-texture.js +0 -2
  319. package/dist/es5/adapter/resources/webgl-external-texture.js.map +0 -1
  320. package/dist/es5/adapter/resources/webgl-framebuffer.js +0 -345
  321. package/dist/es5/adapter/resources/webgl-framebuffer.js.map +0 -1
  322. package/dist/es5/adapter/resources/webgl-render-pass.js +0 -61
  323. package/dist/es5/adapter/resources/webgl-render-pass.js.map +0 -1
  324. package/dist/es5/adapter/resources/webgl-render-pipeline.js +0 -505
  325. package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +0 -1
  326. package/dist/es5/adapter/resources/webgl-sampler.js +0 -96
  327. package/dist/es5/adapter/resources/webgl-sampler.js.map +0 -1
  328. package/dist/es5/adapter/resources/webgl-shader.js +0 -149
  329. package/dist/es5/adapter/resources/webgl-shader.js.map +0 -1
  330. package/dist/es5/adapter/resources/webgl-texture.js +0 -986
  331. package/dist/es5/adapter/resources/webgl-texture.js.map +0 -1
  332. package/dist/es5/adapter/webgl-canvas-context.js +0 -97
  333. package/dist/es5/adapter/webgl-canvas-context.js.map +0 -1
  334. package/dist/es5/adapter/webgl-device.js +0 -399
  335. package/dist/es5/adapter/webgl-device.js.map +0 -1
  336. package/dist/es5/bundle.js +0 -7
  337. package/dist/es5/bundle.js.map +0 -1
  338. package/dist/es5/classic/accessor.js +0 -181
  339. package/dist/es5/classic/accessor.js.map +0 -1
  340. package/dist/es5/classic/buffer.js +0 -470
  341. package/dist/es5/classic/buffer.js.map +0 -1
  342. package/dist/es5/classic/typed-array-utils.js +0 -126
  343. package/dist/es5/classic/typed-array-utils.js.map +0 -1
  344. package/dist/es5/context/context/context-state.js +0 -31
  345. package/dist/es5/context/context/context-state.js.map +0 -1
  346. package/dist/es5/context/context/create-context.js +0 -69
  347. package/dist/es5/context/context/create-context.js.map +0 -1
  348. package/dist/es5/context/context/device-pixels.js +0 -115
  349. package/dist/es5/context/context/device-pixels.js.map +0 -1
  350. package/dist/es5/context/context/webgl-checks.js +0 -54
  351. package/dist/es5/context/context/webgl-checks.js.map +0 -1
  352. package/dist/es5/context/debug/spector.js +0 -133
  353. package/dist/es5/context/debug/spector.js.map +0 -1
  354. package/dist/es5/context/debug/webgl-developer-tools.js +0 -198
  355. package/dist/es5/context/debug/webgl-developer-tools.js.map +0 -1
  356. package/dist/es5/context/parameters/unified-parameter-api.js +0 -97
  357. package/dist/es5/context/parameters/unified-parameter-api.js.map +0 -1
  358. package/dist/es5/context/parameters/webgl-parameter-tables.js +0 -392
  359. package/dist/es5/context/parameters/webgl-parameter-tables.js.map +0 -1
  360. package/dist/es5/context/polyfill/get-parameter-polyfill.js +0 -81
  361. package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +0 -1
  362. package/dist/es5/context/polyfill/polyfill-context.js +0 -135
  363. package/dist/es5/context/polyfill/polyfill-context.js.map +0 -1
  364. package/dist/es5/context/polyfill/polyfill-table.js +0 -166
  365. package/dist/es5/context/polyfill/polyfill-table.js.map +0 -1
  366. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js +0 -341
  367. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  368. package/dist/es5/context/state-tracker/deep-array-equal.js +0 -28
  369. package/dist/es5/context/state-tracker/deep-array-equal.js.map +0 -1
  370. package/dist/es5/context/state-tracker/track-context-state.js +0 -211
  371. package/dist/es5/context/state-tracker/track-context-state.js.map +0 -1
  372. package/dist/es5/context/state-tracker/with-parameters.js +0 -44
  373. package/dist/es5/context/state-tracker/with-parameters.js.map +0 -1
  374. package/dist/es5/index.js +0 -276
  375. package/dist/es5/index.js.map +0 -1
  376. package/dist/es5/init.js +0 -10
  377. package/dist/es5/init.js.map +0 -1
  378. package/dist/es5/types/webgl.js +0 -6
  379. package/dist/es5/types/webgl.js.map +0 -1
  380. package/dist/es5/types.js +0 -2
  381. package/dist/es5/types.js.map +0 -1
  382. package/dist/esm/adapter/converters/device-parameters.js +0 -155
  383. package/dist/esm/adapter/converters/device-parameters.js.map +0 -1
  384. package/dist/esm/adapter/converters/renderbuffer-formats.js +0 -185
  385. package/dist/esm/adapter/converters/renderbuffer-formats.js.map +0 -1
  386. package/dist/esm/adapter/converters/sampler-parameters.js +0 -208
  387. package/dist/esm/adapter/converters/sampler-parameters.js.map +0 -1
  388. package/dist/esm/adapter/converters/texture-formats.js +0 -954
  389. package/dist/esm/adapter/converters/texture-formats.js.map +0 -1
  390. package/dist/esm/adapter/converters/vertex-formats.js +0 -35
  391. package/dist/esm/adapter/converters/vertex-formats.js.map +0 -1
  392. package/dist/esm/adapter/device-helpers/device-features.js +0 -102
  393. package/dist/esm/adapter/device-helpers/device-features.js.map +0 -1
  394. package/dist/esm/adapter/device-helpers/device-limits.js +0 -91
  395. package/dist/esm/adapter/device-helpers/device-limits.js.map +0 -1
  396. package/dist/esm/adapter/device-helpers/get-device-info.js +0 -44
  397. package/dist/esm/adapter/device-helpers/get-device-info.js.map +0 -1
  398. package/dist/esm/adapter/device-helpers/is-old-ie.js +0 -8
  399. package/dist/esm/adapter/device-helpers/is-old-ie.js.map +0 -1
  400. package/dist/esm/adapter/helpers/attribute-utils.js +0 -81
  401. package/dist/esm/adapter/helpers/attribute-utils.js.map +0 -1
  402. package/dist/esm/adapter/helpers/get-shader-layout.js +0 -306
  403. package/dist/esm/adapter/helpers/get-shader-layout.js.map +0 -1
  404. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js +0 -37
  405. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  406. package/dist/esm/adapter/helpers/set-uniform.js +0 -115
  407. package/dist/esm/adapter/helpers/set-uniform.js.map +0 -1
  408. package/dist/esm/adapter/helpers/uniforms.js +0 -99
  409. package/dist/esm/adapter/helpers/uniforms.js.map +0 -1
  410. package/dist/esm/adapter/objects/constants-to-keys.js +0 -42
  411. package/dist/esm/adapter/objects/constants-to-keys.js.map +0 -1
  412. package/dist/esm/adapter/objects/webgl-renderbuffer.js +0 -94
  413. package/dist/esm/adapter/objects/webgl-renderbuffer.js.map +0 -1
  414. package/dist/esm/adapter/objects/webgl-resource.js +0 -216
  415. package/dist/esm/adapter/objects/webgl-resource.js.map +0 -1
  416. package/dist/esm/adapter/objects/webgl-vertex-array-object.js +0 -84
  417. package/dist/esm/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  418. package/dist/esm/adapter/resources/webgl-buffer.js +0 -164
  419. package/dist/esm/adapter/resources/webgl-buffer.js.map +0 -1
  420. package/dist/esm/adapter/resources/webgl-command-buffer.js +0 -65
  421. package/dist/esm/adapter/resources/webgl-command-buffer.js.map +0 -1
  422. package/dist/esm/adapter/resources/webgl-command-encoder.js +0 -53
  423. package/dist/esm/adapter/resources/webgl-command-encoder.js.map +0 -1
  424. package/dist/esm/adapter/resources/webgl-external-texture.js +0 -2
  425. package/dist/esm/adapter/resources/webgl-external-texture.js.map +0 -1
  426. package/dist/esm/adapter/resources/webgl-framebuffer.js +0 -265
  427. package/dist/esm/adapter/resources/webgl-framebuffer.js.map +0 -1
  428. package/dist/esm/adapter/resources/webgl-render-pass.js +0 -19
  429. package/dist/esm/adapter/resources/webgl-render-pass.js.map +0 -1
  430. package/dist/esm/adapter/resources/webgl-render-pipeline.js +0 -400
  431. package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +0 -1
  432. package/dist/esm/adapter/resources/webgl-sampler.js +0 -50
  433. package/dist/esm/adapter/resources/webgl-sampler.js.map +0 -1
  434. package/dist/esm/adapter/resources/webgl-shader.js +0 -75
  435. package/dist/esm/adapter/resources/webgl-shader.js.map +0 -1
  436. package/dist/esm/adapter/resources/webgl-texture.js +0 -831
  437. package/dist/esm/adapter/resources/webgl-texture.js.map +0 -1
  438. package/dist/esm/adapter/webgl-canvas-context.js +0 -54
  439. package/dist/esm/adapter/webgl-canvas-context.js.map +0 -1
  440. package/dist/esm/adapter/webgl-device.js +0 -280
  441. package/dist/esm/adapter/webgl-device.js.map +0 -1
  442. package/dist/esm/bundle.js +0 -5
  443. package/dist/esm/bundle.js.map +0 -1
  444. package/dist/esm/classic/accessor.js +0 -144
  445. package/dist/esm/classic/accessor.js.map +0 -1
  446. package/dist/esm/classic/buffer.js +0 -384
  447. package/dist/esm/classic/buffer.js.map +0 -1
  448. package/dist/esm/classic/typed-array-utils.js +0 -112
  449. package/dist/esm/classic/typed-array-utils.js.map +0 -1
  450. package/dist/esm/context/context/context-state.js +0 -26
  451. package/dist/esm/context/context/context-state.js.map +0 -1
  452. package/dist/esm/context/context/create-context.js.map +0 -1
  453. package/dist/esm/context/context/device-pixels.js +0 -98
  454. package/dist/esm/context/context/device-pixels.js.map +0 -1
  455. package/dist/esm/context/context/webgl-checks.js +0 -34
  456. package/dist/esm/context/context/webgl-checks.js.map +0 -1
  457. package/dist/esm/context/debug/spector.js +0 -76
  458. package/dist/esm/context/debug/spector.js.map +0 -1
  459. package/dist/esm/context/debug/webgl-developer-tools.js +0 -121
  460. package/dist/esm/context/debug/webgl-developer-tools.js.map +0 -1
  461. package/dist/esm/context/parameters/unified-parameter-api.js +0 -65
  462. package/dist/esm/context/parameters/unified-parameter-api.js.map +0 -1
  463. package/dist/esm/context/parameters/webgl-parameter-tables.js +0 -445
  464. package/dist/esm/context/parameters/webgl-parameter-tables.js.map +0 -1
  465. package/dist/esm/context/polyfill/get-parameter-polyfill.js +0 -91
  466. package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +0 -1
  467. package/dist/esm/context/polyfill/polyfill-context.js +0 -92
  468. package/dist/esm/context/polyfill/polyfill-context.js.map +0 -1
  469. package/dist/esm/context/polyfill/polyfill-table.js +0 -160
  470. package/dist/esm/context/polyfill/polyfill-table.js.map +0 -1
  471. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js +0 -335
  472. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  473. package/dist/esm/context/state-tracker/deep-array-equal.js +0 -21
  474. package/dist/esm/context/state-tracker/deep-array-equal.js.map +0 -1
  475. package/dist/esm/context/state-tracker/track-context-state.js +0 -183
  476. package/dist/esm/context/state-tracker/track-context-state.js.map +0 -1
  477. package/dist/esm/context/state-tracker/with-parameters.js +0 -36
  478. package/dist/esm/context/state-tracker/with-parameters.js.map +0 -1
  479. package/dist/esm/index.js +0 -27
  480. package/dist/esm/index.js.map +0 -1
  481. package/dist/esm/init.js +0 -4
  482. package/dist/esm/init.js.map +0 -1
  483. package/dist/esm/types/webgl.js +0 -2
  484. package/dist/esm/types/webgl.js.map +0 -1
  485. package/dist/esm/types.js +0 -2
  486. package/dist/esm/types.js.map +0 -1
  487. package/dist/init.d.ts +0 -2
  488. package/dist/init.d.ts.map +0 -1
  489. package/dist/init.js +0 -4
  490. package/dist/init.js.map +0 -1
  491. package/dist/types/webgl.d.ts +0 -144
  492. package/dist/types/webgl.d.ts.map +0 -1
  493. package/dist/types/webgl.js +0 -2
  494. package/dist/types/webgl.js.map +0 -1
  495. package/src/adapter/converters/renderbuffer-formats.ts +0 -92
  496. package/src/bundle.ts +0 -4
  497. package/src/context/context/context-state.ts +0 -41
  498. package/src/context/context/device-pixels.ts +0 -152
  499. package/src/init.ts +0 -4
  500. package/src/types/webgl.ts +0 -283
@@ -1,5 +1,5 @@
1
- import {assert} from '@luma.gl/api';
2
- import GL from '@luma.gl/constants';
1
+ import {assert} from '@luma.gl/core';
2
+ import {GL} from '@luma.gl/constants';
3
3
 
4
4
  // Resolve a WebGL enumeration name (returns itself if already a number)
5
5
  export function getKeyValue(gl: WebGLRenderingContext, name: string | GL): GL {
@@ -16,30 +16,8 @@ export function getKeyValue(gl: WebGLRenderingContext, name: string | GL): GL {
16
16
 
17
17
  // Look up string, after removing any 'GL.' or 'gl.' prefix
18
18
  name = name.replace(/^.*\./, '');
19
+ // @ts-ignore expect-error depends on settings
19
20
  const value = gl[name];
20
21
  assert(value !== undefined, `Accessing undefined constant GL.${name}`);
21
22
  return value;
22
23
  }
23
-
24
- export function getKey(gl: WebGLRenderingContext, value: any): string {
25
- // @ts-expect-error
26
- gl = gl.gl || gl;
27
- value = Number(value);
28
- for (const key in gl) {
29
- if (gl[key] === value) {
30
- return `GL.${key}`;
31
- }
32
- }
33
- return String(value);
34
- }
35
-
36
- export function getKeyType(gl: WebGLRenderingContext, value: any): string {
37
- assert(value !== undefined, 'undefined key');
38
- value = Number(value);
39
- for (const key in gl) {
40
- if (gl[key] === value) {
41
- return `GL.${key}`;
42
- }
43
- }
44
- return String(value);
45
- }
@@ -1,29 +1,17 @@
1
- /* eslint-disable no-inline-comments */
2
- import {assert, ResourceProps} from '@luma.gl/api';
3
- import GL from '@luma.gl/constants';
4
- import WebGLDevice from '../webgl-device';
5
- import WebGLResource from './webgl-resource';
6
- import {
7
- isRenderbufferFormatSupported, getRenderbufferFormatBytesPerPixel
8
- } from '../converters/renderbuffer-formats';
1
+ import {assert, ResourceProps, TextureFormat} from '@luma.gl/core';
2
+ import {GL} from '@luma.gl/constants';
3
+ import {WebGLDevice} from '../webgl-device';
4
+ import {WebGLResource} from './webgl-resource';
5
+ import {isRenderbufferFormatSupported} from '../converters/texture-formats';
6
+ import {convertTextureFormatToGL, getTextureFormatBytesPerPixel} from '../converters/texture-formats';
9
7
 
10
8
  export type RenderbufferProps = ResourceProps & {
11
- format: number;
9
+ format: TextureFormat;
12
10
  width?: number;
13
11
  height?: number;
14
12
  samples?: number;
15
13
  };
16
14
 
17
- const DEFAULT_RENDERBUFFER_PROPS: Required<RenderbufferProps> = {
18
- id: undefined,
19
- handle: undefined,
20
- userData: undefined,
21
- format: 0,
22
- width: 1,
23
- height: 1,
24
- samples: 0
25
- };
26
-
27
15
  /**
28
16
  * Renderbuffers are GPU objects that contain images.
29
17
  * In contrast to Textures they are optimized for use as render targets, with Framebuffers.
@@ -34,36 +22,54 @@ const DEFAULT_RENDERBUFFER_PROPS: Required<RenderbufferProps> = {
34
22
  * use Textures instead.
35
23
  * Renderbuffer objects also natively accommodate Multisampling (MSAA).
36
24
  */
37
- export default class WEBGLRenderbuffer extends WebGLResource<RenderbufferProps> {
38
- get [Symbol.toStringTag](): string { return 'Renderbuffer'; }
25
+ export class WEBGLRenderbuffer extends WebGLResource<RenderbufferProps> {
26
+ static override readonly defaultProps: Required<RenderbufferProps> = {
27
+ id: undefined,
28
+ handle: undefined,
29
+ userData: undefined,
30
+ format: undefined, // 'depth16unorm'
31
+ width: 1,
32
+ height: 1,
33
+ samples: 0
34
+ };
35
+
36
+ override get [Symbol.toStringTag](): string { return 'Renderbuffer'; }
39
37
 
40
38
  get width(): number { return this.props.width; }
41
39
  get height(): number { return this.props.height; }
42
- get format(): number { return this.props.format; }
40
+ get format(): TextureFormat { return this.props.format; }
43
41
  get samples(): number { return this.props.samples; }
42
+ get attachment() { return }
43
+
44
+ /** WebGL format constant */
45
+ glFormat: GL;
44
46
 
45
- static isSupported(gl: WebGLRenderingContext, options?: {format?: number}): boolean {
46
- return !options.format || isRenderbufferFormatSupported(gl, options.format);
47
+ static isTextureFormatSupported(device: WebGLDevice, format: TextureFormat): boolean {
48
+ return isRenderbufferFormatSupported(device.gl, format);
47
49
  }
48
50
 
49
51
  constructor(device: WebGLDevice, props: RenderbufferProps) {
50
- super(device, props, DEFAULT_RENDERBUFFER_PROPS);
52
+ // TODO - remove temporary sanity check
53
+ if (typeof props.format === 'number') {
54
+ throw new Error('Renderbuffer');
55
+ }
56
+ super(device, props, WEBGLRenderbuffer.defaultProps);
57
+ this.glFormat = convertTextureFormatToGL(this.props.format, device.isWebGL2);
51
58
  this._initialize(this.props);
52
59
  }
53
60
 
54
- resize(size: {width: number, height: number}): this {
61
+ resize(size: {width: number, height: number}): void {
55
62
  // Don't resize if width/height haven't changed
56
63
  if (size.width !== this.width || size.height !== this.height) {
57
64
  Object.assign(this.props, {...size, format: this.format, samples: this.samples});
58
65
  this._initialize(this.props);
59
66
  }
60
- return this;
61
67
  }
62
68
 
63
69
  // PRIVATE METHODS
64
70
 
65
71
  /** Creates and initializes a renderbuffer object's data store */
66
- protected _initialize(props: Required<RenderbufferProps>) {
72
+ protected _initialize(props: Required<RenderbufferProps>): void {
67
73
  const {format, width, height, samples} = props;
68
74
  assert(format, 'Needs format');
69
75
 
@@ -72,33 +78,30 @@ export default class WEBGLRenderbuffer extends WebGLResource<RenderbufferProps>
72
78
  this.gl.bindRenderbuffer(GL.RENDERBUFFER, this.handle);
73
79
 
74
80
  if (samples !== 0 && this.device.isWebGL2) {
75
- // @ts-expect-error
76
- this.gl.renderbufferStorageMultisample(GL.RENDERBUFFER, samples, format, width, height);
81
+ this.gl2.renderbufferStorageMultisample(GL.RENDERBUFFER, samples, this.glFormat, width, height);
77
82
  } else {
78
- this.gl.renderbufferStorage(GL.RENDERBUFFER, format, width, height);
83
+ this.gl.renderbufferStorage(GL.RENDERBUFFER, this.glFormat, width, height);
79
84
  }
80
85
 
81
86
  this.gl.bindRenderbuffer(GL.RENDERBUFFER, null);
82
87
 
83
88
  this.trackAllocatedMemory(
84
- width * height * (samples || 1) * getRenderbufferFormatBytesPerPixel(format)
89
+ width * height * (samples || 1) * getTextureFormatBytesPerPixel(this.glFormat, this.device.isWebGL2)
85
90
  );
86
-
87
- return this;
88
91
  }
89
92
 
90
93
  // RESOURCE IMPLEMENTATION
91
94
 
92
- _createHandle() {
95
+ override _createHandle() {
93
96
  return this.gl.createRenderbuffer();
94
97
  }
95
98
 
96
- _deleteHandle(): void {
99
+ override _deleteHandle(): void {
97
100
  this.gl.deleteRenderbuffer(this.handle);
98
101
  this.trackDeallocatedMemory();
99
102
  }
100
103
 
101
- _bindHandle(handle: WEBGLRenderbuffer): void {
104
+ override _bindHandle(handle: WEBGLRenderbuffer): void {
102
105
  this.gl.bindRenderbuffer(GL.RENDERBUFFER, handle);
103
106
  }
104
107
  }
@@ -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,103 @@
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';
9
11
 
10
12
  const ERR_ELEMENTS = 'elements must be GL.ELEMENT_ARRAY_BUFFER';
11
13
 
12
14
  /**
13
15
  * VertexArrayObject properties
16
+ * @param constantAttributeZero Attribute 0 can not be disable on most desktop OpenGL based browsers
17
+ * and on iOS Safari browser.
14
18
  */
15
19
  export type VertexArrayObjectProps = ResourceProps & {
20
+ constantAttributeZero?: boolean;
16
21
  };
17
22
 
18
23
  /** VertexArrayObject wrapper */
19
- export default class WEBGLVertexArrayObject extends WebGLResource<VertexArrayObjectProps> {
20
- get [Symbol.toStringTag](): string {
24
+ export class WEBGLVertexArrayObject extends WebGLResource<VertexArrayObjectProps> {
25
+ override get [Symbol.toStringTag](): string {
21
26
  return 'BaseVertexArrayObject';
22
27
  }
23
28
 
24
- constructor(device: WebGLDevice, props?: VertexArrayObjectProps) {
25
- // @ts-expect-error
26
- super(device, props, {});
29
+ /** Buffer constant */
30
+ private buffer: BufferWithAccessor | null = null;
31
+ private bufferValue = null;
32
+
33
+ static isConstantAttributeZeroSupported(device: Device): boolean {
34
+ return device.info.type === 'webgl2' || getBrowser() === 'Chrome';
27
35
  }
28
36
 
29
- _createHandle() {
37
+ // Create a VertexArray
38
+ constructor(device: Device, props?: VertexArrayObjectProps) {
39
+ super(device, props, {...Resource.defaultProps, constantAttributeZero: false});
40
+ Object.seal(this);
41
+ }
42
+
43
+ override destroy(): void {
44
+ super.destroy();
45
+ if (this.buffer) {
46
+ this.buffer?.destroy();
47
+ } }
48
+
49
+ override _createHandle() {
30
50
  return this.gl2.createVertexArray();
31
51
  }
32
52
 
33
- _deleteHandle(): void {
53
+ override _deleteHandle(): void {
34
54
  this.gl2.deleteVertexArray(this.handle);
35
55
  // @ts-expect-error
36
56
  return [this.elements];
37
57
  // return [this.elements, ...this.buffers];
38
58
  }
39
59
 
40
- _bindHandle(handle: WEBGLVertexArrayObject): void {
60
+ override _bindHandle(handle: WEBGLVertexArrayObject): void {
41
61
  this.gl2.bindVertexArray(handle);
42
62
  }
43
63
 
64
+ /**
65
+ * Enabling an attribute location makes it reference the currently bound buffer
66
+ * Disabling an attribute location makes it reference the global constant value
67
+ * TODO - handle single values for size 1 attributes?
68
+ * TODO - convert classic arrays based on known type?
69
+ */
70
+ enable(location: number, enable = true): void {
71
+ // Attribute 0 cannot be disabled in most desktop OpenGL based browsers...
72
+ const canDisableAttributeZero = this.device.isWebGL2 || getBrowser() === 'Chrome';
73
+ const canDisableAttribute = canDisableAttributeZero || location !== 0;
74
+
75
+ if (enable || canDisableAttribute) {
76
+ location = Number(location);
77
+ this.bind(() =>
78
+ enable
79
+ ? this.gl.enableVertexAttribArray(location)
80
+ : this.gl.disableVertexAttribArray(location)
81
+ );
82
+ } }
83
+
44
84
  // Set (bind) an elements buffer, for indexed rendering.
45
85
  // 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);
86
+ setElementBuffer(elementBuffer: WEBGLBuffer | null = null, opts = {}) {
87
+ assert(!elementBuffer || elementBuffer.glTarget === GL.ELEMENT_ARRAY_BUFFER, ERR_ELEMENTS);
48
88
 
49
89
  // The GL.ELEMENT_ARRAY_BUFFER_BINDING is stored on the VertexArrayObject...
50
90
  this.bind(() => {
51
91
  this.gl.bindBuffer(GL.ELEMENT_ARRAY_BUFFER, elementBuffer ? elementBuffer.handle : null);
52
92
  });
53
-
54
- return this;
55
93
  }
56
94
 
57
95
  /** Set a location in vertex attributes array to a buffer, enables the location, sets divisor */
58
- setBuffer(location: number, buffer: Buffer, accessor: any): this {
96
+ setBuffer(location: number, buffer: WEBGLBuffer, accessor: any): void {
59
97
  // Check target
60
- if (buffer.target === GL.ELEMENT_ARRAY_BUFFER) {
61
- return this.setElementBuffer(buffer, accessor);
98
+ if (buffer.glTarget === GL.ELEMENT_ARRAY_BUFFER) {
99
+ this.setElementBuffer(buffer, accessor);
100
+ return;
62
101
  }
63
102
 
64
103
  const {size, type, stride, offset, normalized, integer, divisor} = accessor;
@@ -83,29 +122,154 @@ export default class WEBGLVertexArrayObject extends WebGLResource<VertexArrayObj
83
122
 
84
123
  // NOTE We don't unbind buffer here, typically another buffer will be bound just after
85
124
  });
125
+ }
86
126
 
87
- return this;
127
+ /**
128
+ * Set an attribute to a constant value
129
+ * @param device
130
+ * @param location
131
+ * @param array
132
+ *
133
+ * @note Constants are stored globally on the WebGL context, not the VAO
134
+ * so they need to be updated before every render
135
+ * @todo - use known type (in configuration or passed in) to allow non-typed arrays?
136
+ * @todo - remember/cache values to avoid setting them unnecessarily?
137
+ */
138
+ setConstant(location: any, array: TypedArray): void {
139
+ switch (array.constructor) {
140
+ case Float32Array:
141
+ setConstantFloatArray(this.device, location, array as Float32Array);
142
+ break;
143
+ case Int32Array:
144
+ setConstantIntArray(this.device, location, array as Int32Array);
145
+ break;
146
+ case Uint32Array:
147
+ setConstantUintArray(this.device, location, array as Uint32Array);
148
+ break;
149
+ default:
150
+ assert(false);
151
+ }
88
152
  }
89
153
 
90
154
  /**
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?
155
+ * Provide a means to create a buffer that is equivalent to a constant.
156
+ * NOTE: Desktop OpenGL cannot disable attribute 0.
157
+ * https://stackoverflow.com/questions/20305231/webgl-warning-attribute-0-is-disabled-
158
+ * this-has-significant-performance-penalty
95
159
  */
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;
160
+ getConstantBuffer(elementCount: number, value): Buffer {
161
+ // Create buffer only when needed, and reuse it (avoids inflating buffer creation statistics)
100
162
 
101
- if (enable || canDisableAttribute) {
102
- location = Number(location);
103
- this.bind(() =>
104
- enable
105
- ? this.gl.enableVertexAttribArray(location)
106
- : this.gl.disableVertexAttribArray(location)
107
- );
163
+ const constantValue = normalizeConstantArrayValue(value);
164
+
165
+ const byteLength = constantValue.byteLength * elementCount;
166
+ const length = constantValue.length * elementCount;
167
+
168
+ let updateNeeded = !this.buffer;
169
+
170
+ this.buffer = this.buffer || this.device.createBuffer({byteLength}) as BufferWithAccessor;
171
+ updateNeeded = updateNeeded || this.buffer.reallocate(byteLength);
172
+
173
+ // Reallocate and update contents if needed
174
+ updateNeeded =
175
+ updateNeeded || !compareConstantArrayValues(constantValue, this.bufferValue);
176
+
177
+ if (updateNeeded) {
178
+ // Create a typed array that is big enough, and fill it with the required data
179
+ const typedArray = getScratchArray(value.constructor, length);
180
+ fillArray({target: typedArray, source: constantValue, start: 0, count: length});
181
+ this.buffer.subData(typedArray);
182
+ this.bufferValue = value;
183
+ }
184
+
185
+ return this.buffer;
186
+ }
187
+ }
188
+
189
+ function setConstantFloatArray(device: WebGLDevice, location: number, array: Float32Array): void {
190
+ switch (array.length) {
191
+ case 1:
192
+ device.gl.vertexAttrib1fv(location, array);
193
+ break;
194
+ case 2:
195
+ device.gl.vertexAttrib2fv(location, array);
196
+ break;
197
+ case 3:
198
+ device.gl.vertexAttrib3fv(location, array);
199
+ break;
200
+ case 4:
201
+ device.gl.vertexAttrib4fv(location, array);
202
+ break;
203
+ default:
204
+ assert(false);
205
+ }
206
+ }
207
+
208
+ function setConstantIntArray(device: WebGLDevice, location: number, array: Int32Array): void {
209
+ device.assertWebGL2();
210
+ device.gl2?.vertexAttribI4iv(location, array);
211
+ // switch (array.length) {
212
+ // case 1:
213
+ // gl.vertexAttribI1iv(location, array);
214
+ // break;
215
+ // case 2:
216
+ // gl.vertexAttribI2iv(location, array);
217
+ // break;
218
+ // case 3:
219
+ // gl.vertexAttribI3iv(location, array);
220
+ // break;
221
+ // case 4:
222
+ // break;
223
+ // default:
224
+ // assert(false);
225
+ // }
226
+ }
227
+
228
+ function setConstantUintArray(device: WebGLDevice, location: number, array: Uint32Array) {
229
+ device.assertWebGL2();
230
+ device.gl2?.vertexAttribI4uiv(location, array);
231
+ // switch (array.length) {
232
+ // case 1:
233
+ // gl.vertexAttribI1uiv(location, array);
234
+ // break;
235
+ // case 2:
236
+ // gl.vertexAttribI2uiv(location, array);
237
+ // break;
238
+ // case 3:
239
+ // gl.vertexAttribI3uiv(location, array);
240
+ // break;
241
+ // case 4:
242
+ // gl.vertexAttribI4uiv(location, array);
243
+ // break;
244
+ // default:
245
+ // assert(false);
246
+ // }
247
+ }
248
+
249
+ // HELPERS
250
+
251
+ /**
252
+ * TODO - convert Arrays based on known type? (read type from accessor, don't assume Float32Array)
253
+ * TODO - handle single values for size 1 attributes?
254
+ */
255
+ function normalizeConstantArrayValue(arrayValue: NumericArray) {
256
+ if (Array.isArray(arrayValue)) {
257
+ return new Float32Array(arrayValue);
258
+ }
259
+ return arrayValue;
260
+ }
261
+
262
+ /**
263
+ *
264
+ */
265
+ function compareConstantArrayValues(v1: NumericArray, v2: NumericArray): boolean {
266
+ if (!v1 || !v2 || v1.length !== v2.length || v1.constructor !== v2.constructor) {
267
+ return false;
268
+ }
269
+ for (let i = 0; i < v1.length; ++i) {
270
+ if (v1[i] !== v2[i]) {
271
+ return false;
108
272
  }
109
- return this;
110
273
  }
274
+ return true;
111
275
  }