@luma.gl/webgl 9.0.0-beta.5 → 9.0.0-beta.6

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 (181) hide show
  1. package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
  2. package/dist/adapter/converters/device-parameters.js +71 -11
  3. package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
  4. package/dist/adapter/converters/sampler-parameters.js +3 -2
  5. package/dist/adapter/converters/shader-formats.d.ts.map +1 -1
  6. package/dist/adapter/converters/shader-formats.js +40 -20
  7. package/dist/adapter/converters/texture-formats.d.ts +10 -7
  8. package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
  9. package/dist/adapter/converters/texture-formats.js +76 -64
  10. package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
  11. package/dist/adapter/converters/vertex-formats.js +2 -1
  12. package/dist/adapter/device-helpers/webgl-device-features.d.ts +18 -5
  13. package/dist/adapter/device-helpers/webgl-device-features.d.ts.map +1 -1
  14. package/dist/adapter/device-helpers/webgl-device-features.js +77 -43
  15. package/dist/adapter/device-helpers/webgl-device-info.d.ts +2 -1
  16. package/dist/adapter/device-helpers/webgl-device-info.d.ts.map +1 -1
  17. package/dist/adapter/device-helpers/webgl-device-info.js +17 -14
  18. package/dist/adapter/device-helpers/webgl-device-limits.d.ts +33 -48
  19. package/dist/adapter/device-helpers/webgl-device-limits.d.ts.map +1 -1
  20. package/dist/adapter/device-helpers/webgl-device-limits.js +42 -87
  21. package/dist/adapter/helpers/decode-webgl-types.d.ts.map +1 -1
  22. package/dist/adapter/helpers/decode-webgl-types.js +2 -1
  23. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
  24. package/dist/adapter/helpers/get-shader-layout.js +6 -5
  25. package/dist/adapter/helpers/parse-shader-compiler-log.d.ts.map +1 -1
  26. package/dist/adapter/helpers/parse-shader-compiler-log.js +3 -2
  27. package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
  28. package/dist/adapter/helpers/set-uniform.js +2 -1
  29. package/dist/adapter/helpers/webgl-topology-utils.d.ts.map +1 -1
  30. package/dist/adapter/helpers/webgl-topology-utils.js +2 -1
  31. package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
  32. package/dist/adapter/objects/constants-to-keys.js +2 -1
  33. package/dist/adapter/objects/webgl-renderbuffer.d.ts +2 -2
  34. package/dist/adapter/objects/webgl-renderbuffer.d.ts.map +1 -1
  35. package/dist/adapter/objects/webgl-renderbuffer.js +24 -11
  36. package/dist/adapter/objects/webgl-resource.d.ts +2 -24
  37. package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
  38. package/dist/adapter/objects/webgl-resource.js +6 -100
  39. package/dist/adapter/resources/webgl-buffer.d.ts +1 -1
  40. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  41. package/dist/adapter/resources/webgl-buffer.js +2 -1
  42. package/dist/adapter/resources/webgl-command-buffer.d.ts +1 -1
  43. package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
  44. package/dist/adapter/resources/webgl-command-buffer.js +7 -6
  45. package/dist/adapter/resources/webgl-command-encoder.d.ts +8 -3
  46. package/dist/adapter/resources/webgl-command-encoder.d.ts.map +1 -1
  47. package/dist/adapter/resources/webgl-command-encoder.js +4 -2
  48. package/dist/adapter/resources/webgl-external-texture.js +3 -2
  49. package/dist/adapter/resources/webgl-framebuffer.d.ts +6 -8
  50. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  51. package/dist/adapter/resources/webgl-framebuffer.js +25 -23
  52. package/dist/adapter/resources/webgl-query-set.d.ts +44 -0
  53. package/dist/adapter/resources/webgl-query-set.d.ts.map +1 -0
  54. package/dist/adapter/resources/webgl-query-set.js +136 -0
  55. package/dist/adapter/resources/webgl-render-pass.d.ts +3 -1
  56. package/dist/adapter/resources/webgl-render-pass.d.ts.map +1 -1
  57. package/dist/adapter/resources/webgl-render-pass.js +15 -7
  58. package/dist/adapter/resources/webgl-render-pipeline.d.ts +4 -5
  59. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  60. package/dist/adapter/resources/webgl-render-pipeline.js +34 -49
  61. package/dist/adapter/resources/webgl-sampler.d.ts +1 -1
  62. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
  63. package/dist/adapter/resources/webgl-sampler.js +3 -2
  64. package/dist/adapter/resources/webgl-shader.d.ts +3 -2
  65. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  66. package/dist/adapter/resources/webgl-shader.js +12 -6
  67. package/dist/adapter/resources/webgl-texture-view.d.ts +14 -0
  68. package/dist/adapter/resources/webgl-texture-view.d.ts.map +1 -0
  69. package/dist/adapter/resources/webgl-texture-view.js +18 -0
  70. package/dist/adapter/resources/webgl-texture.d.ts +4 -3
  71. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  72. package/dist/adapter/resources/webgl-texture.js +12 -7
  73. package/dist/adapter/resources/webgl-transform-feedback.d.ts +1 -1
  74. package/dist/adapter/resources/webgl-transform-feedback.d.ts.map +1 -1
  75. package/dist/adapter/resources/webgl-transform-feedback.js +2 -2
  76. package/dist/adapter/resources/webgl-vertex-array.d.ts +3 -3
  77. package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -1
  78. package/dist/adapter/resources/webgl-vertex-array.js +5 -4
  79. package/dist/adapter/webgl-canvas-context.d.ts +2 -2
  80. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
  81. package/dist/adapter/webgl-canvas-context.js +3 -2
  82. package/dist/adapter/webgl-device.d.ts +29 -27
  83. package/dist/adapter/webgl-device.d.ts.map +1 -1
  84. package/dist/adapter/webgl-device.js +90 -94
  85. package/dist/classic/accessor.d.ts.map +1 -1
  86. package/dist/classic/accessor.js +4 -3
  87. package/dist/classic/clear.d.ts.map +1 -1
  88. package/dist/classic/clear.js +3 -2
  89. package/dist/classic/copy-and-blit.d.ts +1 -1
  90. package/dist/classic/copy-and-blit.d.ts.map +1 -1
  91. package/dist/classic/copy-and-blit.js +5 -4
  92. package/dist/classic/format-utils.d.ts +2 -2
  93. package/dist/classic/format-utils.d.ts.map +1 -1
  94. package/dist/classic/format-utils.js +2 -1
  95. package/dist/classic/typed-array-utils.d.ts.map +1 -1
  96. package/dist/classic/typed-array-utils.js +2 -1
  97. package/dist/context/debug/spector.d.ts.map +1 -1
  98. package/dist/context/debug/spector.js +2 -1
  99. package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
  100. package/dist/context/debug/webgl-developer-tools.js +7 -6
  101. package/dist/context/helpers/create-browser-context.d.ts +35 -0
  102. package/dist/context/helpers/create-browser-context.d.ts.map +1 -0
  103. package/dist/context/helpers/create-browser-context.js +67 -0
  104. package/dist/context/helpers/webgl-context-data.d.ts +13 -0
  105. package/dist/context/helpers/webgl-context-data.d.ts.map +1 -0
  106. package/dist/context/helpers/webgl-context-data.js +21 -0
  107. package/dist/context/helpers/webgl-extensions.d.ts +4 -0
  108. package/dist/context/helpers/webgl-extensions.d.ts.map +1 -0
  109. package/dist/context/helpers/webgl-extensions.js +10 -0
  110. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  111. package/dist/context/parameters/unified-parameter-api.js +4 -3
  112. package/dist/context/parameters/webgl-parameter-tables.d.ts +10 -0
  113. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  114. package/dist/context/parameters/webgl-parameter-tables.js +29 -16
  115. package/dist/context/state-tracker/deep-array-equal.d.ts.map +1 -1
  116. package/dist/context/state-tracker/deep-array-equal.js +2 -1
  117. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
  118. package/dist/context/state-tracker/track-context-state.js +5 -4
  119. package/dist/context/state-tracker/with-parameters.d.ts +1 -1
  120. package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
  121. package/dist/context/state-tracker/with-parameters.js +5 -4
  122. package/dist/dist.dev.js +941 -730
  123. package/dist/index.cjs +732 -565
  124. package/dist/index.cjs.map +4 -4
  125. package/dist/index.d.ts +25 -25
  126. package/dist/index.d.ts.map +1 -1
  127. package/dist/index.js +24 -23
  128. package/dist/types.d.ts.map +1 -1
  129. package/dist/types.js +2 -1
  130. package/dist.min.js +5 -5
  131. package/package.json +4 -4
  132. package/src/adapter/converters/device-parameters.ts +105 -16
  133. package/src/adapter/converters/sampler-parameters.ts +12 -3
  134. package/src/adapter/converters/shader-formats.ts +47 -22
  135. package/src/adapter/converters/texture-formats.ts +87 -66
  136. package/src/adapter/converters/vertex-formats.ts +3 -3
  137. package/src/adapter/device-helpers/webgl-device-features.ts +83 -51
  138. package/src/adapter/device-helpers/webgl-device-info.ts +28 -19
  139. package/src/adapter/device-helpers/webgl-device-limits.ts +46 -150
  140. package/src/adapter/helpers/decode-webgl-types.ts +13 -7
  141. package/src/adapter/helpers/get-shader-layout.ts +4 -3
  142. package/src/adapter/helpers/parse-shader-compiler-log.ts +10 -6
  143. package/src/adapter/helpers/set-uniform.ts +2 -1
  144. package/src/adapter/helpers/webgl-topology-utils.ts +10 -3
  145. package/src/adapter/objects/constants-to-keys.ts +2 -1
  146. package/src/adapter/objects/webgl-renderbuffer.ts +35 -13
  147. package/src/adapter/objects/webgl-resource.ts +6 -124
  148. package/src/adapter/resources/webgl-buffer.ts +4 -3
  149. package/src/adapter/resources/webgl-command-buffer.ts +5 -5
  150. package/src/adapter/resources/webgl-command-encoder.ts +14 -11
  151. package/src/adapter/resources/webgl-external-texture.ts +3 -2
  152. package/src/adapter/resources/webgl-framebuffer.ts +34 -29
  153. package/src/adapter/resources/webgl-query-set.ts +171 -0
  154. package/src/adapter/resources/webgl-render-pass.ts +17 -8
  155. package/src/adapter/resources/webgl-render-pipeline.ts +41 -48
  156. package/src/adapter/resources/webgl-sampler.ts +2 -1
  157. package/src/adapter/resources/webgl-shader.ts +12 -5
  158. package/src/adapter/resources/webgl-texture-view.ts +28 -0
  159. package/src/adapter/resources/webgl-texture.ts +9 -2
  160. package/src/adapter/resources/webgl-transform-feedback.ts +2 -7
  161. package/src/adapter/resources/webgl-vertex-array.ts +4 -3
  162. package/src/adapter/webgl-canvas-context.ts +6 -4
  163. package/src/adapter/webgl-device.ts +94 -90
  164. package/src/classic/accessor.ts +5 -4
  165. package/src/classic/clear.ts +12 -6
  166. package/src/classic/copy-and-blit.ts +11 -4
  167. package/src/classic/format-utils.ts +2 -1
  168. package/src/classic/typed-array-utils.ts +3 -7
  169. package/src/context/debug/spector.ts +9 -6
  170. package/src/context/debug/webgl-developer-tools.ts +27 -14
  171. package/src/context/{context → helpers}/create-browser-context.ts +3 -2
  172. package/src/context/helpers/webgl-context-data.ts +31 -0
  173. package/src/context/helpers/webgl-extensions.ts +17 -0
  174. package/src/context/parameters/unified-parameter-api.ts +2 -1
  175. package/src/context/parameters/webgl-parameter-tables.ts +69 -32
  176. package/src/context/state-tracker/deep-array-equal.ts +2 -1
  177. package/src/context/state-tracker/track-context-state.ts +11 -6
  178. package/src/context/state-tracker/with-parameters.ts +7 -2
  179. package/src/index.ts +3 -2
  180. package/src/types.ts +2 -1
  181. package/src/context/context/context-data.ts +0 -44
