@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
@@ -0,0 +1,182 @@
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ // Goal is to make WebGL2 contexts look like WebGL1
5
+ // @note Partly inspired by with some older code from the `regl` library
6
+ /* eslint-disable camelcase */
7
+ import { GL } from '@luma.gl/constants';
8
+ // webgl1 extensions natively supported by webgl2
9
+ const WEBGL1_STATIC_EXTENSIONS = {
10
+ WEBGL_depth_texture: {
11
+ UNSIGNED_INT_24_8_WEBGL: 34042
12
+ },
13
+ OES_element_index_uint: {},
14
+ OES_texture_float: {},
15
+ OES_texture_half_float: {
16
+ // @ts-expect-error different numbers?
17
+ HALF_FLOAT_OES: 5131
18
+ },
19
+ EXT_color_buffer_float: {},
20
+ OES_standard_derivatives: {
21
+ FRAGMENT_SHADER_DERIVATIVE_HINT_OES: 35723
22
+ },
23
+ EXT_frag_depth: {},
24
+ EXT_blend_minmax: {
25
+ MIN_EXT: 32775,
26
+ MAX_EXT: 32776
27
+ },
28
+ EXT_shader_texture_lod: {}
29
+ };
30
+ const getWEBGL_draw_buffers = (gl) => ({
31
+ drawBuffersWEBGL(buffers) {
32
+ return gl.drawBuffers(buffers);
33
+ },
34
+ COLOR_ATTACHMENT0_WEBGL: 36064,
35
+ COLOR_ATTACHMENT1_WEBGL: 36065,
36
+ COLOR_ATTACHMENT2_WEBGL: 36066,
37
+ COLOR_ATTACHMENT3_WEBGL: 36067
38
+ }); // - too many fields
39
+ const getOES_vertex_array_object = (gl) => ({
40
+ VERTEX_ARRAY_BINDING_OES: 34229,
41
+ createVertexArrayOES() {
42
+ return gl.createVertexArray();
43
+ },
44
+ deleteVertexArrayOES(vertexArray) {
45
+ return gl.deleteVertexArray(vertexArray);
46
+ },
47
+ isVertexArrayOES(vertexArray) {
48
+ return gl.isVertexArray(vertexArray);
49
+ },
50
+ bindVertexArrayOES(vertexArray) {
51
+ return gl.bindVertexArray(vertexArray);
52
+ }
53
+ });
54
+ const getANGLE_instanced_arrays = (gl) => ({
55
+ VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE: 0x88fe,
56
+ drawArraysInstancedANGLE(...args) {
57
+ return gl.drawArraysInstanced(...args);
58
+ },
59
+ drawElementsInstancedANGLE(...args) {
60
+ return gl.drawElementsInstanced(...args);
61
+ },
62
+ vertexAttribDivisorANGLE(...args) {
63
+ return gl.vertexAttribDivisor(...args);
64
+ }
65
+ });
66
+ /**
67
+ * Make browser return WebGL2 contexts even if WebGL1 contexts are requested
68
+ * @param enforce
69
+ * @returns
70
+ */
71
+ export function enforceWebGL2(enforce = true) {
72
+ const prototype = HTMLCanvasElement.prototype;
73
+ if (!enforce && prototype.originalGetContext) {
74
+ // Reset the original getContext function
75
+ prototype.getContext = prototype.originalGetContext;
76
+ prototype.originalGetContext = undefined;
77
+ return;
78
+ }
79
+ // Store the original getContext function
80
+ prototype.originalGetContext = prototype.getContext;
81
+ // Override the getContext function
82
+ prototype.getContext = function (contextId, options) {
83
+ // Attempt to force WebGL2 for all WebGL1 contexts
84
+ if (contextId === 'webgl' || contextId === 'experimental-webgl') {
85
+ const context = this.originalGetContext('webgl2', options);
86
+ // Work around test mocking
87
+ if (context instanceof HTMLElement) {
88
+ polyfillWebGL1Extensions(context);
89
+ }
90
+ return context;
91
+ }
92
+ // For any other type, return the original context
93
+ return this.originalGetContext(contextId, options);
94
+ };
95
+ }
96
+ /** Install WebGL1-only extensions on WebGL2 contexts */
97
+ export function polyfillWebGL1Extensions(gl) {
98
+ // Enable, to support float and half-float textures
99
+ gl.getExtension('EXT_color_buffer_float');
100
+ // WebGL1 extensions implemented using WebGL2 APIs
101
+ const boundExtensions = {
102
+ ...WEBGL1_STATIC_EXTENSIONS,
103
+ WEBGL_disjoint_timer_query: gl.getExtension('EXT_disjoint_timer_query_webgl2'),
104
+ WEBGL_draw_buffers: getWEBGL_draw_buffers(gl),
105
+ OES_vertex_array_object: getOES_vertex_array_object(gl),
106
+ ANGLE_instanced_arrays: getANGLE_instanced_arrays(gl)
107
+ };
108
+ // Override gl.getExtension
109
+ // eslint-disable-next-line @typescript-eslint/unbound-method
110
+ const originalGetExtension = gl.getExtension;
111
+ gl.getExtension = function (extensionName) {
112
+ const ext = originalGetExtension.call(gl, extensionName);
113
+ if (ext) {
114
+ return ext;
115
+ }
116
+ // Injected extensions
117
+ if (extensionName in boundExtensions) {
118
+ return boundExtensions[extensionName];
119
+ }
120
+ return null;
121
+ };
122
+ // Override gl.getSupportedExtensions
123
+ // eslint-disable-next-line @typescript-eslint/unbound-method
124
+ const originalGetSupportedExtensions = gl.getSupportedExtensions;
125
+ gl.getSupportedExtensions = function () {
126
+ const extensions = originalGetSupportedExtensions.apply(gl) || [];
127
+ return extensions?.concat(Object.keys(boundExtensions));
128
+ };
129
+ }
130
+ // Update unsized WebGL1 formats to sized WebGL2 formats
131
+ // todo move to texture format file
132
+ // export function getInternalFormat(gl: WebGL2RenderingContext, format: GL, type: GL): GL {
133
+ // // webgl2 texture formats
134
+ // // https://webgl2fundamentals.org/webgl/lessons/webgl-data-textures.html
135
+ // switch (format) {
136
+ // case GL.DEPTH_COMPONENT:
137
+ // return GL.DEPTH_COMPONENT24;
138
+ // case GL.DEPTH_STENCIL:
139
+ // return GL.DEPTH24_STENCIL8;
140
+ // case GL.RGBA:
141
+ // return type === GL.HALF_FLOAT ? GL.RGBA16F : GL.RGBA32F;
142
+ // case GL.RGB:
143
+ // return type === GL.HALF_FLOAT ? GL.RGB16F : GL.RGB32F;
144
+ // default:
145
+ // return format;
146
+ // }
147
+ // }
148
+ /*
149
+ // texture type to update on the fly
150
+ export function getTextureType(gl: WebGL2RenderingContext, type: GL): GL {
151
+ if (type === HALF_FLOAT_OES) {
152
+ return GL.HALF_FLOAT;
153
+ }
154
+ return type;
155
+ }
156
+
157
+ // And texImage2D to convert the internalFormat to webgl2.
158
+ const webgl2 = this;
159
+ const origTexImage = gl.texImage2D;
160
+ gl.texImage2D = function (target, miplevel, iformat, a, typeFor6, c, d, typeFor9, f) {
161
+ if (arguments.length == 6) {
162
+ var ifmt = webgl2.getInternalFormat(gl, iformat, typeFor6);
163
+ origTexImage.apply(gl, [target, miplevel, ifmt, a, webgl.getTextureType(gl, typeFor6), c]);
164
+ } else {
165
+ // arguments.length == 9
166
+ var ifmt = webgl2.getInternalFormat(gl, iformat, typeFor9);
167
+ origTexImage.apply(gl, [
168
+ target,
169
+ miplevel,
170
+ ifmt,
171
+ a,
172
+ typeFor6,
173
+ c,
174
+ d,
175
+ webgl2.getTextureType(gl, typeFor9),
176
+ f
177
+ ]);
178
+ }
179
+ };
180
+ };
181
+ */
182
+ //# sourceMappingURL=polyfill-webgl1-extensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polyfill-webgl1-extensions.js","sourceRoot":"","sources":["../../../src/context/polyfills/polyfill-webgl1-extensions.ts"],"names":[],"mappings":"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"}
@@ -20,3 +20,4 @@ export function deepArrayEqual(x, y) {
20
20
  }
