@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,10 +1,11 @@
1
- // luma.gl, MIT license
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
2
3
  // Copyright (c) vis.gl contributors
3
4
  import { Framebuffer, assert } from '@luma.gl/core';
4
5
  import { GL } from '@luma.gl/constants';
5
- import { WEBGLTexture } from './webgl-texture';
6
- import { WEBGLRenderbuffer } from '../objects/webgl-renderbuffer';
7
- import { getDepthStencilAttachmentWebGL } from '../converters/texture-formats';
6
+ import { WEBGLTexture } from "./webgl-texture.js";
7
+ import { WEBGLTextureView } from "./webgl-texture-view.js";
8
+ import { getDepthStencilAttachmentWebGL } from "../converters/texture-formats.js";
8
9
  /** luma.gl Framebuffer, WebGL implementation */
9
10
  export class WEBGLFramebuffer extends Framebuffer {
10
11
  device;
@@ -27,23 +28,27 @@ export class WEBGLFramebuffer extends Framebuffer {
27
28
  // Auto create textures for attachments if needed
28
29
  this.autoCreateAttachmentTextures();
29
30
  /** Attach from a map of attachments */
30
- this.gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);
31
+ this.gl.bindFramebuffer(36160, this.handle);
31
32
  // Walk the attachments
32
33
  for (let i = 0; i < this.colorAttachments.length; ++i) {
33
34
  const attachment = this.colorAttachments[i];
34
- const attachmentPoint = GL.COLOR_ATTACHMENT0 + i;
35
+ const attachmentPoint = 36064 + i;
35
36
  if (attachment) {
36
37
  this._attachOne(attachmentPoint, attachment);
37
38
  }
38
39
  }
39
40
  if (this.depthStencilAttachment) {
40
- this._attachOne(getDepthStencilAttachmentWebGL(this.depthStencilAttachment.format), this.depthStencilAttachment);
41
+ this._attachOne(getDepthStencilAttachmentWebGL(this.depthStencilAttachment.props.format), this.depthStencilAttachment);
41
42
  }
42
- this.gl.bindFramebuffer(GL.FRAMEBUFFER, null);
43
- }
44
- // @ts-expect-error
45
- if (props.check !== false) {
46
- this._checkStatus();
43
+ /** Check the status */
44
+ // @ts-expect-error
45
+ if (props.check !== false) {
46
+ const status = this.gl.checkFramebufferStatus(36160);
47
+ if (status !== 36053) {
48
+ throw new Error(`Framebuffer ${_getFrameBufferStatus(status)}`);
49
+ }
50
+ }
51
+ this.gl.bindFramebuffer(36160, null);
47
52
  }
48
53
  }
49
54
  /** destroys any auto created resources etc. */
@@ -55,26 +60,15 @@ export class WEBGLFramebuffer extends Framebuffer {
55
60
  }
56
61
  }
57
62
  // PRIVATE
58
- /** Check the status */
59
- _checkStatus() {
60
- const { gl } = this;
61
- // TODO - should we really rely on this trick?
62
- const prevHandle = gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);
63
- const status = gl.checkFramebufferStatus(GL.FRAMEBUFFER);
64
- gl.bindFramebuffer(GL.FRAMEBUFFER, prevHandle || null);
65
- if (status !== gl.FRAMEBUFFER_COMPLETE) {
66
- throw new Error(`Framebuffer ${_getFrameBufferStatus(status)}`);
67
- }
68
- }
69
63
  /** In WebGL we must use renderbuffers for depth/stencil attachments (unless we have extensions) */
