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

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 (192) hide show
  1. package/dist/adapter/converters/device-parameters.d.ts.map +1 -1
  2. package/dist/adapter/converters/device-parameters.js +128 -71
  3. package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
  4. package/dist/adapter/converters/sampler-parameters.js +20 -19
  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 +16 -11
  8. package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
  9. package/dist/adapter/converters/texture-formats.js +224 -205
  10. package/dist/adapter/converters/vertex-formats.d.ts.map +1 -1
  11. package/dist/adapter/converters/vertex-formats.js +22 -21
  12. package/dist/adapter/device-helpers/webgl-device-features.d.ts +19 -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 +89 -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 +22 -19
  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 +47 -46
  23. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
  24. package/dist/adapter/helpers/get-shader-layout.js +35 -34
  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 +42 -41
  29. package/dist/adapter/helpers/webgl-topology-utils.d.ts.map +1 -1
  30. package/dist/adapter/helpers/webgl-topology-utils.js +40 -39
  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 +30 -17
  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 -101
  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 +16 -15
  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 +32 -31
  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 +6 -5
  49. package/dist/adapter/resources/webgl-framebuffer.d.ts +6 -10
  50. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  51. package/dist/adapter/resources/webgl-framebuffer.js +60 -53
  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 +20 -12
  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 +52 -61
  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 +5 -4
  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 +15 -9
  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 +6 -4
  71. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  72. package/dist/adapter/resources/webgl-texture.js +39 -32
  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 +10 -10
  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 +10 -9
  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 +35 -30
  83. package/dist/adapter/webgl-device.d.ts.map +1 -1
  84. package/dist/adapter/webgl-device.js +110 -109
  85. package/dist/classic/accessor.d.ts.map +1 -1
  86. package/dist/classic/accessor.js +8 -7
  87. package/dist/classic/clear.d.ts.map +1 -1
  88. package/dist/classic/clear.js +5 -4
  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 +19 -19
  92. package/dist/classic/format-utils.d.ts.map +1 -1
  93. package/dist/classic/format-utils.js +16 -15
  94. package/dist/classic/typed-array-utils.d.ts.map +1 -1
  95. package/dist/classic/typed-array-utils.js +20 -19
  96. package/dist/context/debug/spector.d.ts.map +1 -1
  97. package/dist/context/debug/spector.js +2 -1
  98. package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
  99. package/dist/context/debug/webgl-developer-tools.js +7 -6
  100. package/dist/context/{context → helpers}/create-browser-context.d.ts.map +1 -1
  101. package/dist/context/{context → helpers}/create-browser-context.js +2 -1
  102. package/dist/context/{context/context-data.d.ts → helpers/webgl-context-data.d.ts} +2 -3
  103. package/dist/context/helpers/webgl-context-data.d.ts.map +1 -0
  104. package/dist/context/helpers/webgl-context-data.js +21 -0
  105. package/dist/context/helpers/webgl-extensions.d.ts +4 -0
  106. package/dist/context/helpers/webgl-extensions.d.ts.map +1 -0
  107. package/dist/context/helpers/webgl-extensions.js +10 -0
  108. package/dist/context/parameters/unified-parameter-api.d.ts +3 -4
  109. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  110. package/dist/context/parameters/unified-parameter-api.js +7 -11
  111. package/dist/context/parameters/webgl-parameter-tables.d.ts +12 -13
  112. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  113. package/dist/context/parameters/webgl-parameter-tables.js +302 -295
  114. package/dist/context/state-tracker/deep-array-equal.d.ts.map +1 -1
  115. package/dist/context/state-tracker/deep-array-equal.js +2 -1
  116. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
  117. package/dist/context/state-tracker/track-context-state.js +5 -4
  118. package/dist/context/state-tracker/with-parameters.d.ts +2 -3
  119. package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
  120. package/dist/context/state-tracker/with-parameters.js +6 -8
  121. package/dist/dist.dev.js +1635 -1387
  122. package/dist/index.cjs +1766 -1534
  123. package/dist/index.cjs.map +4 -4
  124. package/dist/index.d.ts +25 -25
  125. package/dist/index.d.ts.map +1 -1
  126. package/dist/index.js +24 -23
  127. package/dist/types.d.ts.map +1 -1
  128. package/dist/types.js +2 -1
  129. package/dist.min.js +6 -6
  130. package/package.json +4 -4
  131. package/src/adapter/converters/device-parameters.ts +114 -27
  132. package/src/adapter/converters/sampler-parameters.ts +12 -3
  133. package/src/adapter/converters/shader-formats.ts +47 -22
  134. package/src/adapter/converters/texture-formats.ts +138 -114
  135. package/src/adapter/converters/vertex-formats.ts +3 -3
  136. package/src/adapter/device-helpers/webgl-device-features.ts +102 -50
  137. package/src/adapter/device-helpers/webgl-device-info.ts +28 -19
  138. package/src/adapter/device-helpers/webgl-device-limits.ts +46 -150
  139. package/src/adapter/helpers/decode-webgl-types.ts +13 -7
  140. package/src/adapter/helpers/get-shader-layout.ts +4 -3
  141. package/src/adapter/helpers/parse-shader-compiler-log.ts +10 -6
  142. package/src/adapter/helpers/set-uniform.ts +2 -1
  143. package/src/adapter/helpers/webgl-topology-utils.ts +10 -3
  144. package/src/adapter/objects/constants-to-keys.ts +2 -1
  145. package/src/adapter/objects/webgl-renderbuffer.ts +36 -14
  146. package/src/adapter/objects/webgl-resource.ts +7 -125
  147. package/src/adapter/resources/webgl-buffer.ts +4 -3
  148. package/src/adapter/resources/webgl-command-buffer.ts +5 -5
  149. package/src/adapter/resources/webgl-command-encoder.ts +14 -11
  150. package/src/adapter/resources/webgl-external-texture.ts +6 -5
  151. package/src/adapter/resources/webgl-framebuffer.ts +61 -53
  152. package/src/adapter/resources/webgl-query-set.ts +171 -0
  153. package/src/adapter/resources/webgl-render-pass.ts +20 -11
  154. package/src/adapter/resources/webgl-render-pipeline.ts +54 -54
  155. package/src/adapter/resources/webgl-sampler.ts +2 -1
  156. package/src/adapter/resources/webgl-shader.ts +12 -5
  157. package/src/adapter/resources/webgl-texture-view.ts +28 -0
  158. package/src/adapter/resources/webgl-texture.ts +14 -3
  159. package/src/adapter/resources/webgl-transform-feedback.ts +2 -7
  160. package/src/adapter/resources/webgl-vertex-array.ts +4 -3
  161. package/src/adapter/webgl-canvas-context.ts +6 -4
  162. package/src/adapter/webgl-device.ts +116 -107
  163. package/src/classic/accessor.ts +5 -4
  164. package/src/classic/clear.ts +14 -8
  165. package/src/classic/copy-and-blit.ts +11 -4
  166. package/src/classic/format-utils.ts +2 -1
  167. package/src/classic/typed-array-utils.ts +3 -7
  168. package/src/context/debug/spector.ts +9 -6
  169. package/src/context/debug/webgl-developer-tools.ts +27 -14
  170. package/src/context/{context → helpers}/create-browser-context.ts +3 -2
  171. package/src/context/helpers/webgl-context-data.ts +31 -0
  172. package/src/context/helpers/webgl-extensions.ts +17 -0
  173. package/src/context/parameters/unified-parameter-api.ts +6 -17
  174. package/src/context/parameters/webgl-parameter-tables.ts +69 -32
  175. package/src/context/state-tracker/deep-array-equal.ts +2 -1
  176. package/src/context/state-tracker/track-context-state.ts +11 -6
  177. package/src/context/state-tracker/with-parameters.ts +8 -8
  178. package/src/index.ts +7 -6
  179. package/src/types.ts +2 -1
  180. package/dist/adapter/device-helpers/device-features.d.ts +0 -6
  181. package/dist/adapter/device-helpers/device-features.d.ts.map +0 -1
  182. package/dist/adapter/device-helpers/device-features.js +0 -65
  183. package/dist/adapter/device-helpers/device-limits.d.ts +0 -50
  184. package/dist/adapter/device-helpers/device-limits.d.ts.map +0 -1
  185. package/dist/adapter/device-helpers/device-limits.js +0 -92
  186. package/dist/adapter/device-helpers/get-device-info.d.ts +0 -4
  187. package/dist/adapter/device-helpers/get-device-info.d.ts.map +0 -1
  188. package/dist/adapter/device-helpers/get-device-info.js +0 -87
  189. package/dist/context/context/context-data.d.ts.map +0 -1
  190. package/dist/context/context/context-data.js +0 -33
  191. package/src/context/context/context-data.ts +0 -44
  192. /package/dist/context/{context → helpers}/create-browser-context.d.ts +0 -0
