@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,6 +1,7 @@
1
1
  // luma.gl, MIT license
2
- import {log, loadScript} from '@luma.gl/api/';
3
- import GL from '@luma.gl/constants';
2
+ import {log, loadScript} from '@luma.gl/core';
3
+ import {GL} from '@luma.gl/constants';
4
+ import {isBrowser} from '@probe.gl/env'
4
5
 
5
6
  const WEBGL_DEBUG_CDN_URL = 'https://unpkg.com/webgl-debug@2.0.1/index.js';
6
7
 
@@ -11,20 +12,26 @@ type DebugContextProps = {
11
12
  webgl2?: boolean;
12
13
  };
13
14
 
14
- const DEFAULT_DEBUG_CONTEXT_PROPS: Required<DebugContextProps> = {
15
- debug: true,
16
- throwOnError: false,
17
- break: undefined,
18
- webgl2: false,
15
+ // const DEFAULT_DEBUG_CONTEXT_PROPS: Required<DebugContextProps> = {
16
+ // debug: true,
17
+ // throwOnError: false,
18
+ // break: [],
19
+ // webgl2: false,
20
+ // }
21
+
22
+ type ContextData = {
23
+ realContext?: WebGLRenderingContext;
24
+ debugContext?: WebGLRenderingContext;
19
25
  }
20
26
 
21
27
  // Helper to get shared context data
22
- function getContextData(gl: any) {
28
+ function getContextData(gl: any): ContextData {
23
29
  gl.luma = gl.luma || {};
24
30
  return gl.luma;
25
31
  }
26
32
 
27
33
  declare global {
34
+ // eslint-disable-next-line no-var
28
35
  var WebGLDebugUtils: any;
29
36
  }
30
37
 
@@ -35,8 +42,7 @@ declare global {
35
42
  * @see https://github.com/vorg/webgl-debug
36
43
  */
37
44
  export async function loadWebGLDeveloperTools(): Promise<void> {
38
- if (!globalThis.WebGLDebugUtils) {
39
- // @ts-expect-error Developer tools expects global to be set
45
+ if (isBrowser() && !globalThis.WebGLDebugUtils) {
40
46
  globalThis.global = globalThis.global || globalThis;
41
47
  // @ts-expect-error Developer tools expects global to be set
42
48
  globalThis.global.module = {};
@@ -46,7 +52,7 @@ export async function loadWebGLDeveloperTools(): Promise<void> {
46
52
 
47
53
  // Returns (a potentially new) context with debug instrumentation turned off or on.
48
54
  // Note that this actually returns a new context
49
- export function makeDebugContext(gl: WebGLRenderingContext, props: DebugContextProps = {}): WebGLRenderingContext {
55
+ export function makeDebugContext(gl: WebGLRenderingContext, props: DebugContextProps = {}): WebGLRenderingContext | null {
50
56
  // Return null to ensure we don't try to create a context in this case (TODO what case is that?)
51
57
  if (!gl) {
52
58
  return null;
@@ -133,16 +139,16 @@ function onGLError(props: DebugContextProps, err, functionName: string, args: an
133
139
 
134
140
  // Don't generate function string until it is needed
135
141
  function onValidateGLFunc(props: DebugContextProps, functionName: string, functionArgs: any[]): void {
136
- let functionString: string;
142
+ let functionString: string = '';
137
143
  if (log.level >= 1) {
138
144
  functionString = getFunctionString(functionName, functionArgs);
139
145
  log.log(1, functionString)();
140
146
  }
141
147
 
142
- if (props.break) {
148
+ // If array of breakpoint strings supplied, check if any of them is contained in current GL function
149
+ if (props.break && props.break.length > 0) {
143
150
  functionString = functionString || getFunctionString(functionName, functionArgs);
144
- const isBreakpoint =
145
- props.break && props.break.every((breakOn: string) => functionString.indexOf(breakOn) !== -1);
151
+ const isBreakpoint = props.break.every((breakOn: string) => functionString.indexOf(breakOn) !== -1);
146
152
  if (isBreakpoint) {
147
153
  debugger; // eslint-disable-line
148
154
  }
@@ -1,8 +1,8 @@
1
1
  // Provides a unified API for getting and setting any WebGL parameter
2
2
  // Also knows default values of all parameters, enabling fast cache initialization
3
3
  // Provides base functionality for the state caching.
4
- import {Device} from '@luma.gl/api';
5
- import type {GLParameters} from '../../types/webgl';
4
+ import {Device} from '@luma.gl/core';
5
+ import type {GLParameters} from '@luma.gl/constants';
6
6
  import {
7
7
  GL_PARAMETER_DEFAULTS,
8
8
  GL_PARAMETER_SETTERS,
@@ -10,8 +10,7 @@ import {
10
10
  GL_PARAMETER_GETTERS
11
11
  } from './webgl-parameter-tables';
12
12
 
13
- import {isWebGL} from '../context/webgl-checks';
14
- import WebGLDevice from '../../adapter/webgl-device';
13
+ import {WebGLDevice} from '../../adapter/webgl-device';
15
14
 
16
15
  export type {GLParameters};
17
16
 
@@ -21,7 +20,10 @@ export type {GLParameters};
21
20
  * @note requires a `cache` object to be set on the context (gl.state.cache)
22
21
  * This object is used to fill in any missing values for composite setter functions
23
22
  */
24
- export function setParameters(device: Device | WebGLRenderingContext, parameters: GLParameters): void {
23
+ export function setParameters(
24
+ device: Device | WebGLRenderingContext,
25
+ parameters: GLParameters
26
+ ): void {
25
27
  const webglDevice = WebGLDevice.attach(device);
26
28
  const gl = webglDevice.gl;
27
29
 
@@ -74,7 +76,10 @@ export function setParameters(device: Device | WebGLRenderingContext, parameters
74
76
 
75
77
  /**
76
78
  * Reads the entire WebGL state from a context
77
- * @returns - a newly created map, with values keyed by GL parameters
79
+
80
+ // default to querying all parameters
81
+
82
+ * @returns - a newly created map, with values keyed by GL parameters
78
83
  *
79
84
  * @note Copies the state from a context (gl.getParameter should not be overriden)
80
85
  * Reads the entire WebGL state from a context
@@ -83,13 +88,13 @@ export function setParameters(device: Device | WebGLRenderingContext, parameters
83
88
  * considered a very slow operation, to be used only if/when a context already manipulated
84
89
  * by external code needs to be synchronized for the first time
85
90
  */
86
- export function getParameters(gl: WebGLRenderingContext, parameters?: Record<keyof GLParameters, any>): GLParameters;
87
- export function getParameters(gl: WebGLRenderingContext, parameters?: (keyof GLParameters)[]): GLParameters;
88
- export function getParameters(gl: WebGLRenderingContext, parameters: keyof GLParameters): GLParameters;
91
+ export function getParameters(
92
+ device: Device | WebGLRenderingContext,
93
+ parameters: keyof GLParameters | (keyof GLParameters)[] | GLParameters = GL_PARAMETER_DEFAULTS
94
+ ): GLParameters {
95
+ const webglDevice = WebGLDevice.attach(device);
96
+ const gl = webglDevice.gl;
89
97
 
90
- export function getParameters(gl, parameters) {
91
- // default to querying all parameters
92
- parameters = parameters || GL_PARAMETER_DEFAULTS;
93
98
  // support both arrays of parameters and objects (keys represent parameters)
94
99
 
95
100
  if (typeof parameters === 'number') {
@@ -115,14 +120,15 @@ export function getParameters(gl, parameters) {
115
120
  * NOT the canvas size dimensions, so they will have to be properly set after
116
121
  * calling this function.
117
122
  */
118
- export function resetParameters(gl: WebGLRenderingContext): void {
119
- setParameters(gl, GL_PARAMETER_DEFAULTS);
123
+ export function resetParameters(device: Device | WebGLRenderingContext): void {
124
+ setParameters(device, GL_PARAMETER_DEFAULTS);
120
125
  }
121
126
 
122
127
  // Helpers
123
128
 
124
129
  // Returns true if given object is empty, false otherwise.
125
130
  function isObjectEmpty(object) {
131
+ // @ts-ignore dummy key variable
126
132
  for (const key in object) {
127
133
  return false;
128
134
  }
@@ -1,7 +1,7 @@
1
1
  // Tables describing WebGL parameters
2
- import GL from '@luma.gl/constants';
2
+ import {GL, GLParameters} from '@luma.gl/constants';
3
3
  import {isWebGL2} from '../context/webgl-checks';
4
- import type {GLParameters} from '../../types/webgl';
4
+
5
5
  // DEFAULT SETTINGS - FOR FAST CACHE INITIALIZATION AND CONTEXT RESETS
6
6
 
7
7
  /* eslint-disable no-shadow */
@@ -91,11 +91,13 @@ export const GL_PARAMETER_DEFAULTS: GLParameters = {
91
91
 
92
92
  // SETTER TABLES - ENABLES SETTING ANY PARAMETER WITH A COMMON API
93
93
 
94
- const enable = (gl, value, key) => (value ? gl.enable(key) : gl.disable(key));
95
- const hint = (gl, value, key) => gl.hint(key, value);
96
- const pixelStorei = (gl, value, key) => gl.pixelStorei(key, value);
94
+ const enable = (gl: WebGLRenderingContext, value: unknown, key: GL) =>
95
+ value ? gl.enable(key) : gl.disable(key);
96
+ const hint = (gl: WebGLRenderingContext, value: GL, key: GL) => gl.hint(key, value);
97
+ const pixelStorei = (gl: WebGLRenderingContext, value: number | boolean, key: GL) =>
98
+ gl.pixelStorei(key, value);
97
99
 
98
- const bindFramebuffer = (gl, value, key) => {
100
+ const bindFramebuffer = (gl: WebGLRenderingContext, value: unknown, key: GL) => {
99
101
  let target;
100
102
  if (key === GL.FRAMEBUFFER_BINDING) {
101
103
  target = isWebGL2(gl) ? GL.DRAW_FRAMEBUFFER : GL.FRAMEBUFFER;
@@ -106,21 +108,22 @@ const bindFramebuffer = (gl, value, key) => {
106
108
  return gl.bindFramebuffer(target, value);
107
109
  };
108
110
 
109
- const bindBuffer = (gl, value, key) => {
110
- const target = ({
111
- [GL.ARRAY_BUFFER_BINDING]: [GL.ARRAY_BUFFER],
112
- [GL.COPY_READ_BUFFER_BINDING]: [GL.COPY_READ_BUFFER],
113
- [GL.COPY_WRITE_BUFFER_BINDING]: [GL.COPY_WRITE_BUFFER],
114
- [GL.PIXEL_PACK_BUFFER_BINDING]: [GL.PIXEL_PACK_BUFFER],
115
- [GL.PIXEL_UNPACK_BUFFER_BINDING]: [GL.PIXEL_UNPACK_BUFFER]
116
- })[key];
117
-
118
- gl.bindBuffer(target, value);
111
+ const bindBuffer = (gl: WebGLRenderingContext, value: unknown, key: GL) => {
112
+ const bindingMap: Partial<Record<GL, GL>> = {
113
+ [GL.ARRAY_BUFFER_BINDING]: GL.ARRAY_BUFFER,
114
+ [GL.COPY_READ_BUFFER_BINDING]: GL.COPY_READ_BUFFER,
115
+ [GL.COPY_WRITE_BUFFER_BINDING]: GL.COPY_WRITE_BUFFER,
116
+ [GL.PIXEL_PACK_BUFFER_BINDING]: GL.PIXEL_PACK_BUFFER,
117
+ [GL.PIXEL_UNPACK_BUFFER_BINDING]: GL.PIXEL_UNPACK_BUFFER
118
+ };
119
+ const glTarget = bindingMap[key];
120
+
121
+ gl.bindBuffer(glTarget, value);
119
122
  };
120
123
 
121
124
  // Utility
122
- function isArray(array) {
123
- return Array.isArray(array) || ArrayBuffer.isView(array);
125
+ function isArray(array: unknown): boolean {
126
+ return Array.isArray(array) || (ArrayBuffer.isView(array) && !(array instanceof DataView));
124
127
  }
125
128
 
126
129
  // Map from WebGL parameter names to corresponding WebGL setter functions
@@ -128,29 +131,34 @@ function isArray(array) {
128
131
  // NOTE: When value type is a string, it will be handled by 'GL_COMPOSITE_PARAMETER_SETTERS'
129
132
  export const GL_PARAMETER_SETTERS = {
130
133
  [GL.BLEND]: enable,
131
- [GL.BLEND_COLOR]: (gl, value) => gl.blendColor(...value),
134
+ [GL.BLEND_COLOR]: (gl: WebGLRenderingContext, value: [number, number, number, number]) =>
135
+ gl.blendColor(...value),
132
136
  [GL.BLEND_EQUATION_RGB]: 'blendEquation',
133
137
  [GL.BLEND_EQUATION_ALPHA]: 'blendEquation',
134
138
  [GL.BLEND_SRC_RGB]: 'blendFunc',
135
139
  [GL.BLEND_DST_RGB]: 'blendFunc',
136
140
  [GL.BLEND_SRC_ALPHA]: 'blendFunc',
137
141
  [GL.BLEND_DST_ALPHA]: 'blendFunc',
138
- [GL.COLOR_CLEAR_VALUE]: (gl, value) => gl.clearColor(...value),
139
- [GL.COLOR_WRITEMASK]: (gl, value) => gl.colorMask(...value),
142
+ [GL.COLOR_CLEAR_VALUE]: (gl: WebGLRenderingContext, value: [number, number, number, number]) =>
143
+ gl.clearColor(...value),
144
+ [GL.COLOR_WRITEMASK]: (gl: WebGLRenderingContext, value: [boolean, boolean, boolean, boolean]) => gl.colorMask(...value),
140
145
  [GL.CULL_FACE]: enable,
141
- [GL.CULL_FACE_MODE]: (gl, value) => gl.cullFace(value),
146
+ [GL.CULL_FACE_MODE]: (gl: WebGLRenderingContext, value) => gl.cullFace(value),
142
147
  [GL.DEPTH_TEST]: enable,
143
- [GL.DEPTH_CLEAR_VALUE]: (gl, value) => gl.clearDepth(value),
144
- [GL.DEPTH_FUNC]: (gl, value) => gl.depthFunc(value),
145
- [GL.DEPTH_RANGE]: (gl, value) => gl.depthRange(...value),
146
- [GL.DEPTH_WRITEMASK]: (gl, value) => gl.depthMask(value),
148
+ [GL.DEPTH_CLEAR_VALUE]: (gl: WebGLRenderingContext, value) => gl.clearDepth(value),
149
+ [GL.DEPTH_FUNC]: (gl: WebGLRenderingContext, value) => gl.depthFunc(value),
150
+ [GL.DEPTH_RANGE]: (gl: WebGLRenderingContext, value: [number, number]) => gl.depthRange(...value),
151
+ [GL.DEPTH_WRITEMASK]: (gl: WebGLRenderingContext, value) => gl.depthMask(value),
147
152
  [GL.DITHER]: enable,
148
153
  [GL.FRAGMENT_SHADER_DERIVATIVE_HINT]: hint,
149
154
 
150
- [GL.CURRENT_PROGRAM]: (gl, value) => gl.useProgram(value),
151
- [GL.RENDERBUFFER_BINDING]: (gl, value) => gl.bindRenderbuffer(GL.RENDERBUFFER, value),
152
- [GL.TRANSFORM_FEEDBACK_BINDING]: (gl, value) => gl.bindTransformFeedback?.(GL.TRANSFORM_FEEDBACK, value),
153
- [GL.VERTEX_ARRAY_BINDING]: (gl, value) => gl.bindVertexArray(value),
155
+ [GL.CURRENT_PROGRAM]: (gl: WebGLRenderingContext, value) => gl.useProgram(value),
156
+ [GL.RENDERBUFFER_BINDING]: (gl: WebGLRenderingContext, value) =>
157
+ gl.bindRenderbuffer(GL.RENDERBUFFER, value),
158
+ [GL.TRANSFORM_FEEDBACK_BINDING]: (gl: WebGLRenderingContext, value) =>
159
+ (gl as WebGL2RenderingContext).bindTransformFeedback?.(GL.TRANSFORM_FEEDBACK, value),
160
+ [GL.VERTEX_ARRAY_BINDING]: (gl: WebGLRenderingContext, value) =>
161
+ (gl as WebGL2RenderingContext).bindVertexArray(value),
154
162
  // NOTE: FRAMEBUFFER_BINDING and DRAW_FRAMEBUFFER_BINDING(WebGL2) refer same state.
155
163
  [GL.FRAMEBUFFER_BINDING]: bindFramebuffer,
156
164
  [GL.READ_FRAMEBUFFER_BINDING]: bindFramebuffer,
@@ -162,9 +170,9 @@ export const GL_PARAMETER_SETTERS = {
162
170
  [GL.PIXEL_PACK_BUFFER_BINDING]: bindBuffer,
163
171
  [GL.PIXEL_UNPACK_BUFFER_BINDING]: bindBuffer,
164
172
 
165
- [GL.FRONT_FACE]: (gl, value) => gl.frontFace(value),
173
+ [GL.FRONT_FACE]: (gl: WebGLRenderingContext, value) => gl.frontFace(value),
166
174
  [GL.GENERATE_MIPMAP_HINT]: hint,
167
- [GL.LINE_WIDTH]: (gl, value) => gl.lineWidth(value),
175
+ [GL.LINE_WIDTH]: (gl: WebGLRenderingContext, value) => gl.lineWidth(value),
168
176
  [GL.POLYGON_OFFSET_FILL]: enable,
169
177
  [GL.POLYGON_OFFSET_FACTOR]: 'polygonOffset',
170
178
  [GL.POLYGON_OFFSET_UNITS]: 'polygonOffset',
@@ -174,11 +182,13 @@ export const GL_PARAMETER_SETTERS = {
174
182
  [GL.SAMPLE_COVERAGE_VALUE]: 'sampleCoverage',
175
183
  [GL.SAMPLE_COVERAGE_INVERT]: 'sampleCoverage',
176
184
  [GL.SCISSOR_TEST]: enable,
177
- [GL.SCISSOR_BOX]: (gl, value) => gl.scissor(...value),
185
+ [GL.SCISSOR_BOX]: (gl: WebGLRenderingContext, value: [number, number, number, number]) => gl.scissor(...value),
178
186
  [GL.STENCIL_TEST]: enable,
179
- [GL.STENCIL_CLEAR_VALUE]: (gl, value) => gl.clearStencil(value),
180
- [GL.STENCIL_WRITEMASK]: (gl, value) => gl.stencilMaskSeparate(GL.FRONT, value),
181
- [GL.STENCIL_BACK_WRITEMASK]: (gl, value) => gl.stencilMaskSeparate(GL.BACK, value),
187
+ [GL.STENCIL_CLEAR_VALUE]: (gl: WebGLRenderingContext, value) => gl.clearStencil(value),
188
+ [GL.STENCIL_WRITEMASK]: (gl: WebGLRenderingContext, value) =>
189
+ gl.stencilMaskSeparate(GL.FRONT, value),
190
+ [GL.STENCIL_BACK_WRITEMASK]: (gl: WebGLRenderingContext, value) =>
191
+ gl.stencilMaskSeparate(GL.BACK, value),
182
192
  [GL.STENCIL_FUNC]: 'stencilFuncFront',
183
193
  [GL.STENCIL_REF]: 'stencilFuncFront',
184
194
  [GL.STENCIL_VALUE_MASK]: 'stencilFuncFront',
@@ -191,7 +201,7 @@ export const GL_PARAMETER_SETTERS = {
191
201
  [GL.STENCIL_BACK_FAIL]: 'stencilOpBack',
192
202
  [GL.STENCIL_BACK_PASS_DEPTH_FAIL]: 'stencilOpBack',
193
203
  [GL.STENCIL_BACK_PASS_DEPTH_PASS]: 'stencilOpBack',
194
- [GL.VIEWPORT]: (gl, value) => gl.viewport(...value),
204
+ [GL.VIEWPORT]: (gl: WebGLRenderingContext, value: [number, number, number, number]) => gl.viewport(...value),
195
205
 
196
206
  // WEBGL1 PIXEL PACK/UNPACK MODES
197
207
  [GL.PACK_ALIGNMENT]: pixelStorei,
@@ -212,80 +222,85 @@ export const GL_PARAMETER_SETTERS = {
212
222
  [GL.UNPACK_SKIP_IMAGES]: pixelStorei,
213
223
 
214
224
  // Function-style setters
215
- framebuffer: (gl, framebuffer) => {
225
+ framebuffer: (gl: WebGLRenderingContext, framebuffer) => {
216
226
  // accepts 1) a WebGLFramebuffer 2) null (default framebuffer), or 3) luma.gl Framebuffer class
217
227
  // framebuffer is null when restoring to default framebuffer, otherwise use the WebGL handle.
218
228
  const handle = framebuffer && 'handle' in framebuffer ? framebuffer.handle : framebuffer;
219
229
  return gl.bindFramebuffer(GL.FRAMEBUFFER, handle);
220
230
  },
221
- blend: (gl, value) => (value ? gl.enable(GL.BLEND) : gl.disable(GL.BLEND)),
222
- blendColor: (gl, value) => gl.blendColor(...value),
223
- blendEquation: (gl, args) => {
224
- args = isArray(args) ? args : [args, args];
225
- gl.blendEquationSeparate(...args);
231
+ blend: (gl: WebGLRenderingContext, value) => (value ? gl.enable(GL.BLEND) : gl.disable(GL.BLEND)),
232
+ blendColor: (gl: WebGLRenderingContext, value: [number, number, number, number]) => gl.blendColor(...value),
233
+ blendEquation: (gl: WebGLRenderingContext, args: number | [number, number]) => {
234
+ const separateModes = typeof args === 'number' ? [args, args] as [number, number]: args;
235
+ gl.blendEquationSeparate(...separateModes);
226
236
  },
227
- blendFunc: (gl, args) => {
228
- args = isArray(args) && args.length === 2 ? [...args, ...args] : args;
229
- gl.blendFuncSeparate(...args);
237
+ blendFunc: (gl: WebGLRenderingContext, args: [number, number] | [number, number, number, number]) => {
238
+ const separateFuncs = args?.length === 2 ? [...args, ...args] as [number, number, number, number] : args;
239
+ gl.blendFuncSeparate(...separateFuncs);
230
240
  },
231
241
 
232
- clearColor: (gl, value) => gl.clearColor(...value),
233
- clearDepth: (gl, value) => gl.clearDepth(value),
234
- clearStencil: (gl, value) => gl.clearStencil(value),
242
+ clearColor: (gl: WebGLRenderingContext, value: [number, number, number, number]) => gl.clearColor(...value),
243
+ clearDepth: (gl: WebGLRenderingContext, value) => gl.clearDepth(value),
244
+ clearStencil: (gl: WebGLRenderingContext, value) => gl.clearStencil(value),
235
245
 
236
- colorMask: (gl, value) => gl.colorMask(...value),
246
+ colorMask: (gl: WebGLRenderingContext, value: [boolean, boolean, boolean, boolean]) => gl.colorMask(...value),
237
247
 
238
- cull: (gl, value) => (value ? gl.enable(GL.CULL_FACE) : gl.disable(GL.CULL_FACE)),
239
- cullFace: (gl, value) => gl.cullFace(value),
248
+ cull: (gl: WebGLRenderingContext, value) =>
249
+ value ? gl.enable(GL.CULL_FACE) : gl.disable(GL.CULL_FACE),
250
+ cullFace: (gl: WebGLRenderingContext, value) => gl.cullFace(value),
240
251
 
241
- depthTest: (gl, value) => (value ? gl.enable(GL.DEPTH_TEST) : gl.disable(GL.DEPTH_TEST)),
242
- depthFunc: (gl, value) => gl.depthFunc(value),
243
- depthMask: (gl, value) => gl.depthMask(value),
244
- depthRange: (gl, value) => gl.depthRange(...value),
252
+ depthTest: (gl: WebGLRenderingContext, value) =>
253
+ value ? gl.enable(GL.DEPTH_TEST) : gl.disable(GL.DEPTH_TEST),
254
+ depthFunc: (gl: WebGLRenderingContext, value) => gl.depthFunc(value),
255
+ depthMask: (gl: WebGLRenderingContext, value) => gl.depthMask(value),
256
+ depthRange: (gl: WebGLRenderingContext, value: [number, number]) => gl.depthRange(...value),
245
257
 
246
- dither: (gl, value) => (value ? gl.enable(GL.DITHER) : gl.disable(GL.DITHER)),
258
+ dither: (gl: WebGLRenderingContext, value) =>
259
+ value ? gl.enable(GL.DITHER) : gl.disable(GL.DITHER),
247
260
 
248
- derivativeHint: (gl, value) => {
261
+ derivativeHint: (gl: WebGLRenderingContext, value) => {
249
262
  // gl1: 'OES_standard_derivatives'
250
263
  gl.hint(GL.FRAGMENT_SHADER_DERIVATIVE_HINT, value);
251
264
  },
252
265
 
253
- frontFace: (gl, value) => gl.frontFace(value),
266
+ frontFace: (gl: WebGLRenderingContext, value) => gl.frontFace(value),
254
267
 
255
- mipmapHint: (gl, value) => gl.hint(GL.GENERATE_MIPMAP_HINT, value),
268
+ mipmapHint: (gl: WebGLRenderingContext, value) => gl.hint(GL.GENERATE_MIPMAP_HINT, value),
256
269
 
257
- lineWidth: (gl, value) => gl.lineWidth(value),
270
+ lineWidth: (gl: WebGLRenderingContext, value) => gl.lineWidth(value),
258
271
 
259
- polygonOffsetFill: (gl, value) =>
272
+ polygonOffsetFill: (gl: WebGLRenderingContext, value) =>
260
273
  value ? gl.enable(GL.POLYGON_OFFSET_FILL) : gl.disable(GL.POLYGON_OFFSET_FILL),
261
- polygonOffset: (gl, value) => gl.polygonOffset(...value),
274
+ polygonOffset: (gl: WebGLRenderingContext, value: [number, number]) => gl.polygonOffset(...value),
262
275
 
263
- sampleCoverage: (gl, value) => gl.sampleCoverage(...value),
276
+ sampleCoverage: (gl: WebGLRenderingContext, value: [number, boolean?]) => gl.sampleCoverage(...value),
264
277
 
265
- scissorTest: (gl, value) => (value ? gl.enable(GL.SCISSOR_TEST) : gl.disable(GL.SCISSOR_TEST)),
266
- scissor: (gl, value) => gl.scissor(...value),
278
+ scissorTest: (gl: WebGLRenderingContext, value) =>
279
+ value ? gl.enable(GL.SCISSOR_TEST) : gl.disable(GL.SCISSOR_TEST),
280
+ scissor: (gl: WebGLRenderingContext, value: [number, number, number, number]) => gl.scissor(...value),
267
281
 
268
- stencilTest: (gl, value) => (value ? gl.enable(GL.STENCIL_TEST) : gl.disable(GL.STENCIL_TEST)),
269
- stencilMask: (gl, value) => {
282
+ stencilTest: (gl: WebGLRenderingContext, value) =>
283
+ value ? gl.enable(GL.STENCIL_TEST) : gl.disable(GL.STENCIL_TEST),
284
+ stencilMask: (gl: WebGLRenderingContext, value) => {
270
285
  value = isArray(value) ? value : [value, value];
271
286
  const [mask, backMask] = value;
272
287
  gl.stencilMaskSeparate(GL.FRONT, mask);
273
288
  gl.stencilMaskSeparate(GL.BACK, backMask);
274
289
  },
275
- stencilFunc: (gl, args) => {
290
+ stencilFunc: (gl: WebGLRenderingContext, args) => {
276
291
  args = isArray(args) && args.length === 3 ? [...args, ...args] : args;
277
292
  const [func, ref, mask, backFunc, backRef, backMask] = args;
278
293
  gl.stencilFuncSeparate(GL.FRONT, func, ref, mask);
279
294
  gl.stencilFuncSeparate(GL.BACK, backFunc, backRef, backMask);
280
295
  },
281
- stencilOp: (gl, args) => {
296
+ stencilOp: (gl: WebGLRenderingContext, args) => {
282
297
  args = isArray(args) && args.length === 3 ? [...args, ...args] : args;
283
298
  const [sfail, dpfail, dppass, backSfail, backDpfail, backDppass] = args;
284
299
  gl.stencilOpSeparate(GL.FRONT, sfail, dpfail, dppass);
285
300
  gl.stencilOpSeparate(GL.BACK, backSfail, backDpfail, backDppass);
286
301
  },
287
302
 
288
- viewport: (gl, value) => gl.viewport(...value)
303
+ viewport: (gl: WebGLRenderingContext, value: [number, number, number, number]) => gl.viewport(...value)
289
304
  };
290
305
 
291
306
  function getValue(glEnum, values, cache) {
@@ -294,50 +309,50 @@ function getValue(glEnum, values, cache) {
294
309
 
295
310
  // COMPOSITE_WEBGL_PARAMETER_
296
311
  export const GL_COMPOSITE_PARAMETER_SETTERS = {
297
- blendEquation: (gl, values, cache) =>
312
+ blendEquation: (gl: WebGLRenderingContext, values, cache) =>
298
313
  gl.blendEquationSeparate(
299
314
  getValue(GL.BLEND_EQUATION_RGB, values, cache),
300
315
  getValue(GL.BLEND_EQUATION_ALPHA, values, cache)
301
316
  ),
302
- blendFunc: (gl, values, cache) =>
317
+ blendFunc: (gl: WebGLRenderingContext, values, cache) =>
303
318
  gl.blendFuncSeparate(
304
319
  getValue(GL.BLEND_SRC_RGB, values, cache),
305
320
  getValue(GL.BLEND_DST_RGB, values, cache),
306
321
  getValue(GL.BLEND_SRC_ALPHA, values, cache),
307
322
  getValue(GL.BLEND_DST_ALPHA, values, cache)
308
323
  ),
309
- polygonOffset: (gl, values, cache) =>
324
+ polygonOffset: (gl: WebGLRenderingContext, values, cache) =>
310
325
  gl.polygonOffset(
311
326
  getValue(GL.POLYGON_OFFSET_FACTOR, values, cache),
312
327
  getValue(GL.POLYGON_OFFSET_UNITS, values, cache)
313
328
  ),
314
- sampleCoverage: (gl, values, cache) =>
329
+ sampleCoverage: (gl: WebGLRenderingContext, values, cache) =>
315
330
  gl.sampleCoverage(
316
331
  getValue(GL.SAMPLE_COVERAGE_VALUE, values, cache),
317
332
  getValue(GL.SAMPLE_COVERAGE_INVERT, values, cache)
318
333
  ),
319
- stencilFuncFront: (gl, values, cache) =>
334
+ stencilFuncFront: (gl: WebGLRenderingContext, values, cache) =>
320
335
  gl.stencilFuncSeparate(
321
336
  GL.FRONT,
322
337
  getValue(GL.STENCIL_FUNC, values, cache),
323
338
  getValue(GL.STENCIL_REF, values, cache),
324
339
  getValue(GL.STENCIL_VALUE_MASK, values, cache)
325
340
  ),
326
- stencilFuncBack: (gl, values, cache) =>
341
+ stencilFuncBack: (gl: WebGLRenderingContext, values, cache) =>
327
342
  gl.stencilFuncSeparate(
328
343
  GL.BACK,
329
344
  getValue(GL.STENCIL_BACK_FUNC, values, cache),
330
345
  getValue(GL.STENCIL_BACK_REF, values, cache),
331
346
  getValue(GL.STENCIL_BACK_VALUE_MASK, values, cache)
332
347
  ),
333
- stencilOpFront: (gl, values, cache) =>
348
+ stencilOpFront: (gl: WebGLRenderingContext, values, cache) =>
334
349
  gl.stencilOpSeparate(
335
350
  GL.FRONT,
336
351
  getValue(GL.STENCIL_FAIL, values, cache),
337
352
  getValue(GL.STENCIL_PASS_DEPTH_FAIL, values, cache),
338
353
  getValue(GL.STENCIL_PASS_DEPTH_PASS, values, cache)
339
354
  ),
340
- stencilOpBack: (gl, values, cache) =>
355
+ stencilOpBack: (gl: WebGLRenderingContext, values, cache) =>
341
356
  gl.stencilOpSeparate(
342
357
  GL.BACK,
343
358
  getValue(GL.STENCIL_BACK_FAIL, values, cache),
@@ -352,36 +367,40 @@ type UpdateFunc = (params: Record<string, any>) => void;
352
367
  export const GL_HOOKED_SETTERS = {
353
368
  // GENERIC SETTERS
354
369
 
355
- enable: (update: UpdateFunc, capability) =>
370
+ enable: (update: UpdateFunc, capability: GL) =>
356
371
  update({
357
372
  [capability]: true
358
373
  }),
359
- disable: (update: UpdateFunc, capability) =>
374
+ disable: (update: UpdateFunc, capability: GL) =>
360
375
  update({
361
376
  [capability]: false
362
377
  }),
363
- pixelStorei: (update: UpdateFunc, pname, value) =>
378
+ pixelStorei: (update: UpdateFunc, pname: GL, value) =>
364
379
  update({
365
380
  [pname]: value
366
381
  }),
367
- hint: (update: UpdateFunc, pname, hint) =>
382
+ hint: (update: UpdateFunc, pname: GL, hint: GL) =>
368
383
  update({
369
384
  [pname]: hint
370
385
  }),
371
386
 
372
387
  // SPECIFIC SETTERS
373
- useProgram: (update: UpdateFunc, value) => update({
374
- [GL.CURRENT_PROGRAM]: value,
375
- }),
376
- bindRenderbuffer: (update: UpdateFunc, target, value) => update({
377
- [GL.RENDERBUFFER_BINDING]: value
378
- }),
379
- bindTransformFeedback: (update: UpdateFunc, target, value) => update({
380
- [GL.TRANSFORM_FEEDBACK_BINDING]: value
381
- }),
382
- bindVertexArray: (update: UpdateFunc, value) => update({
383
- [GL.VERTEX_ARRAY_BINDING]: value
384
- }),
388
+ useProgram: (update: UpdateFunc, value) =>
389
+ update({
390
+ [GL.CURRENT_PROGRAM]: value
391
+ }),
392
+ bindRenderbuffer: (update: UpdateFunc, target, value) =>
393
+ update({
394
+ [GL.RENDERBUFFER_BINDING]: value
395
+ }),
396
+ bindTransformFeedback: (update: UpdateFunc, target, value) =>
397
+ update({
398
+ [GL.TRANSFORM_FEEDBACK_BINDING]: value
399
+ }),
400
+ bindVertexArray: (update: UpdateFunc, value) =>
401
+ update({
402
+ [GL.VERTEX_ARRAY_BINDING]: value
403
+ }),
385
404
 
386
405
  bindFramebuffer: (update: UpdateFunc, target, framebuffer) => {
387
406
  switch (target) {
@@ -399,13 +418,13 @@ export const GL_HOOKED_SETTERS = {
399
418
  }
400
419
  },
401
420
  bindBuffer: (update: UpdateFunc, target, buffer) => {
402
- const pname = ({
421
+ const pname = {
403
422
  [GL.ARRAY_BUFFER]: [GL.ARRAY_BUFFER_BINDING],
404
423
  [GL.COPY_READ_BUFFER]: [GL.COPY_READ_BUFFER_BINDING],
405
424
  [GL.COPY_WRITE_BUFFER]: [GL.COPY_WRITE_BUFFER_BINDING],
406
425
  [GL.PIXEL_PACK_BUFFER]: [GL.PIXEL_PACK_BUFFER_BINDING],
407
426
  [GL.PIXEL_UNPACK_BUFFER]: [GL.PIXEL_UNPACK_BUFFER_BINDING]
408
- })[target];
427
+ }[target];
409
428
 
410
429
  if (pname) {
411
430
  return update({[pname]: buffer});
@@ -567,7 +586,7 @@ export const GL_HOOKED_SETTERS = {
567
586
 
568
587
  // GETTER TABLE - FOR READING OUT AN ENTIRE CONTEXT
569
588
 
570
- const isEnabled = (gl, key) => gl.isEnabled(key);
589
+ const isEnabled = (gl: WebGLRenderingContext, key) => gl.isEnabled(key);
571
590
 
572
591
  // Exceptions for any keys that cannot be queried by gl.getParameters
573
592
  export const GL_PARAMETER_GETTERS = {
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Stores luma.gl specific state associated with a context
3
+ */
4
+ export interface WebGLContextData {
5
+ _polyfilled: boolean;
6
+ _extensions: Record<string, any>;
7
+ }
8
+
9
+ /**
10
+ * Gets luma.gl specific state from a context
11
+ * @returns context state
12
+ */
13
+ export function getContextData(gl: WebGLRenderingContext): WebGLContextData {
14
+ // @ts-expect-error
15
+ const luma = gl.luma as WebGLContextData | null;
16
+ if (!luma) {
17
+ const contextState: WebGLContextData = {
18
+ _polyfilled: false,
19
+ _extensions: {}
20
+ };
21
+ // @ts-expect-error
22
+ gl.luma = contextState;
23
+ }
24
+
25
+ // @ts-expect-error
26
+ return gl.luma;
27
+ }
@@ -1,5 +1,5 @@
1
1
  /* eslint-disable no-inline-comments, max-len, camelcase */
2
- import GL from '@luma.gl/constants';
2
+ import {GL} from '@luma.gl/constants';
3
3
  import {isWebGL2} from '../context/webgl-checks';
4
4
 
5
5
  const OES_element_index = 'OES_element_index';
@@ -31,7 +31,7 @@ const WEBGL_PARAMETERS = {
31
31
  [GL.SAMPLES]: getWebGL2ValueOrZero,
32
32
 
33
33
  // WebGL2 extension context parameters
34
- [GL_GPU_DISJOINT_EXT]: (gl, getParameter) => {
34
+ [GL_GPU_DISJOINT_EXT]: (gl: WebGLRenderingContext, getParameter) => {
35
35
  const ext = isWebGL2(gl)
36
36
  ? gl.getExtension(EXT_disjoint_timer_query_webgl2)
37
37
  : gl.getExtension(EXT_disjoint_timer_query);
@@ -39,18 +39,19 @@ const WEBGL_PARAMETERS = {
39
39
  },
40
40
 
41
41
  // Extension fixed values
42
- [GL_UNMASKED_VENDOR_WEBGL]: (gl, getParameter) => {
42
+ [GL_UNMASKED_VENDOR_WEBGL]: (gl: WebGLRenderingContext, getParameter) => {
43
43
  const ext = gl.getExtension(WEBGL_debug_renderer_info);
44
44
  return getParameter((ext && ext.UNMASKED_VENDOR_WEBGL) || GL.VENDOR);
45
45
  },
46
46
 
47
- [GL_UNMASKED_RENDERER_WEBGL]: (gl, getParameter) => {
47
+ [GL_UNMASKED_RENDERER_WEBGL]: (gl: WebGLRenderingContext, getParameter) => {
48
48
  const ext = gl.getExtension(WEBGL_debug_renderer_info);
49
49
  return getParameter((ext && ext.UNMASKED_RENDERER_WEBGL) || GL.RENDERER);
50
50
  },
51
51
 
52
52
  // Extension LIMITS
53
- [GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT]: (gl, getParameter) => {
53
+ [GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT]: (gl: WebGLRenderingContext, getParameter) => {
54
+ // @ts-ignore TODO - store these on the device instance instead...
54
55
  const ext = gl.luma?.extensions?.[EXT_texture_filter_anisotropic] ||
55
56
  gl.getExtension('EXT_texture_filter_anisotropic');
56
57
  return ext ? getParameter(ext.MAX_TEXTURE_MAX_ANISOTROPY_EXT) : 1.0;
@@ -60,7 +61,7 @@ const WEBGL_PARAMETERS = {
60
61
  [GL.MAX_3D_TEXTURE_SIZE]: getWebGL2ValueOrZero,
61
62
  [GL.MAX_ARRAY_TEXTURE_LAYERS]: getWebGL2ValueOrZero,
62
63
  [GL.MAX_CLIENT_WAIT_TIMEOUT_WEBGL]: getWebGL2ValueOrZero,
63
- [GL.MAX_COLOR_ATTACHMENTS]: (gl, getParameter) => {
64
+ [GL.MAX_COLOR_ATTACHMENTS]: (gl: WebGLRenderingContext, getParameter) => {
64
65
  if (!isWebGL2(gl)) {
65
66
  const ext = gl.getExtension(WEBGL_draw_buffers);
66
67
  return ext ? getParameter(ext.MAX_COLOR_ATTACHMENTS_WEBGL) : 0;
@@ -108,7 +109,7 @@ const WEBGL_PARAMETERS = {
108
109
 
109
110
  // A "replacement" gl.getParameter that accepts "enums" from extensions and WebGL2
110
111
  // and returns reasonably safe defaults
111
- export function getParameterPolyfill(gl, originalGetParameter, pname) {
112
+ export function getParameterPolyfill(gl: WebGLRenderingContext, originalGetParameter, pname) {
112
113
  // Return mock limits (usually 0) for WebGL2 constants to ensure these
113
114
  // can be queries without error
114
115
  const limit = WEBGL_PARAMETERS[pname];