@luma.gl/webgl 9.0.0-alpha.9 → 9.0.0-beta.10

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 (553) hide show
  1. package/LICENSE +3 -1
  2. package/dist/adapter/converters/device-parameters.d.ts +12 -3
  3. package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
  4. package/dist/adapter/converters/device-parameters.js +300 -146
  5. package/dist/adapter/converters/sampler-parameters.d.ts +3 -13
  6. package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
  7. package/dist/adapter/converters/sampler-parameters.js +74 -219
  8. package/dist/adapter/converters/shader-formats.d.ts +9 -0
  9. package/dist/adapter/converters/shader-formats.d.ts.map +1 -0
  10. package/dist/adapter/converters/shader-formats.js +59 -0
  11. package/dist/adapter/converters/texture-formats.d.ts +41 -57
  12. package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
  13. package/dist/adapter/converters/texture-formats.js +490 -925
  14. package/dist/adapter/converters/vertex-formats.d.ts +9 -3
  15. package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
  16. package/dist/adapter/converters/vertex-formats.js +56 -33
  17. package/dist/adapter/device-helpers/webgl-device-features.d.ts +20 -0
  18. package/dist/adapter/device-helpers/webgl-device-features.d.ts.map +1 -0
  19. package/dist/adapter/device-helpers/webgl-device-features.js +98 -0
  20. package/dist/adapter/device-helpers/webgl-device-info.d.ts +5 -0
  21. package/dist/adapter/device-helpers/webgl-device-info.d.ts.map +1 -0
  22. package/dist/adapter/device-helpers/webgl-device-info.js +90 -0
  23. package/dist/adapter/device-helpers/webgl-device-limits.d.ts +35 -0
  24. package/dist/adapter/device-helpers/webgl-device-limits.d.ts.map +1 -0
  25. package/dist/adapter/device-helpers/webgl-device-limits.js +47 -0
  26. package/dist/adapter/helpers/decode-webgl-types.d.ts +26 -0
  27. package/dist/adapter/helpers/decode-webgl-types.d.ts.map +1 -0
  28. package/dist/adapter/helpers/decode-webgl-types.js +101 -0
  29. package/dist/adapter/helpers/get-shader-layout.d.ts +2 -49
  30. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
  31. package/dist/adapter/helpers/get-shader-layout.js +263 -307
  32. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts +1 -1
  33. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
  34. package/dist/adapter/helpers/parse-shader-compiler-log.js +48 -33
  35. package/dist/adapter/helpers/set-uniform.d.ts +3 -2
  36. package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
  37. package/dist/adapter/helpers/set-uniform.js +66 -111
  38. package/dist/adapter/helpers/webgl-topology-utils.d.ts +16 -0
  39. package/dist/adapter/helpers/webgl-topology-utils.d.ts.map +1 -0
  40. package/dist/adapter/helpers/webgl-topology-utils.js +88 -0
  41. package/dist/adapter/objects/constants-to-keys.d.ts +2 -4
  42. package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
  43. package/dist/adapter/objects/constants-to-keys.js +18 -38
  44. package/dist/adapter/objects/webgl-renderbuffer.d.ts +15 -12
  45. package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
  46. package/dist/adapter/objects/webgl-renderbuffer.js +92 -91
  47. package/dist/adapter/objects/webgl-resource.d.ts +6 -31
  48. package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
  49. package/dist/adapter/objects/webgl-resource.js +103 -205
  50. package/dist/adapter/resources/webgl-buffer.d.ts +20 -16
  51. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  52. package/dist/adapter/resources/webgl-buffer.js +163 -155
  53. package/dist/adapter/resources/webgl-command-buffer.d.ts +15 -9
  54. package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
  55. package/dist/adapter/resources/webgl-command-buffer.js +283 -58
  56. package/dist/adapter/resources/webgl-command-encoder.d.ts +12 -6
  57. package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
  58. package/dist/adapter/resources/webgl-command-encoder.js +36 -52
  59. package/dist/adapter/resources/webgl-external-texture.js +93 -1
  60. package/dist/adapter/resources/webgl-framebuffer.d.ts +21 -29
  61. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  62. package/dist/adapter/resources/webgl-framebuffer.js +184 -261
  63. package/dist/adapter/resources/webgl-query-set.d.ts +44 -0
  64. package/dist/adapter/resources/webgl-query-set.d.ts.map +1 -0
  65. package/dist/adapter/resources/webgl-query-set.js +136 -0
  66. package/dist/adapter/resources/webgl-render-pass.d.ts +21 -4
  67. package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
  68. package/dist/adapter/resources/webgl-render-pass.js +140 -20
  69. package/dist/adapter/resources/webgl-render-pipeline.d.ts +44 -21
  70. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  71. package/dist/adapter/resources/webgl-render-pipeline.js +371 -413
  72. package/dist/adapter/resources/webgl-sampler.d.ts +5 -6
  73. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
  74. package/dist/adapter/resources/webgl-sampler.js +46 -46
  75. package/dist/adapter/resources/webgl-shader.d.ts +16 -6
  76. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  77. package/dist/adapter/resources/webgl-shader.js +113 -72
  78. package/dist/adapter/resources/webgl-texture-view.d.ts +14 -0
  79. package/dist/adapter/resources/webgl-texture-view.d.ts.map +1 -0
  80. package/dist/adapter/resources/webgl-texture-view.js +18 -0
  81. package/dist/adapter/resources/webgl-texture.d.ts +53 -35
  82. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  83. package/dist/adapter/resources/webgl-texture.js +623 -822
  84. package/dist/adapter/resources/webgl-transform-feedback.d.ts +47 -0
  85. package/dist/adapter/resources/webgl-transform-feedback.d.ts.map +1 -0
  86. package/dist/adapter/resources/webgl-transform-feedback.js +162 -0
  87. package/dist/adapter/resources/webgl-vertex-array.d.ts +67 -0
  88. package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -0
  89. package/dist/adapter/resources/webgl-vertex-array.js +239 -0
  90. package/dist/adapter/webgl-canvas-context.d.ts +6 -7
  91. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
  92. package/dist/adapter/webgl-canvas-context.js +61 -50
  93. package/dist/adapter/webgl-device.d.ts +112 -55
  94. package/dist/adapter/webgl-device.d.ts.map +1 -1
  95. package/dist/adapter/webgl-device.js +453 -331
  96. package/dist/classic/accessor.d.ts +3 -3
  97. package/dist/classic/accessor.d.ts.map +1 -1
  98. package/dist/classic/accessor.js +135 -130
  99. package/dist/classic/clear.d.ts +22 -0
  100. package/dist/classic/clear.d.ts.map +1 -0
  101. package/dist/classic/clear.js +89 -0
  102. package/dist/classic/copy-and-blit.d.ts +62 -0
  103. package/dist/classic/copy-and-blit.d.ts.map +1 -0
  104. package/dist/classic/copy-and-blit.js +191 -0
  105. package/dist/classic/format-utils.d.ts +3 -0
  106. package/dist/classic/format-utils.d.ts.map +1 -0
  107. package/dist/classic/format-utils.js +44 -0
  108. package/dist/classic/typed-array-utils.d.ts +17 -17
  109. package/dist/classic/typed-array-utils.d.ts.map +1 -1
  110. package/dist/classic/typed-array-utils.js +96 -102
  111. package/dist/context/debug/spector.d.ts +1 -2
  112. package/dist/context/debug/spector.d.ts.map +1 -1
  113. package/dist/context/debug/spector.js +56 -63
  114. package/dist/context/debug/webgl-developer-tools.d.ts +2 -3
  115. package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
  116. package/dist/context/debug/webgl-developer-tools.js +106 -102
  117. package/dist/context/helpers/create-browser-context.d.ts +35 -0
  118. package/dist/context/helpers/create-browser-context.d.ts.map +1 -0
  119. package/dist/context/helpers/create-browser-context.js +67 -0
  120. package/dist/context/helpers/webgl-context-data.d.ts +13 -0
  121. package/dist/context/helpers/webgl-context-data.d.ts.map +1 -0
  122. package/dist/context/helpers/webgl-context-data.js +21 -0
  123. package/dist/context/helpers/webgl-extensions.d.ts +4 -0
  124. package/dist/context/helpers/webgl-extensions.d.ts.map +1 -0
  125. package/dist/context/helpers/webgl-extensions.js +10 -0
  126. package/dist/context/parameters/unified-parameter-api.d.ts +4 -5
  127. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  128. package/dist/context/parameters/unified-parameter-api.js +91 -54
  129. package/dist/context/parameters/webgl-parameter-tables.d.ts +115 -106
  130. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  131. package/dist/context/parameters/webgl-parameter-tables.js +463 -423
  132. package/dist/context/state-tracker/deep-array-equal.d.ts.map +1 -1
  133. package/dist/context/state-tracker/deep-array-equal.js +19 -18
  134. package/dist/context/state-tracker/track-context-state.d.ts +4 -4
  135. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
  136. package/dist/context/state-tracker/track-context-state.js +192 -163
  137. package/dist/context/state-tracker/with-parameters.d.ts +2 -2
  138. package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
  139. package/dist/context/state-tracker/with-parameters.js +44 -32
  140. package/dist/dist.dev.js +6574 -0
  141. package/dist/dist.min.js +10 -0
  142. package/dist/index.cjs +5586 -0
  143. package/dist/index.cjs.map +7 -0
  144. package/dist/index.d.ts +25 -32
  145. package/dist/index.d.ts.map +1 -1
  146. package/dist/index.js +37 -28
  147. package/dist/types.d.ts +3 -1
  148. package/dist/types.d.ts.map +1 -1
  149. package/dist/types.js +3 -1
  150. package/dist.min.js +19 -0
  151. package/package.json +22 -15
  152. package/src/adapter/converters/device-parameters.ts +217 -54
  153. package/src/adapter/converters/sampler-parameters.ts +46 -126
  154. package/src/adapter/converters/shader-formats.ts +69 -0
  155. package/src/adapter/converters/texture-formats.ts +369 -340
  156. package/src/adapter/converters/vertex-formats.ts +71 -10
  157. package/src/adapter/device-helpers/webgl-device-features.ts +121 -0
  158. package/src/adapter/device-helpers/webgl-device-info.ts +111 -0
  159. package/src/adapter/device-helpers/webgl-device-limits.ts +53 -0
  160. package/src/adapter/helpers/{uniforms.ts → decode-webgl-types.ts} +38 -25
  161. package/src/adapter/helpers/get-shader-layout.ts +104 -158
  162. package/src/adapter/helpers/parse-shader-compiler-log.ts +31 -11
  163. package/src/adapter/helpers/set-uniform.ts +39 -36
  164. package/src/adapter/helpers/webgl-topology-utils.ts +110 -0
  165. package/src/adapter/objects/constants-to-keys.ts +8 -26
  166. package/src/adapter/objects/webgl-renderbuffer.ts +68 -40
  167. package/src/adapter/objects/webgl-resource.ts +16 -156
  168. package/src/adapter/resources/webgl-buffer.ts +103 -112
  169. package/src/adapter/resources/webgl-command-buffer.ts +333 -41
  170. package/src/adapter/resources/webgl-command-encoder.ts +33 -22
  171. package/src/adapter/resources/webgl-external-texture.ts +11 -8
  172. package/src/adapter/resources/webgl-framebuffer.ts +125 -165
  173. package/src/adapter/resources/webgl-query-set.ts +171 -0
  174. package/src/adapter/resources/webgl-render-pass.ts +176 -6
  175. package/src/adapter/resources/webgl-render-pipeline.ts +308 -229
  176. package/src/adapter/resources/webgl-sampler.ts +19 -18
  177. package/src/adapter/resources/webgl-shader.ts +91 -32
  178. package/src/adapter/resources/webgl-texture-view.ts +28 -0
  179. package/src/adapter/resources/webgl-texture.ts +147 -184
  180. package/src/adapter/resources/webgl-transform-feedback.ts +196 -0
  181. package/src/adapter/resources/webgl-vertex-array.ts +282 -0
  182. package/src/adapter/webgl-canvas-context.ts +23 -22
  183. package/src/adapter/webgl-device.ts +411 -196
  184. package/src/classic/accessor.ts +12 -8
  185. package/src/classic/clear.ts +118 -0
  186. package/src/classic/copy-and-blit.ts +318 -0
  187. package/src/classic/format-utils.ts +47 -0
  188. package/src/classic/typed-array-utils.ts +19 -31
  189. package/src/context/debug/spector.ts +16 -10
  190. package/src/context/debug/webgl-developer-tools.ts +52 -32
  191. package/src/context/helpers/create-browser-context.ts +116 -0
  192. package/src/context/helpers/webgl-context-data.ts +31 -0
  193. package/src/context/helpers/webgl-extensions.ts +17 -0
  194. package/src/context/parameters/unified-parameter-api.ts +11 -16
  195. package/src/context/parameters/webgl-parameter-tables.ts +171 -121
  196. package/src/context/state-tracker/deep-array-equal.ts +3 -0
  197. package/src/context/state-tracker/track-context-state.ts +35 -26
  198. package/src/context/state-tracker/with-parameters.ts +12 -3
  199. package/src/index.ts +41 -55
  200. package/src/types.ts +6 -0
  201. package/dist/adapter/converters/device-parameters.js.map +0 -1
  202. package/dist/adapter/converters/renderbuffer-formats.d.ts +0 -16
  203. package/dist/adapter/converters/renderbuffer-formats.d.ts.map +0 -1
  204. package/dist/adapter/converters/renderbuffer-formats.js +0 -185
  205. package/dist/adapter/converters/renderbuffer-formats.js.map +0 -1
  206. package/dist/adapter/converters/sampler-parameters.js.map +0 -1
  207. package/dist/adapter/converters/texture-formats.js.map +0 -1
  208. package/dist/adapter/converters/vertex-formats.js.map +0 -1
  209. package/dist/adapter/device-helpers/device-features.d.ts +0 -9
  210. package/dist/adapter/device-helpers/device-features.d.ts.map +0 -1
  211. package/dist/adapter/device-helpers/device-features.js +0 -112
  212. package/dist/adapter/device-helpers/device-features.js.map +0 -1
  213. package/dist/adapter/device-helpers/device-limits.d.ts +0 -52
  214. package/dist/adapter/device-helpers/device-limits.d.ts.map +0 -1
  215. package/dist/adapter/device-helpers/device-limits.js +0 -91
  216. package/dist/adapter/device-helpers/device-limits.js.map +0 -1
  217. package/dist/adapter/device-helpers/get-device-info.d.ts +0 -4
  218. package/dist/adapter/device-helpers/get-device-info.d.ts.map +0 -1
  219. package/dist/adapter/device-helpers/get-device-info.js +0 -44
  220. package/dist/adapter/device-helpers/get-device-info.js.map +0 -1
  221. package/dist/adapter/device-helpers/is-old-ie.d.ts +0 -2
  222. package/dist/adapter/device-helpers/is-old-ie.d.ts.map +0 -1
  223. package/dist/adapter/device-helpers/is-old-ie.js +0 -8
  224. package/dist/adapter/device-helpers/is-old-ie.js.map +0 -1
  225. package/dist/adapter/helpers/attribute-utils.d.ts +0 -11
  226. package/dist/adapter/helpers/attribute-utils.d.ts.map +0 -1
  227. package/dist/adapter/helpers/attribute-utils.js +0 -81
  228. package/dist/adapter/helpers/attribute-utils.js.map +0 -1
  229. package/dist/adapter/helpers/get-shader-layout.js.map +0 -1
  230. package/dist/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  231. package/dist/adapter/helpers/set-uniform.js.map +0 -1
  232. package/dist/adapter/helpers/uniforms.d.ts +0 -26
  233. package/dist/adapter/helpers/uniforms.d.ts.map +0 -1
  234. package/dist/adapter/helpers/uniforms.js +0 -99
  235. package/dist/adapter/helpers/uniforms.js.map +0 -1
  236. package/dist/adapter/objects/constants-to-keys.js.map +0 -1
  237. package/dist/adapter/objects/webgl-renderbuffer.js.map +0 -1
  238. package/dist/adapter/objects/webgl-resource.js.map +0 -1
  239. package/dist/adapter/objects/webgl-vertex-array-object.d.ts +0 -27
  240. package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +0 -1
  241. package/dist/adapter/objects/webgl-vertex-array-object.js +0 -84
  242. package/dist/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  243. package/dist/adapter/resources/webgl-buffer.js.map +0 -1
  244. package/dist/adapter/resources/webgl-command-buffer.js.map +0 -1
  245. package/dist/adapter/resources/webgl-command-encoder.js.map +0 -1
  246. package/dist/adapter/resources/webgl-external-texture.js.map +0 -1
  247. package/dist/adapter/resources/webgl-framebuffer.js.map +0 -1
  248. package/dist/adapter/resources/webgl-render-pass.js.map +0 -1
  249. package/dist/adapter/resources/webgl-render-pipeline.js.map +0 -1
  250. package/dist/adapter/resources/webgl-sampler.js.map +0 -1
  251. package/dist/adapter/resources/webgl-shader.js.map +0 -1
  252. package/dist/adapter/resources/webgl-texture.js.map +0 -1
  253. package/dist/adapter/webgl-canvas-context.js.map +0 -1
  254. package/dist/adapter/webgl-device.js.map +0 -1
  255. package/dist/bundle.d.ts +0 -2
  256. package/dist/bundle.d.ts.map +0 -1
  257. package/dist/bundle.js +0 -5
  258. package/dist/bundle.js.map +0 -1
  259. package/dist/classic/accessor.js.map +0 -1
  260. package/dist/classic/buffer.d.ts +0 -95
  261. package/dist/classic/buffer.d.ts.map +0 -1
  262. package/dist/classic/buffer.js +0 -392
  263. package/dist/classic/buffer.js.map +0 -1
  264. package/dist/classic/typed-array-utils.js.map +0 -1
  265. package/dist/context/context/context-state.d.ts +0 -18
  266. package/dist/context/context/context-state.d.ts.map +0 -1
  267. package/dist/context/context/context-state.js +0 -26
  268. package/dist/context/context/context-state.js.map +0 -1
  269. package/dist/context/context/create-browser-context.d.ts +0 -41
  270. package/dist/context/context/create-browser-context.d.ts.map +0 -1
  271. package/dist/context/context/create-browser-context.js +0 -61
  272. package/dist/context/context/create-browser-context.js.map +0 -1
  273. package/dist/context/context/create-headless-context.d.ts +0 -9
  274. package/dist/context/context/create-headless-context.d.ts.map +0 -1
  275. package/dist/context/context/create-headless-context.js +0 -43
  276. package/dist/context/context/create-headless-context.js.map +0 -1
  277. package/dist/context/context/device-pixels.d.ts +0 -25
  278. package/dist/context/context/device-pixels.d.ts.map +0 -1
  279. package/dist/context/context/device-pixels.js +0 -103
  280. package/dist/context/context/device-pixels.js.map +0 -1
  281. package/dist/context/context/webgl-checks.d.ts +0 -13
  282. package/dist/context/context/webgl-checks.d.ts.map +0 -1
  283. package/dist/context/context/webgl-checks.js +0 -34
  284. package/dist/context/context/webgl-checks.js.map +0 -1
  285. package/dist/context/debug/spector.js.map +0 -1
  286. package/dist/context/debug/webgl-developer-tools.js.map +0 -1
  287. package/dist/context/parameters/unified-parameter-api.js.map +0 -1
  288. package/dist/context/parameters/webgl-parameter-tables.js.map +0 -1
  289. package/dist/context/polyfill/get-parameter-polyfill.d.ts +0 -2
  290. package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +0 -1
  291. package/dist/context/polyfill/get-parameter-polyfill.js +0 -91
  292. package/dist/context/polyfill/get-parameter-polyfill.js.map +0 -1
  293. package/dist/context/polyfill/polyfill-context.d.ts +0 -5
  294. package/dist/context/polyfill/polyfill-context.d.ts.map +0 -1
  295. package/dist/context/polyfill/polyfill-context.js +0 -91
  296. package/dist/context/polyfill/polyfill-context.js.map +0 -1
  297. package/dist/context/polyfill/polyfill-table.d.ts +0 -48
  298. package/dist/context/polyfill/polyfill-table.d.ts.map +0 -1
  299. package/dist/context/polyfill/polyfill-table.js +0 -160
  300. package/dist/context/polyfill/polyfill-table.js.map +0 -1
  301. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts +0 -2
  302. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +0 -1
  303. package/dist/context/polyfill/polyfill-vertex-array-object.js +0 -335
  304. package/dist/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  305. package/dist/context/state-tracker/deep-array-equal.js.map +0 -1
  306. package/dist/context/state-tracker/track-context-state.js.map +0 -1
  307. package/dist/context/state-tracker/with-parameters.js.map +0 -1
  308. package/dist/es5/adapter/converters/device-parameters.js +0 -185
  309. package/dist/es5/adapter/converters/device-parameters.js.map +0 -1
  310. package/dist/es5/adapter/converters/renderbuffer-formats.js +0 -163
  311. package/dist/es5/adapter/converters/renderbuffer-formats.js.map +0 -1
  312. package/dist/es5/adapter/converters/sampler-parameters.js +0 -245
  313. package/dist/es5/adapter/converters/sampler-parameters.js.map +0 -1
  314. package/dist/es5/adapter/converters/texture-formats.js +0 -1031
  315. package/dist/es5/adapter/converters/texture-formats.js.map +0 -1
  316. package/dist/es5/adapter/converters/vertex-formats.js +0 -45
  317. package/dist/es5/adapter/converters/vertex-formats.js.map +0 -1
  318. package/dist/es5/adapter/device-helpers/device-features.js +0 -155
  319. package/dist/es5/adapter/device-helpers/device-features.js.map +0 -1
  320. package/dist/es5/adapter/device-helpers/device-limits.js +0 -64
  321. package/dist/es5/adapter/device-helpers/device-limits.js.map +0 -1
  322. package/dist/es5/adapter/device-helpers/get-device-info.js +0 -55
  323. package/dist/es5/adapter/device-helpers/get-device-info.js.map +0 -1
  324. package/dist/es5/adapter/device-helpers/is-old-ie.js +0 -16
  325. package/dist/es5/adapter/device-helpers/is-old-ie.js.map +0 -1
  326. package/dist/es5/adapter/helpers/attribute-utils.js +0 -91
  327. package/dist/es5/adapter/helpers/attribute-utils.js.map +0 -1
  328. package/dist/es5/adapter/helpers/get-shader-layout.js +0 -391
  329. package/dist/es5/adapter/helpers/get-shader-layout.js.map +0 -1
  330. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js +0 -72
  331. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  332. package/dist/es5/adapter/helpers/set-uniform.js +0 -125
  333. package/dist/es5/adapter/helpers/set-uniform.js.map +0 -1
  334. package/dist/es5/adapter/helpers/uniforms.js +0 -112
  335. package/dist/es5/adapter/helpers/uniforms.js.map +0 -1
  336. package/dist/es5/adapter/objects/constants-to-keys.js +0 -54
  337. package/dist/es5/adapter/objects/constants-to-keys.js.map +0 -1
  338. package/dist/es5/adapter/objects/webgl-renderbuffer.js +0 -150
  339. package/dist/es5/adapter/objects/webgl-renderbuffer.js.map +0 -1
  340. package/dist/es5/adapter/objects/webgl-resource.js +0 -292
  341. package/dist/es5/adapter/objects/webgl-resource.js.map +0 -1
  342. package/dist/es5/adapter/objects/webgl-vertex-array-object.js +0 -137
  343. package/dist/es5/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  344. package/dist/es5/adapter/resources/webgl-buffer.js +0 -243
  345. package/dist/es5/adapter/resources/webgl-buffer.js.map +0 -1
  346. package/dist/es5/adapter/resources/webgl-command-buffer.js +0 -96
  347. package/dist/es5/adapter/resources/webgl-command-buffer.js.map +0 -1
  348. package/dist/es5/adapter/resources/webgl-command-encoder.js +0 -98
  349. package/dist/es5/adapter/resources/webgl-command-encoder.js.map +0 -1
  350. package/dist/es5/adapter/resources/webgl-external-texture.js +0 -2
  351. package/dist/es5/adapter/resources/webgl-external-texture.js.map +0 -1
  352. package/dist/es5/adapter/resources/webgl-framebuffer.js +0 -346
  353. package/dist/es5/adapter/resources/webgl-framebuffer.js.map +0 -1
  354. package/dist/es5/adapter/resources/webgl-render-pass.js +0 -62
  355. package/dist/es5/adapter/resources/webgl-render-pass.js.map +0 -1
  356. package/dist/es5/adapter/resources/webgl-render-pipeline.js +0 -530
  357. package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +0 -1
  358. package/dist/es5/adapter/resources/webgl-sampler.js +0 -96
  359. package/dist/es5/adapter/resources/webgl-sampler.js.map +0 -1
  360. package/dist/es5/adapter/resources/webgl-shader.js +0 -150
  361. package/dist/es5/adapter/resources/webgl-shader.js.map +0 -1
  362. package/dist/es5/adapter/resources/webgl-texture.js +0 -986
  363. package/dist/es5/adapter/resources/webgl-texture.js.map +0 -1
  364. package/dist/es5/adapter/webgl-canvas-context.js +0 -97
  365. package/dist/es5/adapter/webgl-canvas-context.js.map +0 -1
  366. package/dist/es5/adapter/webgl-device.js +0 -463
  367. package/dist/es5/adapter/webgl-device.js.map +0 -1
  368. package/dist/es5/bundle.js +0 -7
  369. package/dist/es5/bundle.js.map +0 -1
  370. package/dist/es5/classic/accessor.js +0 -181
  371. package/dist/es5/classic/accessor.js.map +0 -1
  372. package/dist/es5/classic/buffer.js +0 -478
  373. package/dist/es5/classic/buffer.js.map +0 -1
  374. package/dist/es5/classic/typed-array-utils.js +0 -126
  375. package/dist/es5/classic/typed-array-utils.js.map +0 -1
  376. package/dist/es5/context/context/context-state.js +0 -31
  377. package/dist/es5/context/context/context-state.js.map +0 -1
  378. package/dist/es5/context/context/create-browser-context.js +0 -83
  379. package/dist/es5/context/context/create-browser-context.js.map +0 -1
  380. package/dist/es5/context/context/create-headless-context.js +0 -60
  381. package/dist/es5/context/context/create-headless-context.js.map +0 -1
  382. package/dist/es5/context/context/device-pixels.js +0 -121
  383. package/dist/es5/context/context/device-pixels.js.map +0 -1
  384. package/dist/es5/context/context/webgl-checks.js +0 -54
  385. package/dist/es5/context/context/webgl-checks.js.map +0 -1
  386. package/dist/es5/context/debug/spector.js +0 -133
  387. package/dist/es5/context/debug/spector.js.map +0 -1
  388. package/dist/es5/context/debug/webgl-developer-tools.js +0 -198
  389. package/dist/es5/context/debug/webgl-developer-tools.js.map +0 -1
  390. package/dist/es5/context/parameters/unified-parameter-api.js +0 -97
  391. package/dist/es5/context/parameters/unified-parameter-api.js.map +0 -1
  392. package/dist/es5/context/parameters/webgl-parameter-tables.js +0 -392
  393. package/dist/es5/context/parameters/webgl-parameter-tables.js.map +0 -1
  394. package/dist/es5/context/polyfill/get-parameter-polyfill.js +0 -81
  395. package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +0 -1
  396. package/dist/es5/context/polyfill/polyfill-context.js +0 -134
  397. package/dist/es5/context/polyfill/polyfill-context.js.map +0 -1
  398. package/dist/es5/context/polyfill/polyfill-table.js +0 -166
  399. package/dist/es5/context/polyfill/polyfill-table.js.map +0 -1
  400. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js +0 -341
  401. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  402. package/dist/es5/context/state-tracker/deep-array-equal.js +0 -28
  403. package/dist/es5/context/state-tracker/deep-array-equal.js.map +0 -1
  404. package/dist/es5/context/state-tracker/track-context-state.js +0 -211
  405. package/dist/es5/context/state-tracker/track-context-state.js.map +0 -1
  406. package/dist/es5/context/state-tracker/with-parameters.js +0 -44
  407. package/dist/es5/context/state-tracker/with-parameters.js.map +0 -1
  408. package/dist/es5/index.js +0 -290
  409. package/dist/es5/index.js.map +0 -1
  410. package/dist/es5/init.js +0 -10
  411. package/dist/es5/init.js.map +0 -1
  412. package/dist/es5/types/webgl.js +0 -6
  413. package/dist/es5/types/webgl.js.map +0 -1
  414. package/dist/es5/types.js +0 -2
  415. package/dist/es5/types.js.map +0 -1
  416. package/dist/esm/adapter/converters/device-parameters.js +0 -168
  417. package/dist/esm/adapter/converters/device-parameters.js.map +0 -1
  418. package/dist/esm/adapter/converters/renderbuffer-formats.js +0 -185
  419. package/dist/esm/adapter/converters/renderbuffer-formats.js.map +0 -1
  420. package/dist/esm/adapter/converters/sampler-parameters.js +0 -227
  421. package/dist/esm/adapter/converters/sampler-parameters.js.map +0 -1
  422. package/dist/esm/adapter/converters/texture-formats.js +0 -954
  423. package/dist/esm/adapter/converters/texture-formats.js.map +0 -1
  424. package/dist/esm/adapter/converters/vertex-formats.js +0 -35
  425. package/dist/esm/adapter/converters/vertex-formats.js.map +0 -1
  426. package/dist/esm/adapter/device-helpers/device-features.js +0 -112
  427. package/dist/esm/adapter/device-helpers/device-features.js.map +0 -1
  428. package/dist/esm/adapter/device-helpers/device-limits.js +0 -91
  429. package/dist/esm/adapter/device-helpers/device-limits.js.map +0 -1
  430. package/dist/esm/adapter/device-helpers/get-device-info.js +0 -44
  431. package/dist/esm/adapter/device-helpers/get-device-info.js.map +0 -1
  432. package/dist/esm/adapter/device-helpers/is-old-ie.js +0 -8
  433. package/dist/esm/adapter/device-helpers/is-old-ie.js.map +0 -1
  434. package/dist/esm/adapter/helpers/attribute-utils.js +0 -81
  435. package/dist/esm/adapter/helpers/attribute-utils.js.map +0 -1
  436. package/dist/esm/adapter/helpers/get-shader-layout.js +0 -330
  437. package/dist/esm/adapter/helpers/get-shader-layout.js.map +0 -1
  438. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js +0 -37
  439. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  440. package/dist/esm/adapter/helpers/set-uniform.js +0 -115
  441. package/dist/esm/adapter/helpers/set-uniform.js.map +0 -1
  442. package/dist/esm/adapter/helpers/uniforms.js +0 -99
  443. package/dist/esm/adapter/helpers/uniforms.js.map +0 -1
  444. package/dist/esm/adapter/objects/constants-to-keys.js +0 -42
  445. package/dist/esm/adapter/objects/constants-to-keys.js.map +0 -1
  446. package/dist/esm/adapter/objects/webgl-renderbuffer.js +0 -94
  447. package/dist/esm/adapter/objects/webgl-renderbuffer.js.map +0 -1
  448. package/dist/esm/adapter/objects/webgl-resource.js +0 -216
  449. package/dist/esm/adapter/objects/webgl-resource.js.map +0 -1
  450. package/dist/esm/adapter/objects/webgl-vertex-array-object.js +0 -84
  451. package/dist/esm/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  452. package/dist/esm/adapter/resources/webgl-buffer.js +0 -164
  453. package/dist/esm/adapter/resources/webgl-buffer.js.map +0 -1
  454. package/dist/esm/adapter/resources/webgl-command-buffer.js +0 -65
  455. package/dist/esm/adapter/resources/webgl-command-buffer.js.map +0 -1
  456. package/dist/esm/adapter/resources/webgl-command-encoder.js +0 -53
  457. package/dist/esm/adapter/resources/webgl-command-encoder.js.map +0 -1
  458. package/dist/esm/adapter/resources/webgl-external-texture.js +0 -2
  459. package/dist/esm/adapter/resources/webgl-external-texture.js.map +0 -1
  460. package/dist/esm/adapter/resources/webgl-framebuffer.js +0 -267
  461. package/dist/esm/adapter/resources/webgl-framebuffer.js.map +0 -1
  462. package/dist/esm/adapter/resources/webgl-render-pass.js +0 -21
  463. package/dist/esm/adapter/resources/webgl-render-pass.js.map +0 -1
  464. package/dist/esm/adapter/resources/webgl-render-pipeline.js +0 -428
  465. package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +0 -1
  466. package/dist/esm/adapter/resources/webgl-sampler.js +0 -50
  467. package/dist/esm/adapter/resources/webgl-sampler.js.map +0 -1
  468. package/dist/esm/adapter/resources/webgl-shader.js +0 -76
  469. package/dist/esm/adapter/resources/webgl-shader.js.map +0 -1
  470. package/dist/esm/adapter/resources/webgl-texture.js +0 -834
  471. package/dist/esm/adapter/resources/webgl-texture.js.map +0 -1
  472. package/dist/esm/adapter/webgl-canvas-context.js +0 -54
  473. package/dist/esm/adapter/webgl-canvas-context.js.map +0 -1
  474. package/dist/esm/adapter/webgl-device.js +0 -337
  475. package/dist/esm/adapter/webgl-device.js.map +0 -1
  476. package/dist/esm/bundle.js +0 -5
  477. package/dist/esm/bundle.js.map +0 -1
  478. package/dist/esm/classic/accessor.js +0 -144
  479. package/dist/esm/classic/accessor.js.map +0 -1
  480. package/dist/esm/classic/buffer.js +0 -392
  481. package/dist/esm/classic/buffer.js.map +0 -1
  482. package/dist/esm/classic/typed-array-utils.js +0 -112
  483. package/dist/esm/classic/typed-array-utils.js.map +0 -1
  484. package/dist/esm/context/context/context-state.js +0 -26
  485. package/dist/esm/context/context/context-state.js.map +0 -1
  486. package/dist/esm/context/context/create-browser-context.js +0 -61
  487. package/dist/esm/context/context/create-browser-context.js.map +0 -1
  488. package/dist/esm/context/context/create-headless-context.js +0 -43
  489. package/dist/esm/context/context/create-headless-context.js.map +0 -1
  490. package/dist/esm/context/context/device-pixels.js +0 -103
  491. package/dist/esm/context/context/device-pixels.js.map +0 -1
  492. package/dist/esm/context/context/webgl-checks.js +0 -34
  493. package/dist/esm/context/context/webgl-checks.js.map +0 -1
  494. package/dist/esm/context/debug/spector.js +0 -76
  495. package/dist/esm/context/debug/spector.js.map +0 -1
  496. package/dist/esm/context/debug/webgl-developer-tools.js +0 -121
  497. package/dist/esm/context/debug/webgl-developer-tools.js.map +0 -1
  498. package/dist/esm/context/parameters/unified-parameter-api.js +0 -63
  499. package/dist/esm/context/parameters/unified-parameter-api.js.map +0 -1
  500. package/dist/esm/context/parameters/webgl-parameter-tables.js +0 -445
  501. package/dist/esm/context/parameters/webgl-parameter-tables.js.map +0 -1
  502. package/dist/esm/context/polyfill/get-parameter-polyfill.js +0 -91
  503. package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +0 -1
  504. package/dist/esm/context/polyfill/polyfill-context.js +0 -91
  505. package/dist/esm/context/polyfill/polyfill-context.js.map +0 -1
  506. package/dist/esm/context/polyfill/polyfill-table.js +0 -160
  507. package/dist/esm/context/polyfill/polyfill-table.js.map +0 -1
  508. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js +0 -335
  509. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  510. package/dist/esm/context/state-tracker/deep-array-equal.js +0 -21
  511. package/dist/esm/context/state-tracker/deep-array-equal.js.map +0 -1
  512. package/dist/esm/context/state-tracker/track-context-state.js +0 -183
  513. package/dist/esm/context/state-tracker/track-context-state.js.map +0 -1
  514. package/dist/esm/context/state-tracker/with-parameters.js +0 -36
  515. package/dist/esm/context/state-tracker/with-parameters.js.map +0 -1
  516. package/dist/esm/index.js +0 -28
  517. package/dist/esm/index.js.map +0 -1
  518. package/dist/esm/init.js +0 -4
  519. package/dist/esm/init.js.map +0 -1
  520. package/dist/esm/types/webgl.js +0 -2
  521. package/dist/esm/types/webgl.js.map +0 -1
  522. package/dist/esm/types.js +0 -2
  523. package/dist/esm/types.js.map +0 -1
  524. package/dist/index.js.map +0 -1
  525. package/dist/init.d.ts +0 -2
  526. package/dist/init.d.ts.map +0 -1
  527. package/dist/init.js +0 -4
  528. package/dist/init.js.map +0 -1
  529. package/dist/types/webgl.d.ts +0 -145
  530. package/dist/types/webgl.d.ts.map +0 -1
  531. package/dist/types/webgl.js +0 -2
  532. package/dist/types/webgl.js.map +0 -1
  533. package/dist/types.js.map +0 -1
  534. package/src/adapter/converters/renderbuffer-formats.ts +0 -92
  535. package/src/adapter/device-helpers/device-features.ts +0 -158
  536. package/src/adapter/device-helpers/device-limits.ts +0 -153
  537. package/src/adapter/device-helpers/get-device-info.ts +0 -49
  538. package/src/adapter/device-helpers/is-old-ie.ts +0 -11
  539. package/src/adapter/helpers/attribute-utils.ts +0 -61
  540. package/src/adapter/objects/webgl-vertex-array-object.ts +0 -111
  541. package/src/bundle.ts +0 -4
  542. package/src/classic/buffer.ts +0 -474
  543. package/src/context/context/context-state.ts +0 -41
  544. package/src/context/context/create-browser-context.ts +0 -118
  545. package/src/context/context/create-headless-context.ts +0 -48
  546. package/src/context/context/device-pixels.ts +0 -158
  547. package/src/context/context/webgl-checks.ts +0 -49
  548. package/src/context/polyfill/get-parameter-polyfill.ts +0 -118
  549. package/src/context/polyfill/polyfill-context.ts +0 -97
  550. package/src/context/polyfill/polyfill-table.ts +0 -162
  551. package/src/context/polyfill/polyfill-vertex-array-object.ts +0 -360
  552. package/src/init.ts +0 -4
  553. package/src/types/webgl.ts +0 -284
