@luma.gl/webgl 9.1.0-alpha.2 → 9.1.0-beta.1

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 (216) hide show
  1. package/dist/adapter/converters/device-parameters.d.ts +3 -3
  2. package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
  3. package/dist/adapter/converters/device-parameters.js +19 -11
  4. package/dist/adapter/converters/device-parameters.js.map +1 -0
  5. package/dist/adapter/converters/sampler-parameters.js +7 -4
  6. package/dist/adapter/converters/sampler-parameters.js.map +1 -0
  7. package/dist/adapter/converters/shader-formats.js +1 -0
  8. package/dist/adapter/converters/shader-formats.js.map +1 -0
  9. package/dist/adapter/converters/vertex-formats.js +1 -0
  10. package/dist/adapter/converters/vertex-formats.js.map +1 -0
  11. package/dist/adapter/converters/webgl-texture-table.d.ts +40 -0
  12. package/dist/adapter/converters/webgl-texture-table.d.ts.map +1 -0
  13. package/dist/adapter/converters/webgl-texture-table.js +304 -0
  14. package/dist/adapter/converters/webgl-texture-table.js.map +1 -0
  15. package/dist/adapter/device-helpers/webgl-device-features.d.ts.map +1 -1
  16. package/dist/adapter/device-helpers/webgl-device-features.js +2 -3
  17. package/dist/adapter/device-helpers/webgl-device-features.js.map +1 -0
  18. package/dist/adapter/device-helpers/webgl-device-info.js +1 -0
  19. package/dist/adapter/device-helpers/webgl-device-info.js.map +1 -0
  20. package/dist/adapter/device-helpers/webgl-device-limits.js +1 -0
  21. package/dist/adapter/device-helpers/webgl-device-limits.js.map +1 -0
  22. package/dist/adapter/helpers/decode-webgl-types.js +1 -0
  23. package/dist/adapter/helpers/decode-webgl-types.js.map +1 -0
  24. package/dist/adapter/helpers/format-utils.d.ts.map +1 -0
  25. package/dist/{classic → adapter/helpers}/format-utils.js +7 -0
  26. package/dist/adapter/helpers/format-utils.js.map +1 -0
  27. package/dist/adapter/helpers/get-shader-layout.d.ts +1 -1
  28. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
  29. package/dist/adapter/helpers/get-shader-layout.js +5 -4
  30. package/dist/adapter/helpers/get-shader-layout.js.map +1 -0
  31. package/dist/adapter/helpers/parse-shader-compiler-log.js +1 -0
  32. package/dist/adapter/helpers/parse-shader-compiler-log.js.map +1 -0
  33. package/dist/adapter/helpers/set-uniform.js +1 -0
  34. package/dist/adapter/helpers/set-uniform.js.map +1 -0
  35. package/dist/adapter/helpers/typed-array-utils.d.ts.map +1 -0
  36. package/dist/{classic → adapter/helpers}/typed-array-utils.js +1 -0
  37. package/dist/adapter/helpers/typed-array-utils.js.map +1 -0
  38. package/dist/adapter/helpers/webgl-texture-utils.d.ts +100 -29
  39. package/dist/adapter/helpers/webgl-texture-utils.d.ts.map +1 -1
  40. package/dist/adapter/helpers/webgl-texture-utils.js +231 -240
  41. package/dist/adapter/helpers/webgl-texture-utils.js.map +1 -0
  42. package/dist/adapter/helpers/webgl-topology-utils.js +1 -0
  43. package/dist/adapter/helpers/webgl-topology-utils.js.map +1 -0
  44. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  45. package/dist/adapter/resources/webgl-buffer.js +4 -1
  46. package/dist/adapter/resources/webgl-buffer.js.map +1 -0
  47. package/dist/adapter/resources/webgl-command-buffer.d.ts +59 -2
  48. package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
  49. package/dist/adapter/resources/webgl-command-buffer.js +89 -32
  50. package/dist/adapter/resources/webgl-command-buffer.js.map +1 -0
  51. package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
  52. package/dist/adapter/resources/webgl-command-encoder.js +4 -0
  53. package/dist/adapter/resources/webgl-command-encoder.js.map +1 -0
  54. package/dist/adapter/resources/webgl-external-texture.js +15 -0
  55. package/dist/adapter/resources/webgl-external-texture.js.map +1 -0
  56. package/dist/adapter/resources/webgl-framebuffer.d.ts +33 -35
  57. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  58. package/dist/adapter/resources/webgl-framebuffer.js +71 -76
  59. package/dist/adapter/resources/webgl-framebuffer.js.map +1 -0
  60. package/dist/adapter/resources/webgl-query-set.js +1 -0
  61. package/dist/adapter/resources/webgl-query-set.js.map +1 -0
  62. package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
  63. package/dist/adapter/resources/webgl-render-pass.js +49 -21
  64. package/dist/adapter/resources/webgl-render-pass.js.map +1 -0
  65. package/dist/adapter/resources/webgl-render-pipeline.d.ts +3 -4
  66. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  67. package/dist/adapter/resources/webgl-render-pipeline.js +45 -23
  68. package/dist/adapter/resources/webgl-render-pipeline.js.map +1 -0
  69. package/dist/adapter/resources/webgl-sampler.js +1 -0
  70. package/dist/adapter/resources/webgl-sampler.js.map +1 -0
  71. package/dist/adapter/resources/webgl-shader.d.ts +1 -0
  72. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  73. package/dist/adapter/resources/webgl-shader.js +13 -6
  74. package/dist/adapter/resources/webgl-shader.js.map +1 -0
  75. package/dist/adapter/resources/webgl-texture-view.js +1 -0
  76. package/dist/adapter/resources/webgl-texture-view.js.map +1 -0
  77. package/dist/adapter/resources/webgl-texture.d.ts +33 -21
  78. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  79. package/dist/adapter/resources/webgl-texture.js +172 -242
  80. package/dist/adapter/resources/webgl-texture.js.map +1 -0
  81. package/dist/adapter/resources/webgl-transform-feedback.js +1 -0
  82. package/dist/adapter/resources/webgl-transform-feedback.js.map +1 -0
  83. package/dist/adapter/resources/webgl-vertex-array.js +1 -0
  84. package/dist/adapter/resources/webgl-vertex-array.js.map +1 -0
  85. package/dist/adapter/webgl-adapter.d.ts +21 -0
  86. package/dist/adapter/webgl-adapter.d.ts.map +1 -0
  87. package/dist/adapter/webgl-adapter.js +86 -0
  88. package/dist/adapter/webgl-adapter.js.map +1 -0
  89. package/dist/adapter/webgl-canvas-context.d.ts +4 -6
  90. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
  91. package/dist/adapter/webgl-canvas-context.js +13 -17
  92. package/dist/adapter/webgl-canvas-context.js.map +1 -0
  93. package/dist/adapter/webgl-device.d.ts +35 -46
  94. package/dist/adapter/webgl-device.d.ts.map +1 -1
  95. package/dist/adapter/webgl-device.js +100 -156
  96. package/dist/adapter/webgl-device.js.map +1 -0
  97. package/dist/context/debug/spector-types.d.ts +1108 -0
  98. package/dist/context/debug/spector-types.d.ts.map +1 -0
  99. package/dist/context/debug/spector-types.js +698 -0
  100. package/dist/context/debug/spector-types.js.map +1 -0
  101. package/dist/context/debug/spector.d.ts +12 -8
  102. package/dist/context/debug/spector.d.ts.map +1 -1
  103. package/dist/context/debug/spector.js +24 -17
  104. package/dist/context/debug/spector.js.map +1 -0
  105. package/dist/context/debug/webgl-developer-tools.d.ts +2 -3
  106. package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
  107. package/dist/context/debug/webgl-developer-tools.js +7 -19
  108. package/dist/context/debug/webgl-developer-tools.js.map +1 -0
  109. package/dist/context/helpers/create-browser-context.d.ts +6 -22
  110. package/dist/context/helpers/create-browser-context.d.ts.map +1 -1
  111. package/dist/context/helpers/create-browser-context.js +41 -32
  112. package/dist/context/helpers/create-browser-context.js.map +1 -0
  113. package/dist/context/helpers/webgl-context-data.js +1 -0
  114. package/dist/context/helpers/webgl-context-data.js.map +1 -0
  115. package/dist/context/helpers/webgl-extensions.js +1 -0
  116. package/dist/context/helpers/webgl-extensions.js.map +1 -0
  117. package/dist/context/parameters/unified-parameter-api.js +1 -0
  118. package/dist/context/parameters/unified-parameter-api.js.map +1 -0
  119. package/dist/context/parameters/webgl-parameter-tables.d.ts +1 -1
  120. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  121. package/dist/context/parameters/webgl-parameter-tables.js +3 -2
  122. package/dist/context/parameters/webgl-parameter-tables.js.map +1 -0
  123. package/dist/context/polyfills/polyfill-webgl1-extensions.d.ts +9 -0
  124. package/dist/context/polyfills/polyfill-webgl1-extensions.d.ts.map +1 -0
  125. package/dist/context/polyfills/polyfill-webgl1-extensions.js +182 -0
  126. package/dist/context/polyfills/polyfill-webgl1-extensions.js.map +1 -0
  127. package/dist/context/state-tracker/deep-array-equal.js +1 -0
  128. package/dist/context/state-tracker/deep-array-equal.js.map +1 -0
  129. package/dist/context/state-tracker/webgl-state-tracker.d.ts +43 -0
  130. package/dist/context/state-tracker/webgl-state-tracker.d.ts.map +1 -0
  131. package/dist/context/state-tracker/{track-context-state.js → webgl-state-tracker.js} +45 -74
  132. package/dist/context/state-tracker/webgl-state-tracker.js.map +1 -0
  133. package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
  134. package/dist/context/state-tracker/with-parameters.js +6 -4
  135. package/dist/context/state-tracker/with-parameters.js.map +1 -0
  136. package/dist/deprecated/accessor.d.ts.map +1 -0
  137. package/dist/{classic → deprecated}/accessor.js +37 -1
  138. package/dist/deprecated/accessor.js.map +1 -0
  139. package/dist/dist.dev.js +2397 -2430
  140. package/dist/dist.min.js +2 -2
  141. package/dist/index.cjs +2273 -2298
  142. package/dist/index.cjs.map +4 -4
  143. package/dist/index.d.ts +5 -4
  144. package/dist/index.d.ts.map +1 -1
  145. package/dist/index.js +6 -6
  146. package/dist/index.js.map +1 -0
  147. package/dist/types.js +1 -0
  148. package/dist/types.js.map +1 -0
  149. package/dist/utils/fill-array.d.ts +4 -4
  150. package/dist/utils/fill-array.d.ts.map +1 -1
  151. package/dist/utils/fill-array.js +1 -0
  152. package/dist/utils/fill-array.js.map +1 -0
  153. package/dist/utils/load-script.js +1 -0
  154. package/dist/utils/load-script.js.map +1 -0
  155. package/dist/utils/split-uniforms-and-bindings.d.ts +1 -1
  156. package/dist/utils/split-uniforms-and-bindings.d.ts.map +1 -1
  157. package/dist/utils/split-uniforms-and-bindings.js +1 -0
  158. package/dist/utils/split-uniforms-and-bindings.js.map +1 -0
  159. package/dist/utils/uid.d.ts +7 -0
  160. package/dist/utils/uid.d.ts.map +1 -0
  161. package/dist/utils/uid.js +15 -0
  162. package/dist/utils/uid.js.map +1 -0
  163. package/package.json +5 -5
  164. package/src/adapter/converters/device-parameters.ts +21 -15
  165. package/src/adapter/converters/sampler-parameters.ts +6 -4
  166. package/src/adapter/converters/webgl-texture-table.ts +404 -0
  167. package/src/adapter/device-helpers/webgl-device-features.ts +5 -3
  168. package/src/{classic → adapter/helpers}/format-utils.ts +6 -0
  169. package/src/adapter/helpers/get-shader-layout.ts +7 -4
  170. package/src/adapter/helpers/webgl-texture-utils.ts +410 -64
  171. package/src/adapter/resources/webgl-buffer.ts +3 -1
  172. package/src/adapter/resources/webgl-command-buffer.ts +125 -41
  173. package/src/adapter/resources/webgl-command-encoder.ts +6 -0
  174. package/src/adapter/resources/webgl-external-texture.ts +14 -0
  175. package/src/adapter/resources/webgl-framebuffer.ts +80 -86
  176. package/src/adapter/resources/webgl-render-pass.ts +72 -45
  177. package/src/adapter/resources/webgl-render-pipeline.ts +58 -27
  178. package/src/adapter/resources/webgl-shader.ts +15 -7
  179. package/src/adapter/resources/webgl-texture.ts +202 -274
  180. package/src/adapter/webgl-adapter.ts +105 -0
  181. package/src/adapter/webgl-canvas-context.ts +16 -19
  182. package/src/adapter/webgl-device.ts +144 -210
  183. package/src/context/debug/spector-types.ts +1154 -0
  184. package/src/context/debug/spector.ts +38 -29
  185. package/src/context/debug/webgl-developer-tools.ts +8 -31
  186. package/src/context/helpers/create-browser-context.ts +53 -63
  187. package/src/context/parameters/webgl-parameter-tables.ts +2 -2
  188. package/src/context/polyfills/polyfill-webgl1-extensions.ts +202 -0
  189. package/src/context/state-tracker/{track-context-state.ts → webgl-state-tracker.ts} +55 -94
  190. package/src/context/state-tracker/with-parameters.ts +5 -4
  191. package/src/{classic → deprecated}/accessor.ts +44 -3
  192. package/src/index.ts +7 -12
  193. package/src/utils/fill-array.ts +4 -4
  194. package/src/utils/split-uniforms-and-bindings.ts +3 -3
  195. package/src/utils/uid.ts +16 -0
  196. package/dist/adapter/converters/texture-formats.d.ts +0 -83
  197. package/dist/adapter/converters/texture-formats.d.ts.map +0 -1
  198. package/dist/adapter/converters/texture-formats.js +0 -518
  199. package/dist/classic/accessor.d.ts.map +0 -1
  200. package/dist/classic/clear.d.ts +0 -22
  201. package/dist/classic/clear.d.ts.map +0 -1
  202. package/dist/classic/clear.js +0 -86
  203. package/dist/classic/copy-and-blit.d.ts +0 -63
  204. package/dist/classic/copy-and-blit.d.ts.map +0 -1
  205. package/dist/classic/copy-and-blit.js +0 -193
  206. package/dist/classic/format-utils.d.ts.map +0 -1
  207. package/dist/classic/typed-array-utils.d.ts.map +0 -1
  208. package/dist/context/state-tracker/track-context-state.d.ts +0 -22
  209. package/dist/context/state-tracker/track-context-state.d.ts.map +0 -1
  210. package/src/adapter/converters/texture-formats.ts +0 -665
  211. package/src/classic/clear.ts +0 -115
  212. package/src/classic/copy-and-blit.ts +0 -318
  213. /package/dist/{classic → adapter/helpers}/format-utils.d.ts +0 -0
  214. /package/dist/{classic → adapter/helpers}/typed-array-utils.d.ts +0 -0
  215. /package/dist/{classic → deprecated}/accessor.d.ts +0 -0
  216. /package/src/{classic → adapter/helpers}/typed-array-utils.ts +0 -0