21
21
  return false;
22
22
  }
23
+ //# sourceMappingURL=deep-array-equal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deep-array-equal.js","sourceRoot":"","sources":["../../../src/context/state-tracker/deep-array-equal.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,gCAAgC;AAChC,MAAM,UAAU,cAAc,CAAC,CAAM,EAAE,CAAM;IAC3C,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3D,4BAA4B;IAC5B,IAAI,QAAQ,IAAI,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAClD,4BAA4B;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClB,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Support for listening to context state changes and intercepting state queries
3
+ * NOTE: this system does not handle buffer bindings
4
+ */
5
+ export declare class WebGLStateTracker {
6
+ static get(gl: WebGL2RenderingContext): WebGLStateTracker;
7
+ gl: WebGL2RenderingContext;
8
+ program: unknown;
9
+ stateStack: object[];
10
+ enable: boolean;
11
+ cache: Record<string, any>;
12
+ log: any;
13
+ protected initialized: boolean;
14
+ constructor(gl: WebGL2RenderingContext, props?: {
15
+ log: any;
16
+ });
17
+ push(values?: {}): void;
18
+ pop(): void;
19
+ /**
20
+ * Initialize WebGL state caching on a context
21
+ * can be called multiple times to enable/disable
22
+ *
23
+ * @note After calling this function, context state will be cached
24
+ * .push() and .pop() will be available for saving,
25
+ * temporarily modifying, and then restoring state.
26
+ */
27
+ trackState(gl: WebGL2RenderingContext, options?: {
28
+ copyState?: boolean;
29
+ }): void;
30
+ /**
31
+ // interceptor for context set functions - update our cache and our stack
32
+ // values (Object) - the key values for this setter
33
+ * @param values
34
+ * @returns
35
+ */
36
+ _updateCache(values: {
37
+ [key: number | string]: any;
38
+ }): {
39
+ valueChanged: boolean;
40
+ oldValue: any;
41
+ };
42
+ }
43
+ //# sourceMappingURL=webgl-state-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webgl-state-tracker.d.ts","sourceRoot":"","sources":["../../../src/context/state-tracker/webgl-state-tracker.ts"],"names":[],"mappings":"AAcA;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,sBAAsB,GAAG,iBAAiB;IAKzD,EAAE,EAAE,sBAAsB,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAQ;IACxB,UAAU,EAAE,MAAM,EAAE,CAAM;IAC1B,MAAM,UAAQ;IACd,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAS;IACnC,GAAG,MAAC;IAEJ,SAAS,CAAC,WAAW,UAAS;gBAG5B,EAAE,EAAE,sBAAsB,EAC1B,KAAK,CAAC,EAAE;QACN,GAAG,MAAC;KACL;IASH,IAAI,CAAC,MAAM,KAAK;IAIhB,GAAG;IASH;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,EAAE,sBAAsB,EAAE,OAAO,CAAC,EAAE;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAC,GAAG,IAAI;IAwB7E;;;;;OAKG;IACH,YAAY,CAAC,MAAM,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG,CAAA;KAAC;;;;CA8BnD"}
@@ -1,26 +1,29 @@
1
1
  // luma.gl
