@luma.gl/webgl 9.0.0-alpha.4 → 9.0.0-alpha.40

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 (525) hide show
  1. package/LICENSE +3 -1
  2. package/dist/adapter/converters/device-parameters.d.ts +23 -4
  3. package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
  4. package/dist/adapter/converters/device-parameters.js +42 -47
  5. package/dist/adapter/converters/device-parameters.js.map +1 -1
  6. package/dist/adapter/converters/sampler-parameters.d.ts +5 -5
  7. package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
  8. package/dist/adapter/converters/sampler-parameters.js +20 -56
  9. package/dist/adapter/converters/sampler-parameters.js.map +1 -1
  10. package/dist/adapter/converters/shader-formats.d.ts +9 -0
  11. package/dist/adapter/converters/shader-formats.d.ts.map +1 -0
  12. package/dist/adapter/converters/shader-formats.js +53 -0
  13. package/dist/adapter/converters/shader-formats.js.map +1 -0
  14. package/dist/adapter/converters/texture-formats.d.ts +32 -44
  15. package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
  16. package/dist/adapter/converters/texture-formats.js +165 -201
  17. package/dist/adapter/converters/texture-formats.js.map +1 -1
  18. package/dist/adapter/converters/vertex-formats.d.ts +9 -3
  19. package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
  20. package/dist/adapter/converters/vertex-formats.js +51 -19
  21. package/dist/adapter/converters/vertex-formats.js.map +1 -1
  22. package/dist/adapter/device-helpers/device-features.d.ts +1 -1
  23. package/dist/adapter/device-helpers/device-features.d.ts.map +1 -1
  24. package/dist/adapter/device-helpers/device-features.js +14 -21
  25. package/dist/adapter/device-helpers/device-features.js.map +1 -1
  26. package/dist/adapter/device-helpers/device-limits.d.ts +3 -3
  27. package/dist/adapter/device-helpers/device-limits.d.ts.map +1 -1
  28. package/dist/adapter/device-helpers/device-limits.js +2 -5
  29. package/dist/adapter/device-helpers/device-limits.js.map +1 -1
  30. package/dist/adapter/device-helpers/get-device-info.d.ts +1 -1
  31. package/dist/adapter/device-helpers/get-device-info.d.ts.map +1 -1
  32. package/dist/adapter/device-helpers/get-device-info.js +9 -11
  33. package/dist/adapter/device-helpers/get-device-info.js.map +1 -1
  34. package/dist/adapter/device-helpers/is-old-ie.d.ts.map +1 -1
  35. package/dist/adapter/device-helpers/is-old-ie.js +2 -1
  36. package/dist/adapter/device-helpers/is-old-ie.js.map +1 -1
  37. package/dist/adapter/helpers/decode-webgl-types.d.ts +26 -0
  38. package/dist/adapter/helpers/decode-webgl-types.d.ts.map +1 -0
  39. package/dist/adapter/helpers/{uniforms.js → decode-webgl-types.js} +20 -29
  40. package/dist/adapter/helpers/decode-webgl-types.js.map +1 -0
  41. package/dist/adapter/helpers/get-shader-info.d.ts +9 -0
  42. package/dist/adapter/helpers/get-shader-info.d.ts.map +1 -0
  43. package/dist/adapter/helpers/get-shader-info.js +25 -0
  44. package/dist/adapter/helpers/get-shader-info.js.map +1 -0
  45. package/dist/adapter/helpers/get-shader-layout.d.ts +1 -48
  46. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
  47. package/dist/adapter/helpers/get-shader-layout.js +60 -115
  48. package/dist/adapter/helpers/get-shader-layout.js.map +1 -1
  49. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts +1 -1
  50. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
  51. package/dist/adapter/helpers/parse-shader-compiler-log.js +0 -7
  52. package/dist/adapter/helpers/parse-shader-compiler-log.js.map +1 -1
  53. package/dist/adapter/helpers/set-uniform.d.ts +3 -2
  54. package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
  55. package/dist/adapter/helpers/set-uniform.js +27 -57
  56. package/dist/adapter/helpers/set-uniform.js.map +1 -1
  57. package/dist/adapter/helpers/webgl-topology-utils.d.ts +11 -0
  58. package/dist/adapter/helpers/webgl-topology-utils.d.ts.map +1 -0
  59. package/dist/adapter/helpers/{attribute-utils.js → webgl-topology-utils.js} +2 -19
  60. package/dist/adapter/helpers/webgl-topology-utils.js.map +1 -0
  61. package/dist/adapter/objects/constants-to-keys.d.ts +1 -3
  62. package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
  63. package/dist/adapter/objects/constants-to-keys.js +2 -29
  64. package/dist/adapter/objects/constants-to-keys.js.map +1 -1
  65. package/dist/adapter/objects/webgl-renderbuffer.d.ts +15 -12
  66. package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
  67. package/dist/adapter/objects/webgl-renderbuffer.js +34 -41
  68. package/dist/adapter/objects/webgl-renderbuffer.js.map +1 -1
  69. package/dist/adapter/objects/webgl-resource.d.ts +6 -9
  70. package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
  71. package/dist/adapter/objects/webgl-resource.js +26 -83
  72. package/dist/adapter/objects/webgl-resource.js.map +1 -1
  73. package/dist/adapter/resources/webgl-buffer.d.ts +18 -10
  74. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  75. package/dist/adapter/resources/webgl-buffer.js +49 -78
  76. package/dist/adapter/resources/webgl-buffer.js.map +1 -1
  77. package/dist/adapter/resources/webgl-command-buffer.d.ts +15 -9
  78. package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
  79. package/dist/adapter/resources/webgl-command-buffer.js +169 -43
  80. package/dist/adapter/resources/webgl-command-buffer.js.map +1 -1
  81. package/dist/adapter/resources/webgl-command-encoder.d.ts +7 -6
  82. package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
  83. package/dist/adapter/resources/webgl-command-encoder.js +10 -20
  84. package/dist/adapter/resources/webgl-command-encoder.js.map +1 -1
  85. package/dist/adapter/resources/webgl-external-texture.js.map +1 -1
  86. package/dist/adapter/resources/webgl-framebuffer.d.ts +21 -24
  87. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  88. package/dist/adapter/resources/webgl-framebuffer.js +46 -155
  89. package/dist/adapter/resources/webgl-framebuffer.js.map +1 -1
  90. package/dist/adapter/resources/webgl-render-pass.d.ts +19 -4
  91. package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
  92. package/dist/adapter/resources/webgl-render-pass.js +91 -11
  93. package/dist/adapter/resources/webgl-render-pass.js.map +1 -1
  94. package/dist/adapter/resources/webgl-render-pipeline.d.ts +53 -19
  95. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  96. package/dist/adapter/resources/webgl-render-pipeline.js +107 -230
  97. package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -1
  98. package/dist/adapter/resources/webgl-sampler.d.ts +6 -5
  99. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
  100. package/dist/adapter/resources/webgl-sampler.js +10 -19
  101. package/dist/adapter/resources/webgl-sampler.js.map +1 -1
  102. package/dist/adapter/resources/webgl-shader.d.ts +3 -4
  103. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  104. package/dist/adapter/resources/webgl-shader.js +19 -31
  105. package/dist/adapter/resources/webgl-shader.js.map +1 -1
  106. package/dist/adapter/resources/webgl-texture.d.ts +64 -44
  107. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  108. package/dist/adapter/resources/webgl-texture.js +119 -235
  109. package/dist/adapter/resources/webgl-texture.js.map +1 -1
  110. package/dist/adapter/resources/webgl-vertex-array.d.ts +67 -0
  111. package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -0
  112. package/dist/adapter/resources/webgl-vertex-array.js +166 -0
  113. package/dist/adapter/resources/webgl-vertex-array.js.map +1 -0
  114. package/dist/adapter/webgl-canvas-context.d.ts +6 -7
  115. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
  116. package/dist/adapter/webgl-canvas-context.js +10 -23
  117. package/dist/adapter/webgl-canvas-context.js.map +1 -1
  118. package/dist/adapter/webgl-device.d.ts +74 -41
  119. package/dist/adapter/webgl-device.d.ts.map +1 -1
  120. package/dist/adapter/webgl-device.js +214 -128
  121. package/dist/adapter/webgl-device.js.map +1 -1
  122. package/dist/classic/accessor.d.ts +3 -3
  123. package/dist/classic/accessor.d.ts.map +1 -1
  124. package/dist/classic/accessor.js +23 -48
  125. package/dist/classic/accessor.js.map +1 -1
  126. package/dist/classic/{buffer.d.ts → buffer-with-accessor.d.ts} +16 -29
  127. package/dist/classic/buffer-with-accessor.d.ts.map +1 -0
  128. package/dist/classic/{buffer.js → buffer-with-accessor.js} +55 -125
  129. package/dist/classic/buffer-with-accessor.js.map +1 -0
  130. package/dist/classic/clear.d.ts +22 -0
  131. package/dist/classic/clear.d.ts.map +1 -0
  132. package/dist/classic/clear.js +88 -0
  133. package/dist/classic/clear.js.map +1 -0
  134. package/dist/classic/copy-and-blit.d.ts +62 -0
  135. package/dist/classic/copy-and-blit.d.ts.map +1 -0
  136. package/dist/classic/copy-and-blit.js +200 -0
  137. package/dist/classic/copy-and-blit.js.map +1 -0
  138. package/dist/classic/format-utils.d.ts +3 -0
  139. package/dist/classic/format-utils.d.ts.map +1 -0
  140. package/dist/classic/format-utils.js +38 -0
  141. package/dist/classic/format-utils.js.map +1 -0
  142. package/dist/classic/typed-array-utils.d.ts +15 -17
  143. package/dist/classic/typed-array-utils.d.ts.map +1 -1
  144. package/dist/classic/typed-array-utils.js +1 -21
  145. package/dist/classic/typed-array-utils.js.map +1 -1
  146. package/dist/context/context/create-browser-context.d.ts +40 -0
  147. package/dist/context/context/create-browser-context.d.ts.map +1 -0
  148. package/dist/context/context/create-browser-context.js +53 -0
  149. package/dist/context/context/create-browser-context.js.map +1 -0
  150. package/dist/context/context/create-headless-context.d.ts +9 -0
  151. package/dist/context/context/create-headless-context.d.ts.map +1 -0
  152. package/dist/context/context/create-headless-context.js +42 -0
  153. package/dist/context/context/create-headless-context.js.map +1 -0
  154. package/dist/context/context/webgl-checks.d.ts.map +1 -1
  155. package/dist/context/context/webgl-checks.js +1 -4
  156. package/dist/context/context/webgl-checks.js.map +1 -1
  157. package/dist/context/debug/spector.d.ts +1 -2
  158. package/dist/context/debug/spector.d.ts.map +1 -1
  159. package/dist/context/debug/spector.js +8 -20
  160. package/dist/context/debug/spector.js.map +1 -1
  161. package/dist/context/debug/webgl-developer-tools.d.ts +2 -2
  162. package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
  163. package/dist/context/debug/webgl-developer-tools.js +16 -39
  164. package/dist/context/debug/webgl-developer-tools.js.map +1 -1
  165. package/dist/context/parameters/unified-parameter-api.d.ts +9 -8
  166. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  167. package/dist/context/parameters/unified-parameter-api.js +9 -19
  168. package/dist/context/parameters/unified-parameter-api.js.map +1 -1
  169. package/dist/context/parameters/webgl-parameter-tables.d.ts +105 -106
  170. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  171. package/dist/context/parameters/webgl-parameter-tables.js +18 -36
  172. package/dist/context/parameters/webgl-parameter-tables.js.map +1 -1
  173. package/dist/context/polyfill/context-data.d.ts +13 -0
  174. package/dist/context/polyfill/context-data.d.ts.map +1 -0
  175. package/dist/context/polyfill/context-data.js +12 -0
  176. package/dist/context/polyfill/context-data.js.map +1 -0
  177. package/dist/context/polyfill/get-parameter-polyfill.d.ts +1 -1
  178. package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +1 -1
  179. package/dist/context/polyfill/get-parameter-polyfill.js +4 -9
  180. package/dist/context/polyfill/get-parameter-polyfill.js.map +1 -1
  181. package/dist/context/polyfill/polyfill-context.d.ts.map +1 -1
  182. package/dist/context/polyfill/polyfill-context.js +22 -30
  183. package/dist/context/polyfill/polyfill-context.js.map +1 -1
  184. package/dist/context/polyfill/polyfill-table.d.ts +8 -8
  185. package/dist/context/polyfill/polyfill-table.d.ts.map +1 -1
  186. package/dist/context/polyfill/polyfill-table.js +10 -32
  187. package/dist/context/polyfill/polyfill-table.js.map +1 -1
  188. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +1 -1
  189. package/dist/context/polyfill/polyfill-vertex-array-object.js +0 -70
  190. package/dist/context/polyfill/polyfill-vertex-array-object.js.map +1 -1
  191. package/dist/context/state-tracker/deep-array-equal.d.ts.map +1 -1
  192. package/dist/context/state-tracker/deep-array-equal.js +0 -4
  193. package/dist/context/state-tracker/deep-array-equal.js.map +1 -1
  194. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
  195. package/dist/context/state-tracker/track-context-state.js +26 -62
  196. package/dist/context/state-tracker/track-context-state.js.map +1 -1
  197. package/dist/context/state-tracker/with-parameters.d.ts +2 -1
  198. package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
  199. package/dist/context/state-tracker/with-parameters.js +8 -10
  200. package/dist/context/state-tracker/with-parameters.js.map +1 -1
  201. package/dist/dist.dev.js +10390 -0
  202. package/dist/index.cjs +6615 -0
  203. package/dist/index.d.ts +27 -24
  204. package/dist/index.d.ts.map +1 -1
  205. package/dist/index.js +27 -26
  206. package/dist/index.js.map +1 -1
  207. package/dist/types.d.ts +3 -1
  208. package/dist/types.d.ts.map +1 -1
  209. package/dist/types.js.map +1 -1
  210. package/dist.min.js +37 -0
  211. package/package.json +21 -9
  212. package/src/adapter/converters/device-parameters.ts +124 -36
  213. package/src/adapter/converters/sampler-parameters.ts +22 -9
  214. package/src/adapter/converters/shader-formats.ts +44 -0
  215. package/src/adapter/converters/texture-formats.ts +267 -194
  216. package/src/adapter/converters/vertex-formats.ts +71 -10
  217. package/src/adapter/device-helpers/device-features.ts +13 -3
  218. package/src/adapter/device-helpers/device-limits.ts +5 -3
  219. package/src/adapter/device-helpers/get-device-info.ts +17 -10
  220. package/src/adapter/device-helpers/is-old-ie.ts +3 -0
  221. package/src/adapter/helpers/{uniforms.ts → decode-webgl-types.ts} +39 -21
  222. package/src/adapter/helpers/get-shader-info.ts +41 -0
  223. package/src/adapter/helpers/get-shader-layout.ts +121 -146
  224. package/src/adapter/helpers/parse-shader-compiler-log.ts +4 -2
  225. package/src/adapter/helpers/set-uniform.ts +39 -35
  226. package/src/adapter/helpers/{attribute-utils.ts → webgl-topology-utils.ts} +7 -5
  227. package/src/adapter/objects/constants-to-keys.ts +6 -25
  228. package/src/adapter/objects/webgl-renderbuffer.ts +43 -37
  229. package/src/adapter/objects/webgl-resource.ts +16 -23
  230. package/src/adapter/resources/webgl-buffer.ts +59 -58
  231. package/src/adapter/resources/webgl-command-buffer.ts +333 -25
  232. package/src/adapter/resources/webgl-command-encoder.ts +20 -12
  233. package/src/adapter/resources/webgl-external-texture.ts +5 -2
  234. package/src/adapter/resources/webgl-framebuffer.ts +89 -133
  235. package/src/adapter/resources/webgl-render-pass.ts +160 -4
  236. package/src/adapter/resources/webgl-render-pipeline.ts +254 -174
  237. package/src/adapter/resources/webgl-sampler.ts +15 -9
  238. package/src/adapter/resources/webgl-shader.ts +14 -11
  239. package/src/adapter/resources/webgl-texture.ts +120 -90
  240. package/src/adapter/resources/webgl-vertex-array.ts +279 -0
  241. package/src/adapter/webgl-canvas-context.ts +16 -14
  242. package/src/adapter/webgl-device.ts +321 -78
  243. package/src/classic/accessor.ts +7 -17
  244. package/src/classic/{buffer.ts → buffer-with-accessor.ts} +68 -76
  245. package/src/classic/clear.ts +113 -0
  246. package/src/classic/copy-and-blit.ts +314 -0
  247. package/src/classic/format-utils.ts +46 -0
  248. package/src/classic/typed-array-utils.ts +19 -27
  249. package/src/context/context/create-browser-context.ts +140 -0
  250. package/src/context/context/create-headless-context.ts +51 -0
  251. package/src/context/context/webgl-checks.ts +3 -1
  252. package/src/context/debug/spector.ts +9 -6
  253. package/src/context/debug/webgl-developer-tools.ts +23 -15
  254. package/src/context/parameters/unified-parameter-api.ts +23 -14
  255. package/src/context/parameters/webgl-parameter-tables.ts +120 -98
  256. package/src/context/polyfill/context-data.ts +30 -0
  257. package/src/context/polyfill/get-parameter-polyfill.ts +11 -7
  258. package/src/context/polyfill/polyfill-context.ts +10 -9
  259. package/src/context/polyfill/polyfill-table.ts +21 -16
  260. package/src/context/polyfill/polyfill-vertex-array-object.ts +5 -0
  261. package/src/context/state-tracker/deep-array-equal.ts +2 -0
  262. package/src/context/state-tracker/track-context-state.ts +20 -16
  263. package/src/context/state-tracker/with-parameters.ts +13 -4
  264. package/src/index.ts +69 -35
  265. package/src/types.ts +5 -0
  266. package/dist/adapter/converters/renderbuffer-formats.d.ts +0 -16
  267. package/dist/adapter/converters/renderbuffer-formats.d.ts.map +0 -1
  268. package/dist/adapter/converters/renderbuffer-formats.js +0 -185
  269. package/dist/adapter/converters/renderbuffer-formats.js.map +0 -1
  270. package/dist/adapter/helpers/attribute-utils.d.ts +0 -11
  271. package/dist/adapter/helpers/attribute-utils.d.ts.map +0 -1
  272. package/dist/adapter/helpers/attribute-utils.js.map +0 -1
  273. package/dist/adapter/helpers/uniforms.d.ts +0 -26
  274. package/dist/adapter/helpers/uniforms.d.ts.map +0 -1
  275. package/dist/adapter/helpers/uniforms.js.map +0 -1
  276. package/dist/adapter/objects/webgl-vertex-array-object.d.ts +0 -27
  277. package/dist/adapter/objects/webgl-vertex-array-object.d.ts.map +0 -1
  278. package/dist/adapter/objects/webgl-vertex-array-object.js +0 -84
  279. package/dist/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  280. package/dist/bundle.d.ts +0 -2
  281. package/dist/bundle.d.ts.map +0 -1
  282. package/dist/bundle.js +0 -5
  283. package/dist/bundle.js.map +0 -1
  284. package/dist/classic/buffer.d.ts.map +0 -1
  285. package/dist/classic/buffer.js.map +0 -1
  286. package/dist/context/context/context-state.d.ts +0 -18
  287. package/dist/context/context/context-state.d.ts.map +0 -1
  288. package/dist/context/context/context-state.js +0 -26
  289. package/dist/context/context/context-state.js.map +0 -1
  290. package/dist/context/context/create-context.d.ts +0 -41
  291. package/dist/context/context/create-context.d.ts.map +0 -1
  292. package/dist/context/context/create-context.js +0 -49
  293. package/dist/context/context/create-context.js.map +0 -1
  294. package/dist/context/context/device-pixels.d.ts +0 -25
  295. package/dist/context/context/device-pixels.d.ts.map +0 -1
  296. package/dist/context/context/device-pixels.js +0 -98
  297. package/dist/context/context/device-pixels.js.map +0 -1
  298. package/dist/es5/adapter/converters/device-parameters.js +0 -170
  299. package/dist/es5/adapter/converters/device-parameters.js.map +0 -1
  300. package/dist/es5/adapter/converters/renderbuffer-formats.js +0 -163
  301. package/dist/es5/adapter/converters/renderbuffer-formats.js.map +0 -1
  302. package/dist/es5/adapter/converters/sampler-parameters.js +0 -226
  303. package/dist/es5/adapter/converters/sampler-parameters.js.map +0 -1
  304. package/dist/es5/adapter/converters/texture-formats.js +0 -1031
  305. package/dist/es5/adapter/converters/texture-formats.js.map +0 -1
  306. package/dist/es5/adapter/converters/vertex-formats.js +0 -45
  307. package/dist/es5/adapter/converters/vertex-formats.js.map +0 -1
  308. package/dist/es5/adapter/device-helpers/device-features.js +0 -144
  309. package/dist/es5/adapter/device-helpers/device-features.js.map +0 -1
  310. package/dist/es5/adapter/device-helpers/device-limits.js +0 -64
  311. package/dist/es5/adapter/device-helpers/device-limits.js.map +0 -1
  312. package/dist/es5/adapter/device-helpers/get-device-info.js +0 -55
  313. package/dist/es5/adapter/device-helpers/get-device-info.js.map +0 -1
  314. package/dist/es5/adapter/device-helpers/is-old-ie.js +0 -16
  315. package/dist/es5/adapter/device-helpers/is-old-ie.js.map +0 -1
  316. package/dist/es5/adapter/helpers/attribute-utils.js +0 -91
  317. package/dist/es5/adapter/helpers/attribute-utils.js.map +0 -1
  318. package/dist/es5/adapter/helpers/get-shader-layout.js +0 -371
  319. package/dist/es5/adapter/helpers/get-shader-layout.js.map +0 -1
  320. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js +0 -72
  321. package/dist/es5/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  322. package/dist/es5/adapter/helpers/set-uniform.js +0 -125
  323. package/dist/es5/adapter/helpers/set-uniform.js.map +0 -1
  324. package/dist/es5/adapter/helpers/uniforms.js +0 -112
  325. package/dist/es5/adapter/helpers/uniforms.js.map +0 -1
  326. package/dist/es5/adapter/objects/constants-to-keys.js +0 -54
  327. package/dist/es5/adapter/objects/constants-to-keys.js.map +0 -1
  328. package/dist/es5/adapter/objects/webgl-renderbuffer.js +0 -150
  329. package/dist/es5/adapter/objects/webgl-renderbuffer.js.map +0 -1
  330. package/dist/es5/adapter/objects/webgl-resource.js +0 -292
  331. package/dist/es5/adapter/objects/webgl-resource.js.map +0 -1
  332. package/dist/es5/adapter/objects/webgl-vertex-array-object.js +0 -137
  333. package/dist/es5/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  334. package/dist/es5/adapter/resources/webgl-buffer.js +0 -243
  335. package/dist/es5/adapter/resources/webgl-buffer.js.map +0 -1
  336. package/dist/es5/adapter/resources/webgl-command-buffer.js +0 -96
  337. package/dist/es5/adapter/resources/webgl-command-buffer.js.map +0 -1
  338. package/dist/es5/adapter/resources/webgl-command-encoder.js +0 -98
  339. package/dist/es5/adapter/resources/webgl-command-encoder.js.map +0 -1
  340. package/dist/es5/adapter/resources/webgl-external-texture.js +0 -2
  341. package/dist/es5/adapter/resources/webgl-external-texture.js.map +0 -1
  342. package/dist/es5/adapter/resources/webgl-framebuffer.js +0 -345
  343. package/dist/es5/adapter/resources/webgl-framebuffer.js.map +0 -1
  344. package/dist/es5/adapter/resources/webgl-render-pass.js +0 -61
  345. package/dist/es5/adapter/resources/webgl-render-pass.js.map +0 -1
  346. package/dist/es5/adapter/resources/webgl-render-pipeline.js +0 -505
  347. package/dist/es5/adapter/resources/webgl-render-pipeline.js.map +0 -1
  348. package/dist/es5/adapter/resources/webgl-sampler.js +0 -96
  349. package/dist/es5/adapter/resources/webgl-sampler.js.map +0 -1
  350. package/dist/es5/adapter/resources/webgl-shader.js +0 -149
  351. package/dist/es5/adapter/resources/webgl-shader.js.map +0 -1
  352. package/dist/es5/adapter/resources/webgl-texture.js +0 -986
  353. package/dist/es5/adapter/resources/webgl-texture.js.map +0 -1
  354. package/dist/es5/adapter/webgl-canvas-context.js +0 -97
  355. package/dist/es5/adapter/webgl-canvas-context.js.map +0 -1
  356. package/dist/es5/adapter/webgl-device.js +0 -399
  357. package/dist/es5/adapter/webgl-device.js.map +0 -1
  358. package/dist/es5/bundle.js +0 -7
  359. package/dist/es5/bundle.js.map +0 -1
  360. package/dist/es5/classic/accessor.js +0 -181
  361. package/dist/es5/classic/accessor.js.map +0 -1
  362. package/dist/es5/classic/buffer.js +0 -470
  363. package/dist/es5/classic/buffer.js.map +0 -1
  364. package/dist/es5/classic/typed-array-utils.js +0 -126
  365. package/dist/es5/classic/typed-array-utils.js.map +0 -1
  366. package/dist/es5/context/context/context-state.js +0 -31
  367. package/dist/es5/context/context/context-state.js.map +0 -1
  368. package/dist/es5/context/context/create-context.js +0 -69
  369. package/dist/es5/context/context/create-context.js.map +0 -1
  370. package/dist/es5/context/context/device-pixels.js +0 -115
  371. package/dist/es5/context/context/device-pixels.js.map +0 -1
  372. package/dist/es5/context/context/webgl-checks.js +0 -54
  373. package/dist/es5/context/context/webgl-checks.js.map +0 -1
  374. package/dist/es5/context/debug/spector.js +0 -133
  375. package/dist/es5/context/debug/spector.js.map +0 -1
  376. package/dist/es5/context/debug/webgl-developer-tools.js +0 -198
  377. package/dist/es5/context/debug/webgl-developer-tools.js.map +0 -1
  378. package/dist/es5/context/parameters/unified-parameter-api.js +0 -97
  379. package/dist/es5/context/parameters/unified-parameter-api.js.map +0 -1
  380. package/dist/es5/context/parameters/webgl-parameter-tables.js +0 -392
  381. package/dist/es5/context/parameters/webgl-parameter-tables.js.map +0 -1
  382. package/dist/es5/context/polyfill/get-parameter-polyfill.js +0 -81
  383. package/dist/es5/context/polyfill/get-parameter-polyfill.js.map +0 -1
  384. package/dist/es5/context/polyfill/polyfill-context.js +0 -135
  385. package/dist/es5/context/polyfill/polyfill-context.js.map +0 -1
  386. package/dist/es5/context/polyfill/polyfill-table.js +0 -166
  387. package/dist/es5/context/polyfill/polyfill-table.js.map +0 -1
  388. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js +0 -341
  389. package/dist/es5/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  390. package/dist/es5/context/state-tracker/deep-array-equal.js +0 -28
  391. package/dist/es5/context/state-tracker/deep-array-equal.js.map +0 -1
  392. package/dist/es5/context/state-tracker/track-context-state.js +0 -211
  393. package/dist/es5/context/state-tracker/track-context-state.js.map +0 -1
  394. package/dist/es5/context/state-tracker/with-parameters.js +0 -44
  395. package/dist/es5/context/state-tracker/with-parameters.js.map +0 -1
  396. package/dist/es5/index.js +0 -276
  397. package/dist/es5/index.js.map +0 -1
  398. package/dist/es5/init.js +0 -10
  399. package/dist/es5/init.js.map +0 -1
  400. package/dist/es5/types/webgl.js +0 -6
  401. package/dist/es5/types/webgl.js.map +0 -1
  402. package/dist/es5/types.js +0 -2
  403. package/dist/es5/types.js.map +0 -1
  404. package/dist/esm/adapter/converters/device-parameters.js +0 -155
  405. package/dist/esm/adapter/converters/device-parameters.js.map +0 -1
  406. package/dist/esm/adapter/converters/renderbuffer-formats.js +0 -185
  407. package/dist/esm/adapter/converters/renderbuffer-formats.js.map +0 -1
  408. package/dist/esm/adapter/converters/sampler-parameters.js +0 -208
  409. package/dist/esm/adapter/converters/sampler-parameters.js.map +0 -1
  410. package/dist/esm/adapter/converters/texture-formats.js +0 -954
  411. package/dist/esm/adapter/converters/texture-formats.js.map +0 -1
  412. package/dist/esm/adapter/converters/vertex-formats.js +0 -35
  413. package/dist/esm/adapter/converters/vertex-formats.js.map +0 -1
  414. package/dist/esm/adapter/device-helpers/device-features.js +0 -102
  415. package/dist/esm/adapter/device-helpers/device-features.js.map +0 -1
  416. package/dist/esm/adapter/device-helpers/device-limits.js +0 -91
  417. package/dist/esm/adapter/device-helpers/device-limits.js.map +0 -1
  418. package/dist/esm/adapter/device-helpers/get-device-info.js +0 -44
  419. package/dist/esm/adapter/device-helpers/get-device-info.js.map +0 -1
  420. package/dist/esm/adapter/device-helpers/is-old-ie.js +0 -8
  421. package/dist/esm/adapter/device-helpers/is-old-ie.js.map +0 -1
  422. package/dist/esm/adapter/helpers/attribute-utils.js +0 -81
  423. package/dist/esm/adapter/helpers/attribute-utils.js.map +0 -1
  424. package/dist/esm/adapter/helpers/get-shader-layout.js +0 -306
  425. package/dist/esm/adapter/helpers/get-shader-layout.js.map +0 -1
  426. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js +0 -37
  427. package/dist/esm/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  428. package/dist/esm/adapter/helpers/set-uniform.js +0 -115
  429. package/dist/esm/adapter/helpers/set-uniform.js.map +0 -1
  430. package/dist/esm/adapter/helpers/uniforms.js +0 -99
  431. package/dist/esm/adapter/helpers/uniforms.js.map +0 -1
  432. package/dist/esm/adapter/objects/constants-to-keys.js +0 -42
  433. package/dist/esm/adapter/objects/constants-to-keys.js.map +0 -1
  434. package/dist/esm/adapter/objects/webgl-renderbuffer.js +0 -94
  435. package/dist/esm/adapter/objects/webgl-renderbuffer.js.map +0 -1
  436. package/dist/esm/adapter/objects/webgl-resource.js +0 -216
  437. package/dist/esm/adapter/objects/webgl-resource.js.map +0 -1
  438. package/dist/esm/adapter/objects/webgl-vertex-array-object.js +0 -84
  439. package/dist/esm/adapter/objects/webgl-vertex-array-object.js.map +0 -1
  440. package/dist/esm/adapter/resources/webgl-buffer.js +0 -164
  441. package/dist/esm/adapter/resources/webgl-buffer.js.map +0 -1
  442. package/dist/esm/adapter/resources/webgl-command-buffer.js +0 -65
  443. package/dist/esm/adapter/resources/webgl-command-buffer.js.map +0 -1
  444. package/dist/esm/adapter/resources/webgl-command-encoder.js +0 -53
  445. package/dist/esm/adapter/resources/webgl-command-encoder.js.map +0 -1
  446. package/dist/esm/adapter/resources/webgl-external-texture.js +0 -2
  447. package/dist/esm/adapter/resources/webgl-external-texture.js.map +0 -1
  448. package/dist/esm/adapter/resources/webgl-framebuffer.js +0 -265
  449. package/dist/esm/adapter/resources/webgl-framebuffer.js.map +0 -1
  450. package/dist/esm/adapter/resources/webgl-render-pass.js +0 -19
  451. package/dist/esm/adapter/resources/webgl-render-pass.js.map +0 -1
  452. package/dist/esm/adapter/resources/webgl-render-pipeline.js +0 -400
  453. package/dist/esm/adapter/resources/webgl-render-pipeline.js.map +0 -1
  454. package/dist/esm/adapter/resources/webgl-sampler.js +0 -50
  455. package/dist/esm/adapter/resources/webgl-sampler.js.map +0 -1
  456. package/dist/esm/adapter/resources/webgl-shader.js +0 -75
  457. package/dist/esm/adapter/resources/webgl-shader.js.map +0 -1
  458. package/dist/esm/adapter/resources/webgl-texture.js +0 -831
  459. package/dist/esm/adapter/resources/webgl-texture.js.map +0 -1
  460. package/dist/esm/adapter/webgl-canvas-context.js +0 -54
  461. package/dist/esm/adapter/webgl-canvas-context.js.map +0 -1
  462. package/dist/esm/adapter/webgl-device.js +0 -280
  463. package/dist/esm/adapter/webgl-device.js.map +0 -1
  464. package/dist/esm/bundle.js +0 -5
  465. package/dist/esm/bundle.js.map +0 -1
  466. package/dist/esm/classic/accessor.js +0 -144
  467. package/dist/esm/classic/accessor.js.map +0 -1
  468. package/dist/esm/classic/buffer.js +0 -384
  469. package/dist/esm/classic/buffer.js.map +0 -1
  470. package/dist/esm/classic/typed-array-utils.js +0 -112
  471. package/dist/esm/classic/typed-array-utils.js.map +0 -1
  472. package/dist/esm/context/context/context-state.js +0 -26
  473. package/dist/esm/context/context/context-state.js.map +0 -1
  474. package/dist/esm/context/context/create-context.js +0 -49
  475. package/dist/esm/context/context/create-context.js.map +0 -1
  476. package/dist/esm/context/context/device-pixels.js +0 -98
  477. package/dist/esm/context/context/device-pixels.js.map +0 -1
  478. package/dist/esm/context/context/webgl-checks.js +0 -34
  479. package/dist/esm/context/context/webgl-checks.js.map +0 -1
  480. package/dist/esm/context/debug/spector.js +0 -76
  481. package/dist/esm/context/debug/spector.js.map +0 -1
  482. package/dist/esm/context/debug/webgl-developer-tools.js +0 -121
  483. package/dist/esm/context/debug/webgl-developer-tools.js.map +0 -1
  484. package/dist/esm/context/parameters/unified-parameter-api.js +0 -65
  485. package/dist/esm/context/parameters/unified-parameter-api.js.map +0 -1
  486. package/dist/esm/context/parameters/webgl-parameter-tables.js +0 -445
  487. package/dist/esm/context/parameters/webgl-parameter-tables.js.map +0 -1
  488. package/dist/esm/context/polyfill/get-parameter-polyfill.js +0 -91
  489. package/dist/esm/context/polyfill/get-parameter-polyfill.js.map +0 -1
  490. package/dist/esm/context/polyfill/polyfill-context.js +0 -92
  491. package/dist/esm/context/polyfill/polyfill-context.js.map +0 -1
  492. package/dist/esm/context/polyfill/polyfill-table.js +0 -160
  493. package/dist/esm/context/polyfill/polyfill-table.js.map +0 -1
  494. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js +0 -335
  495. package/dist/esm/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  496. package/dist/esm/context/state-tracker/deep-array-equal.js +0 -21
  497. package/dist/esm/context/state-tracker/deep-array-equal.js.map +0 -1
  498. package/dist/esm/context/state-tracker/track-context-state.js +0 -183
  499. package/dist/esm/context/state-tracker/track-context-state.js.map +0 -1
  500. package/dist/esm/context/state-tracker/with-parameters.js +0 -36
  501. package/dist/esm/context/state-tracker/with-parameters.js.map +0 -1
  502. package/dist/esm/index.js +0 -27
  503. package/dist/esm/index.js.map +0 -1
  504. package/dist/esm/init.js +0 -4
  505. package/dist/esm/init.js.map +0 -1
  506. package/dist/esm/types/webgl.js +0 -2
  507. package/dist/esm/types/webgl.js.map +0 -1
  508. package/dist/esm/types.js +0 -2
  509. package/dist/esm/types.js.map +0 -1
  510. package/dist/init.d.ts +0 -2
  511. package/dist/init.d.ts.map +0 -1
  512. package/dist/init.js +0 -4
  513. package/dist/init.js.map +0 -1
  514. package/dist/types/webgl.d.ts +0 -144
  515. package/dist/types/webgl.d.ts.map +0 -1
  516. package/dist/types/webgl.js +0 -2
  517. package/dist/types/webgl.js.map +0 -1
  518. package/src/adapter/converters/renderbuffer-formats.ts +0 -92
  519. package/src/adapter/objects/webgl-vertex-array-object.ts +0 -111
  520. package/src/bundle.ts +0 -4
  521. package/src/context/context/context-state.ts +0 -41
  522. package/src/context/context/create-context.ts +0 -110
  523. package/src/context/context/device-pixels.ts +0 -152
  524. package/src/init.ts +0 -4
  525. package/src/types/webgl.ts +0 -283