@@ -2,37 +2,43 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
- // Support for listening to context state changes and intercepting state queries
6
- // NOTE: this system does not handle buffer bindings
5
+ import {setGLParameters, getGLParameters} from '../parameters/unified-parameter-api';
6
+ import {deepArrayEqual} from './deep-array-equal';
7
7
  import {
8
8
  GL_PARAMETER_DEFAULTS,
9
9
  GL_HOOKED_SETTERS,
10
10
  NON_CACHE_PARAMETERS
11
11
  } from '../parameters/webgl-parameter-tables';
12
- import {setGLParameters, getGLParameters} from '../parameters/unified-parameter-api';
13
- import {deepArrayEqual} from './deep-array-equal';
14
12
 
15
- // HELPER CLASS - GLState
13
+ // HELPER CLASS - WebGLStateTracker
14
+
15
+ /**
16
+ * Support for listening to context state changes and intercepting state queries
17
+ * NOTE: this system does not handle buffer bindings
18
+ */
19
+ export class WebGLStateTracker {
20
+ static get(gl: WebGL2RenderingContext): WebGLStateTracker {
21
+ // @ts-expect-error
22
+ return gl.state as WebGLStateTracker;
23
+ }
16
24
 
17
- /* eslint-disable no-shadow */
18
- class GLState {
19
25
  gl: WebGL2RenderingContext;
20
26
  program: unknown = null;
21
27
  stateStack: object[] = [];
22
28
  enable = true;
23
- cache: Record<string, any>;
29
+ cache: Record<string, any> = null!;
24
30
  log;
25
31
 
32
+ protected initialized = false;
33
+
26
34
  constructor(
27
35
  gl: WebGL2RenderingContext,
28
- {
29
- copyState = false, // Copy cache from params (slow) or initialize from WebGL defaults (fast)
30
- log = () => {} // Logging function, called when gl parameter change calls are actually issued
31
- } = {}
36
+ props?: {
37
+ log; // Logging function, called when gl parameter change calls are actually issued
38
+ }
32
39
  ) {
33
40
  this.gl = gl;
34
- this.cache = copyState ? getGLParameters(gl) : Object.assign({}, GL_PARAMETER_DEFAULTS);
35
- this.log = log;
41
+ this.log = props?.log || (() => {});
36
42
 
37
43
  this._updateCache = this._updateCache.bind(this);
38
44
  Object.seal(this);
@@ -51,6 +57,38 @@ class GLState {
51
57
  this.stateStack.pop();
52
58
  }
53
59
 
60
+ /**
61
+ * Initialize WebGL state caching on a context
62
+ * can be called multiple times to enable/disable
63
+ *
64
+ * @note After calling this function, context state will be cached
65
+ * .push() and .pop() will be available for saving,
66
+ * temporarily modifying, and then restoring state.
67
+ */
68
+ trackState(gl: WebGL2RenderingContext, options?: {copyState?: boolean}): void {
69
+ this.cache = options.copyState ? getGLParameters(gl) : Object.assign({}, GL_PARAMETER_DEFAULTS);
70
+
71
+ if (this.initialized) {
72
+ throw new Error('WebGLStateTracker');
73
+ }
74
+ this.initialized = true;
75
+
76
+ // @ts-expect-error
77
+ this.gl.state = this;
78
+
79
+ installProgramSpy(gl);
80
+
81
+ // intercept all setter functions in the table
82
+ for (const key in GL_HOOKED_SETTERS) {
83
+ const setter = GL_HOOKED_SETTERS[key];
84
+ installSetterSpy(gl, key, setter);
85
+ }
86
+
87
+ // intercept all getter functions in the table
88
+ installGetterOverride(gl, 'getParameter');
89
+ installGetterOverride(gl, 'isEnabled');
90
+ }
91
+
54
92
  /**
55
93
  // interceptor for context set functions - update our cache and our stack
56
94
  // values (Object) - the key values for this setter
@@ -89,83 +127,6 @@ class GLState {
89
127
  }
90
128
  }
91
129
 
92
- function getContextState(gl: WebGL2RenderingContext): GLState {
93
- // @ts-expect-error
94
- return gl.state as GLState;
95
- }
96
-
97
- // PUBLIC API
98
-
99
- /**
100
- * Initialize WebGL state caching on a context
101
- * can be called multiple times to enable/disable
102
- *
103
- * @note After calling this function, context state will be cached
104
- * gl.state.push() and gl.state.pop() will be available for saving,
105
- * temporarily modifying, and then restoring state.
106
- */
107
- export function trackContextState(
108
- gl: WebGL2RenderingContext,
109
- options?: {
110
- enable?: boolean;
111
- copyState?: boolean;
112
- log?: any;
113
- }
114
- ): WebGL2RenderingContext {
115
- const {enable = true, copyState} = options || {};
116
- // assert(copyState !== undefined);
117
- // @ts-expect-error
118
- if (!gl.state) {
119
- // @ts-ignore
120
- // const {polyfillContext} = global_;
121
- // if (polyfillContext) {
122
- // polyfillContext(gl);
123
- // }
124
-
125
- // Create a state cache
126
- // @ts-expect-error
127
- gl.state = new GLState(gl, {copyState});
128
-
129
- installProgramSpy(gl);
130
-
131
- // intercept all setter functions in the table
132
- for (const key in GL_HOOKED_SETTERS) {
133
- const setter = GL_HOOKED_SETTERS[key];
134
- installSetterSpy(gl, key, setter);
135
- }
136
-
137
- // intercept all getter functions in the table
138
- installGetterOverride(gl, 'getParameter');
139
- installGetterOverride(gl, 'isEnabled');
140
- }
141
-
142
- const glState = getContextState(gl);
143
- glState.enable = enable;
144
-
145
- return gl;
146
- }
147
-
148
- /**
149
- * Saves current WebGL context state onto an internal per-context stack
150
- */
151
- export function pushContextState(gl: WebGL2RenderingContext): void {
152
- let glState = getContextState(gl);
153
- if (!glState) {
154
- trackContextState(gl, {copyState: false});
155
- glState = getContextState(gl);
156
- }
157
- glState.push();
158
- }
159
-
160
- /**
161
- * Restores previously saved WebGL context state
162
- */
163
- export function popContextState(gl: WebGL2RenderingContext): void {
164
- const glState = getContextState(gl);
165
- // assert(glState);
166
- glState.pop();
167
- }
168
-
169
130
  // HELPER FUNCTIONS - INSTALL GET/SET INTERCEPTORS (SPYS) ON THE CONTEXT
170
131
 
171
132
  /**
@@ -185,7 +146,7 @@ function installGetterOverride(gl: WebGL2RenderingContext, functionName: string)
185
146
  return originalGetterFunc(pname);
186
147
  }
187
148
 
188
- const glState = getContextState(gl);
149
+ const glState = WebGLStateTracker.get(gl);
189
150
  if (!(pname in glState.cache)) {
190
151
  // WebGL limits are not prepopulated in the cache, call the original getter when first queried.
191
152
  glState.cache[pname] = originalGetterFunc(pname);
@@ -229,7 +190,7 @@ function installSetterSpy(gl: WebGL2RenderingContext, functionName: string, sett
229
190
  gl[functionName] = function set(...params) {
230
191
  // Update the value
231
192
  // Call the setter with the state cache and the params so that it can store the parameters
232
- const glState = getContextState(gl);
193
+ const glState = WebGLStateTracker.get(gl);
233
194
  // eslint-disable-next-line @typescript-eslint/unbound-method
234
195
  const {valueChanged, oldValue} = setter(glState._updateCache, ...params);
235
196
 
@@ -257,7 +218,7 @@ function installProgramSpy(gl: WebGL2RenderingContext): void {
257
218
  const originalUseProgram = gl.useProgram.bind(gl);
258
219
 
259
220
  gl.useProgram = function useProgramLuma(handle) {
260
- const glState = getContextState(gl);
221
+ const glState = WebGLStateTracker.get(gl);
261
222
  if (glState.program !== handle) {
262
223
  originalUseProgram(handle);
263
224
  glState.program = handle;
@@ -3,7 +3,7 @@
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
5
  import {GLParameters, setGLParameters} from '../parameters/unified-parameter-api';
6
- import {pushContextState, popContextState} from './track-context-state';
6
+ import {WebGLStateTracker} from './webgl-state-tracker';
7
7
 
8
8
  /**
9
9
  * Execute a function with a set of temporary WebGL parameter overrides
@@ -25,7 +25,8 @@ export function withGLParameters(
25
25
 
26
26
  const {nocatch = true} = parameters;
27
27
 
28
- pushContextState(gl);
28
+ const webglState = WebGLStateTracker.get(gl);
29
+ webglState.push();
29
30
  setGLParameters(gl, parameters);
30
31
 
31
32
  // Setup is done, call the function
@@ -34,13 +35,13 @@ export function withGLParameters(
34
35
  if (nocatch) {
35
36
  // Avoid try catch to minimize stack size impact for safe execution paths
36
37
  value = func(gl);
37
- popContextState(gl);
38
+ webglState.pop();
38
39
  } else {
39
40
  // Wrap in a try-catch to ensure that parameters are restored on exceptions
40
41
  try {
41
42
  value = func(gl);
42
43
  } finally {
43
- popContextState(gl);
44
+ webglState.pop();
44
45
  }
45
46
  }
46
47
 
@@ -2,9 +2,9 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
- import {Buffer} from '@luma.gl/core';
6
- import {GL} from '@luma.gl/constants';
7
- import {getTypedArrayFromGLType} from './typed-array-utils';
5
+ import {Buffer, log} from '@luma.gl/core';
6
+ import {GL, GLDataType, GLPixelType} from '@luma.gl/constants';
7
+ import {TypedArrayConstructor} from '@math.gl/types';
8
8
 
9
9
  /**
10
10
  * Attribute descriptor object
@@ -81,6 +81,7 @@ export class Accessor implements AccessorObject {
81
81
  }
82
82
 
83
83
  constructor(...accessors: AccessorObject[]) {
84
+ log.warn('Accessor will be removed in next minor release');
84
85
  accessors.forEach(accessor => this._assign(accessor)); // Merge in sequence
85
86
  Object.freeze(this);
86
87
  }
@@ -180,5 +181,45 @@ export class Accessor implements AccessorObject {
180
181
  }
181
182
  }
182
183
 
184
+ /**
185
+ * Converts GL constant to corresponding TYPED ARRAY
186
+ * Used to auto deduce gl parameter types
187
+ * @deprecated Use getTypedArrayFromDataType
188
+ * @param glType
189
+ * @param param1
190
+ * @returns
191
+ */
192
+ // eslint-disable-next-line complexity
193
+ function getTypedArrayFromGLType(
194
+ glType: GLDataType | GLPixelType,
195
+ options?: {
196
+ clamped?: boolean;
197
+ }
198
+ ): TypedArrayConstructor {
199
+ const {clamped = true} = options || {};
200
+ // Sorted in some order of likelihood to reduce amount of comparisons
201
+ switch (glType) {
202
+ case GL.FLOAT:
203
+ return Float32Array;
204
+ case GL.UNSIGNED_SHORT:
205
+ case GL.UNSIGNED_SHORT_5_6_5:
206
+ case GL.UNSIGNED_SHORT_4_4_4_4:
207
+ case GL.UNSIGNED_SHORT_5_5_5_1:
208
+ return Uint16Array;
209
+ case GL.UNSIGNED_INT:
210
+ return Uint32Array;
211
+ case GL.UNSIGNED_BYTE:
212
+ return clamped ? Uint8ClampedArray : Uint8Array;
213
+ case GL.BYTE:
214
+ return Int8Array;
215
+ case GL.SHORT:
216
+ return Int16Array;
217
+ case GL.INT:
218
+ return Int32Array;
219
+ default:
220
+ throw new Error('Failed to deduce typed array type from GL constant');
221
+ }
222
+ }
223
+
183
224
  // TEST EXPORTS
184
225
  export {DEFAULT_ACCESSOR_VALUES};
package/src/index.ts CHANGED
@@ -12,6 +12,10 @@
12
12
  export type {WebGLDeviceLimits} from './adapter/device-helpers/webgl-device-limits';
13
13
 
14
14
  // WebGL adapter classes
15
+ export {webgl2Adapter} from './adapter/webgl-adapter';
16
+ export type {WebGLAdapter} from './adapter/webgl-adapter';
17
+
18
+ // WebGL Device classes
15
19
  export {WebGLDevice} from './adapter/webgl-device';
16
20
  export {WebGLCanvasContext} from './adapter/webgl-canvas-context';
17
21
 
@@ -34,7 +38,7 @@ export {WEBGLVertexArray} from './adapter/resources/webgl-vertex-array';
34
38
  export {WEBGLTransformFeedback} from './adapter/resources/webgl-transform-feedback';
35
39
 
36
40
  // WebGL adapter classes
37
- export {Accessor} from './classic/accessor';
41
+ export {Accessor} from './deprecated/accessor';
38
42
  export type {AccessorObject} from './types';
39
43
 
40
44
  // Unified parameter API
@@ -42,19 +46,10 @@ export type {AccessorObject} from './types';
42
46
  export {setDeviceParameters, withDeviceParameters} from './adapter/converters/device-parameters';
43
47
 
44
48
  // HELPERS - EXPERIMENTAL
45
- export {getShaderLayout} from './adapter/helpers/get-shader-layout';
46
-
47
- // TEST EXPORTS
48
- export {TEXTURE_FORMATS as _TEXTURE_FORMATS} from './adapter/converters/texture-formats';
49
+ export {getShaderLayoutFromGLSL} from './adapter/helpers/get-shader-layout';
50
+ export {WebGLStateTracker} from './context/state-tracker/webgl-state-tracker';
49
51
 
50
52
  // DEPRECATED TEST EXPORTS
51
- // State tracking
52
- export {
53
- trackContextState,
54
- pushContextState,
55
- popContextState
56
- } from './context/state-tracker/track-context-state';
57
-
58
53
  export {
59
54
  resetGLParameters,
60
55
  setGLParameters,
@@ -2,15 +2,15 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
- import type {NumberArray} from '@math.gl/types';
5
+ import type {NumericArray} from '@math.gl/types';
6
6
 
7
7
  // Uses copyWithin to significantly speed up typed array value filling
8
8
  export function fillArray(options: {
9
- target: NumberArray;
10
- source: NumberArray;
9
+ target: NumericArray;
10
+ source: NumericArray;
11
11
  start?: number;
12
12
  count?: number;
13
- }): NumberArray {
13
+ }): NumericArray {
14
14
  const {target, source, start = 0, count = 1} = options;
15
15
  const length = source.length;
16
16
  const total = count * length;
@@ -5,7 +5,7 @@
5
5
  import type {UniformValue, Binding} from '@luma.gl/core';
6
6
  import {isNumericArray} from '@math.gl/types';
7
7
 
8
- export function isUniformValue(value: unknown): boolean {
8
+ export function isUniformValue(value: unknown): value is UniformValue {
9
9
  return isNumericArray(value) !== null || typeof value === 'number' || typeof value === 'boolean';
10
10
  }
11
11
 
@@ -21,9 +21,9 @@ export function splitUniformsAndBindings(
21
21
  Object.keys(uniforms).forEach(name => {
22
22
  const uniform = uniforms[name];
23
23
  if (isUniformValue(uniform)) {
24
- result.uniforms[name] = uniform as UniformValue;
24
+ result.uniforms[name] = uniform;
25
25
  } else {
26
- result.bindings[name] = uniform as Binding;
26
+ result.bindings[name] = uniform;
27
27
  }
28
28
  });
29
29
 
@@ -0,0 +1,16 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ const uidCounters: Record<string, number> = {};
6
+
7
+ /**
8
+ * Returns a UID.
9
+ * @param id= - Identifier base name
10
+ * @return uid
11
+ **/
12
+ export function uid(id: string = 'id'): string {
13
+ uidCounters[id] = uidCounters[id] || 1;
14
+ const count = uidCounters[id]++;
15
+ return `${id}-${count}`;
16
+ }
@@ -1,83 +0,0 @@
1
- import type { TextureFormat, DeviceFeature } from '@luma.gl/core';
2
- import { GL, GLPixelType, GLExtensions, GLTexelDataFormat } from '@luma.gl/constants';
3
- export declare const TEXTURE_FEATURES: Partial<Record<DeviceFeature, string[]>>;
4
- /** Return a list of texture feature strings (for Device.features). Mainly compressed texture support */
5
- export declare function isTextureFeature(feature: DeviceFeature): boolean;
6
- /** Checks a texture feature (for Device.features). Mainly compressed texture support */
7
- export declare function checkTextureFeature(gl: WebGL2RenderingContext, feature: DeviceFeature, extensions: GLExtensions): boolean;
8
- /** Map a format to webgl and constants */
9
- type Format = {
10
- gl?: GL;
11
- /** format requires WebGL2, when using a WebGL 1 context, color renderbuffer formats are limited */
12
- gl2ext?: string;
13
- /** (bytes per pixel), for memory usage calculations. */
14
- b?: number;
15
- /** channels */
16
- c?: number;
17
- bpp?: number;
18
- /** packed */
19
- p?: number;
20
- /** compressed */
21
- x?: string;
22
- /** for compressed texture formats */
23
- f?: DeviceFeature;
24
- /** renderable if feature is present */
25
- render?: DeviceFeature;
26
- /** filterable if feature is present */
27
- filter?: DeviceFeature;
28
- /** If not supported on WebGPU */
29
- wgpu?: false;
30
- types?: GLPixelType[];
31
- dataFormat?: GLTexelDataFormat;
32
- /** Depth and stencil format attachment points. If set, needs to be a Renderbuffer unless depthTexture is set */
33
- attachment?: GL.DEPTH_ATTACHMENT | GL.STENCIL_ATTACHMENT | GL.DEPTH_STENCIL_ATTACHMENT;
34
- /** if depthTexture is set this is a depth/stencil format that can be set to a texture */
35
- depthTexture?: boolean;
36
- /** @deprecated can this format be used with renderbuffers */
37
- rb?: boolean;
38
- };
39
- /**
40
- * Texture format data -
41
- * Exported but can change without notice
42
- */
43
- export declare const TEXTURE_FORMATS: Record<TextureFormat, Format>;
44
- /** Checks if a texture format is supported */
45
- export declare function isTextureFormatSupported(gl: WebGL2RenderingContext, format: TextureFormat, extensions: GLExtensions): boolean;
46
- export declare function isRenderbufferFormatSupported(gl: WebGL2RenderingContext, format: TextureFormat, extensions: GLExtensions): boolean;
47
- /** Checks if a texture format is supported */
48
- export declare function getTextureFormatSupport(gl: WebGL2RenderingContext, format: TextureFormat, extensions: GLExtensions): {
49
- supported: boolean;
50
- filterable?: boolean;
51
- renderable?: boolean;
52
- blendable?: boolean;
53
- storable?: boolean;
54
- };
55
- /** Checks whether linear filtering (interpolated sampling) is available for floating point textures */
56
- export declare function isTextureFormatFilterable(gl: WebGL2RenderingContext, format: TextureFormat, extensions: GLExtensions): boolean;
57
- export declare function isTextureFormatRenderable(gl: WebGL2RenderingContext, format: TextureFormat, extensions: GLExtensions): boolean;
58
- /** Get parameters necessary to work with format in WebGL: internalFormat, dataFormat, type, compressed, */
59
- export declare function getTextureFormatWebGL(format: TextureFormat): {
60
- internalFormat: GL;
61
- format: GLTexelDataFormat;
62
- type: GLPixelType;
63
- compressed: boolean;
64
- };
65
- export declare function getDepthStencilAttachmentWebGL(format: TextureFormat): GL.DEPTH_ATTACHMENT | GL.STENCIL_ATTACHMENT | GL.DEPTH_STENCIL_ATTACHMENT;
66
- /** TODO - VERY roundabout legacy way of calculating bytes per pixel */
67
- export declare function getTextureFormatBytesPerPixel(format: TextureFormat): number;
68
- export declare function getWebGLPixelDataFormat(dataFormat: string, integer: boolean, normalized: boolean, format: GL): GLTexelDataFormat;
69
- export {};
70
- /**
71
- * Map WebGL texture formats (GL constants) to WebGPU-style TextureFormat strings
72
- export function convertGLToTextureFormat(format: GL | TextureFormat): TextureFormat {
73
- if (typeof format === 'string') {
74
- return format;
75
- }
76
- const entry = Object.entries(TEXTURE_FORMATS).find(([, entry]) => entry.gl === format);
77
- if (!entry) {
78
- throw new Error(`Unknown texture format ${format}`);
79
- }
80
- return entry[0] as TextureFormat;
81
- }
82
- */
83
- //# sourceMappingURL=texture-formats.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"texture-formats.d.ts","sourceRoot":"","sources":["../../../src/adapter/converters/texture-formats.ts"],"names":[],"mappings":"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"}