70
64
  createDepthStencilTexture(format) {
71
- return new WEBGLRenderbuffer(this.device, {
72
- id: `${this.id}-depth-stencil`, // TODO misleading if not depth and stencil?
65
+ // return new WEBGLRenderbuffer(this.device, {
66
+ return new WEBGLTexture(this.device, {
67
+ id: `${this.id}-depth-stencil`,
73
68
  format,
74
- // dataFormat: GL.DEPTH_STENCIL,
75
- // type: GL.UNSIGNED_INT_24_8,
76
69
  width: this.width,
77
- height: this.height
70
+ height: this.height,
71
+ mipmaps: false
78
72
  });
79
73
  }
80
74
  /**
@@ -96,33 +90,44 @@ export class WEBGLFramebuffer extends Framebuffer {
96
90
  }
97
91
  // TODO Not clear that this is better than default destroy/create implementation
98
92
  for (const colorAttachment of this.colorAttachments) {
99
- colorAttachment.resize({ width, height });
93
+ colorAttachment.texture.resize({ width, height });
100
94
  }
101
95
  if (this.depthStencilAttachment) {
102
- this.depthStencilAttachment.resize({ width, height });
96
+ this.depthStencilAttachment.texture.resize({ width, height });
103
97
  }
104
98
  return this;
105
99
  }
106
100
  /** Attach one attachment */
107
101
  _attachOne(attachmentPoint, attachment) {
108
- if (attachment instanceof WEBGLRenderbuffer) {
109
- this._attachWEBGLRenderbuffer(attachmentPoint, attachment);
110
- return attachment;
111
- }
112
- else if (Array.isArray(attachment)) {
102
+ // if (attachment instanceof WEBGLRenderbuffer) {
103
+ // this._attachWEBGLRenderbuffer(attachmentPoint, attachment);
104
+ // return attachment;
105
+ // }
106
+ if (Array.isArray(attachment)) {
113
107
  const [texture, layer = 0, level = 0] = attachment;
114
108
  this._attachTexture(attachmentPoint, texture, layer, level);
115
109
  return texture;
116
110
  }
117
- else if (attachment instanceof WEBGLTexture) {
111
+ if (attachment instanceof WEBGLTexture) {
118
112
  this._attachTexture(attachmentPoint, attachment, 0, 0);
119
113
  return attachment;
120
114
  }
115
+ if (attachment instanceof WEBGLTextureView) {
116
+ const textureView = attachment;
117
+ this._attachTexture(attachmentPoint, textureView.texture, textureView.props.baseMipLevel, textureView.props.baseArrayLayer);
118
+ return attachment.texture;
119
+ }
121
120
  throw new Error('attach');
122
121
  }
123
- _attachWEBGLRenderbuffer(attachment, renderbuffer) {
124
- this.gl.framebufferRenderbuffer(GL.FRAMEBUFFER, attachment, GL.RENDERBUFFER, renderbuffer.handle);
125
- }
122
+ // TODO - we do not seem to need render buffers in WebGL 2
123
+ // protected _attachWEBGLRenderbuffer(attachment: GL, renderbuffer: WEBGLRenderbuffer): void {
124
+ // this.gl.framebufferRenderbuffer(
125
+ // GL.FRAMEBUFFER,
126
+ // attachment,
127
+ // GL.RENDERBUFFER,
128
+ // renderbuffer.handle
129
+ // );
130
+ // }
126
131
  /**
127
132
  * @param attachment
128
133
  * @param texture
@@ -133,17 +138,17 @@ export class WEBGLFramebuffer extends Framebuffer {
133
138
  const { gl } = this.device;
134
139
  gl.bindTexture(texture.target, texture.handle);
135
140
  switch (texture.target) {
136
- case GL.TEXTURE_2D_ARRAY:
137
- case GL.TEXTURE_3D:
138
- gl.framebufferTextureLayer(GL.FRAMEBUFFER, attachment, texture.target, level, layer);
141
+ case 35866:
142
+ case 32879:
143
+ gl.framebufferTextureLayer(36160, attachment, texture.target, level, layer);
139
144
  break;
140
- case GL.TEXTURE_CUBE_MAP:
145
+ case 34067:
141
146
  // layer must be a cubemap face (or if index, converted to cube map face)
142
147
  const face = mapIndexToCubeMapFace(layer);
143
- gl.framebufferTexture2D(GL.FRAMEBUFFER, attachment, face, texture.handle, level);
148
+ gl.framebufferTexture2D(36160, attachment, face, texture.handle, level);
144
149
  break;
145
- case GL.TEXTURE_2D:
146
- gl.framebufferTexture2D(GL.FRAMEBUFFER, attachment, GL.TEXTURE_2D, texture.handle, level);
150
+ case 3553:
151
+ gl.framebufferTexture2D(36160, attachment, 3553, texture.handle, level);
147
152
  break;
148
153
  default:
149
154
  assert(false, 'Illegal texture type');
@@ -156,24 +161,26 @@ export class WEBGLFramebuffer extends Framebuffer {
156
161
  function mapIndexToCubeMapFace(layer) {
157
162
  // TEXTURE_CUBE_MAP_POSITIVE_X is a big value (0x8515)
158
163
  // if smaller assume layer is index, otherwise assume it is already a cube map face constant
159
- return layer < GL.TEXTURE_CUBE_MAP_POSITIVE_X ? layer + GL.TEXTURE_CUBE_MAP_POSITIVE_X : layer;
164
+ return layer < 34069
165
+ ? layer + 34069
166
+ : layer;
160
167
  }
161
168
  // Helper METHODS
162
169
  // Get a string describing the framebuffer error if installed
163
170
  function _getFrameBufferStatus(status) {
164
171
  switch (status) {
165
- case GL.FRAMEBUFFER_COMPLETE:
172
+ case 36053:
166
173
  return 'success';
167
- case GL.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:
174
+ case 36054:
168
175
  return 'Mismatched attachments';
169
- case GL.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:
176
+ case 36055:
170
177
  return 'No attachments';
171
- case GL.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:
178
+ case 36057:
172
179
  return 'Height/width mismatch';
173
- case GL.FRAMEBUFFER_UNSUPPORTED:
180
+ case 36061:
174
181
  return 'Unsupported or split attachments';
175
182
  // WebGL2
176
- case GL.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE:
183
+ case 36182:
177
184
  return 'Samples mismatch';
178
185
  // OVR_multiview2 extension
179
186
  // case GL.FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR: return 'baseViewIndex mismatch';
@@ -0,0 +1,44 @@
1
+ import { QuerySet, QuerySetProps } from '@luma.gl/core';
2
+ import { WebGLDevice } from "../webgl-device.js";
3
+ /**
4
+ * Asynchronous queries for different kinds of information
5
+ */
6
+ export declare class WEBGLQuerySet extends QuerySet {
7
+ device: WebGLDevice;
8
+ handle: WebGLQuery;
9
+ target: number | null;
10
+ _queryPending: boolean;
11
+ _pollingPromise: Promise<any> | null;
12
+ get [Symbol.toStringTag](): string;
13
+ constructor(device: WebGLDevice, props: QuerySetProps);
14
+ destroy(): void;
15
+ /**
16
+ * Shortcut for timer query (dependent on extension in both WebGL1 and 2)
17
+ * Measures GPU time delta between this call and a matching `end` call in the
18
+ * GPU instruction stream.
19
+ */
20
+ beginTimestampQuery(): void;
21
+ endTimestampQuery(): void;
22
+ beginOcclusionQuery(options?: {
23
+ conservative?: boolean;
24
+ }): void;
25
+ endOcclusionQuery(): void;
26
+ beginTransformFeedbackQuery(): void;
27
+ endTransformFeedbackQuery(): void;
28
+ resolveQuery(): Promise<bigint[]>;
29
+ /**
30
+ * Due to OpenGL API limitations, after calling `begin()` on one Query
31
+ * instance, `end()` must be called on that same instance before
32
+ * calling `begin()` on another query. While there can be multiple
33
+ * outstanding queries representing disjoint `begin()`/`end()` intervals.
34
+ * It is not possible to interleave or overlap `begin` and `end` calls.
35
+ */
36
+ protected _begin(target: number): void;
37
+ protected _end(): void;
38
+ isResultAvailable(): boolean;
39
+ isTimerDisjoint(): boolean;
40
+ getResult(): any;
41
+ getTimerMilliseconds(): number;
42
+ pollQuery(limit?: number): Promise<any>;
43
+ }
44
+ //# sourceMappingURL=webgl-query-set.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webgl-query-set.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgl-query-set.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,QAAQ,EAAE,aAAa,EAAC,MAAM,eAAe,CAAC;AAEtD,OAAO,EAAC,WAAW,EAAC,2BAAwB;AAE5C;;GAEG;AACH,qBAAa,aAAc,SAAQ,QAAQ;IACzC,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,UAAU,CAAC;IAEnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC7B,aAAa,UAAS;IACtB,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAQ;IAE5C,IAAa,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,MAAM,CAE1C;gBAGW,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa;IAY5C,OAAO;IAMhB;;;;OAIG;IACH,mBAAmB,IAAI,IAAI;IAI3B,iBAAiB,IAAI,IAAI;IAKzB,mBAAmB,CAAC,OAAO,CAAC,EAAE;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAC,GAAG,IAAI;IAM7D,iBAAiB;IAKjB,2BAA2B,IAAI,IAAI;IAInC,yBAAyB,IAAI,IAAI;IAI3B,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAOvC;;;;;;OAMG;IACH,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAatC,SAAS,CAAC,IAAI,IAAI,IAAI;IAetB,iBAAiB,IAAI,OAAO;IAgB5B,eAAe,IAAI,OAAO;IAK1B,SAAS,IAAI,GAAG;IAKhB,oBAAoB;IAKpB,SAAS,CAAC,KAAK,GAAE,MAAiC,GAAG,OAAO,CAAC,GAAG,CAAC;CAyBlE"}
@@ -0,0 +1,136 @@
1
+ // WebGL2 Query (also handles disjoint timer extensions)
2
+ import { QuerySet } from '@luma.gl/core';
3
+ import { GL } from '@luma.gl/constants';
4
+ /**
5
+ * Asynchronous queries for different kinds of information
6
+ */
7
+ export class WEBGLQuerySet extends QuerySet {
8
+ device;
9
+ handle;
10
+ target = null;
11
+ _queryPending = false;
12
+ _pollingPromise = null;
13
+ get [Symbol.toStringTag]() {
14
+ return 'Query';
15
+ }
16
+ // Create a query class
17
+ constructor(device, props) {
18
+ super(device, props);
19
+ this.device = device;
20
+ if (props.count > 1) {
21
+ throw new Error('WebGL QuerySet can only have one value');
22
+ }
23
+ this.handle = this.device.gl.createQuery();
24
+ Object.seal(this);
25
+ }
26
+ destroy() {
27
+ this.device.gl.deleteQuery(this.handle);
28
+ }
29
+ // FOR RENDER PASS AND COMMAND ENCODER
30
+ /**
31
+ * Shortcut for timer query (dependent on extension in both WebGL1 and 2)
32
+ * Measures GPU time delta between this call and a matching `end` call in the
33
+ * GPU instruction stream.
34
+ */
35
+ beginTimestampQuery() {
36
+ return this._begin(35007);
37
+ }
38
+ endTimestampQuery() {
39
+ this._end();
40
+ }
41
+ // Shortcut for occlusion queries
42
+ beginOcclusionQuery(options) {
43
+ return this._begin(options?.conservative ? 36202 : 35887);
44
+ }
45
+ endOcclusionQuery() {
46
+ this._end();
47
+ }
48
+ // Shortcut for transformFeedbackQuery
49
+ beginTransformFeedbackQuery() {
50
+ return this._begin(35976);
51
+ }
52
+ endTransformFeedbackQuery() {
53
+ this._end();
54
+ }
55
+ async resolveQuery() {
56
+ const value = await this.pollQuery();
57
+ return [value];
58
+ }
59
+ // PRIVATE METHODS
60
+ /**
61
+ * Due to OpenGL API limitations, after calling `begin()` on one Query
62
+ * instance, `end()` must be called on that same instance before
63
+ * calling `begin()` on another query. While there can be multiple
64
+ * outstanding queries representing disjoint `begin()`/`end()` intervals.
65
+ * It is not possible to interleave or overlap `begin` and `end` calls.
66
+ */
67
+ _begin(target) {
68
+ // Don't start a new query if one is already active.
69
+ if (this._queryPending) {
70
+ return;
71
+ }
72
+ this.target = target;
73
+ this.device.gl.beginQuery(this.target, this.handle);
74
+ return;
75
+ }
76
+ // ends the current query
77
+ _end() {
78
+ // Can't end a new query if the last one hasn't been resolved.
79
+ if (this._queryPending) {
80
+ return;
81
+ }
82
+ if (this.target) {
83
+ this.device.gl.endQuery(this.target);
84
+ this.target = null;
85
+ this._queryPending = true;
86
+ }
87
+ return;
88
+ }
89
+ // Returns true if the query result is available
90
+ isResultAvailable() {
91
+ if (!this._queryPending) {
92
+ return false;
93
+ }
94
+ const resultAvailable = this.device.gl.getQueryParameter(this.handle, 34919);
95
+ if (resultAvailable) {
96
+ this._queryPending = false;
97
+ }
98
+ return resultAvailable;
99
+ }
100
+ // Timing query is disjoint, i.e. results are invalid
101
+ isTimerDisjoint() {
102
+ return this.device.gl.getParameter(36795);
103
+ }
104
+ // Returns query result.
105
+ getResult() {
106
+ return this.device.gl.getQueryParameter(this.handle, 34918);
107
+ }
108
+ // Returns the query result, converted to milliseconds to match JavaScript conventions.
109
+ getTimerMilliseconds() {
110
+ return this.getResult() / 1e6;
111
+ }
112
+ // Polls the query
113
+ pollQuery(limit = Number.POSITIVE_INFINITY) {
114
+ if (this._pollingPromise) {
115
+ return this._pollingPromise;
116
+ }
117
+ let counter = 0;
118
+ this._pollingPromise = new Promise((resolve, reject) => {
119
+ const poll = () => {
120
+ if (this.isResultAvailable()) {
121
+ resolve(this.getResult());
122
+ this._pollingPromise = null;
123
+ }
124
+ else if (counter++ > limit) {
125
+ reject('Timed out');
126
+ this._pollingPromise = null;
127
+ }
128
+ else {
129
+ requestAnimationFrame(poll);
130
+ }
131
+ };
132
+ requestAnimationFrame(poll);
133
+ });
134
+ return this._pollingPromise;
135
+ }
136
+ }
@@ -1,5 +1,5 @@
1
1
  import { RenderPass, RenderPassProps, NumberArray, RenderPassParameters } from '@luma.gl/core';
2
- import { WebGLDevice } from '../webgl-device';
2
+ import { WebGLDevice } from "../webgl-device.js";
3
3
  import { GLParameters } from '@luma.gl/constants';
4
4
  export declare class WEBGLRenderPass extends RenderPass {
5
5
  readonly device: WebGLDevice;
@@ -14,6 +14,8 @@ export declare class WEBGLRenderPass extends RenderPass {
14
14
  * Maps RenderPass parameters to GL parameters
15
15
  */
16
16
  setParameters(parameters?: RenderPassParameters): void;
17
+ beginOcclusionQuery(queryIndex: number): void;
18
+ endOcclusionQuery(): void;
17
19
  /**
18
20
  * Optionally clears depth, color and stencil buffers based on parameters
19
21
  */
@@ -1 +1 @@
1
- {"version":3,"file":"webgl-render-pass.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgl-render-pass.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,oBAAoB,EAAC,MAAM,eAAe,CAAC;AAC7F,OAAO,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAK,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAYpD,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAE7B,8DAA8D;IAC9D,YAAY,EAAE,YAAY,CAAC;gBAEf,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe;IAYvD,GAAG,IAAI,IAAI;IAQX,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IACxC,aAAa,IAAI,IAAI;IACrB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAS5C;;OAEG;IACH,aAAa,CAAC,UAAU,GAAE,oBAAyB,GAAG,IAAI;IAiD1D;;OAEG;IACH,SAAS,CAAC,KAAK,IAAI,IAAI;IA+BvB;;OAEG;IACH,SAAS,CAAC,gBAAgB,CAAC,UAAU,GAAE,MAAU,EAAE,KAAK,GAAE,WAA0B;CAwCrF"}
1
+ {"version":3,"file":"webgl-render-pass.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgl-render-pass.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,oBAAoB,EAAC,MAAM,eAAe,CAAC;AAC7F,OAAO,EAAC,WAAW,EAAC,2BAAwB;AAC5C,OAAO,EAAK,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAapD,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAE7B,8DAA8D;IAC9D,YAAY,EAAE,YAAY,CAAC;gBAEf,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe;IAYvD,GAAG,IAAI,IAAI;IAQX,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IACxC,aAAa,IAAI,IAAI;IACrB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAO5C;;OAEG;IACH,aAAa,CAAC,UAAU,GAAE,oBAAyB,GAAG,IAAI;IA+C1D,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAKpC,iBAAiB,IAAI,IAAI;IAOlC;;OAEG;IACH,SAAS,CAAC,KAAK,IAAI,IAAI;IA+BvB;;OAEG;IACH,SAAS,CAAC,gBAAgB,CAAC,UAAU,GAAE,MAAU,EAAE,KAAK,GAAE,WAA0B;CAwCrF"}
@@ -1,10 +1,11 @@
1
- // luma.gl, MIT license
1
+ // luma.gl
2
+ // SPDX-License-Identifier: MIT
2
3
  // Copyright (c) vis.gl contributors
3
4
  import { RenderPass } from '@luma.gl/core';
4
5
  import { GL } from '@luma.gl/constants';
5
- import { withGLParameters } from '../../context/state-tracker/with-parameters';
6
- import { setGLParameters } from '../../context/parameters/unified-parameter-api';
7
- import { pushContextState, popContextState } from '../../context/state-tracker/track-context-state';
6
+ import { withGLParameters } from "../../context/state-tracker/with-parameters.js";
7
+ import { setGLParameters } from "../../context/parameters/unified-parameter-api.js";
8
+ import { pushContextState, popContextState } from "../../context/state-tracker/track-context-state.js";
8
9
  // Should collapse during minification
9
10
  const GL_DEPTH_BUFFER_BIT = 0x00000100;
10
11
  const GL_STENCIL_BUFFER_BIT = 0x00000400;
@@ -26,14 +27,13 @@ export class WEBGLRenderPass extends RenderPass {
26
27
  end() {
27
28
  popContextState(this.device.gl);
28
29
  if (this.props.framebuffer) {
29
- setGLParameters(this.device, { framebuffer: null });
30
+ setGLParameters(this.device.gl, { framebuffer: null });
30
31
  }
31
32
  // should add commands to CommandEncoder.
32
33
  }
33
34
  pushDebugGroup(groupLabel) { }
34
35
  popDebugGroup() { }
35
36
  insertDebugMarker(markerLabel) { }
36
- // writeTimestamp(querySet: GPUQuerySet, queryIndex: number): void;
37
37
  // beginOcclusionQuery(queryIndex: number): void;
38
38
  // endOcclusionQuery(): void;
39
39
  // executeBundles(bundles: Iterable<GPURenderBundle>): void;
@@ -50,7 +50,7 @@ export class WEBGLRenderPass extends RenderPass {
50
50
  glParameters.depthMask = !this.props.depthReadOnly;
51
51
  }
52
52
  glParameters.stencilMask = this.props.stencilReadOnly ? 0 : 1;
53
- glParameters[GL.RASTERIZER_DISCARD] = this.props.discard;
53
+ glParameters[35977] = this.props.discard;
54
54
  // Map the four renderpass parameters to WebGL parameters
55
55
  if (parameters.viewport) {
56
56
  // WebGPU viewports are 6 coordinates (X, Y, Z)
@@ -75,12 +75,20 @@ export class WEBGLRenderPass extends RenderPass {
75
75
  console.warn('RenderPassParameters.stencilReference not yet implemented in WebGL');
76
76
  // parameters.stencilFunc = [func, ref, mask];
77
77
  // Does this work?
78
- parameters[GL.STENCIL_REF] = parameters.stencilReference;
78
+ parameters[2967] = parameters.stencilReference;
79
79
  }
80
80
  this.glParameters = glParameters;
81
- setGLParameters(this.device, glParameters);
81
+ setGLParameters(this.device.gl, glParameters);
82
82
  }
83
- // Internal
83
+ beginOcclusionQuery(queryIndex) {
84
+ const webglQuerySet = this.props.occlusionQuerySet;
85
+ webglQuerySet?.beginOcclusionQuery();
86
+ }
87
+ endOcclusionQuery() {
88
+ const webglQuerySet = this.props.occlusionQuerySet;
89
+ webglQuerySet?.endOcclusionQuery();
90
+ }
91
+ // PRIVATE
84
92
  /**
85
93
  * Optionally clears depth, color and stencil buffers based on parameters
86
94
  */
@@ -101,12 +109,12 @@ export class WEBGLRenderPass extends RenderPass {
101
109
  }
102
110
  if (clearMask !== 0) {
103
111
  // Temporarily set any clear "colors" and call clear
104
- withGLParameters(this.device, glParameters, () => {
112
+ withGLParameters(this.device.gl, glParameters, () => {
105
113
  this.device.gl.clear(clearMask);
106
114
  });
107
115
  // TODO - clear multiple color attachments
108
116
  // for (attachment of this.framebuffer.colorAttachments) {
109
- // this.clearColorBuffer
117
+ // this.clearColorBuffer
110
118
  // }
111
119
  }
112
120
  }
@@ -2,9 +2,9 @@ import type { UniformValue, RenderPipelineProps, Binding } from '@luma.gl/core';
2
2
  import type { ShaderLayout } from '@luma.gl/core';
3
3
  import type { RenderPass, VertexArray } from '@luma.gl/core';
4
4
  import { RenderPipeline } from '@luma.gl/core';
5
- import { WebGLDevice } from '../webgl-device';
6
- import { WEBGLShader } from './webgl-shader';
7
- import { WEBGLTransformFeedback } from './webgl-transform-feedback';
5
+ import { WebGLDevice } from "../webgl-device.js";
6
+ import { WEBGLShader } from "./webgl-shader.js";
7
+ import { WEBGLTransformFeedback } from "./webgl-transform-feedback.js";
8
8
  /** Creates a new render pipeline */
9
9
  export declare class WEBGLRenderPipeline extends RenderPipeline {
10
10
  /** The WebGL device that created this render pipeline */
@@ -32,8 +32,6 @@ export declare class WEBGLRenderPipeline extends RenderPipeline {
32
32
  * @todo needed for portable model
33
33
  */
34
34
  setBindings(bindings: Record<string, Binding>): void;
35
- /** This function is @deprecated, use uniform buffers */
36
- setUniforms(uniforms: Record<string, UniformValue>): void;
37
35
  /** @todo needed for portable model
38
36
  * @note The WebGL API is offers many ways to draw things
39
37
  * This function unifies those ways into a single call using common parameters with sane defaults
@@ -51,6 +49,7 @@ export declare class WEBGLRenderPipeline extends RenderPipeline {
51
49
  baseVertex?: number;
52
50
  transformFeedback?: WEBGLTransformFeedback;
53
51
  }): boolean;
52
+ setUniformsWebGL(uniforms: Record<string, UniformValue>): void;
54
53
  protected _linkShaders(): Promise<void>;
55
54
  /** Report link status. First, check for shader compilation failures if linking fails */
56
55
  _reportLinkStatus(status: 'success' | 'linking' | 'validation'): void;
@@ -1 +1 @@
1
- {"version":3,"file":"webgl-render-pipeline.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgl-render-pipeline.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,YAAY,EAAE,mBAAmB,EAAE,OAAO,EAAC,MAAM,eAAe,CAAC;AAC9E,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAC,UAAU,EAAE,WAAW,EAAC,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAC,cAAc,EAAsC,MAAM,eAAe,CAAC;AAUlF,OAAO,EAAC,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAK3C,OAAO,EAAC,sBAAsB,EAAC,MAAM,4BAA4B,CAAC;AAKlE,oCAAoC;AACpC,qBAAa,mBAAoB,SAAQ,cAAc;IACrD,yDAAyD;IACzD,MAAM,EAAE,WAAW,CAAC;IACpB,yCAAyC;IACzC,MAAM,EAAE,YAAY,CAAC;IACrB,oBAAoB;IACpB,EAAE,EAAE,WAAW,CAAC;IAChB,sBAAsB;IACtB,EAAE,EAAE,WAAW,CAAC;IAChB,mEAAmE;IACnE,kBAAkB,EAAE,YAAY,CAAC;IAEjC,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAM;IAC5C,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IACvC,qBAAqB;IACrB,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAQ;IAEjC,aAAa,EAAE,MAAM,CAAK;IAC1B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAM;gBAEnC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,mBAAmB;IAsClD,OAAO,IAAI,IAAI;IAQxB;;;OAGG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAiDpD,wDAAwD;IACxD,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC;IAalD;;;OAGG;IACH,IAAI,CAAC,OAAO,EAAE;QACZ,UAAU,EAAE,UAAU,CAAC;QACvB,wBAAwB;QACxB,WAAW,EAAE,WAAW,CAAC;QACzB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;KAC5C,GAAG,OAAO;cAsHK,YAAY;IA2B5B,wFAAwF;IACxF,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,YAAY;IAmB9D;;;;OAIG;IACH,cAAc,IAAI,SAAS,GAAG,SAAS,GAAG,YAAY;IAmBtD,6DAA6D;IACvD,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB3C;;;;OAIG;IACH,sBAAsB;IAatB,iDAAiD;IACjD,cAAc;IAiFd;;;OAGG;IACH,cAAc;CASf"}
1
+ {"version":3,"file":"webgl-render-pipeline.d.ts","sourceRoot":"","sources":["../../../src/adapter/resources/webgl-render-pipeline.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,YAAY,EAAE,mBAAmB,EAAE,OAAO,EAAC,MAAM,eAAe,CAAC;AAC9E,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAC,UAAU,EAAE,WAAW,EAAC,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAC,cAAc,EAAsC,MAAM,eAAe,CAAC;AAUlF,OAAO,EAAC,WAAW,EAAC,2BAAwB;AAE5C,OAAO,EAAC,WAAW,EAAC,0BAAuB;AAK3C,OAAO,EAAC,sBAAsB,EAAC,sCAAmC;AAKlE,oCAAoC;AACpC,qBAAa,mBAAoB,SAAQ,cAAc;IACrD,yDAAyD;IACzD,MAAM,EAAE,WAAW,CAAC;IACpB,yCAAyC;IACzC,MAAM,EAAE,YAAY,CAAC;IACrB,oBAAoB;IACpB,EAAE,EAAE,WAAW,CAAC;IAChB,sBAAsB;IACtB,EAAE,EAAE,WAAW,CAAC;IAChB,mEAAmE;IACnE,kBAAkB,EAAE,YAAY,CAAC;IAEjC,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAM;IAC5C,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IACvC,qBAAqB;IACrB,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAQ;IAEjC,aAAa,EAAE,MAAM,CAAK;IAC1B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAM;gBAEnC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,mBAAmB;IAyClD,OAAO,IAAI,IAAI;IAQxB;;;OAGG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAuDpD;;;OAGG;IACH,IAAI,CAAC,OAAO,EAAE;QACZ,UAAU,EAAE,UAAU,CAAC;QACvB,wBAAwB;QACxB,WAAW,EAAE,WAAW,CAAC;QACzB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;KAC5C,GAAG,OAAO;IAgGF,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC;cAkBhD,YAAY;IA2B5B,wFAAwF;IACxF,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,YAAY;IAmB9D;;;;OAIG;IACH,cAAc,IAAI,SAAS,GAAG,SAAS,GAAG,YAAY;IAmBtD,6DAA6D;IACvD,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB3C;;;;OAIG;IACH,sBAAsB;IAatB,iDAAiD;IACjD,cAAc;IAyFd;;;OAGG;IACH,cAAc;CASf"}