2
2
  // SPDX-License-Identifier: MIT
3
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
6
- import { GL_PARAMETER_DEFAULTS, GL_HOOKED_SETTERS, NON_CACHE_PARAMETERS } from "../parameters/webgl-parameter-tables.js";
7
4
  import { setGLParameters, getGLParameters } from "../parameters/unified-parameter-api.js";
8
5
  import { deepArrayEqual } from "./deep-array-equal.js";
9
- // HELPER CLASS - GLState
10
- /* eslint-disable no-shadow */
11
- class GLState {
6
+ import { GL_PARAMETER_DEFAULTS, GL_HOOKED_SETTERS, NON_CACHE_PARAMETERS } from "../parameters/webgl-parameter-tables.js";
7
+ // HELPER CLASS - WebGLStateTracker
8
+ /**
9
+ * Support for listening to context state changes and intercepting state queries
10
+ * NOTE: this system does not handle buffer bindings
11
+ */
12
+ export class WebGLStateTracker {
13
+ static get(gl) {
14
+ // @ts-expect-error
15
+ return gl.state;
16
+ }
12
17
  gl;
13
18
  program = null;
14
19
  stateStack = [];
15
20
  enable = true;
16
- cache;
21
+ cache = null;
17
22
  log;
18
- constructor(gl, { copyState = false, // Copy cache from params (slow) or initialize from WebGL defaults (fast)
19
- log = () => { } // Logging function, called when gl parameter change calls are actually issued
20
- } = {}) {
23
+ initialized = false;
24
+ constructor(gl, props) {
21
25
  this.gl = gl;
22
- this.cache = copyState ? getGLParameters(gl) : Object.assign({}, GL_PARAMETER_DEFAULTS);
23
- this.log = log;
26
+ this.log = props?.log || (() => { });
24
27
  this._updateCache = this._updateCache.bind(this);
25
28
  Object.seal(this);
26
29
  }
@@ -35,6 +38,32 @@ class GLState {
35
38
  // Don't pop until we have reset parameters (to make sure other "stack frames" are not affected)
36
39
  this.stateStack.pop();
37
40
  }
41
+ /**
42
+ * Initialize WebGL state caching on a context
43
+ * can be called multiple times to enable/disable
44
+ *
45
+ * @note After calling this function, context state will be cached
46
+ * .push() and .pop() will be available for saving,
47
+ * temporarily modifying, and then restoring state.
48
+ */
49
+ trackState(gl, options) {
50
+ this.cache = options.copyState ? getGLParameters(gl) : Object.assign({}, GL_PARAMETER_DEFAULTS);
51
+ if (this.initialized) {
52
+ throw new Error('WebGLStateTracker');
53
+ }
54
+ this.initialized = true;
55
+ // @ts-expect-error
56
+ this.gl.state = this;
57
+ installProgramSpy(gl);
58
+ // intercept all setter functions in the table
59
+ for (const key in GL_HOOKED_SETTERS) {
60
+ const setter = GL_HOOKED_SETTERS[key];
61
+ installSetterSpy(gl, key, setter);
62
+ }
63
+ // intercept all getter functions in the table
64
+ installGetterOverride(gl, 'getParameter');
65
+ installGetterOverride(gl, 'isEnabled');
66
+ }
38
67
  /**
39
68
  // interceptor for context set functions - update our cache and our stack
40
69
  // values (Object) - the key values for this setter
@@ -66,65 +95,6 @@ class GLState {
66
95
  return { valueChanged, oldValue };
67
96
  }
68
97
  }
69
- function getContextState(gl) {
70
- // @ts-expect-error
71
- return gl.state;
72
- }
73
- // PUBLIC API
74
- /**
75
- * Initialize WebGL state caching on a context
76
- * can be called multiple times to enable/disable
77
- *
78
- * @note After calling this function, context state will be cached
79
- * gl.state.push() and gl.state.pop() will be available for saving,
80
- * temporarily modifying, and then restoring state.
81
- */
82
- export function trackContextState(gl, options) {
83
- const { enable = true, copyState } = options || {};
84
- // assert(copyState !== undefined);
85
- // @ts-expect-error
86
- if (!gl.state) {
87
- // @ts-ignore
88
- // const {polyfillContext} = global_;
89
- // if (polyfillContext) {
90
- // polyfillContext(gl);
91
- // }
92
- // Create a state cache
93
- // @ts-expect-error
94
- gl.state = new GLState(gl, { copyState });
95
- installProgramSpy(gl);
96
- // intercept all setter functions in the table
97
- for (const key in GL_HOOKED_SETTERS) {
98
- const setter = GL_HOOKED_SETTERS[key];
99
- installSetterSpy(gl, key, setter);
100
- }
101
- // intercept all getter functions in the table
102
- installGetterOverride(gl, 'getParameter');
103
- installGetterOverride(gl, 'isEnabled');
104
- }
105
- const glState = getContextState(gl);
106
- glState.enable = enable;
107
- return gl;
108
- }
109
- /**
110
- * Saves current WebGL context state onto an internal per-context stack
111
- */
112
- export function pushContextState(gl) {
113
- let glState = getContextState(gl);
114
- if (!glState) {
115
- trackContextState(gl, { copyState: false });
116
- glState = getContextState(gl);
117
- }
118
- glState.push();
119
- }
120
- /**
121
- * Restores previously saved WebGL context state
122
- */
123
- export function popContextState(gl) {
124
- const glState = getContextState(gl);
125
- // assert(glState);
126
- glState.pop();
127
- }
128
98
  // HELPER FUNCTIONS - INSTALL GET/SET INTERCEPTORS (SPYS) ON THE CONTEXT
129
99
  /**
130
100
  // Overrides a WebGL2RenderingContext state "getter" function
@@ -141,7 +111,7 @@ function installGetterOverride(gl, functionName) {
141
111
  // Invalid or blacklisted parameter, do not cache
142
112
  return originalGetterFunc(pname);
143
113
  }
144
- const glState = getContextState(gl);
114
+ const glState = WebGLStateTracker.get(gl);
145
115
  if (!(pname in glState.cache)) {
146
116
  // WebGL limits are not prepopulated in the cache, call the original getter when first queried.
147
117
  glState.cache[pname] = originalGetterFunc(pname);
@@ -180,7 +150,7 @@ function installSetterSpy(gl, functionName, setter) {
180
150
  gl[functionName] = function set(...params) {
181
151
  // Update the value
182
152
  // Call the setter with the state cache and the params so that it can store the parameters
183
- const glState = getContextState(gl);
153
+ const glState = WebGLStateTracker.get(gl);
184
154
  // eslint-disable-next-line @typescript-eslint/unbound-method
185
155
  const { valueChanged, oldValue } = setter(glState._updateCache, ...params);
186
156
  // Call the original WebGL2RenderingContext func to make sure the context actually gets updated
@@ -202,10 +172,11 @@ function installSetterSpy(gl, functionName, setter) {
202
172
  function installProgramSpy(gl) {
203
173
  const originalUseProgram = gl.useProgram.bind(gl);
204
174
  gl.useProgram = function useProgramLuma(handle) {
205
- const glState = getContextState(gl);
175
+ const glState = WebGLStateTracker.get(gl);
206
176
  if (glState.program !== handle) {
207
177
  originalUseProgram(handle);
208
178
  glState.program = handle;
209
179
  }
210
180
  };
211
181
  }
182
+ //# sourceMappingURL=webgl-state-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webgl-state-tracker.js","sourceRoot":"","sources":["../../../src/context/state-tracker/webgl-state-tracker.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
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
+ {"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,CA6BL"}
@@ -2,7 +2,7 @@
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
4
  import { setGLParameters } from "../parameters/unified-parameter-api.js";
5
- import { pushContextState, popContextState } from "./track-context-state.js";
5
+ import { WebGLStateTracker } from "./webgl-state-tracker.js";
6
6
  /**
7
7
  * Execute a function with a set of temporary WebGL parameter overrides
8
8
  * - Saves current "global" WebGL context settings
@@ -17,14 +17,15 @@ export function withGLParameters(gl, parameters, func) {
17
17
  return func(gl);
18
18
  }
19
19
  const { nocatch = true } = parameters;
20
- pushContextState(gl);
20
+ const webglState = WebGLStateTracker.get(gl);
21
+ webglState.push();
21
22
  setGLParameters(gl, parameters);
22
23
  // Setup is done, call the function
23
24
  let value;
24
25
  if (nocatch) {
25
26
  // Avoid try catch to minimize stack size impact for safe execution paths
26
27
  value = func(gl);
27
- popContextState(gl);
28
+ webglState.pop();
28
29
  }
29
30
  else {
30
31
  // Wrap in a try-catch to ensure that parameters are restored on exceptions
@@ -32,7 +33,7 @@ export function withGLParameters(gl, parameters, func) {
32
33
  value = func(gl);
33
34
  }
34
35
  finally {
35
- popContextState(gl);
36
+ webglState.pop();
36
37
  }
37
38
  }
38
39
  return value;
@@ -46,3 +47,4 @@ function isObjectEmpty(object) {
46
47
  }
47
48
  return true;
48
49
  }
50
+ //# sourceMappingURL=with-parameters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with-parameters.js","sourceRoot":"","sources":["../../../src/context/state-tracker/with-parameters.ts"],"names":[],"mappings":"AAAA,UAAU;AACV,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EAAe,eAAe,EAAC,+CAA4C;AAClF,OAAO,EAAC,iBAAiB,EAAC,iCAA8B;AAExD;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAC9B,EAA0B,EAC1B,UAA8C,EAC9C,IAAS;IAET,IAAI,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,sEAAsE;QACtE,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,EAAC,OAAO,GAAG,IAAI,EAAC,GAAG,UAAU,CAAC;IAEpC,MAAM,UAAU,GAAG,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC7C,UAAU,CAAC,IAAI,EAAE,CAAC;IAClB,eAAe,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IAEhC,mCAAmC;IACnC,IAAI,KAAK,CAAC;IAEV,IAAI,OAAO,EAAE,CAAC;QACZ,yEAAyE;QACzE,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,UAAU,CAAC,GAAG,EAAE,CAAC;IACnB,CAAC;SAAM,CAAC;QACN,2EAA2E;QAC3E,IAAI,CAAC;YACH,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,GAAG,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,UAAU;AAEV,0DAA0D;AAC1D,SAAS,aAAa,CAAC,MAAM;IAC3B,kCAAkC;IAClC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accessor.d.ts","sourceRoot":"","sources":["../../src/deprecated/accessor.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,MAAM,EAAM,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAC,EAAE,EAA0B,MAAM,oBAAoB,CAAC;AAG/D;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,MAAM,CAAC,EAAE,MAAM,CAAC;IAIhB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,sCAAsC;IACtC,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,kBAAkB;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,QAAA,MAAM,uBAAuB;;;;;;;;CAQ5B,CAAC;AAEF,qBAAa,QAAS,YAAW,cAAc;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,GAAG,cAAc,GAAG,MAAM;IAOtE,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM;IAY1D,MAAM,CAAC,OAAO,CAAC,GAAG,SAAS,EAAE,cAAc,EAAE,GAAG,QAAQ;gBAI5C,GAAG,SAAS,EAAE,cAAc,EAAE;IAM1C,QAAQ,IAAI,MAAM;IAOlB,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED,IAAI,gBAAgB,IAAI,MAAM,CAE7B;IAKD,OAAO,CAAC,KAAK,GAAE,cAAmB,GAAG,IAAI;CA2E1C;AA2CD,OAAO,EAAC,uBAAuB,EAAC,CAAC"}
@@ -1,8 +1,8 @@
1
1
  // luma.gl
2
2
  // SPDX-License-Identifier: MIT
3
3
  // Copyright (c) vis.gl contributors
4
+ import { log } from '@luma.gl/core';
4
5
  import { GL } from '@luma.gl/constants';
5
- import { getTypedArrayFromGLType } from "./typed-array-utils.js";
6
6
  const DEFAULT_ACCESSOR_VALUES = {
7
7
  offset: 0,
8
8
  stride: 0,
@@ -43,6 +43,7 @@ export class Accessor {
43
43
  return new Accessor(...[DEFAULT_ACCESSOR_VALUES, ...accessors]); // Default values
44
44
  }
45
45
  constructor(...accessors) {
46
+ log.warn('Accessor will be removed in next minor release');
46
47
  accessors.forEach(accessor => this._assign(accessor)); // Merge in sequence
47
48
  Object.freeze(this);
48
49
  }
@@ -137,5 +138,40 @@ export class Accessor {
137
138
  return this;
138
139
  }
139
140
  }
141
+ /**
142
+ * Converts GL constant to corresponding TYPED ARRAY
143
+ * Used to auto deduce gl parameter types
144
+ * @deprecated Use getTypedArrayFromDataType
145
+ * @param glType
146
+ * @param param1
147
+ * @returns
148
+ */
149
+ // eslint-disable-next-line complexity
150
+ function getTypedArrayFromGLType(glType, options) {
151
+ const { clamped = true } = options || {};
152
+ // Sorted in some order of likelihood to reduce amount of comparisons
153
+ switch (glType) {
154
+ case 5126:
155
+ return Float32Array;
156
+ case 5123:
157
+ case 33635:
158
+ case 32819:
159
+ case 32820:
160
+ return Uint16Array;
161
+ case 5125:
162
+ return Uint32Array;
163
+ case 5121:
164
+ return clamped ? Uint8ClampedArray : Uint8Array;
165
+ case 5120:
166
+ return Int8Array;
167
+ case 5122:
168
+ return Int16Array;
169
+ case 5124:
170
+ return Int32Array;
171
+ default:
172
+ throw new Error('Failed to deduce typed array type from GL constant');
173
+ }
174
+ }
140
175
  // TEST EXPORTS
141
176
  export { DEFAULT_ACCESSOR_VALUES };
177
+ //# sourceMappingURL=accessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accessor.js","sourceRoot":"","sources":["../../src/deprecated/accessor.ts"],"names":[],"mappings":"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"}