@luma.gl/webgl 9.0.0-beta.1 → 9.0.0-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (285) hide show
  1. package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
  2. package/dist/adapter/converters/device-parameters.js +295 -156
  3. package/dist/adapter/converters/sampler-parameters.d.ts +0 -4
  4. package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
  5. package/dist/adapter/converters/sampler-parameters.js +73 -67
  6. package/dist/adapter/converters/shader-formats.d.ts.map +1 -1
  7. package/dist/adapter/converters/shader-formats.js +53 -46
  8. package/dist/adapter/converters/texture-formats.d.ts +17 -21
  9. package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
  10. package/dist/adapter/converters/texture-formats.js +481 -879
  11. package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
  12. package/dist/adapter/converters/vertex-formats.js +53 -61
  13. package/dist/adapter/device-helpers/webgl-device-features.d.ts +20 -0
  14. package/dist/adapter/device-helpers/webgl-device-features.d.ts.map +1 -0
  15. package/dist/adapter/device-helpers/webgl-device-features.js +98 -0
  16. package/dist/adapter/device-helpers/webgl-device-info.d.ts +5 -0
  17. package/dist/adapter/device-helpers/webgl-device-info.d.ts.map +1 -0
  18. package/dist/adapter/device-helpers/webgl-device-info.js +90 -0
  19. package/dist/adapter/device-helpers/webgl-device-limits.d.ts +35 -0
  20. package/dist/adapter/device-helpers/webgl-device-limits.d.ts.map +1 -0
  21. package/dist/adapter/device-helpers/webgl-device-limits.js +47 -0
  22. package/dist/adapter/helpers/decode-webgl-types.d.ts.map +1 -1
  23. package/dist/adapter/helpers/decode-webgl-types.js +88 -76
  24. package/dist/adapter/helpers/get-shader-layout.d.ts +1 -1
  25. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
  26. package/dist/adapter/helpers/get-shader-layout.js +261 -225
  27. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
  28. package/dist/adapter/helpers/parse-shader-compiler-log.js +47 -37
  29. package/dist/adapter/helpers/set-uniform.d.ts +1 -1
  30. package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
  31. package/dist/adapter/helpers/set-uniform.js +68 -82
  32. package/dist/adapter/helpers/webgl-topology-utils.d.ts.map +1 -1
  33. package/dist/adapter/helpers/webgl-topology-utils.js +78 -93
  34. package/dist/adapter/objects/constants-to-keys.d.ts +1 -1
  35. package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
  36. package/dist/adapter/objects/constants-to-keys.js +19 -12
  37. package/dist/adapter/objects/webgl-renderbuffer.d.ts +2 -2
  38. package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
  39. package/dist/adapter/objects/webgl-renderbuffer.js +86 -77
  40. package/dist/adapter/objects/webgl-resource.d.ts +3 -25
  41. package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
  42. package/dist/adapter/objects/webgl-resource.js +102 -147
  43. package/dist/adapter/resources/webgl-buffer.d.ts +3 -4
  44. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  45. package/dist/adapter/resources/webgl-buffer.js +159 -117
  46. package/dist/adapter/resources/webgl-command-buffer.d.ts +1 -1
  47. package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
  48. package/dist/adapter/resources/webgl-command-buffer.js +266 -168
  49. package/dist/adapter/resources/webgl-command-encoder.d.ts +8 -3
  50. package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
  51. package/dist/adapter/resources/webgl-command-encoder.js +33 -39
  52. package/dist/adapter/resources/webgl-external-texture.js +93 -1
  53. package/dist/adapter/resources/webgl-framebuffer.d.ts +8 -12
  54. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  55. package/dist/adapter/resources/webgl-framebuffer.js +174 -139
  56. package/dist/adapter/resources/webgl-query-set.d.ts +44 -0
  57. package/dist/adapter/resources/webgl-query-set.d.ts.map +1 -0
  58. package/dist/adapter/resources/webgl-query-set.js +136 -0
  59. package/dist/adapter/resources/webgl-render-pass.d.ts +3 -1
  60. package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
  61. package/dist/adapter/resources/webgl-render-pass.js +124 -90
  62. package/dist/adapter/resources/webgl-render-pipeline.d.ts +15 -6
  63. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  64. package/dist/adapter/resources/webgl-render-pipeline.js +362 -221
  65. package/dist/adapter/resources/webgl-sampler.d.ts +1 -3
  66. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
  67. package/dist/adapter/resources/webgl-sampler.js +43 -33
  68. package/dist/adapter/resources/webgl-shader.d.ts +12 -2
  69. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  70. package/dist/adapter/resources/webgl-shader.js +114 -47
  71. package/dist/adapter/resources/webgl-texture-view.d.ts +14 -0
  72. package/dist/adapter/resources/webgl-texture-view.d.ts.map +1 -0
  73. package/dist/adapter/resources/webgl-texture-view.js +18 -0
  74. package/dist/adapter/resources/webgl-texture.d.ts +8 -10
  75. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  76. package/dist/adapter/resources/webgl-texture.js +616 -694
  77. package/dist/adapter/resources/webgl-transform-feedback.d.ts +2 -2
  78. package/dist/adapter/resources/webgl-transform-feedback.d.ts.map +1 -1
  79. package/dist/adapter/resources/webgl-transform-feedback.js +141 -143
  80. package/dist/adapter/resources/webgl-vertex-array.d.ts +3 -3
  81. package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -1
  82. package/dist/adapter/resources/webgl-vertex-array.js +229 -157
  83. package/dist/adapter/webgl-canvas-context.d.ts +2 -2
  84. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
  85. package/dist/adapter/webgl-canvas-context.js +58 -36
  86. package/dist/adapter/webgl-device.d.ts +50 -44
  87. package/dist/adapter/webgl-device.d.ts.map +1 -1
  88. package/dist/adapter/webgl-device.js +427 -352
  89. package/dist/classic/accessor.d.ts.map +1 -1
  90. package/dist/classic/accessor.js +132 -101
  91. package/dist/classic/clear.d.ts +2 -2
  92. package/dist/classic/clear.d.ts.map +1 -1
  93. package/dist/classic/clear.js +73 -72
  94. package/dist/classic/copy-and-blit.d.ts +1 -1
  95. package/dist/classic/copy-and-blit.d.ts.map +1 -1
  96. package/dist/classic/copy-and-blit.js +174 -175
  97. package/dist/classic/format-utils.d.ts +2 -2
  98. package/dist/classic/format-utils.d.ts.map +1 -1
  99. package/dist/classic/format-utils.js +39 -32
  100. package/dist/classic/typed-array-utils.d.ts.map +1 -1
  101. package/dist/classic/typed-array-utils.js +96 -81
  102. package/dist/context/debug/spector.d.ts.map +1 -1
  103. package/dist/context/debug/spector.js +55 -50
  104. package/dist/context/debug/webgl-developer-tools.d.ts +1 -2
  105. package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
  106. package/dist/context/debug/webgl-developer-tools.js +104 -77
  107. package/dist/context/{context → helpers}/create-browser-context.d.ts +1 -6
  108. package/dist/context/helpers/create-browser-context.d.ts.map +1 -0
  109. package/dist/context/helpers/create-browser-context.js +67 -0
  110. package/dist/context/{polyfill/context-data.d.ts → helpers/webgl-context-data.d.ts} +2 -2
  111. package/dist/context/helpers/webgl-context-data.d.ts.map +1 -0
  112. package/dist/context/helpers/webgl-context-data.js +21 -0
  113. package/dist/context/helpers/webgl-extensions.d.ts +4 -0
  114. package/dist/context/helpers/webgl-extensions.d.ts.map +1 -0
  115. package/dist/context/helpers/webgl-extensions.js +10 -0
  116. package/dist/context/parameters/unified-parameter-api.d.ts +3 -4
  117. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  118. package/dist/context/parameters/unified-parameter-api.js +92 -47
  119. package/dist/context/parameters/webgl-parameter-tables.d.ts +109 -99
  120. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  121. package/dist/context/parameters/webgl-parameter-tables.js +463 -404
  122. package/dist/context/state-tracker/deep-array-equal.d.ts.map +1 -1
  123. package/dist/context/state-tracker/deep-array-equal.js +19 -14
  124. package/dist/context/state-tracker/track-context-state.d.ts +4 -4
  125. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
  126. package/dist/context/state-tracker/track-context-state.js +188 -123
  127. package/dist/context/state-tracker/with-parameters.d.ts +2 -3
  128. package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
  129. package/dist/context/state-tracker/with-parameters.js +42 -28
  130. package/dist/dist.dev.js +4465 -7235
  131. package/dist/dist.min.js +10 -0
  132. package/dist/index.cjs +2146 -3116
  133. package/dist/index.cjs.map +7 -0
  134. package/dist/index.d.ts +25 -31
  135. package/dist/index.d.ts.map +1 -1
  136. package/dist/index.js +19 -10
  137. package/dist/types.d.ts.map +1 -1
  138. package/dist/types.js +3 -1
  139. package/dist.min.js +9 -42
  140. package/package.json +10 -15
  141. package/src/adapter/converters/device-parameters.ts +114 -28
  142. package/src/adapter/converters/sampler-parameters.ts +12 -20
  143. package/src/adapter/converters/shader-formats.ts +47 -22
  144. package/src/adapter/converters/texture-formats.ts +183 -227
  145. package/src/adapter/converters/vertex-formats.ts +3 -3
  146. package/src/adapter/device-helpers/webgl-device-features.ts +121 -0
  147. package/src/adapter/device-helpers/{get-device-info.ts → webgl-device-info.ts} +30 -22
  148. package/src/adapter/device-helpers/webgl-device-limits.ts +53 -0
  149. package/src/adapter/helpers/decode-webgl-types.ts +13 -7
  150. package/src/adapter/helpers/get-shader-layout.ts +21 -31
  151. package/src/adapter/helpers/parse-shader-compiler-log.ts +10 -6
  152. package/src/adapter/helpers/set-uniform.ts +3 -4
  153. package/src/adapter/helpers/webgl-topology-utils.ts +10 -3
  154. package/src/adapter/objects/constants-to-keys.ts +3 -2
  155. package/src/adapter/objects/webgl-renderbuffer.ts +38 -16
  156. package/src/adapter/objects/webgl-resource.ts +8 -141
  157. package/src/adapter/resources/webgl-buffer.ts +10 -14
  158. package/src/adapter/resources/webgl-command-buffer.ts +24 -34
  159. package/src/adapter/resources/webgl-command-encoder.ts +14 -11
  160. package/src/adapter/resources/webgl-external-texture.ts +7 -7
  161. package/src/adapter/resources/webgl-framebuffer.ts +65 -58
  162. package/src/adapter/resources/webgl-query-set.ts +171 -0
  163. package/src/adapter/resources/webgl-render-pass.ts +27 -18
  164. package/src/adapter/resources/webgl-render-pipeline.ts +148 -73
  165. package/src/adapter/resources/webgl-sampler.ts +7 -10
  166. package/src/adapter/resources/webgl-shader.ts +65 -11
  167. package/src/adapter/resources/webgl-texture-view.ts +28 -0
  168. package/src/adapter/resources/webgl-texture.ts +43 -106
  169. package/src/adapter/resources/webgl-transform-feedback.ts +16 -22
  170. package/src/adapter/resources/webgl-vertex-array.ts +20 -21
  171. package/src/adapter/webgl-canvas-context.ts +7 -11
  172. package/src/adapter/webgl-device.ts +142 -162
  173. package/src/classic/accessor.ts +5 -4
  174. package/src/classic/clear.ts +25 -20
  175. package/src/classic/copy-and-blit.ts +12 -6
  176. package/src/classic/format-utils.ts +2 -1
  177. package/src/classic/typed-array-utils.ts +3 -7
  178. package/src/context/debug/spector.ts +9 -6
  179. package/src/context/debug/webgl-developer-tools.ts +31 -20
  180. package/src/context/{context → helpers}/create-browser-context.ts +9 -33
  181. package/src/context/{polyfill/context-data.ts → helpers/webgl-context-data.ts} +3 -2
  182. package/src/context/helpers/webgl-extensions.ts +17 -0
  183. package/src/context/parameters/unified-parameter-api.ts +6 -17
  184. package/src/context/parameters/webgl-parameter-tables.ts +118 -90
  185. package/src/context/state-tracker/deep-array-equal.ts +2 -1
  186. package/src/context/state-tracker/track-context-state.ts +29 -23
  187. package/src/context/state-tracker/with-parameters.ts +8 -8
  188. package/src/index.ts +16 -56
  189. package/src/types.ts +2 -1
  190. package/dist/adapter/converters/device-parameters.js.map +0 -1
  191. package/dist/adapter/converters/sampler-parameters.js.map +0 -1
  192. package/dist/adapter/converters/shader-formats.js.map +0 -1
  193. package/dist/adapter/converters/texture-formats.js.map +0 -1
  194. package/dist/adapter/converters/vertex-formats.js.map +0 -1
  195. package/dist/adapter/device-helpers/device-features.d.ts +0 -9
  196. package/dist/adapter/device-helpers/device-features.d.ts.map +0 -1
  197. package/dist/adapter/device-helpers/device-features.js +0 -96
  198. package/dist/adapter/device-helpers/device-features.js.map +0 -1
  199. package/dist/adapter/device-helpers/device-limits.d.ts +0 -52
  200. package/dist/adapter/device-helpers/device-limits.d.ts.map +0 -1
  201. package/dist/adapter/device-helpers/device-limits.js +0 -87
  202. package/dist/adapter/device-helpers/device-limits.js.map +0 -1
  203. package/dist/adapter/device-helpers/get-device-info.d.ts +0 -4
  204. package/dist/adapter/device-helpers/get-device-info.d.ts.map +0 -1
  205. package/dist/adapter/device-helpers/get-device-info.js +0 -71
  206. package/dist/adapter/device-helpers/get-device-info.js.map +0 -1
  207. package/dist/adapter/device-helpers/is-old-ie.d.ts +0 -2
  208. package/dist/adapter/device-helpers/is-old-ie.d.ts.map +0 -1
  209. package/dist/adapter/device-helpers/is-old-ie.js +0 -9
  210. package/dist/adapter/device-helpers/is-old-ie.js.map +0 -1
  211. package/dist/adapter/helpers/decode-webgl-types.js.map +0 -1
  212. package/dist/adapter/helpers/get-shader-layout.js.map +0 -1
  213. package/dist/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  214. package/dist/adapter/helpers/set-uniform.js.map +0 -1
  215. package/dist/adapter/helpers/webgl-topology-utils.js.map +0 -1
  216. package/dist/adapter/objects/constants-to-keys.js.map +0 -1
  217. package/dist/adapter/objects/webgl-renderbuffer.js.map +0 -1
  218. package/dist/adapter/objects/webgl-resource.js.map +0 -1
  219. package/dist/adapter/resources/webgl-buffer.js.map +0 -1
  220. package/dist/adapter/resources/webgl-command-buffer.js.map +0 -1
  221. package/dist/adapter/resources/webgl-command-encoder.js.map +0 -1
  222. package/dist/adapter/resources/webgl-external-texture.js.map +0 -1
  223. package/dist/adapter/resources/webgl-framebuffer.js.map +0 -1
  224. package/dist/adapter/resources/webgl-render-pass.js.map +0 -1
  225. package/dist/adapter/resources/webgl-render-pipeline.js.map +0 -1
  226. package/dist/adapter/resources/webgl-sampler.js.map +0 -1
  227. package/dist/adapter/resources/webgl-shader.js.map +0 -1
  228. package/dist/adapter/resources/webgl-texture.js.map +0 -1
  229. package/dist/adapter/resources/webgl-transform-feedback.js.map +0 -1
  230. package/dist/adapter/resources/webgl-vertex-array.js.map +0 -1
  231. package/dist/adapter/webgl-canvas-context.js.map +0 -1
  232. package/dist/adapter/webgl-device.js.map +0 -1
  233. package/dist/classic/accessor.js.map +0 -1
  234. package/dist/classic/clear.js.map +0 -1
  235. package/dist/classic/copy-and-blit.js.map +0 -1
  236. package/dist/classic/format-utils.js.map +0 -1
  237. package/dist/classic/typed-array-utils.js.map +0 -1
  238. package/dist/context/context/create-browser-context.d.ts.map +0 -1
  239. package/dist/context/context/create-browser-context.js +0 -53
  240. package/dist/context/context/create-browser-context.js.map +0 -1
  241. package/dist/context/context/create-headless-context.d.ts +0 -9
  242. package/dist/context/context/create-headless-context.d.ts.map +0 -1
  243. package/dist/context/context/create-headless-context.js +0 -42
  244. package/dist/context/context/create-headless-context.js.map +0 -1
  245. package/dist/context/context/webgl-checks.d.ts +0 -13
  246. package/dist/context/context/webgl-checks.d.ts.map +0 -1
  247. package/dist/context/context/webgl-checks.js +0 -31
  248. package/dist/context/context/webgl-checks.js.map +0 -1
  249. package/dist/context/debug/spector.js.map +0 -1
  250. package/dist/context/debug/webgl-developer-tools.js.map +0 -1
  251. package/dist/context/parameters/unified-parameter-api.js.map +0 -1
  252. package/dist/context/parameters/webgl-parameter-tables.js.map +0 -1
  253. package/dist/context/polyfill/context-data.d.ts.map +0 -1
  254. package/dist/context/polyfill/context-data.js +0 -12
  255. package/dist/context/polyfill/context-data.js.map +0 -1
  256. package/dist/context/polyfill/get-parameter-polyfill.d.ts +0 -2
  257. package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +0 -1
  258. package/dist/context/polyfill/get-parameter-polyfill.js +0 -85
  259. package/dist/context/polyfill/get-parameter-polyfill.js.map +0 -1
  260. package/dist/context/polyfill/polyfill-context.d.ts +0 -5
  261. package/dist/context/polyfill/polyfill-context.d.ts.map +0 -1
  262. package/dist/context/polyfill/polyfill-context.js +0 -87
  263. package/dist/context/polyfill/polyfill-context.js.map +0 -1
  264. package/dist/context/polyfill/polyfill-table.d.ts +0 -48
  265. package/dist/context/polyfill/polyfill-table.d.ts.map +0 -1
  266. package/dist/context/polyfill/polyfill-table.js +0 -137
  267. package/dist/context/polyfill/polyfill-table.js.map +0 -1
  268. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts +0 -2
  269. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +0 -1
  270. package/dist/context/polyfill/polyfill-vertex-array-object.js +0 -265
  271. package/dist/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  272. package/dist/context/state-tracker/deep-array-equal.js.map +0 -1
  273. package/dist/context/state-tracker/track-context-state.js.map +0 -1
  274. package/dist/context/state-tracker/with-parameters.js.map +0 -1
  275. package/dist/index.js.map +0 -1
  276. package/dist/types.js.map +0 -1
  277. package/src/adapter/device-helpers/device-features.ts +0 -161
  278. package/src/adapter/device-helpers/device-limits.ts +0 -155
  279. package/src/adapter/device-helpers/is-old-ie.ts +0 -14
  280. package/src/context/context/create-headless-context.ts +0 -51
  281. package/src/context/context/webgl-checks.ts +0 -51
  282. package/src/context/polyfill/get-parameter-polyfill.ts +0 -122
  283. package/src/context/polyfill/polyfill-context.ts +0 -104
  284. package/src/context/polyfill/polyfill-table.ts +0 -167
  285. package/src/context/polyfill/polyfill-vertex-array-object.ts +0 -365