@@ -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
  /** Get vertex format from GL constants */
@@ -21,14 +22,14 @@ export function getVertexTypeFromGL(type, normalized = false) {
21
22
  // prettier-ignore
22
23
  switch (type) {
23
24
  // WebGPU does not support normalized 32 bit integer attributes
24
- case GL.INT: return normalized ? 'sint32' : 'sint32';
25
- case GL.UNSIGNED_INT: return normalized ? 'uint32' : 'uint32';
26
- case GL.SHORT: return normalized ? 'sint16' : 'unorm16';
27
- case GL.UNSIGNED_SHORT: return normalized ? 'uint16' : 'unorm16';
28
- case GL.BYTE: return normalized ? 'sint8' : 'snorm16';
29
- case GL.UNSIGNED_BYTE: return normalized ? 'uint8' : 'unorm8';
30
- case GL.FLOAT: return 'float32';
31
- case GL.HALF_FLOAT: return 'float16';
25
+ case 5124: return normalized ? 'sint32' : 'sint32';
26
+ case 5125: return normalized ? 'uint32' : 'uint32';
27
+ case 5122: return normalized ? 'sint16' : 'unorm16';
28
+ case 5123: return normalized ? 'uint16' : 'unorm16';
29
+ case 5120: return normalized ? 'sint8' : 'snorm16';
30
+ case 5121: return normalized ? 'uint8' : 'unorm8';
31
+ case 5126: return 'float32';
32
+ case 5131: return 'float16';
32
33
  }
33
34
  // @ts-ignore unreachable
34
35
  throw new Error(String(type));
@@ -36,21 +37,21 @@ export function getVertexTypeFromGL(type, normalized = false) {
36
37
  export function getGLFromVertexType(dataType) {
37
38
  // prettier-ignore
38
39
  switch (dataType) {
39
- case 'uint8': return GL.UNSIGNED_BYTE;
40
- case 'sint8': return GL.BYTE;
41
- case 'unorm8': return GL.UNSIGNED_BYTE;
42
- case 'snorm8': return GL.BYTE;
43
- case 'uint16': return GL.UNSIGNED_SHORT;
44
- case 'sint16': return GL.SHORT;
45
- case 'unorm16': return GL.UNSIGNED_SHORT;
46
- case 'snorm16': return GL.SHORT;
47
- case 'uint32': return GL.UNSIGNED_INT;
48
- case 'sint32': return GL.INT;
40
+ case 'uint8': return 5121;
41
+ case 'sint8': return 5120;
42
+ case 'unorm8': return 5121;
43
+ case 'snorm8': return 5120;
44
+ case 'uint16': return 5123;
45
+ case 'sint16': return 5122;
46
+ case 'unorm16': return 5123;
47
+ case 'snorm16': return 5122;
48
+ case 'uint32': return 5125;
49
+ case 'sint32': return 5124;
49
50
  // WebGPU does not support normalized 32 bit integer attributes
50
51
  // case 'unorm32': return GL.UNSIGNED_INT;
51
52
  // case 'snorm32': return GL.INT;
52
- case 'float16': return GL.HALF_FLOAT;
53
- case 'float32': return GL.FLOAT;
53
+ case 'float16': return 5131;
54
+ case 'float32': return 5126;
54
55
  }
55
56
  // @ts-ignore unreachable
56
57
  throw new Error(String(dataType));
@@ -1,6 +1,20 @@
1
- import { DeviceFeature } from '@luma.gl/core';
2
- /** Get WebGPU style feature strings */
3
- export declare function getDeviceFeatures(gl: WebGL2RenderingContext): Set<DeviceFeature>;
4
- /** Extract all WebGL features */
5
- export declare function getWebGLFeatures(gl: WebGL2RenderingContext): Set<DeviceFeature>;
1
+ import { DeviceFeature, DeviceFeatures } from '@luma.gl/core';
2
+ import { GLExtensions } from '@luma.gl/constants';
3
+ /**
4
+ * WebGL extensions exposed as luma.gl features
5
+ * To minimize GL log noise and improve performance, this class ensures that
6
+ * - WebGL extensions are not queried until the corresponding feature is checked.
7
+ * - WebGL extensions are only queried once.
8
+ */
9
+ export declare class WebGLDeviceFeatures extends DeviceFeatures {
10
+ protected gl: WebGL2RenderingContext;
11
+ protected extensions: GLExtensions;
12
+ protected testedFeatures: Set<DeviceFeature>;
13
+ constructor(gl: WebGL2RenderingContext, extensions: GLExtensions, disabledFeatures: Partial<Record<DeviceFeature, boolean>>);
14
+ [Symbol.iterator](): IterableIterator<DeviceFeature>;
15
+ has(feature: DeviceFeature): boolean;
16
+ initializeFeatures(): void;
17
+ /** Extract all WebGL features */
18
+ protected getWebGLFeature(feature: DeviceFeature): boolean;
19
+ }
6
20
  //# sourceMappingURL=webgl-device-features.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"webgl-device-features.d.ts","sourceRoot":"","sources":["../../../src/adapter/device-helpers/webgl-device-features.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,aAAa,EAAC,MAAM,eAAe,CAAC;AAG5C,uCAAuC;AACvC,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,sBAAsB,GAAG,GAAG,CAAC,aAAa,CAAC,CAiBhF;AAED,iCAAiC;AACjC,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,sBAAsB,GAAG,GAAG,CAAC,aAAa,CAAC,CAW/E"}
1
+ {"version":3,"file":"webgl-device-features.d.ts","sourceRoot":"","sources":["../../../src/adapter/device-helpers/webgl-device-features.ts"],"names":[],"mappings":"AAOA,OAAO,EAAC,aAAa,EAAE,cAAc,EAAC,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AA8BhD;;;;;GAKG;AACH,qBAAa,mBAAoB,SAAQ,cAAc;IACrD,SAAS,CAAC,EAAE,EAAE,sBAAsB,CAAC;IACrC,SAAS,CAAC,UAAU,EAAE,YAAY,CAAC;IACnC,SAAS,CAAC,cAAc,qBAA4B;gBAGlD,EAAE,EAAE,sBAAsB,EAC1B,UAAU,EAAE,YAAY,EACxB,gBAAgB,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAU1D,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,aAAa,CAAC;IAc5C,GAAG,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO;IAuB7C,kBAAkB;IAUlB,iCAAiC;IACjC,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO;CAU3D"}
@@ -1,52 +1,98 @@
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, disabledFeatures) {
43
+ super([], disabledFeatures);
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
+ if (this.disabledFeatures[feature]) {
65
+ return false;
66
+ }
67
+ // We have already tested this feature
68
+ if (!this.testedFeatures.has(feature)) {
69
+ this.testedFeatures.add(feature);
70
+ // Check the feature once
71
+ if (isTextureFeature(feature) && checkTextureFeature(this.gl, feature, this.extensions)) {
72
+ this.features.add(feature);
73
+ }
74
+ if (this.getWebGLFeature(feature)) {
75
+ this.features.add(feature);
76
+ }
77
+ }
78
+ return this.features.has(feature);
79
+ }
80
+ // FOR DEVICE
81
+ initializeFeatures() {
82
+ // @ts-expect-error
83
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
84
+ for (const feature of this) {
85
+ // WebGL extensions are initialized by requesting them
86
+ }
87
+ }
88
+ // IMPLEMENTATION
89
+ /** Extract all WebGL features */
90
+ getWebGLFeature(feature) {
91
+ const featureInfo = WEBGL_FEATURES[feature];
92
+ // string value requires checking the corresponding WebGL extension
93
+ const isSupported = typeof featureInfo === 'string'
94
+ ? Boolean(getWebGLExtension(this.gl, featureInfo, this.extensions))
95
+ : Boolean(featureInfo);
96
+ return isSupported;
97
+ }
98
+ }
@@ -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,20 +1,23 @@
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
- const vendorMasked = gl.getParameter(GL.VENDOR);
8
- const rendererMasked = gl.getParameter(GL.RENDERER);
9
+ const vendorMasked = gl.getParameter(7936);
10
+ const rendererMasked = gl.getParameter(7937);
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');
12
- const vendorUnmasked = gl.getParameter(ext ? ext.UNMASKED_VENDOR_WEBGL : GL.VENDOR);
13
- const rendererUnmasked = gl.getParameter(ext ? ext.UNMASKED_RENDERER_WEBGL : GL.RENDERER);
13
+ getWebGLExtension(gl, 'WEBGL_debug_renderer_info', extensions);
14
+ const ext = extensions.WEBGL_debug_renderer_info;
15
+ const vendorUnmasked = gl.getParameter(ext ? ext.UNMASKED_VENDOR_WEBGL : 7936);
16
+ const rendererUnmasked = gl.getParameter(ext ? ext.UNMASKED_RENDERER_WEBGL : 7937);
14
17
  const vendor = vendorUnmasked || vendorMasked;
15
18
  const renderer = rendererUnmasked || rendererMasked;
16
19
  // Driver version
17
- const version = gl.getParameter(GL.VERSION);
20
+ const version = gl.getParameter(7938);
18
21
  // "Sniff" the GPU type and backend from the info. This works best if unmasked info is available.
19
22
  const gpu = identifyGPUVendor(vendor, renderer);
20
23
  const gpuBackend = identifyGPUBackend(vendor, renderer);
@@ -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(3379); }
10
+ get maxTextureDimension3D() { return this.getParameter(32883); }
11
+ get maxTextureArrayLayers() { return this.getParameter(35071); }
12
+ get maxBindGroups() { return 0; }
13
+ get maxDynamicUniformBuffersPerPipelineLayout() { return 0; } // TBD
14
+ get maxDynamicStorageBuffersPerPipelineLayout() { return 0; } // TBD
15
+ get maxSampledTexturesPerShaderStage() { return this.getParameter(35660); } // ) TBD
16
+ get maxSamplersPerShaderStage() { return this.getParameter(35661); }
17
+ get maxStorageBuffersPerShaderStage() { return 0; } // TBD
18
+ get maxStorageTexturesPerShaderStage() { return 0; } // TBD
19
+ get maxUniformBuffersPerShaderStage() { return this.getParameter(35375); }
20
+ get maxUniformBufferBindingSize() { return this.getParameter(35376); }
21
+ get maxStorageBufferBindingSize() { return 0; }
22
+ get minUniformBufferOffsetAlignment() { return this.getParameter(35380); }
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(34921); }
26
+ get maxVertexBufferArrayStride() { return 2048; } // TBD, this is just the default value from WebGPU
27
+ get maxInterStageShaderComponents() { return this.getParameter(35659); }
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"}