@@ -1,5 +1,7 @@
1
1
  // luma.gl, MIT license
2
- import {log, loadScript} from '@luma.gl/api';
2
+ // Copyright (c) vis.gl contributors
3
+
4
+ import {log, loadScript} from '@luma.gl/core';
3
5
 
4
6
  /** Spector debug initialization options */
5
7
  type SpectorProps = {
@@ -23,6 +25,7 @@ let spector: any = null;
23
25
  let initialized: boolean = false;
24
26
 
25
27
  declare global {
28
+ // eslint-disable-next-line no-var
26
29
  var SPECTOR: any;
27
30
  }
28
31
 
@@ -32,7 +35,7 @@ export async function loadSpectorJS(props?: SpectorProps) {
32
35
  try {
33
36
  await loadScript(SPECTOR_CDN_URL);
34
37
  } catch(error) {
35
- log.warn(error)
38
+ log.warn(String(error))
36
39
  }
37
40
  }
38
41
  }
@@ -44,7 +47,7 @@ export function initializeSpectorJS(props?: SpectorProps) {
44
47
  }
45
48
 
46
49
  if (!spector && globalThis.SPECTOR) {
47
- log.probe(LOG_LEVEL, "SPECTOR found and initialized")();
50
+ log.probe(LOG_LEVEL, 'SPECTOR found and initialized')();
48
51
  spector = new globalThis.SPECTOR.Spector();
49
52
  if (globalThis.luma) {
50
53
  globalThis.luma.spector = spector;
@@ -61,9 +64,9 @@ export function initializeSpectorJS(props?: SpectorProps) {
61
64
  // enables recording some extra information merged in the capture like texture memory sizes and formats
62
65
  spector.spyCanvases();
63
66
  // A callback when results are ready
64
- spector?.onCaptureStarted.add((capture: unknown) => log.info(`Spector capture started:`, capture)());
67
+ spector?.onCaptureStarted.add((capture: unknown) => log.info('Spector capture started:', capture)());
65
68
  spector?.onCapture.add((capture: unknown) => {
66
- log.info(`Spector capture complete:`, capture)();
69
+ log.info('Spector capture complete:', capture)();
67
70
  // Use undocumented Spector API to open the UI with our capture
68
71
  // See https://github.com/BabylonJS/Spector.js/blob/767ad1195a25b85a85c381f400eb50a979239eca/src/spector.ts#L124
69
72
  spector?.getResultUI()
@@ -82,7 +85,7 @@ export function initializeSpectorJS(props?: SpectorProps) {
82
85
  // spector?.captureCanvas(props?.canvas);
83
86
  spector?.startCapture(props?.canvas, 500); // 500 commands
84
87
  new Promise(resolve => setTimeout(resolve, 2000)).then(_ => {
85
- log.info(`Spector capture stopped after 2 seconds`)();
88
+ log.info('Spector capture stopped after 2 seconds')();
86
89
  spector?.stopCapture();
87
90
  // spector?.displayUI();
88
91
  });
@@ -1,6 +1,9 @@
1
1
  // luma.gl, MIT license
2
- import {log, loadScript} from '@luma.gl/api/';
3
- import GL from '@luma.gl/constants';
2
+ // Copyright (c) vis.gl contributors
3
+
4
+ import {log, loadScript} from '@luma.gl/core';
5
+ import {GL} from '@luma.gl/constants';
6
+ import {isBrowser} from '@probe.gl/env'
4
7
 
5
8
  const WEBGL_DEBUG_CDN_URL = 'https://unpkg.com/webgl-debug@2.0.1/index.js';
6
9
 
@@ -11,20 +14,26 @@ type DebugContextProps = {
11
14
  webgl2?: boolean;
12
15
  };
13
16
 
14
- const DEFAULT_DEBUG_CONTEXT_PROPS: Required<DebugContextProps> = {
15
- debug: true,
16
- throwOnError: false,
17
- break: undefined,
18
- webgl2: false,
17
+ // const DEFAULT_DEBUG_CONTEXT_PROPS: Required<DebugContextProps> = {
18
+ // debug: true,
19
+ // throwOnError: false,
20
+ // break: [],
21
+ // webgl2: false,
22
+ // }
23
+
24
+ type ContextData = {
25
+ realContext?: WebGLRenderingContext;
26
+ debugContext?: WebGLRenderingContext;
19
27
  }
20
28
 
21
29
  // Helper to get shared context data
22
- function getContextData(gl: any) {
30
+ function getContextData(gl: any): ContextData {
23
31
  gl.luma = gl.luma || {};
24
32
  return gl.luma;
25
33
  }
26
34
 
27
35
  declare global {
36
+ // eslint-disable-next-line no-var
28
37
  var WebGLDebugUtils: any;
29
38
  }
30
39
 
@@ -35,8 +44,7 @@ declare global {
35
44
  * @see https://github.com/vorg/webgl-debug
36
45
  */
37
46
  export async function loadWebGLDeveloperTools(): Promise<void> {
38
- if (!globalThis.WebGLDebugUtils) {
39
- // @ts-expect-error Developer tools expects global to be set
47
+ if (isBrowser() && !globalThis.WebGLDebugUtils) {
40
48
  globalThis.global = globalThis.global || globalThis;
41
49
  // @ts-expect-error Developer tools expects global to be set
42
50
  globalThis.global.module = {};
@@ -46,7 +54,7 @@ export async function loadWebGLDeveloperTools(): Promise<void> {
46
54
 
47
55
  // Returns (a potentially new) context with debug instrumentation turned off or on.
48
56
  // Note that this actually returns a new context
49
- export function makeDebugContext(gl: WebGLRenderingContext, props: DebugContextProps = {}): WebGLRenderingContext {
57
+ export function makeDebugContext(gl: WebGLRenderingContext, props: DebugContextProps = {}): WebGLRenderingContext | null {
50
58
  // Return null to ensure we don't try to create a context in this case (TODO what case is that?)
51
59
  if (!gl) {
52
60
  return null;
@@ -133,16 +141,16 @@ function onGLError(props: DebugContextProps, err, functionName: string, args: an
133
141
 
134
142
  // Don't generate function string until it is needed
135
143
  function onValidateGLFunc(props: DebugContextProps, functionName: string, functionArgs: any[]): void {
136
- let functionString: string;
144
+ let functionString: string = '';
137
145
  if (log.level >= 1) {
138
146
  functionString = getFunctionString(functionName, functionArgs);
139
147
  log.log(1, functionString)();
140
148
  }
141
149
 
142
- if (props.break) {
150
+ // If array of breakpoint strings supplied, check if any of them is contained in current GL function
151
+ if (props.break && props.break.length > 0) {
143
152
  functionString = functionString || getFunctionString(functionName, functionArgs);
144
- const isBreakpoint =
145
- props.break && props.break.every((breakOn: string) => functionString.indexOf(breakOn) !== -1);
153
+ const isBreakpoint = props.break.every((breakOn: string) => functionString.indexOf(breakOn) !== -1);
146
154
  if (isBreakpoint) {
147
155
  debugger; // eslint-disable-line
148
156
  }
@@ -1,8 +1,11 @@
1
+ // luma.gl, MIT license
2
+ // Copyright (c) vis.gl contributors
3
+
1
4
  // Provides a unified API for getting and setting any WebGL parameter
2
5
  // Also knows default values of all parameters, enabling fast cache initialization
3
6
  // Provides base functionality for the state caching.
4
- import {Device} from '@luma.gl/api';
5
- import type {GLParameters} from '../../types/webgl';
7
+ import {Device} from '@luma.gl/core';
8
+ import type {GLParameters} from '@luma.gl/constants';
6
9
  import {
7
10
  GL_PARAMETER_DEFAULTS,
8
11
  GL_PARAMETER_SETTERS,
@@ -10,8 +13,7 @@ import {
10
13
  GL_PARAMETER_GETTERS
11
14
  } from './webgl-parameter-tables';
12
15
 
13
- import {isWebGL} from '../context/webgl-checks';
14
- import WebGLDevice from '../../adapter/webgl-device';
16
+ import {WebGLDevice} from '../../adapter/webgl-device';
15
17
 
16
18
  export type {GLParameters};
17
19
 
@@ -21,7 +23,10 @@ export type {GLParameters};
21
23
  * @note requires a `cache` object to be set on the context (gl.state.cache)
22
24
  * This object is used to fill in any missing values for composite setter functions
23
25
  */
24
- export function setParameters(device: Device | WebGLRenderingContext, parameters: GLParameters): void {
26
+ export function setGLParameters(
27
+ device: Device | WebGLRenderingContext,
28
+ parameters: GLParameters
29
+ ): void {
25
30
  const webglDevice = WebGLDevice.attach(device);
26
31
  const gl = webglDevice.gl;
27
32
 
@@ -74,7 +79,10 @@ export function setParameters(device: Device | WebGLRenderingContext, parameters
74
79
 
75
80
  /**
76
81
  * Reads the entire WebGL state from a context
77
- * @returns - a newly created map, with values keyed by GL parameters
82
+
83
+ // default to querying all parameters
84
+
85
+ * @returns - a newly created map, with values keyed by GL parameters
78
86
  *
79
87
  * @note Copies the state from a context (gl.getParameter should not be overriden)
80
88
  * Reads the entire WebGL state from a context
@@ -83,13 +91,13 @@ export function setParameters(device: Device | WebGLRenderingContext, parameters
83
91
  * considered a very slow operation, to be used only if/when a context already manipulated
84
92
  * by external code needs to be synchronized for the first time
85
93
  */
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;
94
+ export function getGLParameters(
95
+ device: Device | WebGLRenderingContext,
96
+ parameters: keyof GLParameters | (keyof GLParameters)[] | GLParameters = GL_PARAMETER_DEFAULTS
97
+ ): GLParameters {
98
+ const webglDevice = WebGLDevice.attach(device);
99
+ const gl = webglDevice.gl;
89
100
 
90
- export function getParameters(gl, parameters) {
91
- // default to querying all parameters
92
- parameters = parameters || GL_PARAMETER_DEFAULTS;
93
101
  // support both arrays of parameters and objects (keys represent parameters)
94
102
 
95
103
  if (typeof parameters === 'number') {
@@ -115,14 +123,15 @@ export function getParameters(gl, parameters) {
115
123
  * NOT the canvas size dimensions, so they will have to be properly set after
116
124
  * calling this function.
117
125
  */
118
- export function resetParameters(gl: WebGLRenderingContext): void {
119
- setParameters(gl, GL_PARAMETER_DEFAULTS);
126
+ export function resetGLParameters(device: Device | WebGLRenderingContext): void {
127
+ setGLParameters(device, GL_PARAMETER_DEFAULTS);
120
128
  }
121
129
 
122
130
  // Helpers
123
131
 
124
132
  // Returns true if given object is empty, false otherwise.
125
133
  function isObjectEmpty(object) {
134
+ // @ts-ignore dummy key variable
126
135
  for (const key in object) {
127
136
  return false;
128
137
  }
@@ -1,7 +1,10 @@
1
+ // luma.gl, MIT license
2
+ // Copyright (c) vis.gl contributors
3
+
1
4
  // Tables describing WebGL parameters
2
- import GL from '@luma.gl/constants';
5
+ import {GL, GLParameters} from '@luma.gl/constants';
3
6
  import {isWebGL2} from '../context/webgl-checks';
4
- import type {GLParameters} from '../../types/webgl';
7
+
5
8
  // DEFAULT SETTINGS - FOR FAST CACHE INITIALIZATION AND CONTEXT RESETS
6
9
 
7
10
  /* eslint-disable no-shadow */
@@ -91,11 +94,13 @@ export const GL_PARAMETER_DEFAULTS: GLParameters = {
91
94
 
92
95
  // SETTER TABLES - ENABLES SETTING ANY PARAMETER WITH A COMMON API
93
96
 
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);
97
+ const enable = (gl: WebGLRenderingContext, value: unknown, key: GL) =>
98
+ value ? gl.enable(key) : gl.disable(key);
99
+ const hint = (gl: WebGLRenderingContext, value: GL, key: GL) => gl.hint(key, value);
100
+ const pixelStorei = (gl: WebGLRenderingContext, value: number | boolean, key: GL) =>
101
+ gl.pixelStorei(key, value);
97
102
 
98
- const bindFramebuffer = (gl, value, key) => {
103
+ const bindFramebuffer = (gl: WebGLRenderingContext, value: unknown, key: GL) => {
99
104
  let target;
100
105
  if (key === GL.FRAMEBUFFER_BINDING) {
101
106
  target = isWebGL2(gl) ? GL.DRAW_FRAMEBUFFER : GL.FRAMEBUFFER;
@@ -106,21 +111,22 @@ const bindFramebuffer = (gl, value, key) => {
106
111
  return gl.bindFramebuffer(target, value);
107
112
  };
108
113
 
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);
114
+ const bindBuffer = (gl: WebGLRenderingContext, value: unknown, key: GL) => {
115
+ const bindingMap: Partial<Record<GL, GL>> = {
116
+ [GL.ARRAY_BUFFER_BINDING]: GL.ARRAY_BUFFER,
117
+ [GL.COPY_READ_BUFFER_BINDING]: GL.COPY_READ_BUFFER,
118
+ [GL.COPY_WRITE_BUFFER_BINDING]: GL.COPY_WRITE_BUFFER,
119
+ [GL.PIXEL_PACK_BUFFER_BINDING]: GL.PIXEL_PACK_BUFFER,
120
+ [GL.PIXEL_UNPACK_BUFFER_BINDING]: GL.PIXEL_UNPACK_BUFFER
121
+ };
122
+ const glTarget = bindingMap[key];
123
+
124
+ gl.bindBuffer(glTarget, value);
119
125
  };
120
126
 
121
127
  // Utility
122
- function isArray(array) {
123
- return Array.isArray(array) || ArrayBuffer.isView(array);
128
+ function isArray(array: unknown): boolean {
129
+ return Array.isArray(array) || (ArrayBuffer.isView(array) && !(array instanceof DataView));
124
130
  }
125
131
 
126
132
  // Map from WebGL parameter names to corresponding WebGL setter functions
@@ -128,29 +134,34 @@ function isArray(array) {
128
134
  // NOTE: When value type is a string, it will be handled by 'GL_COMPOSITE_PARAMETER_SETTERS'
129
135
  export const GL_PARAMETER_SETTERS = {
130
136
  [GL.BLEND]: enable,
131
- [GL.BLEND_COLOR]: (gl, value) => gl.blendColor(...value),
137
+ [GL.BLEND_COLOR]: (gl: WebGLRenderingContext, value: [number, number, number, number]) =>
138
+ gl.blendColor(...value),
132
139
  [GL.BLEND_EQUATION_RGB]: 'blendEquation',
133
140
  [GL.BLEND_EQUATION_ALPHA]: 'blendEquation',
134
141
  [GL.BLEND_SRC_RGB]: 'blendFunc',
135
142
  [GL.BLEND_DST_RGB]: 'blendFunc',
136
143
  [GL.BLEND_SRC_ALPHA]: 'blendFunc',
137
144
  [GL.BLEND_DST_ALPHA]: 'blendFunc',
138
- [GL.COLOR_CLEAR_VALUE]: (gl, value) => gl.clearColor(...value),
139
- [GL.COLOR_WRITEMASK]: (gl, value) => gl.colorMask(...value),
145
+ [GL.COLOR_CLEAR_VALUE]: (gl: WebGLRenderingContext, value: [number, number, number, number]) =>
146
+ gl.clearColor(...value),
147
+ [GL.COLOR_WRITEMASK]: (gl: WebGLRenderingContext, value: [boolean, boolean, boolean, boolean]) => gl.colorMask(...value),
140
148
  [GL.CULL_FACE]: enable,
141
- [GL.CULL_FACE_MODE]: (gl, value) => gl.cullFace(value),
149
+ [GL.CULL_FACE_MODE]: (gl: WebGLRenderingContext, value) => gl.cullFace(value),
142
150
  [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),
151
+ [GL.DEPTH_CLEAR_VALUE]: (gl: WebGLRenderingContext, value) => gl.clearDepth(value),
152
+ [GL.DEPTH_FUNC]: (gl: WebGLRenderingContext, value) => gl.depthFunc(value),
153
+ [GL.DEPTH_RANGE]: (gl: WebGLRenderingContext, value: [number, number]) => gl.depthRange(...value),
154
+ [GL.DEPTH_WRITEMASK]: (gl: WebGLRenderingContext, value) => gl.depthMask(value),
147
155
  [GL.DITHER]: enable,
148
156
  [GL.FRAGMENT_SHADER_DERIVATIVE_HINT]: hint,
149
157
 
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),
158
+ [GL.CURRENT_PROGRAM]: (gl: WebGLRenderingContext, value) => gl.useProgram(value),
159
+ [GL.RENDERBUFFER_BINDING]: (gl: WebGLRenderingContext, value) =>
160
+ gl.bindRenderbuffer(GL.RENDERBUFFER, value),
161
+ [GL.TRANSFORM_FEEDBACK_BINDING]: (gl: WebGLRenderingContext, value) =>
162
+ (gl as WebGL2RenderingContext).bindTransformFeedback?.(GL.TRANSFORM_FEEDBACK, value),
163
+ [GL.VERTEX_ARRAY_BINDING]: (gl: WebGLRenderingContext, value) =>
164
+ (gl as WebGL2RenderingContext).bindVertexArray(value),
154
165
  // NOTE: FRAMEBUFFER_BINDING and DRAW_FRAMEBUFFER_BINDING(WebGL2) refer same state.
155
166
  [GL.FRAMEBUFFER_BINDING]: bindFramebuffer,
156
167
  [GL.READ_FRAMEBUFFER_BINDING]: bindFramebuffer,
@@ -162,9 +173,9 @@ export const GL_PARAMETER_SETTERS = {
162
173
  [GL.PIXEL_PACK_BUFFER_BINDING]: bindBuffer,
163
174
  [GL.PIXEL_UNPACK_BUFFER_BINDING]: bindBuffer,
164
175
 
165
- [GL.FRONT_FACE]: (gl, value) => gl.frontFace(value),
176
+ [GL.FRONT_FACE]: (gl: WebGLRenderingContext, value) => gl.frontFace(value),
166
177
  [GL.GENERATE_MIPMAP_HINT]: hint,
167
- [GL.LINE_WIDTH]: (gl, value) => gl.lineWidth(value),
178
+ [GL.LINE_WIDTH]: (gl: WebGLRenderingContext, value) => gl.lineWidth(value),
168
179
  [GL.POLYGON_OFFSET_FILL]: enable,
169
180
  [GL.POLYGON_OFFSET_FACTOR]: 'polygonOffset',
170
181
  [GL.POLYGON_OFFSET_UNITS]: 'polygonOffset',
@@ -174,11 +185,13 @@ export const GL_PARAMETER_SETTERS = {
174
185
  [GL.SAMPLE_COVERAGE_VALUE]: 'sampleCoverage',
175
186
  [GL.SAMPLE_COVERAGE_INVERT]: 'sampleCoverage',
176
187
  [GL.SCISSOR_TEST]: enable,
177
- [GL.SCISSOR_BOX]: (gl, value) => gl.scissor(...value),
188
+ [GL.SCISSOR_BOX]: (gl: WebGLRenderingContext, value: [number, number, number, number]) => gl.scissor(...value),
178
189
  [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),
190
+ [GL.STENCIL_CLEAR_VALUE]: (gl: WebGLRenderingContext, value) => gl.clearStencil(value),
191
+ [GL.STENCIL_WRITEMASK]: (gl: WebGLRenderingContext, value) =>
192
+ gl.stencilMaskSeparate(GL.FRONT, value),
193
+ [GL.STENCIL_BACK_WRITEMASK]: (gl: WebGLRenderingContext, value) =>
194
+ gl.stencilMaskSeparate(GL.BACK, value),
182
195
  [GL.STENCIL_FUNC]: 'stencilFuncFront',
183
196
  [GL.STENCIL_REF]: 'stencilFuncFront',
184
197
  [GL.STENCIL_VALUE_MASK]: 'stencilFuncFront',
@@ -191,7 +204,7 @@ export const GL_PARAMETER_SETTERS = {
191
204
  [GL.STENCIL_BACK_FAIL]: 'stencilOpBack',
192
205
  [GL.STENCIL_BACK_PASS_DEPTH_FAIL]: 'stencilOpBack',
193
206
  [GL.STENCIL_BACK_PASS_DEPTH_PASS]: 'stencilOpBack',
194
- [GL.VIEWPORT]: (gl, value) => gl.viewport(...value),
207
+ [GL.VIEWPORT]: (gl: WebGLRenderingContext, value: [number, number, number, number]) => gl.viewport(...value),
195
208
 
196
209
  // WEBGL1 PIXEL PACK/UNPACK MODES
197
210
  [GL.PACK_ALIGNMENT]: pixelStorei,
@@ -212,80 +225,85 @@ export const GL_PARAMETER_SETTERS = {
212
225
  [GL.UNPACK_SKIP_IMAGES]: pixelStorei,
213
226
 
214
227
  // Function-style setters
215
- framebuffer: (gl, framebuffer) => {
228
+ framebuffer: (gl: WebGLRenderingContext, framebuffer) => {
216
229
  // accepts 1) a WebGLFramebuffer 2) null (default framebuffer), or 3) luma.gl Framebuffer class
217
230
  // framebuffer is null when restoring to default framebuffer, otherwise use the WebGL handle.
218
231
  const handle = framebuffer && 'handle' in framebuffer ? framebuffer.handle : framebuffer;
219
232
  return gl.bindFramebuffer(GL.FRAMEBUFFER, handle);
220
233
  },
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);
234
+ blend: (gl: WebGLRenderingContext, value) => (value ? gl.enable(GL.BLEND) : gl.disable(GL.BLEND)),
235
+ blendColor: (gl: WebGLRenderingContext, value: [number, number, number, number]) => gl.blendColor(...value),
236
+ blendEquation: (gl: WebGLRenderingContext, args: number | [number, number]) => {
237
+ const separateModes = typeof args === 'number' ? [args, args] as [number, number]: args;
238
+ gl.blendEquationSeparate(...separateModes);
226
239
  },
227
- blendFunc: (gl, args) => {
228
- args = isArray(args) && args.length === 2 ? [...args, ...args] : args;
229
- gl.blendFuncSeparate(...args);
240
+ blendFunc: (gl: WebGLRenderingContext, args: [number, number] | [number, number, number, number]) => {
241
+ const separateFuncs = args?.length === 2 ? [...args, ...args] as [number, number, number, number] : args;
242
+ gl.blendFuncSeparate(...separateFuncs);
230
243
  },
231
244
 
232
- clearColor: (gl, value) => gl.clearColor(...value),
233
- clearDepth: (gl, value) => gl.clearDepth(value),
234
- clearStencil: (gl, value) => gl.clearStencil(value),
245
+ clearColor: (gl: WebGLRenderingContext, value: [number, number, number, number]) => gl.clearColor(...value),
246
+ clearDepth: (gl: WebGLRenderingContext, value) => gl.clearDepth(value),
247
+ clearStencil: (gl: WebGLRenderingContext, value) => gl.clearStencil(value),
235
248
 
236
- colorMask: (gl, value) => gl.colorMask(...value),
249
+ colorMask: (gl: WebGLRenderingContext, value: [boolean, boolean, boolean, boolean]) => gl.colorMask(...value),
237
250
 
238
- cull: (gl, value) => (value ? gl.enable(GL.CULL_FACE) : gl.disable(GL.CULL_FACE)),
239
- cullFace: (gl, value) => gl.cullFace(value),
251
+ cull: (gl: WebGLRenderingContext, value) =>
252
+ value ? gl.enable(GL.CULL_FACE) : gl.disable(GL.CULL_FACE),
253
+ cullFace: (gl: WebGLRenderingContext, value) => gl.cullFace(value),
240
254
 
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),
255
+ depthTest: (gl: WebGLRenderingContext, value) =>
256
+ value ? gl.enable(GL.DEPTH_TEST) : gl.disable(GL.DEPTH_TEST),
257
+ depthFunc: (gl: WebGLRenderingContext, value) => gl.depthFunc(value),
258
+ depthMask: (gl: WebGLRenderingContext, value) => gl.depthMask(value),
259
+ depthRange: (gl: WebGLRenderingContext, value: [number, number]) => gl.depthRange(...value),
245
260
 
246
- dither: (gl, value) => (value ? gl.enable(GL.DITHER) : gl.disable(GL.DITHER)),
261
+ dither: (gl: WebGLRenderingContext, value) =>
262
+ value ? gl.enable(GL.DITHER) : gl.disable(GL.DITHER),
247
263
 
248
- derivativeHint: (gl, value) => {
264
+ derivativeHint: (gl: WebGLRenderingContext, value) => {
249
265
  // gl1: 'OES_standard_derivatives'
250
266
  gl.hint(GL.FRAGMENT_SHADER_DERIVATIVE_HINT, value);
251
267
  },
252
268
 
253
- frontFace: (gl, value) => gl.frontFace(value),
269
+ frontFace: (gl: WebGLRenderingContext, value) => gl.frontFace(value),
254
270
 
255
- mipmapHint: (gl, value) => gl.hint(GL.GENERATE_MIPMAP_HINT, value),
271
+ mipmapHint: (gl: WebGLRenderingContext, value) => gl.hint(GL.GENERATE_MIPMAP_HINT, value),
256
272
 
257
- lineWidth: (gl, value) => gl.lineWidth(value),
273
+ lineWidth: (gl: WebGLRenderingContext, value) => gl.lineWidth(value),
258
274
 
259
- polygonOffsetFill: (gl, value) =>
275
+ polygonOffsetFill: (gl: WebGLRenderingContext, value) =>
260
276
  value ? gl.enable(GL.POLYGON_OFFSET_FILL) : gl.disable(GL.POLYGON_OFFSET_FILL),
261
- polygonOffset: (gl, value) => gl.polygonOffset(...value),
277
+ polygonOffset: (gl: WebGLRenderingContext, value: [number, number]) => gl.polygonOffset(...value),
262
278
 
263
- sampleCoverage: (gl, value) => gl.sampleCoverage(...value),
279
+ sampleCoverage: (gl: WebGLRenderingContext, value: [number, boolean?]) => gl.sampleCoverage(...value),
264
280
 
265
- scissorTest: (gl, value) => (value ? gl.enable(GL.SCISSOR_TEST) : gl.disable(GL.SCISSOR_TEST)),
266
- scissor: (gl, value) => gl.scissor(...value),
281
+ scissorTest: (gl: WebGLRenderingContext, value) =>
282
+ value ? gl.enable(GL.SCISSOR_TEST) : gl.disable(GL.SCISSOR_TEST),
283
+ scissor: (gl: WebGLRenderingContext, value: [number, number, number, number]) => gl.scissor(...value),
267
284
 
268
- stencilTest: (gl, value) => (value ? gl.enable(GL.STENCIL_TEST) : gl.disable(GL.STENCIL_TEST)),
269
- stencilMask: (gl, value) => {
285
+ stencilTest: (gl: WebGLRenderingContext, value) =>
286
+ value ? gl.enable(GL.STENCIL_TEST) : gl.disable(GL.STENCIL_TEST),
287
+ stencilMask: (gl: WebGLRenderingContext, value) => {
270
288
  value = isArray(value) ? value : [value, value];
271
289
  const [mask, backMask] = value;
272
290
  gl.stencilMaskSeparate(GL.FRONT, mask);
273
291
  gl.stencilMaskSeparate(GL.BACK, backMask);
274
292
  },
275
- stencilFunc: (gl, args) => {
293
+ stencilFunc: (gl: WebGLRenderingContext, args) => {
276
294
  args = isArray(args) && args.length === 3 ? [...args, ...args] : args;
277
295
  const [func, ref, mask, backFunc, backRef, backMask] = args;
278
296
  gl.stencilFuncSeparate(GL.FRONT, func, ref, mask);
279
297
  gl.stencilFuncSeparate(GL.BACK, backFunc, backRef, backMask);
280
298
  },
281
- stencilOp: (gl, args) => {
299
+ stencilOp: (gl: WebGLRenderingContext, args) => {
282
300
  args = isArray(args) && args.length === 3 ? [...args, ...args] : args;
283
301
  const [sfail, dpfail, dppass, backSfail, backDpfail, backDppass] = args;
284
302
  gl.stencilOpSeparate(GL.FRONT, sfail, dpfail, dppass);
285
303
  gl.stencilOpSeparate(GL.BACK, backSfail, backDpfail, backDppass);
286
304
  },
287
305
 
288
- viewport: (gl, value) => gl.viewport(...value)
306
+ viewport: (gl: WebGLRenderingContext, value: [number, number, number, number]) => gl.viewport(...value)
289
307
  };
290
308
 
291
309
  function getValue(glEnum, values, cache) {
@@ -294,50 +312,50 @@ function getValue(glEnum, values, cache) {
294
312
 
295
313
  // COMPOSITE_WEBGL_PARAMETER_
296
314
  export const GL_COMPOSITE_PARAMETER_SETTERS = {
297
- blendEquation: (gl, values, cache) =>
315
+ blendEquation: (gl: WebGLRenderingContext, values, cache) =>
298
316
  gl.blendEquationSeparate(
299
317
  getValue(GL.BLEND_EQUATION_RGB, values, cache),
300
318
  getValue(GL.BLEND_EQUATION_ALPHA, values, cache)
301
319
  ),
302
- blendFunc: (gl, values, cache) =>
320
+ blendFunc: (gl: WebGLRenderingContext, values, cache) =>
303
321
  gl.blendFuncSeparate(
304
322
  getValue(GL.BLEND_SRC_RGB, values, cache),
305
323
  getValue(GL.BLEND_DST_RGB, values, cache),
306
324
  getValue(GL.BLEND_SRC_ALPHA, values, cache),
307
325
  getValue(GL.BLEND_DST_ALPHA, values, cache)
308
326
  ),
309
- polygonOffset: (gl, values, cache) =>
327
+ polygonOffset: (gl: WebGLRenderingContext, values, cache) =>
310
328
  gl.polygonOffset(
311
329
  getValue(GL.POLYGON_OFFSET_FACTOR, values, cache),
312
330
  getValue(GL.POLYGON_OFFSET_UNITS, values, cache)
313
331
  ),
314
- sampleCoverage: (gl, values, cache) =>
332
+ sampleCoverage: (gl: WebGLRenderingContext, values, cache) =>
315
333
  gl.sampleCoverage(
316
334
  getValue(GL.SAMPLE_COVERAGE_VALUE, values, cache),
317
335
  getValue(GL.SAMPLE_COVERAGE_INVERT, values, cache)
318
336
  ),
319
- stencilFuncFront: (gl, values, cache) =>
337
+ stencilFuncFront: (gl: WebGLRenderingContext, values, cache) =>
320
338
  gl.stencilFuncSeparate(
321
339
  GL.FRONT,
322
340
  getValue(GL.STENCIL_FUNC, values, cache),
323
341
  getValue(GL.STENCIL_REF, values, cache),
324
342
  getValue(GL.STENCIL_VALUE_MASK, values, cache)
325
343
  ),
326
- stencilFuncBack: (gl, values, cache) =>
344
+ stencilFuncBack: (gl: WebGLRenderingContext, values, cache) =>
327
345
  gl.stencilFuncSeparate(
328
346
  GL.BACK,
329
347
  getValue(GL.STENCIL_BACK_FUNC, values, cache),
330
348
  getValue(GL.STENCIL_BACK_REF, values, cache),
331
349
  getValue(GL.STENCIL_BACK_VALUE_MASK, values, cache)
332
350
  ),
333
- stencilOpFront: (gl, values, cache) =>
351
+ stencilOpFront: (gl: WebGLRenderingContext, values, cache) =>
334
352
  gl.stencilOpSeparate(
335
353
  GL.FRONT,
336
354
  getValue(GL.STENCIL_FAIL, values, cache),
337
355
  getValue(GL.STENCIL_PASS_DEPTH_FAIL, values, cache),
338
356
  getValue(GL.STENCIL_PASS_DEPTH_PASS, values, cache)
339
357
  ),
340
- stencilOpBack: (gl, values, cache) =>
358
+ stencilOpBack: (gl: WebGLRenderingContext, values, cache) =>
341
359
  gl.stencilOpSeparate(
342
360
  GL.BACK,
343
361
  getValue(GL.STENCIL_BACK_FAIL, values, cache),
@@ -352,36 +370,40 @@ type UpdateFunc = (params: Record<string, any>) => void;
352
370
  export const GL_HOOKED_SETTERS = {
353
371
  // GENERIC SETTERS
354
372
 
355
- enable: (update: UpdateFunc, capability) =>
373
+ enable: (update: UpdateFunc, capability: GL) =>
356
374
  update({
357
375
  [capability]: true
358
376
  }),
359
- disable: (update: UpdateFunc, capability) =>
377
+ disable: (update: UpdateFunc, capability: GL) =>
360
378
  update({
361
379
  [capability]: false
362
380
  }),
363
- pixelStorei: (update: UpdateFunc, pname, value) =>
381
+ pixelStorei: (update: UpdateFunc, pname: GL, value) =>
364
382
  update({
365
383
  [pname]: value
366
384
  }),
367
- hint: (update: UpdateFunc, pname, hint) =>
385
+ hint: (update: UpdateFunc, pname: GL, hint: GL) =>
368
386
  update({
369
387
  [pname]: hint
370
388
  }),
371
389
 
372
390
  // 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
- }),
391
+ useProgram: (update: UpdateFunc, value) =>
392
+ update({
393
+ [GL.CURRENT_PROGRAM]: value
394
+ }),
395
+ bindRenderbuffer: (update: UpdateFunc, target, value) =>
396
+ update({
397
+ [GL.RENDERBUFFER_BINDING]: value
398
+ }),
399
+ bindTransformFeedback: (update: UpdateFunc, target, value) =>
400
+ update({
401
+ [GL.TRANSFORM_FEEDBACK_BINDING]: value
402
+ }),
403
+ bindVertexArray: (update: UpdateFunc, value) =>
404
+ update({
405
+ [GL.VERTEX_ARRAY_BINDING]: value
406
+ }),
385
407
 
386
408
  bindFramebuffer: (update: UpdateFunc, target, framebuffer) => {
387
409
  switch (target) {
@@ -399,13 +421,13 @@ export const GL_HOOKED_SETTERS = {
399
421
  }
400
422
  },
401
423
  bindBuffer: (update: UpdateFunc, target, buffer) => {
402
- const pname = ({
424
+ const pname = {
403
425
  [GL.ARRAY_BUFFER]: [GL.ARRAY_BUFFER_BINDING],
404
426
  [GL.COPY_READ_BUFFER]: [GL.COPY_READ_BUFFER_BINDING],
405
427
  [GL.COPY_WRITE_BUFFER]: [GL.COPY_WRITE_BUFFER_BINDING],
406
428
  [GL.PIXEL_PACK_BUFFER]: [GL.PIXEL_PACK_BUFFER_BINDING],
407
429
  [GL.PIXEL_UNPACK_BUFFER]: [GL.PIXEL_UNPACK_BUFFER_BINDING]
408
- })[target];
430
+ }[target];
409
431
 
410
432
  if (pname) {
411
433
  return update({[pname]: buffer});
@@ -567,7 +589,7 @@ export const GL_HOOKED_SETTERS = {
567
589
 
568
590
  // GETTER TABLE - FOR READING OUT AN ENTIRE CONTEXT
569
591
 
570
- const isEnabled = (gl, key) => gl.isEnabled(key);
592
+ const isEnabled = (gl: WebGLRenderingContext, key) => gl.isEnabled(key);
571
593
 
572
594
  // Exceptions for any keys that cannot be queried by gl.getParameters
573
595
  export const GL_PARAMETER_GETTERS = {
@@ -0,0 +1,30 @@
1
+ // luma.gl, MIT license
2
+ // Copyright (c) vis.gl contributors
3
+
4
+ /**
5
+ * Stores luma.gl specific state associated with a context
6
+ */
7
+ export interface WebGLContextData {
8
+ _polyfilled: boolean;
9
+ _extensions: Record<string, any>;
10
+ }
11
+
12
+ /**
13
+ * Gets luma.gl specific state from a context
14
+ * @returns context state
15
+ */
16
+ export function getContextData(gl: WebGLRenderingContext): WebGLContextData {
17
+ // @ts-expect-error
18
+ const luma = gl.luma as WebGLContextData | null;
19
+ if (!luma) {
20
+ const contextState: WebGLContextData = {
21
+ _polyfilled: false,
22
+ _extensions: {}
23
+ };
24
+ // @ts-expect-error
25
+ gl.luma = contextState;
26
+ }
27
+
28
+ // @ts-expect-error
29
+ return gl.luma;
30
+ }