@@ -1,22 +1,83 @@
1
- import GL from '@luma.gl/constants';
2
- import {VertexFormat} from '@luma.gl/api';
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
3
4
 
4
- export function getVertexFormat(type: GL, components: number): VertexFormat {
5
- const base = getDataFormat(type);
5
+ import {GL} from '@luma.gl/constants';
6
+ import {VertexFormat, VertexType} from '@luma.gl/core';
7
+
8
+ type GLDataType =
9
+ | GL.UNSIGNED_BYTE
10
+ | GL.BYTE
11
+ | GL.UNSIGNED_SHORT
12
+ | GL.SHORT
13
+ | GL.UNSIGNED_INT
14
+ | GL.INT
15
+ | GL.HALF_FLOAT
16
+ | GL.FLOAT;
17
+
18
+ /** Get vertex format from GL constants */
19
+ export function getVertexFormatFromGL(type: GLDataType, components: 1 | 2 | 3 | 4): VertexFormat {
20
+ const base = getVertexTypeFromGL(type);
21
+ // prettier-ignore
6
22
  switch (components) {
23
+ // @ts-expect-error TODO deal with lack of formats
7
24
  case 1: return base;
8
25
  case 2: return `${base}x2`;
26
+ // @ts-expect-error TODO deal with lack of formats
9
27
  case 3: return `${base}x3`;
10
28
  case 4: return `${base}x4`;
11
29
  }
30
+ // @ts-ignore unreachable
31
+ throw new Error(String(components));
12
32
  }
13
33
 
14
- function getDataFormat(type: GL): 'sint32' | 'uint32' | 'float32' {
34
+ /** Get data type from GL constants */
35
+ export function getVertexTypeFromGL(type: GLDataType, normalized = false): VertexType {
36
+ // prettier-ignore
15
37
  switch (type) {
16
- // TODO
17
- case GL.INT: return 'sint32';
18
- case GL.UNSIGNED_INT: return 'uint32';
38
+ // WebGPU does not support normalized 32 bit integer attributes
39
+ case GL.INT: return normalized ? 'sint32' : 'sint32';
40
+ case GL.UNSIGNED_INT: return normalized ? 'uint32' : 'uint32';
41
+ case GL.SHORT: return normalized ? 'sint16' : 'unorm16';
42
+ case GL.UNSIGNED_SHORT: return normalized ? 'uint16' : 'unorm16';
43
+ case GL.BYTE: return normalized ? 'sint8' : 'snorm16';
44
+ case GL.UNSIGNED_BYTE: return normalized ? 'uint8' : 'unorm8';
19
45
  case GL.FLOAT: return 'float32';
20
- default: throw new Error(String(type));
46
+ case GL.HALF_FLOAT: return 'float16';
47
+ }
48
+ // @ts-ignore unreachable
49
+ throw new Error(String(type));
50
+ }
51
+
52
+ export function getGLFromVertexType(
53
+ dataType: VertexType
54
+ ):
55
+ | GL.UNSIGNED_BYTE
56
+ | GL.BYTE
57
+ | GL.UNSIGNED_SHORT
58
+ | GL.SHORT
59
+ | GL.UNSIGNED_INT
60
+ | GL.INT
61
+ | GL.HALF_FLOAT
62
+ | GL.FLOAT {
63
+ // prettier-ignore
64
+ switch (dataType) {
65
+ case 'uint8': return GL.UNSIGNED_BYTE;
66
+ case 'sint8': return GL.BYTE;
67
+ case 'unorm8': return GL.UNSIGNED_BYTE;
68
+ case 'snorm8': return GL.BYTE;
69
+ case 'uint16': return GL.UNSIGNED_SHORT;
70
+ case 'sint16': return GL.SHORT;
71
+ case 'unorm16': return GL.UNSIGNED_SHORT;
72
+ case 'snorm16': return GL.SHORT;
73
+ case 'uint32': return GL.UNSIGNED_INT;
74
+ case 'sint32': return GL.INT;
75
+ // WebGPU does not support normalized 32 bit integer attributes
76
+ // case 'unorm32': return GL.UNSIGNED_INT;
77
+ // case 'snorm32': return GL.INT;
78
+ case 'float16': return GL.HALF_FLOAT;
79
+ case 'float32': return GL.FLOAT;
21
80
  }
22
- }
81
+ // @ts-ignore unreachable
82
+ throw new Error(String(dataType));
83
+ }
@@ -0,0 +1,121 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ // Feature detection for WebGL
6
+ // Provides a function that enables simple checking of which WebGL features are
7
+
8
+ import {DeviceFeature, DeviceFeatures} from '@luma.gl/core';
9
+ import {GLExtensions} from '@luma.gl/constants';
10
+ import {getWebGLExtension} from '../../context/helpers/webgl-extensions';
11
+ import {isTextureFeature, checkTextureFeature} from '../converters/texture-formats';
12
+ import {TEXTURE_FEATURES} from '../converters/texture-formats';
13
+
14
+ /**
15
+ * Defines luma.gl "feature" names and semantics
16
+ * when value is 'string' it is the name of the extension that enables this feature
17
+ */
18
+ const WEBGL_FEATURES: Partial<Record<DeviceFeature, boolean | string>> = {
19
+ // optional WebGPU features
20
+ 'depth-clip-control': 'EXT_depth_clamp', // TODO these seem subtly different
21
+ // 'timestamp-query' // GPUQueryType "timestamp-query"
22
+ // "indirect-first-instance"
23
+ // Textures are handled by getTextureFeatures()
24
+ // 'depth24unorm-stencil8' // GPUTextureFormat 'depth24unorm-stencil8'
25
+ // 'depth32float-stencil8' // GPUTextureFormat 'depth32float-stencil8'
26
+
27
+ // optional WebGL features
28
+ 'timer-query-webgl': 'EXT_disjoint_timer_query_webgl2',
29
+ 'compilation-status-async-webgl': 'KHR_parallel_shader_compile',
30
+ 'polygon-mode-webgl': 'WEBGL_polygon_mode',
31
+ 'provoking-vertex-webgl': 'WEBGL_provoking_vertex',
32
+ 'shader-clip-cull-distance-webgl': 'WEBGL_clip_cull_distance',
33
+ 'shader-noperspective-interpolation-webgl': 'NV_shader_noperspective_interpolation',
34
+ 'shader-conservative-depth-webgl': 'EXT_conservative_depth'
35
+
36
+ // Textures are handled by getTextureFeatures()
37
+ };
38
+
39
+ /**
40
+ * WebGL extensions exposed as luma.gl features
41
+ * To minimize GL log noise and improve performance, this class ensures that
42
+ * - WebGL extensions are not queried until the corresponding feature is checked.
43
+ * - WebGL extensions are only queried once.
44
+ */
45
+ export class WebGLDeviceFeatures extends DeviceFeatures {
46
+ protected gl: WebGL2RenderingContext;
47
+ protected extensions: GLExtensions;
48
+ protected testedFeatures = new Set<DeviceFeature>();
49
+
50
+ constructor(
51
+ gl: WebGL2RenderingContext,
52
+ extensions: GLExtensions,
53
+ disabledFeatures: Partial<Record<DeviceFeature, boolean>>
54
+ ) {
55
+ super([], disabledFeatures);
56
+ this.gl = gl;
57
+ this.extensions = extensions;
58
+ // TODO - is this really needed?
59
+ // Enable EXT_float_blend first: https://developer.mozilla.org/en-US/docs/Web/API/EXT_float_blend
60
+ getWebGLExtension(gl, 'EXT_color_buffer_float', extensions);
61
+ }
62
+
63
+ *[Symbol.iterator](): IterableIterator<DeviceFeature> {
64
+ for (const feature of Object.keys(WEBGL_FEATURES) as DeviceFeature[]) {
65
+ if (this.has(feature)) {
66
+ yield feature;
67
+ }
68
+ }
69
+ for (const feature of Object.keys(TEXTURE_FEATURES) as DeviceFeature[]) {
70
+ if (this.has(feature)) {
71
+ yield feature;
72
+ }
73
+ }
74
+ return [];
75
+ }
76
+
77
+ override has(feature: DeviceFeature): boolean {
78
+ if (this.disabledFeatures[feature]) {
79
+ return false;
80
+ }
81
+
82
+ // We have already tested this feature
83
+ if (!this.testedFeatures.has(feature)) {
84
+ this.testedFeatures.add(feature);
85
+
86
+ // Check the feature once
87
+ if (isTextureFeature(feature) && checkTextureFeature(this.gl, feature, this.extensions)) {
88
+ this.features.add(feature);
89
+ }
90
+
91
+ if (this.getWebGLFeature(feature)) {
92
+ this.features.add(feature);
93
+ }
94
+ }
95
+ return this.features.has(feature);
96
+ }
97
+
98
+ // FOR DEVICE
99
+
100
+ initializeFeatures() {
101
+ // @ts-expect-error
102
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
103
+ for (const feature of this) {
104
+ // WebGL extensions are initialized by requesting them
105
+ }
106
+ }
107
+
108
+ // IMPLEMENTATION
109
+
110
+ /** Extract all WebGL features */
111
+ protected getWebGLFeature(feature: DeviceFeature): boolean {
112
+ const featureInfo = WEBGL_FEATURES[feature];
113
+ // string value requires checking the corresponding WebGL extension
114
+ const isSupported =
115
+ typeof featureInfo === 'string'
116
+ ? Boolean(getWebGLExtension(this.gl, featureInfo, this.extensions))
117
+ : Boolean(featureInfo);
118
+
119
+ return isSupported;
120
+ }
121
+ }
@@ -0,0 +1,111 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import {DeviceInfo} from '@luma.gl/core';
6
+ import {GL, GLExtensions} from '@luma.gl/constants';
7
+ import {getWebGLExtension} from '../../context/helpers/webgl-extensions';
8
+
9
+ /** @returns strings identifying the GPU vendor and driver. */
10
+ export function getDeviceInfo(gl: WebGL2RenderingContext, extensions: GLExtensions): DeviceInfo {
11
+ // "Masked" info is always available, but don't contain much useful information
12
+ const vendorMasked = gl.getParameter(GL.VENDOR);
13
+ const rendererMasked = gl.getParameter(GL.RENDERER);
14
+
15
+ // If we are lucky, unmasked info is available
16
+ // https://www.khronos.org/registry/webgl/extensions/WEBGL_debug_renderer_info/
17
+ getWebGLExtension(gl, 'WEBGL_debug_renderer_info', extensions);
18
+ const ext = extensions.WEBGL_debug_renderer_info;
19
+ const vendorUnmasked = gl.getParameter(ext ? ext.UNMASKED_VENDOR_WEBGL : GL.VENDOR);
20
+ const rendererUnmasked = gl.getParameter(ext ? ext.UNMASKED_RENDERER_WEBGL : GL.RENDERER);
21
+ const vendor = vendorUnmasked || vendorMasked;
22
+ const renderer = rendererUnmasked || rendererMasked;
23
+
24
+ // Driver version
25
+ const version = gl.getParameter(GL.VERSION) as string;
26
+
27
+ // "Sniff" the GPU type and backend from the info. This works best if unmasked info is available.
28
+ const gpu = identifyGPUVendor(vendor, renderer);
29
+ const gpuBackend = identifyGPUBackend(vendor, renderer);
30
+ const gpuType = identifyGPUType(vendor, renderer);
31
+
32
+ // Determine GLSL version
33
+ // For now, skip parsing of the long version string, just use context type below to deduce version
34
+ // const version = gl.getParameter(GL.SHADING_LANGUAGE_VERSION) as string;
35
+ // const shadingLanguageVersion = parseGLSLVersion(version);
36
+ const shadingLanguage = 'glsl';
37
+ const shadingLanguageVersion = 300;
38
+
39
+ return {
40
+ type: 'webgl',
41
+ gpu,
42
+ gpuType,
43
+ gpuBackend,
44
+ vendor,
45
+ renderer,
46
+ version,
47
+ shadingLanguage,
48
+ shadingLanguageVersion
49
+ };
50
+ }
51
+
52
+ /** "Sniff" the GPU type from the info. This works best if unmasked info is available. */
53
+ function identifyGPUVendor(
54
+ vendor: string,
55
+ renderer: string
56
+ ): 'nvidia' | 'intel' | 'apple' | 'amd' | 'software' | 'unknown' {
57
+ if (/NVIDIA/i.exec(vendor) || /NVIDIA/i.exec(renderer)) {
58
+ return 'nvidia';
59
+ }
60
+ if (/INTEL/i.exec(vendor) || /INTEL/i.exec(renderer)) {
61
+ return 'intel';
62
+ }
63
+ if (/Apple/i.exec(vendor) || /Apple/i.exec(renderer)) {
64
+ return 'apple';
65
+ }
66
+ if (
67
+ /AMD/i.exec(vendor) ||
68
+ /AMD/i.exec(renderer) ||
69
+ /ATI/i.exec(vendor) ||
70
+ /ATI/i.exec(renderer)
71
+ ) {
72
+ return 'amd';
73
+ }
74
+ if (/SwiftShader/i.exec(vendor) || /SwiftShader/i.exec(renderer)) {
75
+ return 'software';
76
+ }
77
+
78
+ return 'unknown';
79
+ }
80
+
81
+ /** "Sniff" the GPU backend from the info. This works best if unmasked info is available. */
82
+ function identifyGPUBackend(vendor: string, renderer: string): 'opengl' | 'metal' | 'unknown' {
83
+ if (/Metal/i.exec(vendor) || /Metal/i.exec(renderer)) {
84
+ return 'metal';
85
+ }
86
+ if (/ANGLE/i.exec(vendor) || /ANGLE/i.exec(renderer)) {
87
+ return 'opengl';
88
+ }
89
+ return 'unknown';
90
+ }
91
+
92
+ function identifyGPUType(
93
+ vendor: string,
94
+ renderer: string
95
+ ): 'discrete' | 'integrated' | 'cpu' | 'unknown' {
96
+ if (/SwiftShader/i.exec(vendor) || /SwiftShader/i.exec(renderer)) {
97
+ return 'cpu';
98
+ }
99
+
100
+ const gpuVendor = identifyGPUVendor(vendor, renderer);
101
+ switch (gpuVendor) {
102
+ case 'intel':
103
+ return 'integrated';
104
+ case 'software':
105
+ return 'cpu';
106
+ case 'unknown':
107
+ return 'unknown';
108
+ default:
109
+ return 'discrete';
110
+ }
111
+ }
@@ -0,0 +1,53 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import {DeviceLimits} from '@luma.gl/core';
6
+ import {GL} from '@luma.gl/constants';
7
+
8
+ // prettier-ignore
9
+ export class WebGLDeviceLimits extends DeviceLimits {
10
+ get maxTextureDimension1D() { return 0; } // WebGL does not support 1D textures
11
+ get maxTextureDimension2D() { return this.getParameter(GL.MAX_TEXTURE_SIZE); }
12
+ get maxTextureDimension3D() { return this.getParameter(GL.MAX_3D_TEXTURE_SIZE); }
13
+ get maxTextureArrayLayers() { return this.getParameter(GL.MAX_ARRAY_TEXTURE_LAYERS); }
14
+ get maxBindGroups() { return 0; }
15
+ get maxDynamicUniformBuffersPerPipelineLayout() { return 0; } // TBD
16
+ get maxDynamicStorageBuffersPerPipelineLayout() { return 0; } // TBD
17
+ get maxSampledTexturesPerShaderStage() { return this.getParameter(GL.MAX_VERTEX_TEXTURE_IMAGE_UNITS); } // ) TBD
18
+ get maxSamplersPerShaderStage() { return this.getParameter(GL.MAX_COMBINED_TEXTURE_IMAGE_UNITS); }
19
+ get maxStorageBuffersPerShaderStage() { return 0; } // TBD
20
+ get maxStorageTexturesPerShaderStage() { return 0; } // TBD
21
+ get maxUniformBuffersPerShaderStage() { return this.getParameter(GL.MAX_UNIFORM_BUFFER_BINDINGS); }
22
+ get maxUniformBufferBindingSize() { return this.getParameter(GL.MAX_UNIFORM_BLOCK_SIZE); }
23
+ get maxStorageBufferBindingSize() { return 0; }
24
+ get minUniformBufferOffsetAlignment() { return this.getParameter(GL.UNIFORM_BUFFER_OFFSET_ALIGNMENT); }
25
+ get minStorageBufferOffsetAlignment() { return 0; }
26
+ get maxVertexBuffers() { return 16; } // WebGL 2 supports 16 buffers, see https://github.com/gpuweb/gpuweb/issues/4284
27
+ get maxVertexAttributes() { return this.getParameter(GL.MAX_VERTEX_ATTRIBS); }
28
+ get maxVertexBufferArrayStride() { return 2048; } // TBD, this is just the default value from WebGPU
29
+ get maxInterStageShaderComponents() { return this.getParameter(GL.MAX_VARYING_COMPONENTS); }
30
+ get maxComputeWorkgroupStorageSize() { return 0; } // WebGL does not support compute shaders
31
+ get maxComputeInvocationsPerWorkgroup() { return 0; } // WebGL does not support compute shaders
32
+ get maxComputeWorkgroupSizeX() { return 0; } // WebGL does not support compute shaders
33
+ get maxComputeWorkgroupSizeY() { return 0; } // WebGL does not support compute shaders
34
+ get maxComputeWorkgroupSizeZ() { return 0; } // WebGL does not support compute shaders
35
+ get maxComputeWorkgroupsPerDimension() { return 0;} // WebGL does not support compute shaders
36
+
37
+ // PRIVATE
38
+
39
+ protected gl: WebGL2RenderingContext;
40
+ protected limits: Partial<Record<GL, number>> = {};
41
+
42
+ constructor(gl: WebGL2RenderingContext) {
43
+ super();
44
+ this.gl = gl;
45
+ }
46
+
47
+ protected getParameter(parameter: GL): number {
48
+ if (this.limits[parameter] === undefined) {
49
+ this.limits[parameter] = this.gl.getParameter(parameter);
50
+ }
51
+ return this.limits[parameter];
52
+ }
53
+ }
@@ -1,6 +1,9 @@
1
- import {UniformFormat, VertexFormat} from '@luma.gl/api';
2
- import GL from '@luma.gl/constants';
3
- import {GLUniformType, GLSamplerType, GLCompositeType, GLType} from '../../types/webgl';
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ import {ShaderUniformType, ShaderAttributeType, VertexFormat} from '@luma.gl/core';
6
+ import {GL, GLUniformType, GLSamplerType, GLCompositeType, GLDataType} from '@luma.gl/constants';
4
7
 
5
8
  /** Check is uniform is of sampler type */
6
9
  export function isSamplerUniform(type: GLUniformType): boolean {
@@ -28,7 +31,7 @@ const SAMPLER_TYPES: GLSamplerType[] = [
28
31
  // Composite types table
29
32
  const COMPOSITE_GL_TYPES: Record<
30
33
  GLCompositeType,
31
- [GLType, number, string, UniformFormat, VertexFormat?]
34
+ [GLDataType, number, string, ShaderUniformType, VertexFormat?]
32
35
  > = {
33
36
  [GL.FLOAT]: [GL.FLOAT, 1, 'float', 'f32', 'float32'],
34
37
  [GL.FLOAT_VEC2]: [GL.FLOAT, 2, 'vec2', 'vec2<f32>', 'float32x2'],
@@ -45,11 +48,12 @@ const COMPOSITE_GL_TYPES: Record<
45
48
  [GL.UNSIGNED_INT_VEC3]: [GL.UNSIGNED_INT, 3, 'uvec3', 'vec3<u32>', 'uint32x3'],
46
49
  [GL.UNSIGNED_INT_VEC4]: [GL.UNSIGNED_INT, 4, 'uvec4', 'vec4<u32>', 'uint32x4'],
47
50
 
48
- [GL.BOOL]: [GL.FLOAT, 1, 'bool', 'f32', 'float32x2'],
49
- [GL.BOOL_VEC2]: [GL.FLOAT, 2, 'bvec2', 'vec2<f32>'],
50
- [GL.BOOL_VEC3]: [GL.FLOAT, 3, 'bvec3', 'vec3<f32>'],
51
- [GL.BOOL_VEC4]: [GL.FLOAT, 4, 'bvec4', 'vec4<f32>'],
51
+ [GL.BOOL]: [GL.FLOAT, 1, 'bool', 'f32', 'float32'],
52
+ [GL.BOOL_VEC2]: [GL.FLOAT, 2, 'bvec2', 'vec2<f32>', 'float32x2'],
53
+ [GL.BOOL_VEC3]: [GL.FLOAT, 3, 'bvec3', 'vec3<f32>', 'float32x3'],
54
+ [GL.BOOL_VEC4]: [GL.FLOAT, 4, 'bvec4', 'vec4<f32>', 'float32x4'],
52
55
 
56
+ // TODO - are sizes/components below correct?
53
57
  [GL.FLOAT_MAT2]: [GL.FLOAT, 8, 'mat2', 'mat2x2<f32>'], // 4
54
58
  [GL.FLOAT_MAT2x3]: [GL.FLOAT, 8, 'mat2x3', 'mat2x3<f32>'], // 6
55
59
  [GL.FLOAT_MAT2x4]: [GL.FLOAT, 8, 'mat2x4', 'mat2x4<f32>'], // 8
@@ -63,11 +67,13 @@ const COMPOSITE_GL_TYPES: Record<
63
67
  [GL.FLOAT_MAT4]: [GL.FLOAT, 16, 'mat4', 'mat4x4<f32>'] // 16
64
68
  };
65
69
 
66
- /** Decomposes a composite type GL.VEC3 into a basic type (GL.FLOAT) and components (3) */
67
- export function decodeUniformType(
68
- uniformType: GL
69
- ): {format: UniformFormat; components: number; glType: GLType} {
70
- const typeAndSize = COMPOSITE_GL_TYPES[uniformType];
70
+ /** Decomposes a composite type (GL.VEC3) into a basic type (GL.FLOAT) and components (3) */
71
+ export function decodeGLUniformType(glUniformType: GL): {
72
+ format: ShaderUniformType;
73
+ components: number;
74
+ glType: GLDataType;
75
+ } {
76
+ const typeAndSize = COMPOSITE_GL_TYPES[glUniformType];
71
77
  if (!typeAndSize) {
72
78
  throw new Error('uniform');
73
79
  }
@@ -75,24 +81,28 @@ export function decodeUniformType(
75
81
  return {format, components, glType};
76
82
  }
77
83
 
78
- export function decodeAttributeType(attributeType: GL): {
79
- format: VertexFormat;
84
+ /** Decomposes a composite type (GL.VEC3) into a basic type (GL.FLOAT) and components (3) */
85
+ export function decodeGLAttributeType(glAttributeType: GL): {
86
+ attributeType: ShaderAttributeType;
87
+ vertexFormat: VertexFormat;
80
88
  components: number;
81
- glType: GLType;
89
+ // glType: GLDataType;
82
90
  } {
83
- const typeAndSize = COMPOSITE_GL_TYPES[attributeType];
91
+ const typeAndSize = COMPOSITE_GL_TYPES[glAttributeType];
84
92
  if (!typeAndSize) {
85
- throw new Error('attribute')
93
+ throw new Error('attribute');
86
94
  }
87
- const [glType, components, , , format] = typeAndSize;
88
- return {format, components, glType};
95
+ const [, components, , shaderType, vertexFormat] = typeAndSize;
96
+ // TODO sanity - if (shaderType.startsWith('mat' ...))
97
+ const attributeType = shaderType as unknown as ShaderAttributeType;
98
+ return {attributeType, vertexFormat, components}; // , glType};
89
99
  }
90
100
 
91
101
  /** Decomposes a composite type GL.VEC3 into a basic type (GL.FLOAT) and components (3) */
92
- export function decomposeCompositeGLType(
93
- compositeGLType: GLCompositeType
94
- ): {type: GLType; components: number} | null {
95
- const typeAndSize = COMPOSITE_GL_TYPES[compositeGLType];
102
+ export function decomposeCompositeGLDataType(
103
+ compositeGLDataType: GLCompositeType
104
+ ): {type: GLDataType; components: number} | null {
105
+ const typeAndSize = COMPOSITE_GL_TYPES[compositeGLDataType];
96
106
  if (!typeAndSize) {
97
107
  return null;
98
108
  }
@@ -100,7 +110,10 @@ export function decomposeCompositeGLType(
100
110
  return {type, components};
101
111
  }
102
112
 
103
- export function getCompositeGLType(type: GL, components): {glType: GLType; name: string} | null {
113
+ export function getCompositeGLDataType(
114
+ type: GL,
115
+ components
116
+ ): {glType: GLDataType; name: string} | null {
104
117
  switch (type) {
105
118
  case GL.BYTE:
106
119
  case GL.UNSIGNED_BYTE: