@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 +1 @@
1
- {"version":3,"file":"deep-array-equal.d.ts","sourceRoot":"","sources":["../../../src/context/state-tracker/deep-array-equal.ts"],"names":[],"mappings":"AAGA,gCAAgC;AAChC,wBAAgB,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,OAAO,CAiBtD"}
1
+ {"version":3,"file":"deep-array-equal.d.ts","sourceRoot":"","sources":["../../../src/context/state-tracker/deep-array-equal.ts"],"names":[],"mappings":"AAIA,gCAAgC;AAChC,wBAAgB,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,OAAO,CAiBtD"}
@@ -1,17 +1,22 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ /** deeply compare two arrays */
1
5
  export function deepArrayEqual(x, y) {
2
- if (x === y) {
3
- return true;
4
- }
5
- const isArrayX = Array.isArray(x) || ArrayBuffer.isView(x);
6
- const isArrayY = Array.isArray(y) || ArrayBuffer.isView(y);
7
- if (isArrayX && isArrayY && x.length === y.length) {
8
- for (let i = 0; i < x.length; ++i) {
9
- if (x[i] !== y[i]) {
10
- return false;
11
- }
6
+ if (x === y) {
7
+ return true;
12
8
  }
13
- return true;
14
- }
15
- return false;
9
+ const isArrayX = Array.isArray(x) || ArrayBuffer.isView(x);
10
+ const isArrayY = Array.isArray(y) || ArrayBuffer.isView(y);
11
+ // @ts-expect-error TODO fix
12
+ if (isArrayX && isArrayY && x.length === y.length) {
13
+ // @ts-expect-error TODO fix
14
+ for (let i = 0; i < x.length; ++i) {
15
+ if (x[i] !== y[i]) {
16
+ return false;
17
+ }
18
+ }
19
+ return true;
20
+ }
21
+ return false;
16
22
  }
17
- //# sourceMappingURL=deep-array-equal.js.map
@@ -6,17 +6,17 @@
6
6
  * gl.state.push() and gl.state.pop() will be available for saving,
7
7
  * temporarily modifying, and then restoring state.
8
8
  */
9
- export declare function trackContextState(gl: WebGLRenderingContext, options?: {
9
+ export declare function trackContextState(gl: WebGL2RenderingContext, options?: {
10
10
  enable?: boolean;
11
11
  copyState?: boolean;
12
12
  log?: any;
13
- }): WebGLRenderingContext;
13
+ }): WebGL2RenderingContext;
14
14
  /**
15
15
  * Saves current WebGL context state onto an internal per-context stack
16
16
  */
17
- export declare function pushContextState(gl: WebGLRenderingContext): void;
17
+ export declare function pushContextState(gl: WebGL2RenderingContext): void;
18
18
  /**
19
19
  * Restores previously saved WebGL context state
20
20
  */
21
- export declare function popContextState(gl: WebGLRenderingContext): void;
21
+ export declare function popContextState(gl: WebGL2RenderingContext): void;
22
22
  //# sourceMappingURL=track-context-state.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"track-context-state.d.ts","sourceRoot":"","sources":["../../../src/context/state-tracker/track-context-state.ts"],"names":[],"mappings":"AA6FA;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,qBAAqB,EACzB,OAAO,CAAC,EAAE;IACR,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,GAAG,CAAC,EAAE,GAAG,CAAC;CACX,GACA,qBAAqB,CAgCvB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,qBAAqB,GAAG,IAAI,CAOhE;AAGD;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,qBAAqB,GAAG,IAAI,CAI/D"}
1
+ {"version":3,"file":"track-context-state.d.ts","sourceRoot":"","sources":["../../../src/context/state-tracker/track-context-state.ts"],"names":[],"mappings":"AAmGA;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,sBAAsB,EAC1B,OAAO,CAAC,EAAE;IACR,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,GAAG,CAAC,EAAE,GAAG,CAAC;CACX,GACA,sBAAsB,CAgCxB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,sBAAsB,GAAG,IAAI,CAOjE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,sBAAsB,GAAG,IAAI,CAIhE"}
@@ -1,147 +1,212 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ // Support for listening to context state changes and intercepting state queries
5
+ // NOTE: this system does not handle buffer bindings
1
6
  import { assert } from '@luma.gl/core';
2
7
  import { GL_PARAMETER_DEFAULTS, GL_HOOKED_SETTERS, NON_CACHE_PARAMETERS } from "../parameters/webgl-parameter-tables.js";
3
8
  import { setGLParameters, getGLParameters } from "../parameters/unified-parameter-api.js";
4
9
  import { deepArrayEqual } from "./deep-array-equal.js";
10
+ // HELPER CLASS - GLState
11
+ /* eslint-disable no-shadow */
5
12
  class GLState {
6
- constructor(gl) {
7
- let {
8
- copyState = false,
9
- log = () => {}
10
- } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
11
- this.gl = void 0;
12
- this.program = null;
13
- this.stateStack = [];
14
- this.enable = true;
15
- this.cache = void 0;
16
- this.log = void 0;
17
- this.gl = gl;
18
- this.cache = copyState ? getGLParameters(gl) : Object.assign({}, GL_PARAMETER_DEFAULTS);
19
- this.log = log;
20
- this._updateCache = this._updateCache.bind(this);
21
- Object.seal(this);
22
- }
23
- push() {
24
- let values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
25
- this.stateStack.push({});
26
- }
27
- pop() {
28
- assert(this.stateStack.length > 0);
29
- const oldValues = this.stateStack[this.stateStack.length - 1];
30
- setGLParameters(this.gl, oldValues);
31
- this.stateStack.pop();
32
- }
33
- _updateCache(values) {
34
- let valueChanged = false;
35
- let oldValue;
36
- const oldValues = this.stateStack.length > 0 ? this.stateStack[this.stateStack.length - 1] : null;
37
- for (const key in values) {
38
- assert(key !== undefined);
39
- const value = values[key];
40
- const cached = this.cache[key];
41
- if (!deepArrayEqual(value, cached)) {
42
- valueChanged = true;
43
- oldValue = cached;
44
- if (oldValues && !(key in oldValues)) {
45
- oldValues[key] = cached;
13
+ gl;
14
+ program = null;
15
+ stateStack = [];
16
+ enable = true;
17
+ cache;
18
+ log;
19
+ constructor(gl, { copyState = false, // Copy cache from params (slow) or initialize from WebGL defaults (fast)
20
+ log = () => { } // Logging function, called when gl parameter change calls are actually issued
21
+ } = {}) {
22
+ this.gl = gl;
23
+ this.cache = copyState ? getGLParameters(gl) : Object.assign({}, GL_PARAMETER_DEFAULTS);
24
+ this.log = log;
25
+ this._updateCache = this._updateCache.bind(this);
26
+ Object.seal(this);
27
+ }
28
+ push(values = {}) {
29
+ this.stateStack.push({});
30
+ }
31
+ pop() {
32
+ assert(this.stateStack.length > 0);
33
+ // Use the saved values in the state stack to restore parameters
34
+ const oldValues = this.stateStack[this.stateStack.length - 1];
35
+ setGLParameters(this.gl, oldValues);
36
+ // Don't pop until we have reset parameters (to make sure other "stack frames" are not affected)
37
+ this.stateStack.pop();
38
+ }
39
+ /**
40
+ // interceptor for context set functions - update our cache and our stack
41
+ // values (Object) - the key values for this setter
42
+ * @param values
43
+ * @returns
44
+ */
45
+ _updateCache(values) {
46
+ let valueChanged = false;
47
+ let oldValue; // = undefined
48
+ const oldValues = this.stateStack.length > 0 ? this.stateStack[this.stateStack.length - 1] : null;
49
+ for (const key in values) {
50
+ assert(key !== undefined);
51
+ const value = values[key];
52
+ const cached = this.cache[key];
53
+ // Check that value hasn't already been shadowed
54
+ if (!deepArrayEqual(value, cached)) {
55
+ valueChanged = true;
56
+ oldValue = cached;
57
+ // First, save current value being shadowed
58
+ // If a state stack frame is active, save the current parameter values for pop
59
+ // but first check that value hasn't already been shadowed and saved
60
+ if (oldValues && !(key in oldValues)) {
61
+ oldValues[key] = cached;
62
+ }
63
+ // Save current value being shadowed
64
+ this.cache[key] = value;
65
+ }
46
66
  }
47
- this.cache[key] = value;
48
- }
67
+ return { valueChanged, oldValue };
49
68
  }
50
- return {
51
- valueChanged,
52
- oldValue
53
- };
54
- }
55
69
  }
56
70
  function getContextState(gl) {
57
- return gl.state;
71
+ // @ts-expect-error
72
+ return gl.state;
58
73
  }
74
+ // PUBLIC API
75
+ /**
76
+ * Initialize WebGL state caching on a context
77
+ * can be called multiple times to enable/disable
78
+ *
79
+ * @note After calling this function, context state will be cached
80
+ * gl.state.push() and gl.state.pop() will be available for saving,
81
+ * temporarily modifying, and then restoring state.
82
+ */
59
83
  export function trackContextState(gl, options) {
60
- const {
61
- enable = true,
62
- copyState
63
- } = options;
64
- assert(copyState !== undefined);
65
- if (!gl.state) {
66
- gl.state = new GLState(gl, {
67
- copyState
68
- });
69
- installProgramSpy(gl);
70
- for (const key in GL_HOOKED_SETTERS) {
71
- const setter = GL_HOOKED_SETTERS[key];
72
- installSetterSpy(gl, key, setter);
84
+ const { enable = true, copyState } = options;
85
+ assert(copyState !== undefined);
86
+ // @ts-expect-error
87
+ if (!gl.state) {
88
+ // @ts-ignore
89
+ // const {polyfillContext} = global_;
90
+ // if (polyfillContext) {
91
+ // polyfillContext(gl);
92
+ // }
93
+ // Create a state cache
94
+ // @ts-expect-error
95
+ gl.state = new GLState(gl, { copyState });
96
+ installProgramSpy(gl);
97
+ // intercept all setter functions in the table
98
+ for (const key in GL_HOOKED_SETTERS) {
99
+ const setter = GL_HOOKED_SETTERS[key];
100
+ installSetterSpy(gl, key, setter);
101
+ }
102
+ // intercept all getter functions in the table
103
+ installGetterOverride(gl, 'getParameter');
104
+ installGetterOverride(gl, 'isEnabled');
73
105
  }
74
- installGetterOverride(gl, 'getParameter');
75
- installGetterOverride(gl, 'isEnabled');
76
- }
77
- const glState = getContextState(gl);
78
- glState.enable = enable;
79
- return gl;
106
+ const glState = getContextState(gl);
107
+ glState.enable = enable;
108
+ return gl;
80
109
  }
110
+ /**
111
+ * Saves current WebGL context state onto an internal per-context stack
112
+ */
81
113
  export function pushContextState(gl) {
82
- let glState = getContextState(gl);
83
- if (!glState) {
84
- trackContextState(gl, {
85
- copyState: false
86
- });
87
- glState = getContextState(gl);
88
- }
89
- glState.push();
114
+ let glState = getContextState(gl);
115
+ if (!glState) {
116
+ trackContextState(gl, { copyState: false });
117
+ glState = getContextState(gl);
118
+ }
119
+ glState.push();
90
120
  }
121
+ /**
122
+ * Restores previously saved WebGL context state
123
+ */
91
124
  export function popContextState(gl) {
92
- const glState = getContextState(gl);
93
- assert(glState);
94
- glState.pop();
125
+ const glState = getContextState(gl);
126
+ assert(glState);
127
+ glState.pop();
95
128
  }
129
+ // HELPER FUNCTIONS - INSTALL GET/SET INTERCEPTORS (SPYS) ON THE CONTEXT
130
+ /**
131
+ // Overrides a WebGL2RenderingContext state "getter" function
132
+ // to return values directly from cache
133
+ * @param gl
134
+ * @param functionName
135
+ */
96
136
  function installGetterOverride(gl, functionName) {
97
- const originalGetterFunc = gl[functionName].bind(gl);
98
- gl[functionName] = function get(pname) {
99
- if (pname === undefined || NON_CACHE_PARAMETERS.has(pname)) {
100
- return originalGetterFunc(pname);
101
- }
102
- const glState = getContextState(gl);
103
- if (!(pname in glState.cache)) {
104
- glState.cache[pname] = originalGetterFunc(pname);
105
- }
106
- return glState.enable ? glState.cache[pname] : originalGetterFunc(pname);
107
- };
108
- Object.defineProperty(gl[functionName], 'name', {
109
- value: `${functionName}-from-cache`,
110
- configurable: false
111
- });
137
+ // Get the original function from the WebGL2RenderingContext
138
+ const originalGetterFunc = gl[functionName].bind(gl);
139
+ // Wrap it with a spy so that we can update our state cache when it gets called
140
+ gl[functionName] = function get(pname) {
141
+ if (pname === undefined || NON_CACHE_PARAMETERS.has(pname)) {
142
+ // Invalid or blacklisted parameter, do not cache
143
+ return originalGetterFunc(pname);
144
+ }
145
+ const glState = getContextState(gl);
146
+ if (!(pname in glState.cache)) {
147
+ // WebGL limits are not prepopulated in the cache, call the original getter when first queried.
148
+ glState.cache[pname] = originalGetterFunc(pname);
149
+ }
150
+ // Optionally call the original function to do a "hard" query from the WebGL2RenderingContext
151
+ return glState.enable
152
+ ? // Call the getter the params so that it can e.g. serve from a cache
153
+ glState.cache[pname]
154
+ : // Optionally call the original function to do a "hard" query from the WebGL2RenderingContext
155
+ originalGetterFunc(pname);
156
+ };
157
+ // Set the name of this anonymous function to help in debugging and profiling
158
+ Object.defineProperty(gl[functionName], 'name', {
159
+ value: `${functionName}-from-cache`,
160
+ configurable: false
161
+ });
112
162
  }
163
+ /**
164
+ // Overrides a WebGL2RenderingContext state "setter" function
165
+ // to call a setter spy before the actual setter. Allows us to keep a cache
166
+ // updated with a copy of the WebGL context state.
167
+ * @param gl
168
+ * @param functionName
169
+ * @param setter
170
+ * @returns
171
+ */
113
172
  function installSetterSpy(gl, functionName, setter) {
114
- if (!gl[functionName]) {
115
- return;
116
- }
117
- const originalSetterFunc = gl[functionName].bind(gl);
118
- gl[functionName] = function set() {
119
- const glState = getContextState(gl);
120
- for (var _len = arguments.length, params = new Array(_len), _key = 0; _key < _len; _key++) {
121
- params[_key] = arguments[_key];
122
- }
123
- const {
124
- valueChanged,
125
- oldValue
126
- } = setter(glState._updateCache, ...params);
127
- if (valueChanged) {
128
- originalSetterFunc(...params);
173
+ // Get the original function from the WebGL2RenderingContext
174
+ if (!gl[functionName]) {
175
+ // TODO - remove?
176
+ // This could happen if we try to intercept WebGL2 method on a WebGL1 context
177
+ return;
129
178
  }
130
- return oldValue;
131
- };
132
- Object.defineProperty(gl[functionName], 'name', {
133
- value: `${functionName}-to-cache`,
134
- configurable: false
135
- });
179
+ const originalSetterFunc = gl[functionName].bind(gl);
180
+ // Wrap it with a spy so that we can update our state cache when it gets called
181
+ gl[functionName] = function set(...params) {
182
+ // Update the value
183
+ // Call the setter with the state cache and the params so that it can store the parameters
184
+ const glState = getContextState(gl);
185
+ // eslint-disable-next-line @typescript-eslint/unbound-method
186
+ const { valueChanged, oldValue } = setter(glState._updateCache, ...params);
187
+ // Call the original WebGL2RenderingContext func to make sure the context actually gets updated
188
+ if (valueChanged) {
189
+ originalSetterFunc(...params);
190
+ }
191
+ // Note: if the original function fails to set the value, our state cache will be bad
192
+ // No solution for this at the moment, but assuming that this is unlikely to be a real problem
193
+ // We could call the setter after the originalSetterFunc. Concern is that this would
194
+ // cause different behavior in debug mode, where originalSetterFunc can throw exceptions
195
+ return oldValue;
196
+ };
197
+ // Set the name of this anonymous function to help in debugging and profiling
198
+ Object.defineProperty(gl[functionName], 'name', {
199
+ value: `${functionName}-to-cache`,
200
+ configurable: false
201
+ });
136
202
  }
137
203
  function installProgramSpy(gl) {
138
- const originalUseProgram = gl.useProgram.bind(gl);
139
- gl.useProgram = function useProgramLuma(handle) {
140
- const glState = getContextState(gl);
141
- if (glState.program !== handle) {
142
- originalUseProgram(handle);
143
- glState.program = handle;
144
- }
145
- };
204
+ const originalUseProgram = gl.useProgram.bind(gl);
205
+ gl.useProgram = function useProgramLuma(handle) {
206
+ const glState = getContextState(gl);
207
+ if (glState.program !== handle) {
208
+ originalUseProgram(handle);
209
+ glState.program = handle;
210
+ }
211
+ };
146
212
  }
147
- //# sourceMappingURL=track-context-state.js.map
@@ -1,5 +1,4 @@
1
- import type { Device } from '@luma.gl/core';
2
- import { GLParameters } from '../parameters/unified-parameter-api';
1
+ import { GLParameters } from "../parameters/unified-parameter-api.js";
3
2
  /**
4
3
  * Execute a function with a set of temporary WebGL parameter overrides
5
4
  * - Saves current "global" WebGL context settings
@@ -8,7 +7,7 @@ import { GLParameters } from '../parameters/unified-parameter-api';
8
7
  * - Restores parameters
9
8
  * - Returns the return value of the supplied function
10
9
  */
11
- export declare function withGLParameters(device: Device | WebGLRenderingContext, parameters: GLParameters & {
10
+ export declare function withGLParameters(gl: WebGL2RenderingContext, parameters: GLParameters & {
12
11
  nocatch?: boolean;
13
12
  }, func: any): any;
14
13
  //# sourceMappingURL=with-parameters.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"with-parameters.d.ts","sourceRoot":"","sources":["../../../src/context/state-tracker/with-parameters.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAC,YAAY,EAAkB,MAAM,qCAAqC,CAAC;AAGlF;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,qBAAqB,EAAE,UAAU,EAAE,YAAY,GAAG;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAC,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,CA+BvI"}
1
+ {"version":3,"file":"with-parameters.d.ts","sourceRoot":"","sources":["../../../src/context/state-tracker/with-parameters.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,YAAY,EAAkB,+CAA4C;AAGlF;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,sBAAsB,EAC1B,UAAU,EAAE,YAAY,GAAG;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAC,EAC9C,IAAI,EAAE,GAAG,GACR,GAAG,CA4BL"}
@@ -1,34 +1,48 @@
1
- import { WebGLDevice } from "../../adapter/webgl-device.js";
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
2
4
  import { setGLParameters } from "../parameters/unified-parameter-api.js";
3
5
  import { pushContextState, popContextState } from "./track-context-state.js";
4
- export function withGLParameters(device, parameters, func) {
5
- const webglDevice = WebGLDevice.attach(device);
6
- const gl = webglDevice.gl;
7
- if (isObjectEmpty(parameters)) {
8
- return func(device);
9
- }
10
- const {
11
- nocatch = true
12
- } = parameters;
13
- pushContextState(gl);
14
- setGLParameters(gl, parameters);
15
- let value;
16
- if (nocatch) {
17
- value = func(gl);
18
- popContextState(gl);
19
- } else {
20
- try {
21
- value = func(gl);
22
- } finally {
23
- popContextState(gl);
6
+ /**
7
+ * Execute a function with a set of temporary WebGL parameter overrides
8
+ * - Saves current "global" WebGL context settings
9
+ * - Sets the supplies WebGL context parameters,
10
+ * - Executes supplied function
11
+ * - Restores parameters
12
+ * - Returns the return value of the supplied function
13
+ */
14
+ export function withGLParameters(gl, parameters, func) {
15
+ if (isObjectEmpty(parameters)) {
16
+ // Avoid setting state if no parameters provided. Just call and return
17
+ return func(gl);
24
18
  }
25
- }
26
- return value;
19
+ const { nocatch = true } = parameters;
20
+ pushContextState(gl);
21
+ setGLParameters(gl, parameters);
22
+ // Setup is done, call the function
23
+ let value;
24
+ if (nocatch) {
25
+ // Avoid try catch to minimize stack size impact for safe execution paths
26
+ value = func(gl);
27
+ popContextState(gl);
28
+ }
29
+ else {
30
+ // Wrap in a try-catch to ensure that parameters are restored on exceptions
31
+ try {
32
+ value = func(gl);
33
+ }
34
+ finally {
35
+ popContextState(gl);
36
+ }
37
+ }
38
+ return value;
27
39
  }
40
+ // Helpers
41
+ // Returns true if given object is empty, false otherwise.
28
42
  function isObjectEmpty(object) {
29
- for (const key in object) {
30
- return false;
31
- }
32
- return true;
43
+ // @ts-ignore - dummy key variable
44
+ for (const key in object) {
45
+ return false;
46
+ }
47
+ return true;
33
48
  }
34
- //# sourceMappingURL=with-parameters.js.map