@@ -1,9 +1,9 @@
1
- // luma.gl, MIT license
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
2
3
  // Copyright (c) vis.gl contributors
3
4
 
4
5
  // Tables describing WebGL parameters
5
6
  import {GL, GLParameters} from '@luma.gl/constants';
6
- import {isWebGL2} from '../context/webgl-checks';
7
7
 
8
8
  // DEFAULT SETTINGS - FOR FAST CACHE INITIALIZATION AND CONTEXT RESETS
9
9
 
@@ -65,15 +65,7 @@ export const GL_PARAMETER_DEFAULTS: GLParameters = {
65
65
  [GL.STENCIL_BACK_PASS_DEPTH_PASS]: GL.KEEP,
66
66
  // Dynamic value: We use [0, 0, 1024, 1024] as default, but usually this is updated in each frame.
67
67
  [GL.VIEWPORT]: [0, 0, 1024, 1024],
68
- // WEBGL1 PIXEL PACK/UNPACK MODES
69
- [GL.PACK_ALIGNMENT]: 4,
70
- [GL.UNPACK_ALIGNMENT]: 4,
71
- [GL.UNPACK_FLIP_Y_WEBGL]: false,
72
- [GL.UNPACK_PREMULTIPLY_ALPHA_WEBGL]: false,
73
- [GL.UNPACK_COLORSPACE_CONVERSION_WEBGL]: GL.BROWSER_DEFAULT_WEBGL,
74
68
 
75
- // WEBGL2 / EXTENSIONS
76
- // gl1: 'OES_standard_derivatives'
77
69
  [GL.TRANSFORM_FEEDBACK_BINDING]: null,
78
70
  [GL.COPY_READ_BUFFER_BINDING]: null,
79
71
  [GL.COPY_WRITE_BUFFER_BINDING]: null,
@@ -82,6 +74,12 @@ export const GL_PARAMETER_DEFAULTS: GLParameters = {
82
74
  [GL.FRAGMENT_SHADER_DERIVATIVE_HINT]: GL.DONT_CARE,
83
75
  [GL.READ_FRAMEBUFFER_BINDING]: null,
84
76
  [GL.RASTERIZER_DISCARD]: false,
77
+
78
+ [GL.PACK_ALIGNMENT]: 4,
79
+ [GL.UNPACK_ALIGNMENT]: 4,
80
+ [GL.UNPACK_FLIP_Y_WEBGL]: false,
81
+ [GL.UNPACK_PREMULTIPLY_ALPHA_WEBGL]: false,
82
+ [GL.UNPACK_COLORSPACE_CONVERSION_WEBGL]: GL.BROWSER_DEFAULT_WEBGL,
85
83
  [GL.PACK_ROW_LENGTH]: 0,
86
84
  [GL.PACK_SKIP_PIXELS]: 0,
87
85
  [GL.PACK_SKIP_ROWS]: 0,
@@ -94,24 +92,18 @@ export const GL_PARAMETER_DEFAULTS: GLParameters = {
94
92
 
95
93
  // SETTER TABLES - ENABLES SETTING ANY PARAMETER WITH A COMMON API
96
94
 
97
- const enable = (gl: WebGLRenderingContext, value: unknown, key: GL) =>
95
+ const enable = (gl: WebGL2RenderingContext, value: unknown, key: GL) =>
98
96
  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) =>
97
+ const hint = (gl: WebGL2RenderingContext, value: GL, key: GL) => gl.hint(key, value);
98
+ const pixelStorei = (gl: WebGL2RenderingContext, value: number | boolean, key: GL) =>
101
99
  gl.pixelStorei(key, value);
102
100
 
103
- const bindFramebuffer = (gl: WebGLRenderingContext, value: unknown, key: GL) => {
104
- let target;
105
- if (key === GL.FRAMEBUFFER_BINDING) {
106
- target = isWebGL2(gl) ? GL.DRAW_FRAMEBUFFER : GL.FRAMEBUFFER;
107
- } else {
108
- // GL.READ_FRAMEBUFFER_BINDING
109
- target = GL.READ_FRAMEBUFFER;
110
- }
101
+ const bindFramebuffer = (gl: WebGL2RenderingContext, value: unknown, key: GL) => {
102
+ const target = key === GL.FRAMEBUFFER_BINDING ? GL.DRAW_FRAMEBUFFER : GL.READ_FRAMEBUFFER;
111
103
  return gl.bindFramebuffer(target, value);
112
104
  };
113
105
 
114
- const bindBuffer = (gl: WebGLRenderingContext, value: unknown, key: GL) => {
106
+ const bindBuffer = (gl: WebGL2RenderingContext, value: unknown, key: GL) => {
115
107
  const bindingMap: Partial<Record<GL, GL>> = {
116
108
  [GL.ARRAY_BUFFER_BINDING]: GL.ARRAY_BUFFER,
117
109
  [GL.COPY_READ_BUFFER_BINDING]: GL.COPY_READ_BUFFER,
@@ -134,7 +126,7 @@ function isArray(array: unknown): boolean {
134
126
  // NOTE: When value type is a string, it will be handled by 'GL_COMPOSITE_PARAMETER_SETTERS'
135
127
  export const GL_PARAMETER_SETTERS = {
136
128
  [GL.BLEND]: enable,
137
- [GL.BLEND_COLOR]: (gl: WebGLRenderingContext, value: [number, number, number, number]) =>
129
+ [GL.BLEND_COLOR]: (gl: WebGL2RenderingContext, value: [number, number, number, number]) =>
138
130
  gl.blendColor(...value),
139
131
  [GL.BLEND_EQUATION_RGB]: 'blendEquation',
140
132
  [GL.BLEND_EQUATION_ALPHA]: 'blendEquation',
@@ -142,26 +134,27 @@ export const GL_PARAMETER_SETTERS = {
142
134
  [GL.BLEND_DST_RGB]: 'blendFunc',
143
135
  [GL.BLEND_SRC_ALPHA]: 'blendFunc',
144
136
  [GL.BLEND_DST_ALPHA]: 'blendFunc',
145
- [GL.COLOR_CLEAR_VALUE]: (gl: WebGLRenderingContext, value: [number, number, number, number]) =>
137
+ [GL.COLOR_CLEAR_VALUE]: (gl: WebGL2RenderingContext, value: [number, number, number, number]) =>
146
138
  gl.clearColor(...value),
147
- [GL.COLOR_WRITEMASK]: (gl: WebGLRenderingContext, value: [boolean, boolean, boolean, boolean]) => gl.colorMask(...value),
139
+ [GL.COLOR_WRITEMASK]: (gl: WebGL2RenderingContext, value: [boolean, boolean, boolean, boolean]) =>
140
+ gl.colorMask(...value),
148
141
  [GL.CULL_FACE]: enable,
149
- [GL.CULL_FACE_MODE]: (gl: WebGLRenderingContext, value) => gl.cullFace(value),
142
+ [GL.CULL_FACE_MODE]: (gl: WebGL2RenderingContext, value) => gl.cullFace(value),
150
143
  [GL.DEPTH_TEST]: enable,
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),
144
+ [GL.DEPTH_CLEAR_VALUE]: (gl: WebGL2RenderingContext, value) => gl.clearDepth(value),
145
+ [GL.DEPTH_FUNC]: (gl: WebGL2RenderingContext, value) => gl.depthFunc(value),
146
+ [GL.DEPTH_RANGE]: (gl: WebGL2RenderingContext, value: [number, number]) =>
147
+ gl.depthRange(...value),
148
+ [GL.DEPTH_WRITEMASK]: (gl: WebGL2RenderingContext, value) => gl.depthMask(value),
155
149
  [GL.DITHER]: enable,
156
150
  [GL.FRAGMENT_SHADER_DERIVATIVE_HINT]: hint,
157
151
 
158
- [GL.CURRENT_PROGRAM]: (gl: WebGLRenderingContext, value) => gl.useProgram(value),
159
- [GL.RENDERBUFFER_BINDING]: (gl: WebGLRenderingContext, value) =>
152
+ [GL.CURRENT_PROGRAM]: (gl: WebGL2RenderingContext, value) => gl.useProgram(value),
153
+ [GL.RENDERBUFFER_BINDING]: (gl: WebGL2RenderingContext, value) =>
160
154
  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),
155
+ [GL.TRANSFORM_FEEDBACK_BINDING]: (gl: WebGL2RenderingContext, value) =>
156
+ gl.bindTransformFeedback?.(GL.TRANSFORM_FEEDBACK, value),
157
+ [GL.VERTEX_ARRAY_BINDING]: (gl: WebGL2RenderingContext, value) => gl.bindVertexArray(value),
165
158
  // NOTE: FRAMEBUFFER_BINDING and DRAW_FRAMEBUFFER_BINDING(WebGL2) refer same state.
166
159
  [GL.FRAMEBUFFER_BINDING]: bindFramebuffer,
167
160
  [GL.READ_FRAMEBUFFER_BINDING]: bindFramebuffer,
@@ -173,9 +166,9 @@ export const GL_PARAMETER_SETTERS = {
173
166
  [GL.PIXEL_PACK_BUFFER_BINDING]: bindBuffer,
174
167
  [GL.PIXEL_UNPACK_BUFFER_BINDING]: bindBuffer,
175
168
 
176
- [GL.FRONT_FACE]: (gl: WebGLRenderingContext, value) => gl.frontFace(value),
169
+ [GL.FRONT_FACE]: (gl: WebGL2RenderingContext, value) => gl.frontFace(value),
177
170
  [GL.GENERATE_MIPMAP_HINT]: hint,
178
- [GL.LINE_WIDTH]: (gl: WebGLRenderingContext, value) => gl.lineWidth(value),
171
+ [GL.LINE_WIDTH]: (gl: WebGL2RenderingContext, value) => gl.lineWidth(value),
179
172
  [GL.POLYGON_OFFSET_FILL]: enable,
180
173
  [GL.POLYGON_OFFSET_FACTOR]: 'polygonOffset',
181
174
  [GL.POLYGON_OFFSET_UNITS]: 'polygonOffset',
@@ -185,12 +178,13 @@ export const GL_PARAMETER_SETTERS = {
185
178
  [GL.SAMPLE_COVERAGE_VALUE]: 'sampleCoverage',
186
179
  [GL.SAMPLE_COVERAGE_INVERT]: 'sampleCoverage',
187
180
  [GL.SCISSOR_TEST]: enable,
188
- [GL.SCISSOR_BOX]: (gl: WebGLRenderingContext, value: [number, number, number, number]) => gl.scissor(...value),
181
+ [GL.SCISSOR_BOX]: (gl: WebGL2RenderingContext, value: [number, number, number, number]) =>
182
+ gl.scissor(...value),
189
183
  [GL.STENCIL_TEST]: enable,
190
- [GL.STENCIL_CLEAR_VALUE]: (gl: WebGLRenderingContext, value) => gl.clearStencil(value),
191
- [GL.STENCIL_WRITEMASK]: (gl: WebGLRenderingContext, value) =>
184
+ [GL.STENCIL_CLEAR_VALUE]: (gl: WebGL2RenderingContext, value) => gl.clearStencil(value),
185
+ [GL.STENCIL_WRITEMASK]: (gl: WebGL2RenderingContext, value) =>
192
186
  gl.stencilMaskSeparate(GL.FRONT, value),
193
- [GL.STENCIL_BACK_WRITEMASK]: (gl: WebGLRenderingContext, value) =>
187
+ [GL.STENCIL_BACK_WRITEMASK]: (gl: WebGL2RenderingContext, value) =>
194
188
  gl.stencilMaskSeparate(GL.BACK, value),
195
189
  [GL.STENCIL_FUNC]: 'stencilFuncFront',
196
190
  [GL.STENCIL_REF]: 'stencilFuncFront',
@@ -204,17 +198,41 @@ export const GL_PARAMETER_SETTERS = {
204
198
  [GL.STENCIL_BACK_FAIL]: 'stencilOpBack',
205
199
  [GL.STENCIL_BACK_PASS_DEPTH_FAIL]: 'stencilOpBack',
206
200
  [GL.STENCIL_BACK_PASS_DEPTH_PASS]: 'stencilOpBack',
207
- [GL.VIEWPORT]: (gl: WebGLRenderingContext, value: [number, number, number, number]) => gl.viewport(...value),
201
+ [GL.VIEWPORT]: (gl: WebGL2RenderingContext, value: [number, number, number, number]) =>
202
+ gl.viewport(...value),
203
+
204
+ // WEBGL2 EXTENSIONS
208
205
 
209
- // WEBGL1 PIXEL PACK/UNPACK MODES
206
+ // EXT_depth_clamp https://registry.khronos.org/webgl/extensions/EXT_depth_clamp/
207
+
208
+ [GL.DEPTH_CLAMP_EXT]: enable,
209
+
210
+ // WEBGL_provoking_vertex https://registry.khronos.org/webgl/extensions/WEBGL_provoking_vertex/
211
+
212
+ // [GL.PROVOKING_VERTEX_WEBL]: TODO - extension function needed
213
+
214
+ // WEBGL_polygon_mode https://registry.khronos.org/webgl/extensions/WEBGL_polygon_mode/
215
+
216
+ // POLYGON_MODE_WEBGL TODO - extension function needed
217
+ [GL.POLYGON_OFFSET_LINE_WEBGL]: enable,
218
+
219
+ // WEBGL_clip_cull_distance https://registry.khronos.org/webgl/extensions/WEBGL_clip_cull_distance/
220
+
221
+ [GL.CLIP_DISTANCE0_WEBGL]: enable,
222
+ [GL.CLIP_DISTANCE1_WEBGL]: enable,
223
+ [GL.CLIP_DISTANCE2_WEBGL]: enable,
224
+ [GL.CLIP_DISTANCE3_WEBGL]: enable,
225
+ [GL.CLIP_DISTANCE4_WEBGL]: enable,
226
+ [GL.CLIP_DISTANCE5_WEBGL]: enable,
227
+ [GL.CLIP_DISTANCE6_WEBGL]: enable,
228
+ [GL.CLIP_DISTANCE7_WEBGL]: enable,
229
+
230
+ // PIXEL PACK/UNPACK MODES
210
231
  [GL.PACK_ALIGNMENT]: pixelStorei,
211
232
  [GL.UNPACK_ALIGNMENT]: pixelStorei,
212
233
  [GL.UNPACK_FLIP_Y_WEBGL]: pixelStorei,
213
234
  [GL.UNPACK_PREMULTIPLY_ALPHA_WEBGL]: pixelStorei,
214
235
  [GL.UNPACK_COLORSPACE_CONVERSION_WEBGL]: pixelStorei,
215
-
216
- // WEBGL2 PIXEL PACK/UNPACK MODES
217
- // RASTERIZER_DISCARD ...
218
236
  [GL.PACK_ROW_LENGTH]: pixelStorei,
219
237
  [GL.PACK_SKIP_PIXELS]: pixelStorei,
220
238
  [GL.PACK_SKIP_ROWS]: pixelStorei,
@@ -225,85 +243,97 @@ export const GL_PARAMETER_SETTERS = {
225
243
  [GL.UNPACK_SKIP_IMAGES]: pixelStorei,
226
244
 
227
245
  // Function-style setters
228
- framebuffer: (gl: WebGLRenderingContext, framebuffer) => {
246
+ framebuffer: (gl: WebGL2RenderingContext, framebuffer) => {
229
247
  // accepts 1) a WebGLFramebuffer 2) null (default framebuffer), or 3) luma.gl Framebuffer class
230
248
  // framebuffer is null when restoring to default framebuffer, otherwise use the WebGL handle.
231
249
  const handle = framebuffer && 'handle' in framebuffer ? framebuffer.handle : framebuffer;
232
250
  return gl.bindFramebuffer(GL.FRAMEBUFFER, handle);
233
251
  },
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;
252
+ blend: (gl: WebGL2RenderingContext, value) =>
253
+ value ? gl.enable(GL.BLEND) : gl.disable(GL.BLEND),
254
+ blendColor: (gl: WebGL2RenderingContext, value: [number, number, number, number]) =>
255
+ gl.blendColor(...value),
256
+ blendEquation: (gl: WebGL2RenderingContext, args: number | [number, number]) => {
257
+ const separateModes = typeof args === 'number' ? ([args, args] as [number, number]) : args;
238
258
  gl.blendEquationSeparate(...separateModes);
239
259
  },
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;
260
+ blendFunc: (
261
+ gl: WebGL2RenderingContext,
262
+ args: [number, number] | [number, number, number, number]
263
+ ) => {
264
+ const separateFuncs =
265
+ args?.length === 2 ? ([...args, ...args] as [number, number, number, number]) : args;
242
266
  gl.blendFuncSeparate(...separateFuncs);
243
267
  },
244
268
 
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),
269
+ clearColor: (gl: WebGL2RenderingContext, value: [number, number, number, number]) =>
270
+ gl.clearColor(...value),
271
+ clearDepth: (gl: WebGL2RenderingContext, value) => gl.clearDepth(value),
272
+ clearStencil: (gl: WebGL2RenderingContext, value) => gl.clearStencil(value),
248
273
 
249
- colorMask: (gl: WebGLRenderingContext, value: [boolean, boolean, boolean, boolean]) => gl.colorMask(...value),
274
+ colorMask: (gl: WebGL2RenderingContext, value: [boolean, boolean, boolean, boolean]) =>
275
+ gl.colorMask(...value),
250
276
 
251
- cull: (gl: WebGLRenderingContext, value) =>
277
+ cull: (gl: WebGL2RenderingContext, value) =>
252
278
  value ? gl.enable(GL.CULL_FACE) : gl.disable(GL.CULL_FACE),
253
- cullFace: (gl: WebGLRenderingContext, value) => gl.cullFace(value),
279
+ cullFace: (gl: WebGL2RenderingContext, value) => gl.cullFace(value),
254
280
 
255
- depthTest: (gl: WebGLRenderingContext, value) =>
281
+ depthTest: (gl: WebGL2RenderingContext, value) =>
256
282
  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),
283
+ depthFunc: (gl: WebGL2RenderingContext, value) => gl.depthFunc(value),
284
+ depthMask: (gl: WebGL2RenderingContext, value) => gl.depthMask(value),
285
+ depthRange: (gl: WebGL2RenderingContext, value: [number, number]) => gl.depthRange(...value),
260
286
 
261
- dither: (gl: WebGLRenderingContext, value) =>
287
+ dither: (gl: WebGL2RenderingContext, value) =>
262
288
  value ? gl.enable(GL.DITHER) : gl.disable(GL.DITHER),
263
289
 
264
- derivativeHint: (gl: WebGLRenderingContext, value) => {
290
+ derivativeHint: (gl: WebGL2RenderingContext, value) => {
265
291
  // gl1: 'OES_standard_derivatives'
266
292
  gl.hint(GL.FRAGMENT_SHADER_DERIVATIVE_HINT, value);
267
293
  },
268
294
 
269
- frontFace: (gl: WebGLRenderingContext, value) => gl.frontFace(value),
295
+ frontFace: (gl: WebGL2RenderingContext, value) => gl.frontFace(value),
270
296
 
271
- mipmapHint: (gl: WebGLRenderingContext, value) => gl.hint(GL.GENERATE_MIPMAP_HINT, value),
297
+ mipmapHint: (gl: WebGL2RenderingContext, value) => gl.hint(GL.GENERATE_MIPMAP_HINT, value),
272
298
 
273
- lineWidth: (gl: WebGLRenderingContext, value) => gl.lineWidth(value),
299
+ lineWidth: (gl: WebGL2RenderingContext, value) => gl.lineWidth(value),
274
300
 
275
- polygonOffsetFill: (gl: WebGLRenderingContext, value) =>
301
+ polygonOffsetFill: (gl: WebGL2RenderingContext, value) =>
276
302
  value ? gl.enable(GL.POLYGON_OFFSET_FILL) : gl.disable(GL.POLYGON_OFFSET_FILL),
277
- polygonOffset: (gl: WebGLRenderingContext, value: [number, number]) => gl.polygonOffset(...value),
303
+ polygonOffset: (gl: WebGL2RenderingContext, value: [number, number]) =>
304
+ gl.polygonOffset(...value),
278
305
 
279
- sampleCoverage: (gl: WebGLRenderingContext, value: [number, boolean?]) => gl.sampleCoverage(...value),
306
+ sampleCoverage: (gl: WebGL2RenderingContext, value: [number, boolean?]) =>
307
+ gl.sampleCoverage(...value),
280
308
 
281
- scissorTest: (gl: WebGLRenderingContext, value) =>
309
+ scissorTest: (gl: WebGL2RenderingContext, value) =>
282
310
  value ? gl.enable(GL.SCISSOR_TEST) : gl.disable(GL.SCISSOR_TEST),
283
- scissor: (gl: WebGLRenderingContext, value: [number, number, number, number]) => gl.scissor(...value),
311
+ scissor: (gl: WebGL2RenderingContext, value: [number, number, number, number]) =>
312
+ gl.scissor(...value),
284
313
 
285
- stencilTest: (gl: WebGLRenderingContext, value) =>
314
+ stencilTest: (gl: WebGL2RenderingContext, value) =>
286
315
  value ? gl.enable(GL.STENCIL_TEST) : gl.disable(GL.STENCIL_TEST),
287
- stencilMask: (gl: WebGLRenderingContext, value) => {
316
+ stencilMask: (gl: WebGL2RenderingContext, value) => {
288
317
  value = isArray(value) ? value : [value, value];
289
318
  const [mask, backMask] = value;
290
319
  gl.stencilMaskSeparate(GL.FRONT, mask);
291
320
  gl.stencilMaskSeparate(GL.BACK, backMask);
292
321
  },
293
- stencilFunc: (gl: WebGLRenderingContext, args) => {
322
+ stencilFunc: (gl: WebGL2RenderingContext, args) => {
294
323
  args = isArray(args) && args.length === 3 ? [...args, ...args] : args;
295
324
  const [func, ref, mask, backFunc, backRef, backMask] = args;
296
325
  gl.stencilFuncSeparate(GL.FRONT, func, ref, mask);
297
326
  gl.stencilFuncSeparate(GL.BACK, backFunc, backRef, backMask);
298
327
  },
299
- stencilOp: (gl: WebGLRenderingContext, args) => {
328
+ stencilOp: (gl: WebGL2RenderingContext, args) => {
300
329
  args = isArray(args) && args.length === 3 ? [...args, ...args] : args;
301
330
  const [sfail, dpfail, dppass, backSfail, backDpfail, backDppass] = args;
302
331
  gl.stencilOpSeparate(GL.FRONT, sfail, dpfail, dppass);
303
332
  gl.stencilOpSeparate(GL.BACK, backSfail, backDpfail, backDppass);
304
333
  },
305
334
 
306
- viewport: (gl: WebGLRenderingContext, value: [number, number, number, number]) => gl.viewport(...value)
335
+ viewport: (gl: WebGL2RenderingContext, value: [number, number, number, number]) =>
336
+ gl.viewport(...value)
307
337
  };
308
338
 
309
339
  function getValue(glEnum, values, cache) {
@@ -312,50 +342,50 @@ function getValue(glEnum, values, cache) {
312
342
 
313
343
  // COMPOSITE_WEBGL_PARAMETER_
314
344
  export const GL_COMPOSITE_PARAMETER_SETTERS = {
315
- blendEquation: (gl: WebGLRenderingContext, values, cache) =>
345
+ blendEquation: (gl: WebGL2RenderingContext, values, cache) =>
316
346
  gl.blendEquationSeparate(
317
347
  getValue(GL.BLEND_EQUATION_RGB, values, cache),
318
348
  getValue(GL.BLEND_EQUATION_ALPHA, values, cache)
319
349
  ),
320
- blendFunc: (gl: WebGLRenderingContext, values, cache) =>
350
+ blendFunc: (gl: WebGL2RenderingContext, values, cache) =>
321
351
  gl.blendFuncSeparate(
322
352
  getValue(GL.BLEND_SRC_RGB, values, cache),
323
353
  getValue(GL.BLEND_DST_RGB, values, cache),
324
354
  getValue(GL.BLEND_SRC_ALPHA, values, cache),
325
355
  getValue(GL.BLEND_DST_ALPHA, values, cache)
326
356
  ),
327
- polygonOffset: (gl: WebGLRenderingContext, values, cache) =>
357
+ polygonOffset: (gl: WebGL2RenderingContext, values, cache) =>
328
358
  gl.polygonOffset(
329
359
  getValue(GL.POLYGON_OFFSET_FACTOR, values, cache),
330
360
  getValue(GL.POLYGON_OFFSET_UNITS, values, cache)
331
361
  ),
332
- sampleCoverage: (gl: WebGLRenderingContext, values, cache) =>
362
+ sampleCoverage: (gl: WebGL2RenderingContext, values, cache) =>
333
363
  gl.sampleCoverage(
334
364
  getValue(GL.SAMPLE_COVERAGE_VALUE, values, cache),
335
365
  getValue(GL.SAMPLE_COVERAGE_INVERT, values, cache)
336
366
  ),
337
- stencilFuncFront: (gl: WebGLRenderingContext, values, cache) =>
367
+ stencilFuncFront: (gl: WebGL2RenderingContext, values, cache) =>
338
368
  gl.stencilFuncSeparate(
339
369
  GL.FRONT,
340
370
  getValue(GL.STENCIL_FUNC, values, cache),
341
371
  getValue(GL.STENCIL_REF, values, cache),
342
372
  getValue(GL.STENCIL_VALUE_MASK, values, cache)
343
373
  ),
344
- stencilFuncBack: (gl: WebGLRenderingContext, values, cache) =>
374
+ stencilFuncBack: (gl: WebGL2RenderingContext, values, cache) =>
345
375
  gl.stencilFuncSeparate(
346
376
  GL.BACK,
347
377
  getValue(GL.STENCIL_BACK_FUNC, values, cache),
348
378
  getValue(GL.STENCIL_BACK_REF, values, cache),
349
379
  getValue(GL.STENCIL_BACK_VALUE_MASK, values, cache)
350
380
  ),
351
- stencilOpFront: (gl: WebGLRenderingContext, values, cache) =>
381
+ stencilOpFront: (gl: WebGL2RenderingContext, values, cache) =>
352
382
  gl.stencilOpSeparate(
353
383
  GL.FRONT,
354
384
  getValue(GL.STENCIL_FAIL, values, cache),
355
385
  getValue(GL.STENCIL_PASS_DEPTH_FAIL, values, cache),
356
386
  getValue(GL.STENCIL_PASS_DEPTH_PASS, values, cache)
357
387
  ),
358
- stencilOpBack: (gl: WebGLRenderingContext, values, cache) =>
388
+ stencilOpBack: (gl: WebGL2RenderingContext, values, cache) =>
359
389
  gl.stencilOpSeparate(
360
390
  GL.BACK,
361
391
  getValue(GL.STENCIL_BACK_FAIL, values, cache),
@@ -589,7 +619,7 @@ export const GL_HOOKED_SETTERS = {
589
619
 
590
620
  // GETTER TABLE - FOR READING OUT AN ENTIRE CONTEXT
591
621
 
592
- const isEnabled = (gl: WebGLRenderingContext, key) => gl.isEnabled(key);
622
+ const isEnabled = (gl: WebGL2RenderingContext, key) => gl.isEnabled(key);
593
623
 
594
624
  // Exceptions for any keys that cannot be queried by gl.getParameters
595
625
  export const GL_PARAMETER_GETTERS = {
@@ -602,8 +632,6 @@ export const GL_PARAMETER_GETTERS = {
602
632
  [GL.SAMPLE_COVERAGE]: isEnabled,
603
633
  [GL.SCISSOR_TEST]: isEnabled,
604
634
  [GL.STENCIL_TEST]: isEnabled,
605
-
606
- // WebGL 2
607
635
  [GL.RASTERIZER_DISCARD]: isEnabled
608
636
  };
609
637
 
@@ -1,4 +1,5 @@
1
- // luma.gl, MIT license
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
2
3
  // Copyright (c) vis.gl contributors
3
4
 
4
5
  /** deeply compare two arrays */
@@ -1,10 +1,15 @@
1
- // luma.gl, MIT license
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
2
3
  // Copyright (c) vis.gl contributors
3
4
 
4
5
  // Support for listening to context state changes and intercepting state queries
5
6
  // NOTE: this system does not handle buffer bindings
6
7
  import {assert} from '@luma.gl/core';
7
- import {GL_PARAMETER_DEFAULTS, GL_HOOKED_SETTERS, NON_CACHE_PARAMETERS} from '../parameters/webgl-parameter-tables';
8
+ import {
9
+ GL_PARAMETER_DEFAULTS,
10
+ GL_HOOKED_SETTERS,
11
+ NON_CACHE_PARAMETERS
12
+ } from '../parameters/webgl-parameter-tables';
8
13
  import {setGLParameters, getGLParameters} from '../parameters/unified-parameter-api';
9
14
  import {deepArrayEqual} from './deep-array-equal';
10
15
 
@@ -12,7 +17,7 @@ import {deepArrayEqual} from './deep-array-equal';
12
17
 
13
18
  /* eslint-disable no-shadow */
14
19
  class GLState {
15
- gl: WebGLRenderingContext;
20
+ gl: WebGL2RenderingContext;
16
21
  program: unknown = null;
17
22
  stateStack: object[] = [];
18
23
  enable = true;
@@ -20,7 +25,7 @@ class GLState {
20
25
  log;
21
26
 
22
27
  constructor(
23
- gl: WebGLRenderingContext,
28
+ gl: WebGL2RenderingContext,
24
29
  {
25
30
  copyState = false, // Copy cache from params (slow) or initialize from WebGL defaults (fast)
26
31
  log = () => {} // Logging function, called when gl parameter change calls are actually issued
@@ -57,7 +62,8 @@ class GLState {
57
62
  let valueChanged = false;
58
63
  let oldValue; // = undefined
59
64
 
60
- const oldValues: {[key: number | string]: any} | null = this.stateStack.length > 0 ? this.stateStack[this.stateStack.length - 1] : null;
65
+ const oldValues: {[key: number | string]: any} | null =
66
+ this.stateStack.length > 0 ? this.stateStack[this.stateStack.length - 1] : null;
61
67
 
62
68
  for (const key in values) {
63
69
  assert(key !== undefined);
@@ -84,7 +90,7 @@ class GLState {
84
90
  }
85
91
  }
86
92
 
87
- function getContextState(gl: WebGLRenderingContext): GLState {
93
+ function getContextState(gl: WebGL2RenderingContext): GLState {
88
94
  // @ts-expect-error
89
95
  return gl.state as GLState;
90
96
  }
@@ -100,13 +106,13 @@ function getContextState(gl: WebGLRenderingContext): GLState {
100
106
  * temporarily modifying, and then restoring state.
101
107
  */
102
108
  export function trackContextState(
103
- gl: WebGLRenderingContext,
109
+ gl: WebGL2RenderingContext,
104
110
  options?: {
105
111
  enable?: boolean;
106
112
  copyState?: boolean;
107
113
  log?: any;
108
114
  }
109
- ): WebGLRenderingContext {
115
+ ): WebGL2RenderingContext {
110
116
  const {enable = true, copyState} = options;
111
117
  assert(copyState !== undefined);
112
118
  // @ts-expect-error
@@ -143,7 +149,7 @@ export function trackContextState(
143
149
  /**
144
150
  * Saves current WebGL context state onto an internal per-context stack
145
151
  */
146
- export function pushContextState(gl: WebGLRenderingContext): void {
152
+ export function pushContextState(gl: WebGL2RenderingContext): void {
147
153
  let glState = getContextState(gl);
148
154
  if (!glState) {
149
155
  trackContextState(gl, {copyState: false});
@@ -152,11 +158,10 @@ export function pushContextState(gl: WebGLRenderingContext): void {
152
158
  glState.push();
153
159
  }
154
160
 
155
-
156
161
  /**
157
162
  * Restores previously saved WebGL context state
158
163
  */
159
- export function popContextState(gl: WebGLRenderingContext): void {
164
+ export function popContextState(gl: WebGL2RenderingContext): void {
160
165
  const glState = getContextState(gl);
161
166
  assert(glState);
162
167
  glState.pop();
@@ -165,13 +170,13 @@ export function popContextState(gl: WebGLRenderingContext): void {
165
170
  // HELPER FUNCTIONS - INSTALL GET/SET INTERCEPTORS (SPYS) ON THE CONTEXT
166
171
 
167
172
  /**
168
- // Overrides a WebGLRenderingContext state "getter" function
173
+ // Overrides a WebGL2RenderingContext state "getter" function
169
174
  // to return values directly from cache
170
175
  * @param gl
171
176
  * @param functionName
172
177
  */
173
- function installGetterOverride(gl: WebGLRenderingContext, functionName: string) {
174
- // Get the original function from the WebGLRenderingContext
178
+ function installGetterOverride(gl: WebGL2RenderingContext, functionName: string) {
179
+ // Get the original function from the WebGL2RenderingContext
175
180
  const originalGetterFunc = gl[functionName].bind(gl);
176
181
 
177
182
  // Wrap it with a spy so that we can update our state cache when it gets called
@@ -187,12 +192,12 @@ function installGetterOverride(gl: WebGLRenderingContext, functionName: string)
187
192
  glState.cache[pname] = originalGetterFunc(pname);
188
193
  }
189
194
 
190
- // Optionally call the original function to do a "hard" query from the WebGLRenderingContext
195
+ // Optionally call the original function to do a "hard" query from the WebGL2RenderingContext
191
196
  return glState.enable
192
197
  ? // Call the getter the params so that it can e.g. serve from a cache
193
- glState.cache[pname]
194
- : // Optionally call the original function to do a "hard" query from the WebGLRenderingContext
195
- originalGetterFunc(pname);
198
+ glState.cache[pname]
199
+ : // Optionally call the original function to do a "hard" query from the WebGL2RenderingContext
200
+ originalGetterFunc(pname);
196
201
  };
197
202
 
198
203
  // Set the name of this anonymous function to help in debugging and profiling
@@ -203,7 +208,7 @@ function installGetterOverride(gl: WebGLRenderingContext, functionName: string)
203
208
  }
204
209
 
205
210
  /**
206
- // Overrides a WebGLRenderingContext state "setter" function
211
+ // Overrides a WebGL2RenderingContext state "setter" function
207
212
  // to call a setter spy before the actual setter. Allows us to keep a cache
208
213
  // updated with a copy of the WebGL context state.
209
214
  * @param gl
@@ -211,9 +216,10 @@ function installGetterOverride(gl: WebGLRenderingContext, functionName: string)
211
216
  * @param setter
212
217
  * @returns
213
218
  */
214
- function installSetterSpy(gl: WebGLRenderingContext, functionName: string, setter: Function) {
215
- // Get the original function from the WebGLRenderingContext
219
+ function installSetterSpy(gl: WebGL2RenderingContext, functionName: string, setter: Function) {
220
+ // Get the original function from the WebGL2RenderingContext
216
221
  if (!gl[functionName]) {
222
+ // TODO - remove?
217
223
  // This could happen if we try to intercept WebGL2 method on a WebGL1 context
218
224
  return;
219
225
  }
@@ -228,7 +234,7 @@ function installSetterSpy(gl: WebGLRenderingContext, functionName: string, sette
228
234
  // eslint-disable-next-line @typescript-eslint/unbound-method
229
235
  const {valueChanged, oldValue} = setter(glState._updateCache, ...params);
230
236
 
231
- // Call the original WebGLRenderingContext func to make sure the context actually gets updated
237
+ // Call the original WebGL2RenderingContext func to make sure the context actually gets updated
232
238
  if (valueChanged) {
233
239
  originalSetterFunc(...params);
234
240
  }
@@ -248,7 +254,7 @@ function installSetterSpy(gl: WebGLRenderingContext, functionName: string, sette
248
254
  });
249
255
  }
250
256
 
251
- function installProgramSpy(gl: WebGLRenderingContext): void {
257
+ function installProgramSpy(gl: WebGL2RenderingContext): void {
252
258
  const originalUseProgram = gl.useProgram.bind(gl);
253
259
 
254
260
  gl.useProgram = function useProgramLuma(handle) {
@@ -1,8 +1,7 @@
1
- // luma.gl, MIT license
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
2
3
  // Copyright (c) vis.gl contributors
3
4
 
4
- import type {Device} from '@luma.gl/core';
5
- import {WebGLDevice} from '../../adapter/webgl-device';
6
5
  import {GLParameters, setGLParameters} from '../parameters/unified-parameter-api';
7
6
  import {pushContextState, popContextState} from './track-context-state';
8
7
 
@@ -14,13 +13,14 @@ import {pushContextState, popContextState} from './track-context-state';
14
13
  * - Restores parameters
15
14
  * - Returns the return value of the supplied function
16
15
  */
17
- export function withGLParameters(device: Device | WebGLRenderingContext, parameters: GLParameters & {nocatch?: boolean}, func: any): any {
18
- const webglDevice = WebGLDevice.attach(device);
19
- const gl = webglDevice.gl;
20
-
16
+ export function withGLParameters(
17
+ gl: WebGL2RenderingContext,
18
+ parameters: GLParameters & {nocatch?: boolean},
19
+ func: any
20
+ ): any {
21
21
  if (isObjectEmpty(parameters)) {
22
22
  // Avoid setting state if no parameters provided. Just call and return
23
- return func(device);
23
+ return func(gl);
24
24
  }
25
25
 
26
26
  const {nocatch = true} = parameters;