@@ -1,52 +1,86 @@
1
- // luma.gl, MIT license
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
2
3
  // Copyright (c) vis.gl contributors
3
- import { getTextureFeatures } from '../converters/texture-formats';
4
- /** Get WebGPU style feature strings */
5
- export function getDeviceFeatures(gl) {
6
- const features = getWebGLFeatures(gl);
7
- // texture features
8
- // features.add('texture-compression-bc');
9
- for (const textureFeature of getTextureFeatures(gl)) {
10
- features.add(textureFeature);
11
- }
12
- // TODO
13
- // features.add('depth-clip-control'); // GPUPrimitiveState.clampDepth
14
- // features.add('depth24unorm-stencil8'); // GPUTextureFormat 'depth24unorm-stencil8'.
15
- // features.add('depth32float-stencil8'); // GPUTextureFormat 'depth32float-stencil8'.
16
- // features.add('timestamp-query'); // GPUQueryType "timestamp-query"
17
- // "indirect-first-instance"
18
- return features;
19
- }
20
- /** Extract all WebGL features */
21
- export function getWebGLFeatures(gl) {
22
- // Enable EXT_float_blend first: https://developer.mozilla.org/en-US/docs/Web/API/EXT_float_blend
23
- gl.getExtension('EXT_color_buffer_float');
24
- const features = new Set();
25
- for (const feature of Object.keys(WEBGL_FEATURES)) {
26
- if (isFeatureSupported(gl, feature)) {
27
- features.add(feature);
28
- }
29
- }
30
- return features;
31
- }
32
- function isFeatureSupported(gl, feature) {
33
- const featureInfo = WEBGL_FEATURES[feature];
34
- // string value requires checking the corresponding WebGL extension
35
- return typeof featureInfo === 'string'
36
- ? Boolean(gl.getExtension(featureInfo))
37
- : Boolean(featureInfo);
38
- }
4
+ // Feature detection for WebGL
5
+ // Provides a function that enables simple checking of which WebGL features are
6
+ import { DeviceFeatures } from '@luma.gl/core';
7
+ import { getWebGLExtension } from "../../context/helpers/webgl-extensions.js";
8
+ import { isTextureFeature, checkTextureFeature } from "../converters/texture-formats.js";
9
+ import { TEXTURE_FEATURES } from "../converters/texture-formats.js";
39
10
  /**
40
11
  * Defines luma.gl "feature" names and semantics
41
12
  * when value is 'string' it is the name of the extension that enables this feature
42
13
  */
