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

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 (237) hide show
  1. package/dist/adapter/converters/device-parameters.js +240 -158
  2. package/dist/adapter/converters/sampler-parameters.d.ts +0 -4
  3. package/dist/adapter/converters/sampler-parameters.d.ts.map +1 -1
  4. package/dist/adapter/converters/sampler-parameters.js +73 -68
  5. package/dist/adapter/converters/shader-formats.js +33 -46
  6. package/dist/adapter/converters/texture-formats.d.ts +9 -18
  7. package/dist/adapter/converters/texture-formats.d.ts.map +1 -1
  8. package/dist/adapter/converters/texture-formats.js +454 -871
  9. package/dist/adapter/converters/vertex-formats.js +52 -61
  10. package/dist/adapter/device-helpers/device-features.d.ts +2 -5
  11. package/dist/adapter/device-helpers/device-features.d.ts.map +1 -1
  12. package/dist/adapter/device-helpers/device-features.js +56 -87
  13. package/dist/adapter/device-helpers/device-limits.d.ts +2 -4
  14. package/dist/adapter/device-helpers/device-limits.d.ts.map +1 -1
  15. package/dist/adapter/device-helpers/device-limits.js +88 -83
  16. package/dist/adapter/device-helpers/get-device-info.d.ts +1 -1
  17. package/dist/adapter/device-helpers/get-device-info.d.ts.map +1 -1
  18. package/dist/adapter/device-helpers/get-device-info.js +79 -63
  19. package/dist/adapter/device-helpers/webgl-device-features.d.ts +6 -0
  20. package/dist/adapter/device-helpers/webgl-device-features.d.ts.map +1 -0
  21. package/dist/adapter/device-helpers/webgl-device-features.js +52 -0
  22. package/dist/adapter/device-helpers/webgl-device-info.d.ts +4 -0
  23. package/dist/adapter/device-helpers/webgl-device-info.d.ts.map +1 -0
  24. package/dist/adapter/device-helpers/webgl-device-info.js +87 -0
  25. package/dist/adapter/device-helpers/webgl-device-limits.d.ts +50 -0
  26. package/dist/adapter/device-helpers/webgl-device-limits.d.ts.map +1 -0
  27. package/dist/adapter/device-helpers/webgl-device-limits.js +92 -0
  28. package/dist/adapter/helpers/decode-webgl-types.js +87 -76
  29. package/dist/adapter/helpers/get-shader-layout.d.ts +1 -1
  30. package/dist/adapter/helpers/get-shader-layout.d.ts.map +1 -1
  31. package/dist/adapter/helpers/get-shader-layout.js +261 -226
  32. package/dist/adapter/helpers/parse-shader-compiler-log.js +46 -37
  33. package/dist/adapter/helpers/set-uniform.d.ts +1 -1
  34. package/dist/adapter/helpers/set-uniform.d.ts.map +1 -1
  35. package/dist/adapter/helpers/set-uniform.js +67 -82
  36. package/dist/adapter/helpers/webgl-topology-utils.js +77 -93
  37. package/dist/adapter/objects/constants-to-keys.d.ts +1 -1
  38. package/dist/adapter/objects/constants-to-keys.d.ts.map +1 -1
  39. package/dist/adapter/objects/constants-to-keys.js +18 -12
  40. package/dist/adapter/objects/webgl-renderbuffer.js +76 -80
  41. package/dist/adapter/objects/webgl-resource.d.ts +1 -1
  42. package/dist/adapter/objects/webgl-resource.d.ts.map +1 -1
  43. package/dist/adapter/objects/webgl-resource.js +204 -154
  44. package/dist/adapter/resources/webgl-buffer.d.ts +2 -3
  45. package/dist/adapter/resources/webgl-buffer.d.ts.map +1 -1
  46. package/dist/adapter/resources/webgl-buffer.js +160 -119
  47. package/dist/adapter/resources/webgl-command-buffer.d.ts.map +1 -1
  48. package/dist/adapter/resources/webgl-command-buffer.js +268 -171
  49. package/dist/adapter/resources/webgl-command-encoder.js +32 -40
  50. package/dist/adapter/resources/webgl-external-texture.js +92 -1
  51. package/dist/adapter/resources/webgl-framebuffer.d.ts +2 -2
  52. package/dist/adapter/resources/webgl-framebuffer.d.ts.map +1 -1
  53. package/dist/adapter/resources/webgl-framebuffer.js +167 -139
  54. package/dist/adapter/resources/webgl-render-pass.js +121 -95
  55. package/dist/adapter/resources/webgl-render-pipeline.d.ts +11 -1
  56. package/dist/adapter/resources/webgl-render-pipeline.d.ts.map +1 -1
  57. package/dist/adapter/resources/webgl-render-pipeline.js +378 -228
  58. package/dist/adapter/resources/webgl-sampler.d.ts +0 -2
  59. package/dist/adapter/resources/webgl-sampler.d.ts.map +1 -1
  60. package/dist/adapter/resources/webgl-sampler.js +43 -34
  61. package/dist/adapter/resources/webgl-shader.d.ts +10 -1
  62. package/dist/adapter/resources/webgl-shader.d.ts.map +1 -1
  63. package/dist/adapter/resources/webgl-shader.js +106 -45
  64. package/dist/adapter/resources/webgl-texture.d.ts +2 -6
  65. package/dist/adapter/resources/webgl-texture.d.ts.map +1 -1
  66. package/dist/adapter/resources/webgl-texture.js +614 -699
  67. package/dist/adapter/resources/webgl-transform-feedback.d.ts +1 -1
  68. package/dist/adapter/resources/webgl-transform-feedback.d.ts.map +1 -1
  69. package/dist/adapter/resources/webgl-transform-feedback.js +143 -145
  70. package/dist/adapter/resources/webgl-vertex-array.d.ts +1 -1
  71. package/dist/adapter/resources/webgl-vertex-array.d.ts.map +1 -1
  72. package/dist/adapter/resources/webgl-vertex-array.js +229 -158
  73. package/dist/adapter/webgl-canvas-context.d.ts.map +1 -1
  74. package/dist/adapter/webgl-canvas-context.js +58 -37
  75. package/dist/adapter/webgl-device.d.ts +7 -15
  76. package/dist/adapter/webgl-device.d.ts.map +1 -1
  77. package/dist/adapter/webgl-device.js +440 -381
  78. package/dist/classic/accessor.js +132 -102
  79. package/dist/classic/clear.d.ts +2 -2
  80. package/dist/classic/clear.d.ts.map +1 -1
  81. package/dist/classic/clear.js +73 -73
  82. package/dist/classic/copy-and-blit.d.ts.map +1 -1
  83. package/dist/classic/copy-and-blit.js +176 -177
  84. package/dist/classic/format-utils.d.ts +2 -2
  85. package/dist/classic/format-utils.js +38 -32
  86. package/dist/classic/typed-array-utils.js +95 -81
  87. package/dist/context/{polyfill → context}/context-data.d.ts +2 -1
  88. package/dist/context/context/context-data.d.ts.map +1 -0
  89. package/dist/context/context/context-data.js +33 -0
  90. package/dist/context/context/create-browser-context.d.ts +1 -6
  91. package/dist/context/context/create-browser-context.d.ts.map +1 -1
  92. package/dist/context/context/create-browser-context.js +62 -49
  93. package/dist/context/debug/spector.js +54 -50
  94. package/dist/context/debug/webgl-developer-tools.d.ts +1 -2
  95. package/dist/context/debug/webgl-developer-tools.d.ts.map +1 -1
  96. package/dist/context/debug/webgl-developer-tools.js +102 -76
  97. package/dist/context/parameters/unified-parameter-api.d.ts +3 -3
  98. package/dist/context/parameters/unified-parameter-api.d.ts.map +1 -1
  99. package/dist/context/parameters/unified-parameter-api.js +95 -46
  100. package/dist/context/parameters/webgl-parameter-tables.d.ts +110 -99
  101. package/dist/context/parameters/webgl-parameter-tables.d.ts.map +1 -1
  102. package/dist/context/parameters/webgl-parameter-tables.js +456 -404
  103. package/dist/context/state-tracker/deep-array-equal.js +18 -14
  104. package/dist/context/state-tracker/track-context-state.d.ts +4 -4
  105. package/dist/context/state-tracker/track-context-state.d.ts.map +1 -1
  106. package/dist/context/state-tracker/track-context-state.js +190 -126
  107. package/dist/context/state-tracker/with-parameters.d.ts +1 -1
  108. package/dist/context/state-tracker/with-parameters.d.ts.map +1 -1
  109. package/dist/context/state-tracker/with-parameters.js +45 -29
  110. package/dist/dist.dev.js +2568 -3786
  111. package/dist/index.cjs +1346 -2464
  112. package/dist/index.cjs.map +7 -0
  113. package/dist/index.d.ts +2 -5
  114. package/dist/index.d.ts.map +1 -1
  115. package/dist/index.js +36 -26
  116. package/dist/types.js +2 -1
  117. package/dist.min.js +9 -42
  118. package/package.json +11 -15
  119. package/src/adapter/converters/device-parameters.ts +0 -1
  120. package/src/adapter/converters/sampler-parameters.ts +0 -17
  121. package/src/adapter/converters/texture-formats.ts +86 -154
  122. package/src/adapter/device-helpers/webgl-device-features.ts +69 -0
  123. package/src/adapter/device-helpers/{get-device-info.ts → webgl-device-info.ts} +3 -4
  124. package/src/adapter/device-helpers/{device-limits.ts → webgl-device-limits.ts} +25 -23
  125. package/src/adapter/helpers/get-shader-layout.ts +17 -28
  126. package/src/adapter/helpers/set-uniform.ts +1 -3
  127. package/src/adapter/objects/constants-to-keys.ts +1 -1
  128. package/src/adapter/objects/webgl-renderbuffer.ts +4 -4
  129. package/src/adapter/objects/webgl-resource.ts +3 -18
  130. package/src/adapter/resources/webgl-buffer.ts +6 -11
  131. package/src/adapter/resources/webgl-command-buffer.ts +20 -30
  132. package/src/adapter/resources/webgl-external-texture.ts +2 -3
  133. package/src/adapter/resources/webgl-framebuffer.ts +4 -5
  134. package/src/adapter/resources/webgl-render-pass.ts +7 -7
  135. package/src/adapter/resources/webgl-render-pipeline.ts +106 -31
  136. package/src/adapter/resources/webgl-sampler.ts +5 -9
  137. package/src/adapter/resources/webgl-shader.ts +57 -10
  138. package/src/adapter/resources/webgl-texture.ts +29 -103
  139. package/src/adapter/resources/webgl-transform-feedback.ts +14 -15
  140. package/src/adapter/resources/webgl-vertex-array.ts +16 -18
  141. package/src/adapter/webgl-canvas-context.ts +1 -7
  142. package/src/adapter/webgl-device.ts +18 -67
  143. package/src/classic/clear.ts +13 -14
  144. package/src/classic/copy-and-blit.ts +1 -2
  145. package/src/context/context/context-data.ts +44 -0
  146. package/src/context/context/create-browser-context.ts +7 -32
  147. package/src/context/debug/webgl-developer-tools.ts +6 -8
  148. package/src/context/parameters/unified-parameter-api.ts +3 -3
  149. package/src/context/parameters/webgl-parameter-tables.ts +66 -75
  150. package/src/context/state-tracker/track-context-state.ts +18 -17
  151. package/src/context/state-tracker/with-parameters.ts +1 -1
  152. package/src/index.ts +2 -17
  153. package/dist/adapter/converters/device-parameters.js.map +0 -1
  154. package/dist/adapter/converters/sampler-parameters.js.map +0 -1
  155. package/dist/adapter/converters/shader-formats.js.map +0 -1
  156. package/dist/adapter/converters/texture-formats.js.map +0 -1
  157. package/dist/adapter/converters/vertex-formats.js.map +0 -1
  158. package/dist/adapter/device-helpers/device-features.js.map +0 -1
  159. package/dist/adapter/device-helpers/device-limits.js.map +0 -1
  160. package/dist/adapter/device-helpers/get-device-info.js.map +0 -1
  161. package/dist/adapter/device-helpers/is-old-ie.d.ts +0 -2
  162. package/dist/adapter/device-helpers/is-old-ie.d.ts.map +0 -1
  163. package/dist/adapter/device-helpers/is-old-ie.js +0 -9
  164. package/dist/adapter/device-helpers/is-old-ie.js.map +0 -1
  165. package/dist/adapter/helpers/decode-webgl-types.js.map +0 -1
  166. package/dist/adapter/helpers/get-shader-layout.js.map +0 -1
  167. package/dist/adapter/helpers/parse-shader-compiler-log.js.map +0 -1
  168. package/dist/adapter/helpers/set-uniform.js.map +0 -1
  169. package/dist/adapter/helpers/webgl-topology-utils.js.map +0 -1
  170. package/dist/adapter/objects/constants-to-keys.js.map +0 -1
  171. package/dist/adapter/objects/webgl-renderbuffer.js.map +0 -1
  172. package/dist/adapter/objects/webgl-resource.js.map +0 -1
  173. package/dist/adapter/resources/webgl-buffer.js.map +0 -1
  174. package/dist/adapter/resources/webgl-command-buffer.js.map +0 -1
  175. package/dist/adapter/resources/webgl-command-encoder.js.map +0 -1
  176. package/dist/adapter/resources/webgl-external-texture.js.map +0 -1
  177. package/dist/adapter/resources/webgl-framebuffer.js.map +0 -1
  178. package/dist/adapter/resources/webgl-render-pass.js.map +0 -1
  179. package/dist/adapter/resources/webgl-render-pipeline.js.map +0 -1
  180. package/dist/adapter/resources/webgl-sampler.js.map +0 -1
  181. package/dist/adapter/resources/webgl-shader.js.map +0 -1
  182. package/dist/adapter/resources/webgl-texture.js.map +0 -1
  183. package/dist/adapter/resources/webgl-transform-feedback.js.map +0 -1
  184. package/dist/adapter/resources/webgl-vertex-array.js.map +0 -1
  185. package/dist/adapter/webgl-canvas-context.js.map +0 -1
  186. package/dist/adapter/webgl-device.js.map +0 -1
  187. package/dist/classic/accessor.js.map +0 -1
  188. package/dist/classic/clear.js.map +0 -1
  189. package/dist/classic/copy-and-blit.js.map +0 -1
  190. package/dist/classic/format-utils.js.map +0 -1
  191. package/dist/classic/typed-array-utils.js.map +0 -1
  192. package/dist/context/context/create-browser-context.js.map +0 -1
  193. package/dist/context/context/create-headless-context.d.ts +0 -9
  194. package/dist/context/context/create-headless-context.d.ts.map +0 -1
  195. package/dist/context/context/create-headless-context.js +0 -42
  196. package/dist/context/context/create-headless-context.js.map +0 -1
  197. package/dist/context/context/webgl-checks.d.ts +0 -13
  198. package/dist/context/context/webgl-checks.d.ts.map +0 -1
  199. package/dist/context/context/webgl-checks.js +0 -31
  200. package/dist/context/context/webgl-checks.js.map +0 -1
  201. package/dist/context/debug/spector.js.map +0 -1
  202. package/dist/context/debug/webgl-developer-tools.js.map +0 -1
  203. package/dist/context/parameters/unified-parameter-api.js.map +0 -1
  204. package/dist/context/parameters/webgl-parameter-tables.js.map +0 -1
  205. package/dist/context/polyfill/context-data.d.ts.map +0 -1
  206. package/dist/context/polyfill/context-data.js +0 -12
  207. package/dist/context/polyfill/context-data.js.map +0 -1
  208. package/dist/context/polyfill/get-parameter-polyfill.d.ts +0 -2
  209. package/dist/context/polyfill/get-parameter-polyfill.d.ts.map +0 -1
  210. package/dist/context/polyfill/get-parameter-polyfill.js +0 -85
  211. package/dist/context/polyfill/get-parameter-polyfill.js.map +0 -1
  212. package/dist/context/polyfill/polyfill-context.d.ts +0 -5
  213. package/dist/context/polyfill/polyfill-context.d.ts.map +0 -1
  214. package/dist/context/polyfill/polyfill-context.js +0 -87
  215. package/dist/context/polyfill/polyfill-context.js.map +0 -1
  216. package/dist/context/polyfill/polyfill-table.d.ts +0 -48
  217. package/dist/context/polyfill/polyfill-table.d.ts.map +0 -1
  218. package/dist/context/polyfill/polyfill-table.js +0 -137
  219. package/dist/context/polyfill/polyfill-table.js.map +0 -1
  220. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts +0 -2
  221. package/dist/context/polyfill/polyfill-vertex-array-object.d.ts.map +0 -1
  222. package/dist/context/polyfill/polyfill-vertex-array-object.js +0 -265
  223. package/dist/context/polyfill/polyfill-vertex-array-object.js.map +0 -1
  224. package/dist/context/state-tracker/deep-array-equal.js.map +0 -1
  225. package/dist/context/state-tracker/track-context-state.js.map +0 -1
  226. package/dist/context/state-tracker/with-parameters.js.map +0 -1
  227. package/dist/index.js.map +0 -1
  228. package/dist/types.js.map +0 -1
  229. package/src/adapter/device-helpers/device-features.ts +0 -161
  230. package/src/adapter/device-helpers/is-old-ie.ts +0 -14
  231. package/src/context/context/create-headless-context.ts +0 -51
  232. package/src/context/context/webgl-checks.ts +0 -51
  233. package/src/context/polyfill/context-data.ts +0 -30
  234. package/src/context/polyfill/get-parameter-polyfill.ts +0 -122
  235. package/src/context/polyfill/polyfill-context.ts +0 -104
  236. package/src/context/polyfill/polyfill-table.ts +0 -167
  237. package/src/context/polyfill/polyfill-vertex-array-object.ts +0 -365