43
14
  const WEBGL_FEATURES = {
44
- webgl: true,
45
- glsl: true,
46
- 'uniforms-webgl': true,
47
- 'transform-feedback-webgl': true,
48
- 'constant-attributes-webgl': true,
15
+ // optional WebGPU features
16
+ 'depth-clip-control': 'EXT_depth_clamp', // TODO these seem subtly different
17
+ // 'timestamp-query' // GPUQueryType "timestamp-query"
18
+ // "indirect-first-instance"
19
+ // Textures are handled by getTextureFeatures()
20
+ // 'depth24unorm-stencil8' // GPUTextureFormat 'depth24unorm-stencil8'
21
+ // 'depth32float-stencil8' // GPUTextureFormat 'depth32float-stencil8'
22
+ // optional WebGL features
49
23
  'timer-query-webgl': 'EXT_disjoint_timer_query_webgl2',
50
- 'shader-status-async-webgl': 'KHR_parallel_shader_compile'
24
+ 'compilation-status-async-webgl': 'KHR_parallel_shader_compile',
25
+ 'polygon-mode-webgl': 'WEBGL_polygon_mode',
26
+ 'provoking-vertex-webgl': 'WEBGL_provoking_vertex',
27
+ 'shader-clip-cull-distance-webgl': 'WEBGL_clip_cull_distance',
28
+ 'shader-noperspective-interpolation-webgl': 'NV_shader_noperspective_interpolation',
29
+ 'shader-conservative-depth-webgl': 'EXT_conservative_depth'
51
30
  // Textures are handled by getTextureFeatures()
52
31
  };
32
+ /**
33
+ * WebGL extensions exposed as luma.gl features
34
+ * To minimize GL log noise and improve performance, this class ensures that
35
+ * - WebGL extensions are not queried until the corresponding feature is checked.
36
+ * - WebGL extensions are only queried once.
37
+ */
38
+ export class WebGLDeviceFeatures extends DeviceFeatures {
39
+ gl;
40
+ extensions;
41
+ testedFeatures = new Set();
42
+ constructor(gl, extensions) {
43
+ super();
44
+ this.gl = gl;
45
+ this.extensions = extensions;
46
+ // TODO - is this really needed?
47
+ // Enable EXT_float_blend first: https://developer.mozilla.org/en-US/docs/Web/API/EXT_float_blend
48
+ getWebGLExtension(gl, 'EXT_color_buffer_float', extensions);
49
+ }
50
+ *[Symbol.iterator]() {
51
+ for (const feature of Object.keys(WEBGL_FEATURES)) {
52
+ if (this.has(feature)) {
53
+ yield feature;
54
+ }
55
+ }
56
+ for (const feature of Object.keys(TEXTURE_FEATURES)) {
57
+ if (this.has(feature)) {
58
+ yield feature;
59
+ }
60
+ }
61
+ return [];
62
+ }
63
+ has(feature) {
64
+ // We have already tested this feature
65
+ if (!this.testedFeatures.has(feature)) {
66
+ this.testedFeatures.add(feature);
67
+ // Check the feature once
68
+ if (isTextureFeature(feature) && checkTextureFeature(this.gl, feature, this.extensions)) {
69
+ this.features.add(feature);
70
+ }
71
+ if (this.getWebGLFeature(feature)) {
72
+ this.features.add(feature);
73
+ }
74
+ }
75
+ return this.features.has(feature);
76
+ }
77
+ /** Extract all WebGL features */
78
+ getWebGLFeature(feature) {
79
+ const featureInfo = WEBGL_FEATURES[feature];
80
+ // string value requires checking the corresponding WebGL extension
81
+ const isSupported = typeof featureInfo === 'string'
82
+ ? Boolean(getWebGLExtension(this.gl, featureInfo, this.extensions))
83
+ : Boolean(featureInfo);
84
+ return isSupported;
85
+ }
86
+ }
@@ -1,4 +1,5 @@
1
1
  import { DeviceInfo } from '@luma.gl/core';
2
+ import { GLExtensions } from '@luma.gl/constants';
2
3
  /** @returns strings identifying the GPU vendor and driver. */
3
- export declare function getDeviceInfo(gl: WebGL2RenderingContext): DeviceInfo;
4
+ export declare function getDeviceInfo(gl: WebGL2RenderingContext, extensions: GLExtensions): DeviceInfo;
4
5
  //# sourceMappingURL=webgl-device-info.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"webgl-device-info.d.ts","sourceRoot":"","sources":["../../../src/adapter/device-helpers/webgl-device-info.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AAGzC,8DAA8D;AAC9D,wBAAgB,aAAa,CAAC,EAAE,EAAE,sBAAsB,GAAG,UAAU,CAuCpE"}
1
+ {"version":3,"file":"webgl-device-info.d.ts","sourceRoot":"","sources":["../../../src/adapter/device-helpers/webgl-device-info.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AACzC,OAAO,EAAK,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAGpD,8DAA8D;AAC9D,wBAAgB,aAAa,CAAC,EAAE,EAAE,sBAAsB,EAAE,UAAU,EAAE,YAAY,GAAG,UAAU,CAwC9F"}
@@ -1,14 +1,17 @@
1
- // luma.gl, MIT license
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
2
3
  // Copyright (c) vis.gl contributors
3
4
  import { GL } from '@luma.gl/constants';
5
+ import { getWebGLExtension } from "../../context/helpers/webgl-extensions.js";
4
6
  /** @returns strings identifying the GPU vendor and driver. */
5
- export function getDeviceInfo(gl) {
7
+ export function getDeviceInfo(gl, extensions) {
6
8
  // "Masked" info is always available, but don't contain much useful information
7
9
  const vendorMasked = gl.getParameter(GL.VENDOR);
8
10
  const rendererMasked = gl.getParameter(GL.RENDERER);
9
11
  // If we are lucky, unmasked info is available
10
12
  // https://www.khronos.org/registry/webgl/extensions/WEBGL_debug_renderer_info/
11
- const ext = gl.getExtension('WEBGL_debug_renderer_info');
13
+ getWebGLExtension(gl, 'WEBGL_debug_renderer_info', extensions);
14
+ const ext = extensions.WEBGL_debug_renderer_info;
12
15
  const vendorUnmasked = gl.getParameter(ext ? ext.UNMASKED_VENDOR_WEBGL : GL.VENDOR);
13
16
  const rendererUnmasked = gl.getParameter(ext ? ext.UNMASKED_RENDERER_WEBGL : GL.RENDERER);
14
17
  const vendor = vendorUnmasked || vendorMasked;
@@ -39,38 +42,38 @@ export function getDeviceInfo(gl) {
39
42
  }
40
43
  /** "Sniff" the GPU type from the info. This works best if unmasked info is available. */
41
44
  function identifyGPUVendor(vendor, renderer) {
42
- if ((/NVIDIA/i.exec(vendor)) || (/NVIDIA/i.exec(renderer))) {
45
+ if (/NVIDIA/i.exec(vendor) || /NVIDIA/i.exec(renderer)) {
43
46
  return 'nvidia';
44
47
  }
45
- if ((/INTEL/i.exec(vendor)) || (/INTEL/i.exec(renderer))) {
48
+ if (/INTEL/i.exec(vendor) || /INTEL/i.exec(renderer)) {
46
49
  return 'intel';
47
50
  }
48
- if ((/Apple/i.exec(vendor)) || (/Apple/i.exec(renderer))) {
51
+ if (/Apple/i.exec(vendor) || /Apple/i.exec(renderer)) {
49
52
  return 'apple';
50
53
  }
51
- if ((/AMD/i.exec(vendor)) ||
52
- (/AMD/i.exec(renderer)) ||
53
- (/ATI/i.exec(vendor)) ||
54
- (/ATI/i.exec(renderer))) {
54
+ if (/AMD/i.exec(vendor) ||
55
+ /AMD/i.exec(renderer) ||
56
+ /ATI/i.exec(vendor) ||
57
+ /ATI/i.exec(renderer)) {
55
58
  return 'amd';
56
59
  }
57
- if ((/SwiftShader/i.exec(vendor)) || (/SwiftShader/i.exec(renderer))) {
60
+ if (/SwiftShader/i.exec(vendor) || /SwiftShader/i.exec(renderer)) {
58
61
  return 'software';
59
62
  }
60
63
  return 'unknown';
61
64
  }
62
65
  /** "Sniff" the GPU backend from the info. This works best if unmasked info is available. */
63
66
  function identifyGPUBackend(vendor, renderer) {
64
- if ((/Metal/i.exec(vendor)) || (/Metal/i.exec(renderer))) {
67
+ if (/Metal/i.exec(vendor) || /Metal/i.exec(renderer)) {
65
68
  return 'metal';
66
69
  }
67
- if ((/ANGLE/i.exec(vendor)) || (/ANGLE/i.exec(renderer))) {
70
+ if (/ANGLE/i.exec(vendor) || /ANGLE/i.exec(renderer)) {
68
71
  return 'opengl';
69
72
  }
70
73
  return 'unknown';
71
74
  }
72
75
  function identifyGPUType(vendor, renderer) {
73
- if ((/SwiftShader/i.exec(vendor)) || (/SwiftShader/i.exec(renderer))) {
76
+ if (/SwiftShader/i.exec(vendor) || /SwiftShader/i.exec(renderer)) {
74
77
  return 'cpu';
75
78
  }
76
79
  const gpuVendor = identifyGPUVendor(vendor, renderer);
@@ -1,50 +1,35 @@
1
- import type { DeviceLimits } from '@luma.gl/core';
1
+ import { DeviceLimits } from '@luma.gl/core';
2
2
  import { GL } from '@luma.gl/constants';
3
- /** Populate a WebGPU style device limits */
4
- export declare function getDeviceLimits(gl: WebGL2RenderingContext): DeviceLimits;
5
- /** WebGL context limits */
6
- export type WebGLLimits = {
7
- [GL.ALIASED_LINE_WIDTH_RANGE]: [number, number];
8
- [GL.ALIASED_POINT_SIZE_RANGE]: [number, number];
9
- [GL.MAX_TEXTURE_SIZE]: number;
10
- [GL.MAX_CUBE_MAP_TEXTURE_SIZE]: number;
11
- [GL.MAX_TEXTURE_IMAGE_UNITS]: number;
12
- [GL.MAX_COMBINED_TEXTURE_IMAGE_UNITS]: number;
13
- [GL.MAX_VERTEX_TEXTURE_IMAGE_UNITS]: number;
14
- [GL.MAX_RENDERBUFFER_SIZE]: number;
15
- [GL.MAX_VARYING_VECTORS]: number;
16
- [GL.MAX_VERTEX_ATTRIBS]: number;
17
- [GL.MAX_VERTEX_UNIFORM_VECTORS]: number;
18
- [GL.MAX_FRAGMENT_UNIFORM_VECTORS]: number;
19
- [GL.MAX_VIEWPORT_DIMS]: [number, number];
20
- [GL.MAX_TEXTURE_MAX_ANISOTROPY_EXT]: number;
21
- [GL.MAX_3D_TEXTURE_SIZE]: number;
22
- [GL.MAX_ARRAY_TEXTURE_LAYERS]: number;
23
- [GL.MAX_COLOR_ATTACHMENTS]: number;
24
- [GL.MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS]: number;
25
- [GL.MAX_COMBINED_UNIFORM_BLOCKS]: number;
26
- [GL.MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS]: number;
27
- [GL.MAX_DRAW_BUFFERS]: number;
28
- [GL.MAX_ELEMENT_INDEX]: number;
29
- [GL.MAX_ELEMENTS_INDICES]: number;
30
- [GL.MAX_ELEMENTS_VERTICES]: number;
31
- [GL.MAX_FRAGMENT_INPUT_COMPONENTS]: number;
32
- [GL.MAX_FRAGMENT_UNIFORM_BLOCKS]: number;
33
- [GL.MAX_FRAGMENT_UNIFORM_COMPONENTS]: number;
34
- [GL.MAX_SAMPLES]: number;
35
- [GL.MAX_TEXTURE_LOD_BIAS]: number;
36
- [GL.MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS]: number;
37
- [GL.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS]: number;
38
- [GL.MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS]: number;
39
- [GL.MAX_UNIFORM_BLOCK_SIZE]: number;
40
- [GL.MAX_UNIFORM_BUFFER_BINDINGS]: number;
41
- [GL.MAX_VARYING_COMPONENTS]: number;
42
- [GL.MAX_VERTEX_OUTPUT_COMPONENTS]: number;
43
- [GL.MAX_VERTEX_UNIFORM_BLOCKS]: number;
44
- [GL.MAX_VERTEX_UNIFORM_COMPONENTS]: number;
45
- [GL.MIN_PROGRAM_TEXEL_OFFSET]: number;
46
- [GL.MAX_PROGRAM_TEXEL_OFFSET]: number;
47
- [GL.UNIFORM_BUFFER_OFFSET_ALIGNMENT]: number;
48
- };
49
- export declare function getWebGLLimits(gl: WebGL2RenderingContext): WebGLLimits;
3
+ export declare class WebGLDeviceLimits extends DeviceLimits {
4
+ get maxTextureDimension1D(): number;
5
+ get maxTextureDimension2D(): number;
6
+ get maxTextureDimension3D(): number;
7
+ get maxTextureArrayLayers(): number;
8
+ get maxBindGroups(): number;
9
+ get maxDynamicUniformBuffersPerPipelineLayout(): number;
10
+ get maxDynamicStorageBuffersPerPipelineLayout(): number;
11
+ get maxSampledTexturesPerShaderStage(): number;
12
+ get maxSamplersPerShaderStage(): number;
13
+ get maxStorageBuffersPerShaderStage(): number;
14
+ get maxStorageTexturesPerShaderStage(): number;
15
+ get maxUniformBuffersPerShaderStage(): number;
16
+ get maxUniformBufferBindingSize(): number;
17
+ get maxStorageBufferBindingSize(): number;
18
+ get minUniformBufferOffsetAlignment(): number;
19
+ get minStorageBufferOffsetAlignment(): number;
20
+ get maxVertexBuffers(): number;
21
+ get maxVertexAttributes(): number;
22
+ get maxVertexBufferArrayStride(): number;
23
+ get maxInterStageShaderComponents(): number;
24
+ get maxComputeWorkgroupStorageSize(): number;
25
+ get maxComputeInvocationsPerWorkgroup(): number;
26
+ get maxComputeWorkgroupSizeX(): number;
27
+ get maxComputeWorkgroupSizeY(): number;
28
+ get maxComputeWorkgroupSizeZ(): number;
29
+ get maxComputeWorkgroupsPerDimension(): number;
30
+ protected gl: WebGL2RenderingContext;
31
+ protected limits: Partial<Record<GL, number>>;
32
+ constructor(gl: WebGL2RenderingContext);
33
+ protected getParameter(parameter: GL): number;
34
+ }
50
35
  //# sourceMappingURL=webgl-device-limits.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"webgl-device-limits.d.ts","sourceRoot":"","sources":["../../../src/adapter/device-helpers/webgl-device-limits.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webgl-device-limits.d.ts","sourceRoot":"","sources":["../../../src/adapter/device-helpers/webgl-device-limits.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,YAAY,EAAC,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAC,EAAE,EAAC,MAAM,oBAAoB,CAAC;AAGtC,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,IAAI,qBAAqB,WAAgB;IACzC,IAAI,qBAAqB,WAAqD;IAC9E,IAAI,qBAAqB,WAAwD;IACjF,IAAI,qBAAqB,WAA6D;IACtF,IAAI,aAAa,WAAgB;IACjC,IAAI,yCAAyC,WAAgB;IAC7D,IAAI,yCAAyC,WAAgB;IAC7D,IAAI,gCAAgC,WAAmE;IACvG,IAAI,yBAAyB,WAAqE;IAClG,IAAI,+BAA+B,WAAgB;IACnD,IAAI,gCAAgC,WAAgB;IACpD,IAAI,+BAA+B,WAAgE;IACnG,IAAI,2BAA2B,WAA2D;IAC1F,IAAI,2BAA2B,WAAgB;IAC/C,IAAI,+BAA+B,WAAoE;IACvG,IAAI,+BAA+B,WAAgB;IACnD,IAAI,gBAAgB,WAAiB;IACrC,IAAI,mBAAmB,WAAuD;IAC9E,IAAI,0BAA0B,WAAmB;IACjD,IAAI,6BAA6B,WAA2D;IAC5F,IAAI,8BAA8B,WAAgB;IAClD,IAAI,iCAAiC,WAAgB;IACrD,IAAI,wBAAwB,WAAgB;IAC5C,IAAI,wBAAwB,WAAgB;IAC5C,IAAI,wBAAwB,WAAgB;IAC5C,IAAI,gCAAgC,WAAe;IAInD,SAAS,CAAC,EAAE,EAAE,sBAAsB,CAAC;IACrC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAM;gBAEvC,EAAE,EAAE,sBAAsB;IAKtC,SAAS,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,GAAG,MAAM;CAM9C"}
@@ -1,92 +1,47 @@
1
- // luma.gl, MIT license
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
2
3
  // Copyright (c) vis.gl contributors
4
+ import { DeviceLimits } from '@luma.gl/core';
3
5
  import { GL } from '@luma.gl/constants';
4
- /** Populate a WebGPU style device limits */
5
- export function getDeviceLimits(gl) {
6
- return {
7
- maxTextureDimension1D: 0, // WebGL does not support 1D textures
8
- maxTextureDimension2D: gl.getParameter(GL.MAX_TEXTURE_SIZE),
9
- maxTextureDimension3D: gl.getParameter(GL.MAX_3D_TEXTURE_SIZE),
10
- maxTextureArrayLayers: gl.getParameter(GL.MAX_ARRAY_TEXTURE_LAYERS),
11
- maxBindGroups: 1, // TBD - if we emulate bind groups we could support any number...
12
- maxDynamicUniformBuffersPerPipelineLayout: 0, // TBD
13
- maxDynamicStorageBuffersPerPipelineLayout: 0, // TBD
14
- maxSampledTexturesPerShaderStage: gl.getParameter(GL.MAX_VERTEX_TEXTURE_IMAGE_UNITS), // TBD
15
- maxSamplersPerShaderStage: gl.getParameter(GL.MAX_COMBINED_TEXTURE_IMAGE_UNITS),
16
- maxStorageBuffersPerShaderStage: 0, // TBD
17
- maxStorageTexturesPerShaderStage: 0, // TBD
18
- maxUniformBuffersPerShaderStage: gl.getParameter(GL.MAX_UNIFORM_BUFFER_BINDINGS),
19
- maxUniformBufferBindingSize: gl.getParameter(GL.MAX_UNIFORM_BLOCK_SIZE),
20
- maxStorageBufferBindingSize: 0,
21
- minUniformBufferOffsetAlignment: gl.getParameter(GL.UNIFORM_BUFFER_OFFSET_ALIGNMENT),
22
- minStorageBufferOffsetAlignment: 0, // TBD
23
- maxVertexBuffers: 0,
24
- maxVertexAttributes: gl.getParameter(GL.MAX_VERTEX_ATTRIBS),
25
- maxVertexBufferArrayStride: 2048, // TBD, this is just the default value from WebGPU
26
- maxInterStageShaderComponents: gl.getParameter(GL.MAX_VARYING_COMPONENTS),
27
- maxComputeWorkgroupStorageSize: 0, // WebGL does not support compute shaders
28
- maxComputeInvocationsPerWorkgroup: 0, // WebGL does not support compute shaders
29
- maxComputeWorkgroupSizeX: 0, // WebGL does not support compute shaders
30
- maxComputeWorkgroupSizeY: 0, // WebGL does not support compute shaders
31
- maxComputeWorkgroupSizeZ: 0, // WebGL does not support compute shaders
32
- maxComputeWorkgroupsPerDimension: 0 // WebGL does not support compute shaders
33
- };
34
- }
35
- export function getWebGLLimits(gl) {
36
- function get(pname) {
37
- return gl.getParameter(pname);
6
+ // prettier-ignore
7
+ export class WebGLDeviceLimits extends DeviceLimits {
8
+ get maxTextureDimension1D() { return 0; } // WebGL does not support 1D textures
9
+ get maxTextureDimension2D() { return this.getParameter(GL.MAX_TEXTURE_SIZE); }
10
+ get maxTextureDimension3D() { return this.getParameter(GL.MAX_3D_TEXTURE_SIZE); }
11
+ get maxTextureArrayLayers() { return this.getParameter(GL.MAX_ARRAY_TEXTURE_LAYERS); }
12
+ get maxBindGroups() { return 0; }
13
+ get maxDynamicUniformBuffersPerPipelineLayout() { return 0; } // TBD
14
+ get maxDynamicStorageBuffersPerPipelineLayout() { return 0; } // TBD
15
+ get maxSampledTexturesPerShaderStage() { return this.getParameter(GL.MAX_VERTEX_TEXTURE_IMAGE_UNITS); } // ) TBD
16
+ get maxSamplersPerShaderStage() { return this.getParameter(GL.MAX_COMBINED_TEXTURE_IMAGE_UNITS); }
17
+ get maxStorageBuffersPerShaderStage() { return 0; } // TBD
18
+ get maxStorageTexturesPerShaderStage() { return 0; } // TBD
19
+ get maxUniformBuffersPerShaderStage() { return this.getParameter(GL.MAX_UNIFORM_BUFFER_BINDINGS); }
20
+ get maxUniformBufferBindingSize() { return this.getParameter(GL.MAX_UNIFORM_BLOCK_SIZE); }
21
+ get maxStorageBufferBindingSize() { return 0; }
22
+ get minUniformBufferOffsetAlignment() { return this.getParameter(GL.UNIFORM_BUFFER_OFFSET_ALIGNMENT); }
23
+ get minStorageBufferOffsetAlignment() { return 0; }
24
+ get maxVertexBuffers() { return 16; } // WebGL 2 supports 16 buffers, see https://github.com/gpuweb/gpuweb/issues/4284
25
+ get maxVertexAttributes() { return this.getParameter(GL.MAX_VERTEX_ATTRIBS); }
26
+ get maxVertexBufferArrayStride() { return 2048; } // TBD, this is just the default value from WebGPU
27
+ get maxInterStageShaderComponents() { return this.getParameter(GL.MAX_VARYING_COMPONENTS); }
28
+ get maxComputeWorkgroupStorageSize() { return 0; } // WebGL does not support compute shaders
29
+ get maxComputeInvocationsPerWorkgroup() { return 0; } // WebGL does not support compute shaders
30
+ get maxComputeWorkgroupSizeX() { return 0; } // WebGL does not support compute shaders
31
+ get maxComputeWorkgroupSizeY() { return 0; } // WebGL does not support compute shaders
32
+ get maxComputeWorkgroupSizeZ() { return 0; } // WebGL does not support compute shaders
33
+ get maxComputeWorkgroupsPerDimension() { return 0; } // WebGL does not support compute shaders
34
+ // PRIVATE
35
+ gl;
36
+ limits = {};
37
+ constructor(gl) {
38
+ super();
39
+ this.gl = gl;
38
40
  }
39
- function get2(pname, defaultValue) {
40
- return gl.getParameter(pname) || defaultValue;
41
+ getParameter(parameter) {
42
+ if (this.limits[parameter] === undefined) {
43
+ this.limits[parameter] = this.gl.getParameter(parameter);
44
+ }
45
+ return this.limits[parameter];
41
46
  }
42
- // function getMaxAnistropy() {
43
- // const extension = gl.getExtension('EXT_texture_filter_anisotropic');
44
- // }
45
- return {
46
- [GL.ALIASED_LINE_WIDTH_RANGE]: get(GL.ALIASED_LINE_WIDTH_RANGE),
47
- [GL.ALIASED_POINT_SIZE_RANGE]: get(GL.ALIASED_POINT_SIZE_RANGE),
48
- [GL.MAX_TEXTURE_SIZE]: get(GL.MAX_TEXTURE_SIZE),
49
- [GL.MAX_CUBE_MAP_TEXTURE_SIZE]: get(GL.MAX_CUBE_MAP_TEXTURE_SIZE), // GLint
50
- [GL.MAX_TEXTURE_IMAGE_UNITS]: get(GL.MAX_TEXTURE_IMAGE_UNITS), // GLint
51
- [GL.MAX_COMBINED_TEXTURE_IMAGE_UNITS]: get(GL.MAX_COMBINED_TEXTURE_IMAGE_UNITS), // GLint
52
- [GL.MAX_VERTEX_TEXTURE_IMAGE_UNITS]: get(GL.MAX_VERTEX_TEXTURE_IMAGE_UNITS), // GLint
53
- [GL.MAX_RENDERBUFFER_SIZE]: get(GL.MAX_RENDERBUFFER_SIZE), // GLint
54
- [GL.MAX_VARYING_VECTORS]: get(GL.MAX_VARYING_VECTORS), // GLint
55
- [GL.MAX_VERTEX_ATTRIBS]: get(GL.MAX_VERTEX_ATTRIBS), // GLint
56
- [GL.MAX_VERTEX_UNIFORM_VECTORS]: get(GL.MAX_VERTEX_UNIFORM_VECTORS), // GLint
57
- [GL.MAX_FRAGMENT_UNIFORM_VECTORS]: get(GL.MAX_FRAGMENT_UNIFORM_VECTORS), // GLint
58
- [GL.MAX_VIEWPORT_DIMS]: get(GL.MAX_VIEWPORT_DIMS),
59
- // Extensions
60
- [GL.MAX_TEXTURE_MAX_ANISOTROPY_EXT]: get(GL.MAX_TEXTURE_MAX_ANISOTROPY_EXT), // getMaxAnistropy(),
61
- // WebGL2 Limits
62
- [GL.MAX_3D_TEXTURE_SIZE]: get2(GL.MAX_3D_TEXTURE_SIZE), // GLint
63
- [GL.MAX_ARRAY_TEXTURE_LAYERS]: get2(GL.MAX_ARRAY_TEXTURE_LAYERS), // GLint
64
- // [GL.MAX_CLIENT_WAIT_TIMEOUT_WEBGL]: get2(GL.MAX_CLIENT_WAIT_TIMEOUT_WEBGL), // GLint64
65
- [GL.MAX_COLOR_ATTACHMENTS]: get2(GL.MAX_COLOR_ATTACHMENTS), // GLint
66
- [GL.MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS]: get2(GL.MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS), // GLint64
67
- [GL.MAX_COMBINED_UNIFORM_BLOCKS]: get2(GL.MAX_COMBINED_UNIFORM_BLOCKS), // GLint
68
- [GL.MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS]: get2(GL.MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS), // GLint64
69
- [GL.MAX_DRAW_BUFFERS]: get2(GL.MAX_DRAW_BUFFERS), // GLint
70
- [GL.MAX_ELEMENT_INDEX]: get2(GL.MAX_ELEMENT_INDEX), // GLint64
71
- [GL.MAX_ELEMENTS_INDICES]: get2(GL.MAX_ELEMENTS_INDICES), // GLint
72
- [GL.MAX_ELEMENTS_VERTICES]: get2(GL.MAX_ELEMENTS_VERTICES), // GLint
73
- [GL.MAX_FRAGMENT_INPUT_COMPONENTS]: get2(GL.MAX_FRAGMENT_INPUT_COMPONENTS), // GLint
74
- [GL.MAX_FRAGMENT_UNIFORM_BLOCKS]: get2(GL.MAX_FRAGMENT_UNIFORM_BLOCKS), // GLint
75
- [GL.MAX_FRAGMENT_UNIFORM_COMPONENTS]: get2(GL.MAX_FRAGMENT_UNIFORM_COMPONENTS), // GLint
76
- [GL.MAX_SAMPLES]: get2(GL.MAX_SAMPLES), // GLint
77
- // [GL.MAX_SERVER_WAIT_TIMEOUT]: get2(GL.MAX_SERVER_WAIT_TIMEOUT), // GLint64
78
- [GL.MAX_TEXTURE_LOD_BIAS]: get2(GL.MAX_TEXTURE_LOD_BIAS), // GLfloat
79
- [GL.MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS]: get2(GL.MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS), // GLint
80
- [GL.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS]: get2(GL.MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS), // GLint
81
- [GL.MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS]: get2(GL.MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS), // GLint
82
- [GL.MAX_UNIFORM_BLOCK_SIZE]: get2(GL.MAX_UNIFORM_BLOCK_SIZE), // GLint64
83
- [GL.MAX_UNIFORM_BUFFER_BINDINGS]: get2(GL.MAX_UNIFORM_BUFFER_BINDINGS), // GLint
84
- [GL.MAX_VARYING_COMPONENTS]: get2(GL.MAX_VARYING_COMPONENTS), // GLint
85
- [GL.MAX_VERTEX_OUTPUT_COMPONENTS]: get2(GL.MAX_VERTEX_OUTPUT_COMPONENTS), // GLint
86
- [GL.MAX_VERTEX_UNIFORM_BLOCKS]: get2(GL.MAX_VERTEX_UNIFORM_BLOCKS), // GLint
87
- [GL.MAX_VERTEX_UNIFORM_COMPONENTS]: get2(GL.MAX_VERTEX_UNIFORM_COMPONENTS), // GLint
88
- [GL.MIN_PROGRAM_TEXEL_OFFSET]: get2(GL.MIN_PROGRAM_TEXEL_OFFSET), // GLint
89
- [GL.MAX_PROGRAM_TEXEL_OFFSET]: get2(GL.MAX_PROGRAM_TEXEL_OFFSET), // GLint
90
- [GL.UNIFORM_BUFFER_OFFSET_ALIGNMENT]: get2(GL.UNIFORM_BUFFER_OFFSET_ALIGNMENT) // GLint
91
- };
92
47
  }
@@ -1 +1 @@
1
- {"version":3,"file":"decode-webgl-types.d.ts","sourceRoot":"","sources":["../../../src/adapter/helpers/decode-webgl-types.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,iBAAiB,EAAE,mBAAmB,EAAE,YAAY,EAAC,MAAM,eAAe,CAAC;AACnF,OAAO,EAAC,EAAE,EAAE,aAAa,EAAiB,eAAe,EAAE,UAAU,EAAC,MAAM,oBAAoB,CAAC;AAEjG,0CAA0C;AAC1C,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAE7D;AA2DD,4FAA4F;AAC5F,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,EAAE,GAChB;IAAC,MAAM,EAAE,iBAAiB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAC,CAOrE;AAED,4FAA4F;AAC5F,wBAAgB,qBAAqB,CAAC,eAAe,EAAE,EAAE,GAAG;IAC1D,aAAa,EAAE,mBAAmB,CAAC;IACnC,YAAY,EAAE,YAAY,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CAEpB,CASA;AAED,0FAA0F;AAC1F,wBAAgB,4BAA4B,CAC1C,mBAAmB,EAAE,eAAe,GACnC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAC,GAAG,IAAI,CAO/C;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,EAAE,EAAE,UAAU,KAAA,GAAG;IAAC,MAAM,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAC,GAAG,IAAI,CAkBtG"}
1
+ {"version":3,"file":"decode-webgl-types.d.ts","sourceRoot":"","sources":["../../../src/adapter/helpers/decode-webgl-types.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,iBAAiB,EAAE,mBAAmB,EAAE,YAAY,EAAC,MAAM,eAAe,CAAC;AACnF,OAAO,EAAC,EAAE,EAAE,aAAa,EAAiB,eAAe,EAAE,UAAU,EAAC,MAAM,oBAAoB,CAAC;AAEjG,0CAA0C;AAC1C,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAE7D;AA2DD,4FAA4F;AAC5F,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,EAAE,GAAG;IACtD,MAAM,EAAE,iBAAiB,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;CACpB,CAOA;AAED,4FAA4F;AAC5F,wBAAgB,qBAAqB,CAAC,eAAe,EAAE,EAAE,GAAG;IAC1D,aAAa,EAAE,mBAAmB,CAAC;IACnC,YAAY,EAAE,YAAY,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CAEpB,CASA;AAED,0FAA0F;AAC1F,wBAAgB,4BAA4B,CAC1C,mBAAmB,EAAE,eAAe,GACnC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAC,GAAG,IAAI,CAO/C;AAED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,EAAE,EACR,UAAU,KAAA,GACT;IAAC,MAAM,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAC,GAAG,IAAI,CAkB3C"}
@@ -1,4 +1,5 @@
1
- // luma.gl, MIT license
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
2
3
  // Copyright (c) vis.gl contributors
3
4
  import { GL } from '@luma.gl/constants';
4
5
  /** Check is uniform is of sampler type */
@@ -1 +1 @@
1
- {"version":3,"file":"get-shader-layout.d.ts","sourceRoot":"","sources":["../../../src/adapter/helpers/get-shader-layout.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,YAAY,EAKb,MAAM,eAAe,CAAC;AAMvB;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,sBAAsB,EAAE,OAAO,EAAE,YAAY,GAAG,YAAY,CA2D/F"}
1
+ {"version":3,"file":"get-shader-layout.d.ts","sourceRoot":"","sources":["../../../src/adapter/helpers/get-shader-layout.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,YAAY,EAKb,MAAM,eAAe,CAAC;AAMvB;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,sBAAsB,EAAE,OAAO,EAAE,YAAY,GAAG,YAAY,CA2D/F"}
@@ -1,8 +1,9 @@
1
- // luma.gl, MIT license
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
2
3
  // Copyright (c) vis.gl contributors
3
4
  import { GL } from '@luma.gl/constants';
4
- import { Accessor } from '../../classic/accessor'; // TODO - should NOT depend on classic API
5
- import { decodeGLUniformType, decodeGLAttributeType, isSamplerUniform } from './decode-webgl-types';
5
+ import { Accessor } from "../../classic/accessor.js"; // TODO - should NOT depend on classic API
6
+ import { decodeGLUniformType, decodeGLAttributeType, isSamplerUniform } from "./decode-webgl-types.js";
6
7
  /**
7
8
  * Extract metadata describing binding information for a program's shaders
8
9
  * Note: `linkProgram()` needs to have been called
@@ -80,7 +81,7 @@ function readAttributeDeclarations(gl, program) {
80
81
  // Add only user provided attributes, for built-in attributes like `gl_InstanceID` location will be < 0
81
82
  if (location >= 0) {
82
83
  const { attributeType } = decodeGLAttributeType(compositeType);
83
- // Whether an attribute is instanced is essentially fixed by the structure of the shader code,
84
+ // Whether an attribute is instanced is essentially fixed by the structure of the shader code,
84
85
  // so it is arguably a static property of the shader.
85
86
  // There is no hint in the shader declarations
86
87
  // Heuristic: Any attribute name containing the word "instance" will be assumed to be instanced
@@ -89,7 +90,7 @@ function readAttributeDeclarations(gl, program) {
89
90
  name,
90
91
  location,
91
92
  stepMode,
92
- type: attributeType,
93
+ type: attributeType
93
94
  // size - for arrays, size is the number of elements in the array
94
95
  });
95
96
  }
@@ -1 +1 @@
1
- {"version":3,"file":"parse-shader-compiler-log.d.ts","sourceRoot":"","sources":["../../../src/adapter/helpers/parse-shader-compiler-log.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,eAAe,CAAC;AAEnD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAI,SAAS,eAAe,EAAE,CA8ClF"}
1
+ {"version":3,"file":"parse-shader-compiler-log.d.ts","sourceRoot":"","sources":["../../../src/adapter/helpers/parse-shader-compiler-log.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,eAAe,CAAC;AAEnD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,eAAe,EAAE,CA8CjF"}
@@ -1,4 +1,5 @@
1
- // luma.gl, MIT license
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
2
3
  // Copyright (c) vis.gl contributors
3
4
  /**
4
5
  * Parse a WebGL-format GLSL compilation log into an array of WebGPU style message records.
@@ -23,7 +24,7 @@ export function parseShaderCompilerLog(errLog) {
23
24
  lineNum: 0,
24
25
  linePos: 0
25
26
  });
26
- continue; // eslint-disable-line no-continue
27
+ continue; // eslint-disable-line no-continue
27
28
  }
28
29
  const [messageType, linePosition, lineNumber, ...rest] = segments;
29
30
  let lineNum = parseInt(lineNumber, 10);
@@ -1 +1 @@
1
- {"version":3,"file":"set-uniform.d.ts","sourceRoot":"","sources":["../../../src/adapter/helpers/set-uniform.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,eAAe,CAAC;AAChD,OAAO,EAAK,eAAe,EAAE,aAAa,EAAC,MAAM,oBAAoB,CAAC;AAEtE,8DAA8D;AAE9D,wBAAgB,UAAU,CACxB,EAAE,EAAE,sBAAsB,EAC1B,QAAQ,EAAE,oBAAoB,EAC9B,IAAI,EAAE,eAAe,GAAG,aAAa,EACrC,KAAK,EAAE,YAAY,GAClB,IAAI,CAwEN"}
1
+ {"version":3,"file":"set-uniform.d.ts","sourceRoot":"","sources":["../../../src/adapter/helpers/set-uniform.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,eAAe,CAAC;AAChD,OAAO,EAAK,eAAe,EAAE,aAAa,EAAC,MAAM,oBAAoB,CAAC;AAEtE,8DAA8D;AAE9D,wBAAgB,UAAU,CACxB,EAAE,EAAE,sBAAsB,EAC1B,QAAQ,EAAE,oBAAoB,EAC9B,IAAI,EAAE,eAAe,GAAG,aAAa,EACrC,KAAK,EAAE,YAAY,GAClB,IAAI,CAwEN"}
@@ -1,4 +1,5 @@
1
- // luma.gl, MIT license
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
2
3
  // Copyright (c) vis.gl contributors
3
4
  import { GL } from '@luma.gl/constants';
4
5
  /** Set a raw uniform (without type conversion and caching) */
@@ -1 +1 @@
1
- {"version":3,"file":"webgl-topology-utils.d.ts","sourceRoot":"","sources":["../../../src/adapter/helpers/webgl-topology-utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,EAAE,EAAE,mBAAmB,EAAE,WAAW,EAAC,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAC,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAGhD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,WAAW,CAmB/E;AAGD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IAAC,QAAQ,EAAE,mBAAmB,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAC,GAAG,MAAM,CAkBvG;AAGD,wBAAgB,cAAc,CAAC,OAAO,EAAE;IAAC,QAAQ,EAAE,mBAAmB,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAC,GAAG,MAAM,CAapG;AAED,sCAAsC;AACtC,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,iBAAiB,GAEzB,EAAE,CAAC,MAAM,GACT,EAAE,CAAC,KAAK,GACR,EAAE,CAAC,UAAU,GACb,EAAE,CAAC,SAAS,GACZ,EAAE,CAAC,SAAS,GACZ,EAAE,CAAC,cAAc,GACjB,EAAE,CAAC,YAAY,CAYlB;AAED,oDAAoD;AACpD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,iBAAiB,GAAG,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAY/F"}
1
+ {"version":3,"file":"webgl-topology-utils.d.ts","sourceRoot":"","sources":["../../../src/adapter/helpers/webgl-topology-utils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,EAAE,EAAE,mBAAmB,EAAE,WAAW,EAAC,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAC,iBAAiB,EAAC,MAAM,eAAe,CAAC;AAGhD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,WAAW,CAmB/E;AAGD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IACzC,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,MAAM,CAkBT;AAGD,wBAAgB,cAAc,CAAC,OAAO,EAAE;IACtC,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,MAAM,CAaT;AAED,sCAAsC;AACtC,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,iBAAiB,GAEzB,EAAE,CAAC,MAAM,GACT,EAAE,CAAC,KAAK,GACR,EAAE,CAAC,UAAU,GACb,EAAE,CAAC,SAAS,GACZ,EAAE,CAAC,SAAS,GACZ,EAAE,CAAC,cAAc,GACjB,EAAE,CAAC,YAAY,CAYlB;AAED,oDAAoD;AACpD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,iBAAiB,GAAG,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS,CAY/F"}
@@ -1,4 +1,5 @@
1
- // luma.gl, MIT license
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
2
3
  // Copyright (c) vis.gl contributors
3
4
  import { GL } from '@luma.gl/constants';
4
5
  // Counts the number of complete primitives given a number of vertices and a drawMode
@@ -1 +1 @@
1
- {"version":3,"file":"constants-to-keys.d.ts","sourceRoot":"","sources":["../../../src/adapter/objects/constants-to-keys.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,EAAE,EAAC,MAAM,oBAAoB,CAAC;AAGtC,wBAAgB,WAAW,CAAC,EAAE,EAAE,sBAAsB,EAAE,IAAI,EAAE,MAAM,GAAG,EAAE,GAAG,EAAE,CAkB7E"}
1
+ {"version":3,"file":"constants-to-keys.d.ts","sourceRoot":"","sources":["../../../src/adapter/objects/constants-to-keys.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,EAAE,EAAC,MAAM,oBAAoB,CAAC;AAGtC,wBAAgB,WAAW,CAAC,EAAE,EAAE,sBAAsB,EAAE,IAAI,EAAE,MAAM,GAAG,EAAE,GAAG,EAAE,CAkB7E"}
@@ -1,4 +1,5 @@
1
- // luma.gl, MIT license
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
2
3
  // Copyright (c) vis.gl contributors
3
4
  import { assert } from '@luma.gl/core';
4
5
  // Resolve a WebGL enumeration name (returns itself if already a number)
@@ -1,7 +1,7 @@
1
1
  import { ResourceProps, TextureFormat } from '@luma.gl/core';
2
2
  import { GL } from '@luma.gl/constants';
3
- import { WebGLDevice } from '../webgl-device';
4
- import { WebGLResource } from './webgl-resource';
3
+ import { WebGLDevice } from "../webgl-device.js";
4
+ import { WebGLResource } from "./webgl-resource.js";
5
5
  export type RenderbufferProps = ResourceProps & {
6
6
  format: TextureFormat;
7
7
  width?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"webgl-renderbuffer.d.ts","sourceRoot":"","sources":["../../../src/adapter/objects/webgl-renderbuffer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAS,aAAa,EAAE,aAAa,EAAC,MAAM,eAAe,CAAC;AACnE,OAAO,EAAC,EAAE,EAAC,MAAM,oBAAoB,CAAC;AACtC,OAAO,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAI/C,MAAM,MAAM,iBAAiB,GAAG,aAAa,GAAG;IAC9C,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;;;;;;;GASG;AACH,qBAAa,iBAAkB,SAAQ,aAAa,CAAC,iBAAiB,CAAC;IACrE,gBAAyB,YAAY,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAQhE;IAEF,IAAa,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAA2B;IAEtE,IAAI,KAAK,IAAI,MAAM,CAA6B;IAChD,IAAI,MAAM,IAAI,MAAM,CAA8B;IAClD,IAAI,MAAM,IAAI,aAAa,CAA8B;IACzD,IAAI,OAAO,IAAI,MAAM,CAA+B;IACpD,IAAI,UAAU,SAAc;IAE5B,4BAA4B;IAC5B,QAAQ,EAAE,EAAE,CAAC;IAEb,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO;gBAIxE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,iBAAiB;IAUzD,MAAM,CAAC,IAAI,EAAE;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,GAAG,IAAI;IAUnD,iEAAiE;IACjE,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAuBtD,aAAa;IAIb,aAAa,IAAI,IAAI;IAKrB,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;CAGtD"}
1
+ {"version":3,"file":"webgl-renderbuffer.d.ts","sourceRoot":"","sources":["../../../src/adapter/objects/webgl-renderbuffer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAS,aAAa,EAAE,aAAa,EAAC,MAAM,eAAe,CAAC;AACnE,OAAO,EAAC,EAAE,EAAC,MAAM,oBAAoB,CAAC;AACtC,OAAO,EAAC,WAAW,EAAC,2BAAwB;AAC5C,OAAO,EAAC,aAAa,EAAC,4BAAyB;AAO/C,MAAM,MAAM,iBAAiB,GAAG,aAAa,GAAG;IAC9C,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;;;;;;;GASG;AACH,qBAAa,iBAAkB,SAAQ,aAAa,CAAC,iBAAiB,CAAC;IACrE,gBAAyB,YAAY,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAQhE;IAEF,IAAa,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAE1C;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IACD,IAAI,MAAM,IAAI,MAAM,CAEnB;IACD,IAAI,MAAM,IAAI,aAAa,CAE1B;IACD,IAAI,OAAO,IAAI,MAAM,CAEpB;IACD,IAAI,UAAU,SAEb;IAED,4BAA4B;IAC5B,QAAQ,EAAE,EAAE,CAAC;IAEb,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO;gBAIxE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,iBAAiB;IAUzD,MAAM,CAAC,IAAI,EAAE;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,GAAG,IAAI;IAUnD,iEAAiE;IACjE,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,IAAI;IA6BtD,aAAa;IAIb,aAAa,IAAI,IAAI;IAKrB,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI;CAGtD"}