@@ -1,155 +1,183 @@
1
+ // luma.gl, MIT license
2
+ // Copyright (c) vis.gl contributors
1
3
  import { Framebuffer, assert } from '@luma.gl/core';
2
- import { WEBGLTexture } from "./webgl-texture.js";
3
- import { WEBGLRenderbuffer } from "../objects/webgl-renderbuffer.js";
4
- import { getDepthStencilAttachmentWebGL } from "../converters/texture-formats.js";
4
+ 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';
8
+ /** luma.gl Framebuffer, WebGL implementation */
5
9
  export class WEBGLFramebuffer extends Framebuffer {
6
- get texture() {
7
- return this.colorAttachments[0];
8
- }
9
- constructor(device, props) {
10
- super(device, props);
11
- this.device = void 0;
12
- this.gl = void 0;
13
- this.handle = void 0;
14
- const isDefaultFramebuffer = props.handle === null;
15
- this.device = device;
16
- this.gl = device.gl;
17
- this.handle = this.props.handle || isDefaultFramebuffer ? this.props.handle : this.gl.createFramebuffer();
18
- if (!isDefaultFramebuffer) {
19
- device.setSpectorMetadata(this.handle, {
20
- id: this.props.id,
21
- props: this.props
22
- });
23
- this.autoCreateAttachmentTextures();
24
- this.gl.bindFramebuffer(36160, this.handle);
25
- for (let i = 0; i < this.colorAttachments.length; ++i) {
26
- const attachment = this.colorAttachments[i];
27
- const attachmentPoint = 36064 + i;
28
- if (attachment) {
29
- this._attachOne(attachmentPoint, attachment);
30
- }
31
- }
32
- if (this.depthStencilAttachment) {
33
- this._attachOne(getDepthStencilAttachmentWebGL(this.depthStencilAttachment.format), this.depthStencilAttachment);
34
- }
35
- this.gl.bindFramebuffer(36160, null);
36
- }
37
- if (props.check !== false) {
38
- this._checkStatus();
39
- }
40
- }
41
- destroy() {
42
- super.destroy();
43
- if (!this.destroyed && this.handle !== null) {
44
- this.gl.deleteFramebuffer(this.handle);
10
+ device;
11
+ gl;
12
+ handle;
13
+ get texture() {
14
+ return this.colorAttachments[0];
45
15
  }
46
- }
47
- _checkStatus() {
48
- const {
49
- gl
50
- } = this;
51
- const prevHandle = gl.bindFramebuffer(36160, this.handle);
52
- const status = gl.checkFramebufferStatus(36160);
53
- gl.bindFramebuffer(36160, prevHandle || null);
54
- if (status !== 36053) {
55
- throw new Error(`Framebuffer ${_getFrameBufferStatus(status)}`);
16
+ constructor(device, props) {
17
+ super(device, props);
18
+ // WebGL default framebuffer handle is null
19
+ const isDefaultFramebuffer = props.handle === null;
20
+ this.device = device;
21
+ this.gl = device.gl;
22
+ this.handle =
23
+ this.props.handle || isDefaultFramebuffer ? this.props.handle : this.gl.createFramebuffer();
24
+ if (!isDefaultFramebuffer) {
25
+ // default framebuffer handle is null, so we can't set spector metadata...
26
+ device.setSpectorMetadata(this.handle, { id: this.props.id, props: this.props });
27
+ // Auto create textures for attachments if needed
28
+ this.autoCreateAttachmentTextures();
29
+ /** Attach from a map of attachments */
30
+ this.gl.bindFramebuffer(GL.FRAMEBUFFER, this.handle);
31
+ // Walk the attachments
32
+ for (let i = 0; i < this.colorAttachments.length; ++i) {
33
+ const attachment = this.colorAttachments[i];
34
+ const attachmentPoint = GL.COLOR_ATTACHMENT0 + i;
35
+ if (attachment) {
36
+ this._attachOne(attachmentPoint, attachment);
37
+ }
38
+ }
39
+ if (this.depthStencilAttachment) {
40
+ this._attachOne(getDepthStencilAttachmentWebGL(this.depthStencilAttachment.format), this.depthStencilAttachment);
41
+ }
42
+ this.gl.bindFramebuffer(GL.FRAMEBUFFER, null);
43
+ }
44
+ // @ts-expect-error
45
+ if (props.check !== false) {
46
+ this._checkStatus();
47
+ }
56
48
  }
57
- }
58
- createDepthStencilTexture(format) {
59
- return new WEBGLRenderbuffer(this.device, {
60
- id: `${this.id}-depth-stencil`,
61
- format,
62
- width: this.width,
63
- height: this.height
64
- });
65
- }
66
- resizeAttachments(width, height) {
67
- if (this.handle === null) {
68
- this.width = this.gl.drawingBufferWidth;
69
- this.height = this.gl.drawingBufferHeight;
70
- return this;
49
+ /** destroys any auto created resources etc. */
50
+ destroy() {
51
+ super.destroy(); // destroys owned resources etc.
52
+ if (!this.destroyed && this.handle !== null) {
53
+ this.gl.deleteFramebuffer(this.handle);
54
+ // this.handle = null;
55
+ }
71
56
  }
72
- if (width === undefined) {
73
- width = this.gl.drawingBufferWidth;
57
+ // 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
+ }
74
68
  }
75
- if (height === undefined) {
76
- height = this.gl.drawingBufferHeight;
69
+ /** In WebGL we must use renderbuffers for depth/stencil attachments (unless we have extensions) */
70
+ createDepthStencilTexture(format) {
71
+ return new WEBGLRenderbuffer(this.device, {
72
+ id: `${this.id}-depth-stencil`, // TODO misleading if not depth and stencil?
73
+ format,
74
+ // dataFormat: GL.DEPTH_STENCIL,
75
+ // type: GL.UNSIGNED_INT_24_8,
76
+ width: this.width,
77
+ height: this.height
78
+ });
77
79
  }
78
- for (const colorAttachment of this.colorAttachments) {
79
- colorAttachment.resize({
80
- width,
81
- height
82
- });
80
+ /**
81
+ * Attachment resize is expected to be a noop if size is same
82
+ */
83
+ resizeAttachments(width, height) {
84
+ // for default framebuffer, just update the stored size
85
+ if (this.handle === null) {
86
+ // assert(width === undefined && height === undefined);
87
+ this.width = this.gl.drawingBufferWidth;
88
+ this.height = this.gl.drawingBufferHeight;
89
+ return this;
90
+ }
91
+ if (width === undefined) {
92
+ width = this.gl.drawingBufferWidth;
93
+ }
94
+ if (height === undefined) {
95
+ height = this.gl.drawingBufferHeight;
96
+ }
97
+ // TODO Not clear that this is better than default destroy/create implementation
98
+ for (const colorAttachment of this.colorAttachments) {
99
+ colorAttachment.resize({ width, height });
100
+ }
101
+ if (this.depthStencilAttachment) {
102
+ this.depthStencilAttachment.resize({ width, height });
103
+ }
104
+ return this;
83
105
  }
84
- if (this.depthStencilAttachment) {
85
- this.depthStencilAttachment.resize({
86
- width,
87
- height
88
- });
106
+ /** Attach one attachment */
107
+ _attachOne(attachmentPoint, attachment) {
108
+ if (attachment instanceof WEBGLRenderbuffer) {
109
+ this._attachWEBGLRenderbuffer(attachmentPoint, attachment);
110
+ return attachment;
111
+ }
112
+ else if (Array.isArray(attachment)) {
113
+ const [texture, layer = 0, level = 0] = attachment;
114
+ this._attachTexture(attachmentPoint, texture, layer, level);
115
+ return texture;
116
+ }
117
+ else if (attachment instanceof WEBGLTexture) {
118
+ this._attachTexture(attachmentPoint, attachment, 0, 0);
119
+ return attachment;
120
+ }
121
+ throw new Error('attach');
89
122
  }
90
- return this;
91
- }
92
- _attachOne(attachmentPoint, attachment) {
93
- if (attachment instanceof WEBGLRenderbuffer) {
94
- this._attachWEBGLRenderbuffer(attachmentPoint, attachment);
95
- return attachment;
96
- } else if (Array.isArray(attachment)) {
97
- const [texture, layer = 0, level = 0] = attachment;
98
- this._attachTexture(attachmentPoint, texture, layer, level);
99
- return texture;
100
- } else if (attachment instanceof WEBGLTexture) {
101
- this._attachTexture(attachmentPoint, attachment, 0, 0);
102
- return attachment;
123
+ _attachWEBGLRenderbuffer(attachment, renderbuffer) {
124
+ this.gl.framebufferRenderbuffer(GL.FRAMEBUFFER, attachment, GL.RENDERBUFFER, renderbuffer.handle);
103
125
  }
104
- throw new Error('attach');
105
- }
106
- _attachWEBGLRenderbuffer(attachment, renderbuffer) {
107
- this.gl.framebufferRenderbuffer(36160, attachment, 36161, renderbuffer.handle);
108
- }
109
- _attachTexture(attachment, texture, layer, level) {
110
- const {
111
- gl,
112
- gl2
113
- } = this.device;
114
- gl.bindTexture(texture.target, texture.handle);
115
- switch (texture.target) {
116
- case 35866:
117
- case 32879:
118
- this.device.assertWebGL2();
119
- gl2 === null || gl2 === void 0 ? void 0 : gl2.framebufferTextureLayer(36160, attachment, texture.target, level, layer);
120
- break;
121
- case 34067:
122
- const face = mapIndexToCubeMapFace(layer);
123
- gl.framebufferTexture2D(36160, attachment, face, texture.handle, level);
124
- break;
125
- case 3553:
126
- gl.framebufferTexture2D(36160, attachment, 3553, texture.handle, level);
127
- break;
128
- default:
129
- assert(false, 'Illegal texture type');
126
+ /**
127
+ * @param attachment
128
+ * @param texture
129
+ * @param layer = 0 - index into WEBGLTextureArray and Texture3D or face for `TextureCubeMap`
130
+ * @param level = 0 - mipmapLevel
131
+ */
132
+ _attachTexture(attachment, texture, layer, level) {
133
+ const { gl } = this.device;
134
+ gl.bindTexture(texture.target, texture.handle);
135
+ switch (texture.target) {
136
+ case GL.TEXTURE_2D_ARRAY:
137
+ case GL.TEXTURE_3D:
138
+ gl.framebufferTextureLayer(GL.FRAMEBUFFER, attachment, texture.target, level, layer);
139
+ break;
140
+ case GL.TEXTURE_CUBE_MAP:
141
+ // layer must be a cubemap face (or if index, converted to cube map face)
142
+ const face = mapIndexToCubeMapFace(layer);
143
+ gl.framebufferTexture2D(GL.FRAMEBUFFER, attachment, face, texture.handle, level);
144
+ break;
145
+ case GL.TEXTURE_2D:
146
+ gl.framebufferTexture2D(GL.FRAMEBUFFER, attachment, GL.TEXTURE_2D, texture.handle, level);
147
+ break;
148
+ default:
149
+ assert(false, 'Illegal texture type');
150
+ }
151
+ gl.bindTexture(texture.target, null);
130
152
  }
131
- gl.bindTexture(texture.target, null);
132
- }
133
153
  }
154
+ // Helper functions
155
+ // Map an index to a cube map face constant
134
156
  function mapIndexToCubeMapFace(layer) {
135
- return layer < 34069 ? layer + 34069 : layer;
157
+ // TEXTURE_CUBE_MAP_POSITIVE_X is a big value (0x8515)
158
+ // 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;
136
160
  }
161
+ // Helper METHODS
162
+ // Get a string describing the framebuffer error if installed
137
163
  function _getFrameBufferStatus(status) {
138
- switch (status) {
139
- case 36053:
140
- return 'success';
141
- case 36054:
142
- return 'Mismatched attachments';
143
- case 36055:
144
- return 'No attachments';
145
- case 36057:
146
- return 'Height/width mismatch';
147
- case 36061:
148
- return 'Unsupported or split attachments';
149
- case 36182:
150
- return 'Samples mismatch';
151
- default:
152
- return `${status}`;
153
- }
164
+ switch (status) {
165
+ case GL.FRAMEBUFFER_COMPLETE:
166
+ return 'success';
167
+ case GL.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:
168
+ return 'Mismatched attachments';
169
+ case GL.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:
170
+ return 'No attachments';
171
+ case GL.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:
172
+ return 'Height/width mismatch';
173
+ case GL.FRAMEBUFFER_UNSUPPORTED:
174
+ return 'Unsupported or split attachments';
175
+ // WebGL2
176
+ case GL.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE:
177
+ return 'Samples mismatch';
178
+ // OVR_multiview2 extension
179
+ // case GL.FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR: return 'baseViewIndex mismatch';
180
+ default:
181
+ return `${status}`;
182
+ }
154
183
  }
155
- //# sourceMappingURL=webgl-framebuffer.js.map
@@ -1,107 +1,133 @@
1
+ // luma.gl, MIT license
2
+ // Copyright (c) vis.gl contributors
1
3
  import { RenderPass } from '@luma.gl/core';
2
- import { withGLParameters } from "../../context/state-tracker/with-parameters.js";
3
- import { setGLParameters } from "../../context/parameters/unified-parameter-api.js";
4
- import { pushContextState, popContextState } from "../../context/state-tracker/track-context-state.js";
4
+ 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';
8
+ // Should collapse during minification
5
9
  const GL_DEPTH_BUFFER_BIT = 0x00000100;
6
10
  const GL_STENCIL_BUFFER_BIT = 0x00000400;
7
11
  const GL_COLOR_BUFFER_BIT = 0x00004000;
8
12
  const GL_COLOR = 0x1800;
9
13
  export class WEBGLRenderPass extends RenderPass {
10
- constructor(device, props) {
11
- super(device, props);
12
- this.device = void 0;
13
- this.glParameters = void 0;
14
- this.device = device;
15
- pushContextState(this.device.gl);
16
- this.setParameters(this.props.parameters);
17
- this.clear();
18
- }
19
- end() {
20
- popContextState(this.device.gl);
21
- if (this.props.framebuffer) {
22
- setGLParameters(this.device, {
23
- framebuffer: null
24
- });
14
+ device;
15
+ /** Parameters that should be applied before each draw call */
16
+ glParameters;
17
+ constructor(device, props) {
18
+ super(device, props);
19
+ this.device = device;
20
+ // TODO - do parameters (scissorRect) affect the clear operation?
21
+ pushContextState(this.device.gl);
22
+ this.setParameters(this.props.parameters);
23
+ // Hack - for now WebGL draws in "immediate mode" (instead of queueing the operations)...
24
+ this.clear();
25
25
  }
26
- }
27
- pushDebugGroup(groupLabel) {}
28
- popDebugGroup() {}
29
- insertDebugMarker(markerLabel) {}
30
- setParameters() {
31
- let parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
32
- const glParameters = {};
33
- if (this.props.framebuffer) {
34
- glParameters.framebuffer = this.props.framebuffer;
26
+ end() {
27
+ popContextState(this.device.gl);
28
+ if (this.props.framebuffer) {
29
+ setGLParameters(this.device, { framebuffer: null });
30
+ }
31
+ // should add commands to CommandEncoder.
35
32
  }
36
- if (this.props.depthReadOnly) {
37
- glParameters.depthMask = !this.props.depthReadOnly;
33
+ pushDebugGroup(groupLabel) { }
34
+ popDebugGroup() { }
35
+ insertDebugMarker(markerLabel) { }
36
+ // writeTimestamp(querySet: GPUQuerySet, queryIndex: number): void;
37
+ // beginOcclusionQuery(queryIndex: number): void;
38
+ // endOcclusionQuery(): void;
39
+ // executeBundles(bundles: Iterable<GPURenderBundle>): void;
40
+ /**
41
+ * Maps RenderPass parameters to GL parameters
42
+ */
43
+ setParameters(parameters = {}) {
44
+ const glParameters = {};
45
+ // Framebuffers are specified using parameters in WebGL
46
+ if (this.props.framebuffer) {
47
+ glParameters.framebuffer = this.props.framebuffer;
48
+ }
49
+ if (this.props.depthReadOnly) {
50
+ glParameters.depthMask = !this.props.depthReadOnly;
51
+ }
52
+ glParameters.stencilMask = this.props.stencilReadOnly ? 0 : 1;
53
+ glParameters[GL.RASTERIZER_DISCARD] = this.props.discard;
54
+ // Map the four renderpass parameters to WebGL parameters
55
+ if (parameters.viewport) {
56
+ // WebGPU viewports are 6 coordinates (X, Y, Z)
57
+ if (parameters.viewport.length >= 6) {
58
+ glParameters.viewport = parameters.viewport.slice(0, 4);
59
+ glParameters.depthRange = [parameters.viewport[4], parameters.viewport[5]];
60
+ }
61
+ else {
62
+ // WebGL viewports are 4 coordinates (X, Y)
63
+ glParameters.viewport = parameters.viewport;
64
+ }
65
+ }
66
+ glParameters.scissorTest = Boolean(parameters.scissorRect);
67
+ if (parameters.scissorRect) {
68
+ glParameters.scissor = parameters.scissorRect;
69
+ }
70
+ if (parameters.blendConstant) {
71
+ glParameters.blendColor = parameters.blendConstant;
72
+ }
73
+ if (parameters.stencilReference) {
74
+ // eslint-disable-next-line no-console
75
+ console.warn('RenderPassParameters.stencilReference not yet implemented in WebGL');
76
+ // parameters.stencilFunc = [func, ref, mask];
77
+ // Does this work?
78
+ parameters[GL.STENCIL_REF] = parameters.stencilReference;
79
+ }
80
+ this.glParameters = glParameters;
81
+ setGLParameters(this.device, glParameters);
38
82
  }
39
- glParameters.stencilMask = this.props.stencilReadOnly ? 0 : 1;
40
- glParameters[35977] = this.props.discard;
41
- if (parameters.viewport) {
42
- if (parameters.viewport.length >= 6) {
43
- glParameters.viewport = parameters.viewport.slice(0, 4);
44
- glParameters.depthRange = [parameters.viewport[4], parameters.viewport[5]];
45
- } else {
46
- glParameters.viewport = parameters.viewport;
47
- }
83
+ // Internal
84
+ /**
85
+ * Optionally clears depth, color and stencil buffers based on parameters
86
+ */
87
+ clear() {
88
+ const glParameters = { ...this.glParameters };
89
+ let clearMask = 0;
90
+ if (this.props.clearColor !== false) {
91
+ clearMask |= GL_COLOR_BUFFER_BIT;
92
+ glParameters.clearColor = this.props.clearColor;
93
+ }
94
+ if (this.props.clearDepth !== false) {
95
+ clearMask |= GL_DEPTH_BUFFER_BIT;
96
+ glParameters.clearDepth = this.props.clearDepth;
97
+ }
98
+ if (this.props.clearStencil !== false) {
99
+ clearMask |= GL_STENCIL_BUFFER_BIT;
100
+ glParameters.clearStencil = this.props.clearStencil;
101
+ }
102
+ if (clearMask !== 0) {
103
+ // Temporarily set any clear "colors" and call clear
104
+ withGLParameters(this.device, glParameters, () => {
105
+ this.device.gl.clear(clearMask);
106
+ });
107
+ // TODO - clear multiple color attachments
108
+ // for (attachment of this.framebuffer.colorAttachments) {
109
+ // this.clearColorBuffer
110
+ // }
111
+ }
48
112
  }
49
- glParameters.scissorTest = Boolean(parameters.scissorRect);
50
- if (parameters.scissorRect) {
51
- glParameters.scissor = parameters.scissorRect;
113
+ /**
114
+ * WebGL2 - clear a specific color buffer
115
+ */
116
+ clearColorBuffer(drawBuffer = 0, value = [0, 0, 0, 0]) {
117
+ withGLParameters(this.device.gl, { framebuffer: this.props.framebuffer }, () => {
118
+ // Method selection per OpenGL ES 3 docs
119
+ switch (value.constructor) {
120
+ case Int32Array:
121
+ this.device.gl.clearBufferiv(GL_COLOR, drawBuffer, value);
122
+ break;
123
+ case Uint32Array:
124
+ this.device.gl.clearBufferuiv(GL_COLOR, drawBuffer, value);
125
+ break;
126
+ case Float32Array:
127
+ default:
128
+ this.device.gl.clearBufferfv(GL_COLOR, drawBuffer, value);
129
+ break;
130
+ }
131
+ });
52
132
  }
53
- if (parameters.blendConstant) {
54
- glParameters.blendColor = parameters.blendConstant;
55
- }
56
- if (parameters.stencilReference) {
57
- console.warn('RenderPassParameters.stencilReference not yet implemented in WebGL');
58
- parameters[2967] = parameters.stencilReference;
59
- }
60
- this.glParameters = glParameters;
61
- setGLParameters(this.device, glParameters);
62
- }
63
- clear() {
64
- const glParameters = {
65
- ...this.glParameters
66
- };
67
- let clearMask = 0;
68
- if (this.props.clearColor !== false) {
69
- clearMask |= GL_COLOR_BUFFER_BIT;
70
- glParameters.clearColor = this.props.clearColor;
71
- }
72
- if (this.props.clearDepth !== false) {
73
- clearMask |= GL_DEPTH_BUFFER_BIT;
74
- glParameters.clearDepth = this.props.clearDepth;
75
- }
76
- if (this.props.clearStencil !== false) {
77
- clearMask |= GL_STENCIL_BUFFER_BIT;
78
- glParameters.clearStencil = this.props.clearStencil;
79
- }
80
- if (clearMask !== 0) {
81
- withGLParameters(this.device, glParameters, () => {
82
- this.device.gl.clear(clearMask);
83
- });
84
- }
85
- }
86
- clearColorBuffer() {
87
- let drawBuffer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
88
- let value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0, 0, 0, 0];
89
- withGLParameters(this.device.gl2, {
90
- framebuffer: this.props.framebuffer
91
- }, () => {
92
- switch (value.constructor) {
93
- case Int32Array:
94
- this.device.gl2.clearBufferiv(GL_COLOR, drawBuffer, value);
95
- break;
96
- case Uint32Array:
97
- this.device.gl2.clearBufferuiv(GL_COLOR, drawBuffer, value);
98
- break;
99
- case Float32Array:
100
- default:
101
- this.device.gl2.clearBufferfv(GL_COLOR, drawBuffer, value);
102
- break;
103
- }
104
- });
105
- }
106
133
  }
107
- //# sourceMappingURL=webgl-render-pass.js.map
@@ -51,7 +51,17 @@ export declare class WEBGLRenderPipeline extends RenderPipeline {
51
51
  baseVertex?: number;
52
52
  transformFeedback?: WEBGLTransformFeedback;
53
53
  }): boolean;
54
- protected _compileAndLink(): void;
54
+ protected _linkShaders(): Promise<void>;
55
+ /** Report link status. First, check for shader compilation failures if linking fails */
56
+ _reportLinkStatus(status: 'success' | 'linking' | 'validation'): void;
57
+ /**
58
+ * Get the shader compilation status
59
+ * TODO - Load log even when no error reported, to catch warnings?
60
+ * https://gamedev.stackexchange.com/questions/30429/how-to-detect-glsl-warnings
61
+ */
62
+ _getLinkStatus(): 'success' | 'linking' | 'validation';
63
+ /** Use KHR_parallel_shader_compile extension if available */
64
+ _waitForLinkComplete(): Promise<void>;
55
65
  /**
56
66
  * Checks if all texture-values uniforms are renderable (i.e. loaded)
57
67
  * Update a texture if needed (e.g. from video)
@@ -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;IAqClD,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;IAWlD;;;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;IA+GX,SAAS,CAAC,eAAe;IA4BzB;;;;OAIG;IACH,sBAAsB;IAatB,iDAAiD;IACjD,cAAc;IAgFd;;;OAGG;IACH,cAAc;CASf"}
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"}