@itwin/core-frontend 3.0.0-dev.134 → 3.0.0-dev.135

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 (193) hide show
  1. package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts +3 -2
  2. package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts.map +1 -1
  3. package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js +3 -2
  4. package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
  5. package/lib/cjs/quantity-formatting/BasicUnitsProvider.d.ts +5 -1
  6. package/lib/cjs/quantity-formatting/BasicUnitsProvider.d.ts.map +1 -1
  7. package/lib/cjs/quantity-formatting/BasicUnitsProvider.js +20 -5
  8. package/lib/cjs/quantity-formatting/BasicUnitsProvider.js.map +1 -1
  9. package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts +26 -3
  10. package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
  11. package/lib/cjs/quantity-formatting/QuantityFormatter.js +46 -7
  12. package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
  13. package/lib/cjs/render/RenderSystem.d.ts +0 -2
  14. package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
  15. package/lib/cjs/render/RenderSystem.js.map +1 -1
  16. package/lib/cjs/render/webgl/DrawCommand.d.ts.map +1 -1
  17. package/lib/cjs/render/webgl/DrawCommand.js +3 -1
  18. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  19. package/lib/cjs/render/webgl/Mesh.d.ts.map +1 -1
  20. package/lib/cjs/render/webgl/Mesh.js +1 -2
  21. package/lib/cjs/render/webgl/Mesh.js.map +1 -1
  22. package/lib/cjs/render/webgl/PlanarClassifier.d.ts.map +1 -1
  23. package/lib/cjs/render/webgl/PlanarClassifier.js +1 -0
  24. package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
  25. package/lib/cjs/render/webgl/PlanarTextureProjection.d.ts.map +1 -1
  26. package/lib/cjs/render/webgl/PlanarTextureProjection.js +1 -0
  27. package/lib/cjs/render/webgl/PlanarTextureProjection.js.map +1 -1
  28. package/lib/cjs/render/webgl/SceneCompositor.js +1 -0
  29. package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
  30. package/lib/cjs/render/webgl/ShaderBuilder.d.ts +8 -7
  31. package/lib/cjs/render/webgl/ShaderBuilder.d.ts.map +1 -1
  32. package/lib/cjs/render/webgl/ShaderBuilder.js +20 -18
  33. package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
  34. package/lib/cjs/render/webgl/SolarShadowMap.d.ts.map +1 -1
  35. package/lib/cjs/render/webgl/SolarShadowMap.js +1 -0
  36. package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
  37. package/lib/cjs/render/webgl/System.d.ts +0 -3
  38. package/lib/cjs/render/webgl/System.d.ts.map +1 -1
  39. package/lib/cjs/render/webgl/System.js +0 -3
  40. package/lib/cjs/render/webgl/System.js.map +1 -1
  41. package/lib/cjs/render/webgl/Technique.d.ts.map +1 -1
  42. package/lib/cjs/render/webgl/Technique.js +74 -29
  43. package/lib/cjs/render/webgl/Technique.js.map +1 -1
  44. package/lib/cjs/render/webgl/TechniqueFlags.d.ts +7 -1
  45. package/lib/cjs/render/webgl/TechniqueFlags.d.ts.map +1 -1
  46. package/lib/cjs/render/webgl/TechniqueFlags.js +10 -1
  47. package/lib/cjs/render/webgl/TechniqueFlags.js.map +1 -1
  48. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js +1 -1
  49. package/lib/cjs/render/webgl/glsl/Blur.js +1 -1
  50. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.js +2 -2
  51. package/lib/cjs/render/webgl/glsl/ClearTranslucent.js +2 -2
  52. package/lib/cjs/render/webgl/glsl/Combine3Textures.js +1 -1
  53. package/lib/cjs/render/webgl/glsl/CombineTextures.js +1 -1
  54. package/lib/cjs/render/webgl/glsl/Composite.js +1 -1
  55. package/lib/cjs/render/webgl/glsl/CopyColor.js +1 -1
  56. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.js +2 -2
  57. package/lib/cjs/render/webgl/glsl/CopyStencil.js +6 -6
  58. package/lib/cjs/render/webgl/glsl/EVSMFromDepth.js +1 -1
  59. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +2 -2
  60. package/lib/cjs/render/webgl/glsl/Fragment.js +10 -10
  61. package/lib/cjs/render/webgl/glsl/LogarithmicDepthBuffer.js +1 -1
  62. package/lib/cjs/render/webgl/glsl/PlanarClassification.js +3 -3
  63. package/lib/cjs/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  64. package/lib/cjs/render/webgl/glsl/RealityMesh.js +5 -2
  65. package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
  66. package/lib/cjs/render/webgl/glsl/ScreenSpaceEffect.js +1 -1
  67. package/lib/cjs/render/webgl/glsl/SkyBox.js +1 -1
  68. package/lib/cjs/render/webgl/glsl/SkySphere.js +1 -1
  69. package/lib/cjs/render/webgl/glsl/Surface.d.ts.map +1 -1
  70. package/lib/cjs/render/webgl/glsl/Surface.js +5 -2
  71. package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
  72. package/lib/cjs/render/webgl/glsl/Translucency.js +2 -2
  73. package/lib/cjs/render/webgl/glsl/Wiremesh.d.ts +9 -0
  74. package/lib/cjs/render/webgl/glsl/Wiremesh.d.ts.map +1 -0
  75. package/lib/cjs/render/webgl/glsl/Wiremesh.js +40 -0
  76. package/lib/cjs/render/webgl/glsl/Wiremesh.js.map +1 -0
  77. package/lib/cjs/tile/B3dmReader.d.ts +1 -1
  78. package/lib/cjs/tile/B3dmReader.d.ts.map +1 -1
  79. package/lib/cjs/tile/B3dmReader.js +4 -4
  80. package/lib/cjs/tile/B3dmReader.js.map +1 -1
  81. package/lib/cjs/tile/GltfReader.d.ts +3 -1
  82. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  83. package/lib/cjs/tile/GltfReader.js +33 -1
  84. package/lib/cjs/tile/GltfReader.js.map +1 -1
  85. package/lib/cjs/tile/I3dmReader.d.ts +1 -1
  86. package/lib/cjs/tile/I3dmReader.d.ts.map +1 -1
  87. package/lib/cjs/tile/I3dmReader.js +4 -4
  88. package/lib/cjs/tile/I3dmReader.js.map +1 -1
  89. package/lib/cjs/tile/RealityModelTileTree.d.ts +2 -1
  90. package/lib/cjs/tile/RealityModelTileTree.d.ts.map +1 -1
  91. package/lib/cjs/tile/RealityModelTileTree.js +29 -10
  92. package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
  93. package/lib/cjs/tile/RealityTileLoader.d.ts +1 -0
  94. package/lib/cjs/tile/RealityTileLoader.d.ts.map +1 -1
  95. package/lib/cjs/tile/RealityTileLoader.js +3 -2
  96. package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
  97. package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts +3 -2
  98. package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts.map +1 -1
  99. package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js +3 -2
  100. package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
  101. package/lib/esm/quantity-formatting/BasicUnitsProvider.d.ts +5 -1
  102. package/lib/esm/quantity-formatting/BasicUnitsProvider.d.ts.map +1 -1
  103. package/lib/esm/quantity-formatting/BasicUnitsProvider.js +18 -4
  104. package/lib/esm/quantity-formatting/BasicUnitsProvider.js.map +1 -1
  105. package/lib/esm/quantity-formatting/QuantityFormatter.d.ts +26 -3
  106. package/lib/esm/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
  107. package/lib/esm/quantity-formatting/QuantityFormatter.js +45 -7
  108. package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
  109. package/lib/esm/render/RenderSystem.d.ts +0 -2
  110. package/lib/esm/render/RenderSystem.d.ts.map +1 -1
  111. package/lib/esm/render/RenderSystem.js.map +1 -1
  112. package/lib/esm/render/webgl/DrawCommand.d.ts.map +1 -1
  113. package/lib/esm/render/webgl/DrawCommand.js +3 -1
  114. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  115. package/lib/esm/render/webgl/Mesh.d.ts.map +1 -1
  116. package/lib/esm/render/webgl/Mesh.js +1 -2
  117. package/lib/esm/render/webgl/Mesh.js.map +1 -1
  118. package/lib/esm/render/webgl/PlanarClassifier.d.ts.map +1 -1
  119. package/lib/esm/render/webgl/PlanarClassifier.js +1 -0
  120. package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
  121. package/lib/esm/render/webgl/PlanarTextureProjection.d.ts.map +1 -1
  122. package/lib/esm/render/webgl/PlanarTextureProjection.js +1 -0
  123. package/lib/esm/render/webgl/PlanarTextureProjection.js.map +1 -1
  124. package/lib/esm/render/webgl/SceneCompositor.js +1 -0
  125. package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
  126. package/lib/esm/render/webgl/ShaderBuilder.d.ts +8 -7
  127. package/lib/esm/render/webgl/ShaderBuilder.d.ts.map +1 -1
  128. package/lib/esm/render/webgl/ShaderBuilder.js +20 -18
  129. package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
  130. package/lib/esm/render/webgl/SolarShadowMap.d.ts.map +1 -1
  131. package/lib/esm/render/webgl/SolarShadowMap.js +1 -0
  132. package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
  133. package/lib/esm/render/webgl/System.d.ts +0 -3
  134. package/lib/esm/render/webgl/System.d.ts.map +1 -1
  135. package/lib/esm/render/webgl/System.js +0 -3
  136. package/lib/esm/render/webgl/System.js.map +1 -1
  137. package/lib/esm/render/webgl/Technique.d.ts.map +1 -1
  138. package/lib/esm/render/webgl/Technique.js +74 -29
  139. package/lib/esm/render/webgl/Technique.js.map +1 -1
  140. package/lib/esm/render/webgl/TechniqueFlags.d.ts +7 -1
  141. package/lib/esm/render/webgl/TechniqueFlags.d.ts.map +1 -1
  142. package/lib/esm/render/webgl/TechniqueFlags.js +10 -1
  143. package/lib/esm/render/webgl/TechniqueFlags.js.map +1 -1
  144. package/lib/esm/render/webgl/glsl/AmbientOcclusion.js +1 -1
  145. package/lib/esm/render/webgl/glsl/Blur.js +1 -1
  146. package/lib/esm/render/webgl/glsl/ClearPickAndColor.js +2 -2
  147. package/lib/esm/render/webgl/glsl/ClearTranslucent.js +2 -2
  148. package/lib/esm/render/webgl/glsl/Combine3Textures.js +1 -1
  149. package/lib/esm/render/webgl/glsl/CombineTextures.js +1 -1
  150. package/lib/esm/render/webgl/glsl/Composite.js +1 -1
  151. package/lib/esm/render/webgl/glsl/CopyColor.js +1 -1
  152. package/lib/esm/render/webgl/glsl/CopyPickBuffers.js +2 -2
  153. package/lib/esm/render/webgl/glsl/CopyStencil.js +6 -6
  154. package/lib/esm/render/webgl/glsl/EVSMFromDepth.js +1 -1
  155. package/lib/esm/render/webgl/glsl/FeatureSymbology.js +2 -2
  156. package/lib/esm/render/webgl/glsl/Fragment.js +10 -10
  157. package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.js +1 -1
  158. package/lib/esm/render/webgl/glsl/PlanarClassification.js +3 -3
  159. package/lib/esm/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  160. package/lib/esm/render/webgl/glsl/RealityMesh.js +5 -2
  161. package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
  162. package/lib/esm/render/webgl/glsl/ScreenSpaceEffect.js +1 -1
  163. package/lib/esm/render/webgl/glsl/SkyBox.js +1 -1
  164. package/lib/esm/render/webgl/glsl/SkySphere.js +1 -1
  165. package/lib/esm/render/webgl/glsl/Surface.d.ts.map +1 -1
  166. package/lib/esm/render/webgl/glsl/Surface.js +5 -2
  167. package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
  168. package/lib/esm/render/webgl/glsl/Translucency.js +2 -2
  169. package/lib/esm/render/webgl/glsl/Wiremesh.d.ts +9 -0
  170. package/lib/esm/render/webgl/glsl/Wiremesh.d.ts.map +1 -0
  171. package/lib/esm/render/webgl/glsl/Wiremesh.js +36 -0
  172. package/lib/esm/render/webgl/glsl/Wiremesh.js.map +1 -0
  173. package/lib/esm/tile/B3dmReader.d.ts +1 -1
  174. package/lib/esm/tile/B3dmReader.d.ts.map +1 -1
  175. package/lib/esm/tile/B3dmReader.js +4 -4
  176. package/lib/esm/tile/B3dmReader.js.map +1 -1
  177. package/lib/esm/tile/GltfReader.d.ts +3 -1
  178. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  179. package/lib/esm/tile/GltfReader.js +33 -1
  180. package/lib/esm/tile/GltfReader.js.map +1 -1
  181. package/lib/esm/tile/I3dmReader.d.ts +1 -1
  182. package/lib/esm/tile/I3dmReader.d.ts.map +1 -1
  183. package/lib/esm/tile/I3dmReader.js +4 -4
  184. package/lib/esm/tile/I3dmReader.js.map +1 -1
  185. package/lib/esm/tile/RealityModelTileTree.d.ts +2 -1
  186. package/lib/esm/tile/RealityModelTileTree.d.ts.map +1 -1
  187. package/lib/esm/tile/RealityModelTileTree.js +30 -11
  188. package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
  189. package/lib/esm/tile/RealityTileLoader.d.ts +1 -0
  190. package/lib/esm/tile/RealityTileLoader.d.ts.map +1 -1
  191. package/lib/esm/tile/RealityTileLoader.js +3 -2
  192. package/lib/esm/tile/RealityTileLoader.js.map +1 -1
  193. package/package.json +22 -22
@@ -22,13 +22,14 @@ class TechniqueFlags {
22
22
  this.isClassified = 0 /* No */;
23
23
  this.isShadowable = 0 /* No */;
24
24
  this.isThematic = 0 /* No */;
25
+ this.isWiremesh = 0 /* No */;
25
26
  this._isHilite = false;
26
27
  this.isTranslucent = translucent;
27
28
  }
28
29
  get hasClip() {
29
30
  return this.numClipPlanes > 0;
30
31
  }
31
- init(target, pass, instanced, animated = 0 /* No */, classified = 0 /* No */, shadowable = 0 /* No */, thematic = 0 /* No */) {
32
+ init(target, pass, instanced, animated = 0 /* No */, classified = 0 /* No */, shadowable = 0 /* No */, thematic = 0 /* No */, wiremesh = 0 /* No */) {
32
33
  const clipStack = target.uniforms.branch.clipStack;
33
34
  const numClipPlanes = clipStack.hasClip ? clipStack.textureHeight : 0;
34
35
  if (9 /* Hilite */ === pass || 15 /* HiliteClassification */ === pass || 17 /* HilitePlanarClassification */ === pass) {
@@ -44,6 +45,7 @@ class TechniqueFlags {
44
45
  this.isClassified = classified;
45
46
  this.isShadowable = shadowable;
46
47
  this.isThematic = thematic;
48
+ this.isWiremesh = wiremesh;
47
49
  this.featureMode = target.uniforms.batch.featureMode;
48
50
  // Determine if we should use the shaders which support discarding surfaces in favor of their edges (and discarding non-planar surfaces in favor of coincident planar surfaces).
49
51
  // These are only useful if the geometry defines feature Ids.
@@ -79,6 +81,7 @@ class TechniqueFlags {
79
81
  this.isInstanced = instanced;
80
82
  this.isShadowable = shadowable;
81
83
  this.isThematic = thematic;
84
+ this.isWiremesh = 0 /* No */;
82
85
  this.numClipPlanes = 0;
83
86
  }
84
87
  get hasFeatures() { return 0 /* None */ !== this.featureMode; }
@@ -108,6 +111,7 @@ class TechniqueFlags {
108
111
  && this.isClassified === other.isClassified
109
112
  && this.isShadowable === other.isShadowable
110
113
  && this.isThematic === other.isThematic
114
+ && this.isWiremesh === other.isWiremesh
111
115
  && this.isHilite === other.isHilite;
112
116
  }
113
117
  buildDescription() {
@@ -130,6 +134,8 @@ class TechniqueFlags {
130
134
  parts.push("Thematic");
131
135
  if (this.hasFeatures)
132
136
  parts.push(1 /* Pick */ === this.featureMode ? "Pick" : "Overrides");
137
+ if (this.isWiremesh)
138
+ parts.push("Wiremesh");
133
139
  return parts.join("-");
134
140
  }
135
141
  static fromDescription(description) {
@@ -164,6 +170,9 @@ class TechniqueFlags {
164
170
  case "Thematic":
165
171
  flags.isThematic = 1 /* Yes */;
166
172
  break;
173
+ case "Wiremesh":
174
+ flags.isWiremesh = 1 /* Yes */;
175
+ break;
167
176
  case "Pick":
168
177
  flags.featureMode = 1 /* Pick */;
169
178
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"TechniqueFlags.js","sourceRoot":"","sources":["../../../../src/render/webgl/TechniqueFlags.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { RenderMode } from \"@itwin/core-common\";\r\nimport { RenderPass } from \"./RenderFlags\";\r\nimport { Target } from \"./Target\";\r\n\r\n/* eslint-disable no-restricted-syntax */\r\n\r\n/** Specifies how a TechniqueFlags handles feature table/overrides.\r\n * @internal\r\n */\r\nexport const enum FeatureMode {\r\n None, // no features\r\n Pick, // feature table only\r\n Overrides, // feature table with symbology overrides\r\n}\r\n\r\n/** @internal */\r\nexport const enum IsInstanced { No, Yes }\r\n\r\n/** @internal */\r\nexport const enum IsAnimated { No, Yes }\r\n\r\n/** @internal */\r\nexport const enum IsClassified { No, Yes }\r\n\r\n/** @internal */\r\nexport const enum IsEdgeTestNeeded { No, Yes }\r\n\r\n/** @internal */\r\nexport const enum IsShadowable { No, Yes }\r\n\r\n/** @internal */\r\nexport const enum IsThematic { No, Yes }\r\n\r\n/** Flags used to control which shader program is used by a rendering Technique.\r\n * @internal\r\n */\r\nexport class TechniqueFlags {\r\n public numClipPlanes = 0;\r\n public featureMode = FeatureMode.None;\r\n public isTranslucent: boolean;\r\n public isEdgeTestNeeded: IsEdgeTestNeeded = IsEdgeTestNeeded.No;\r\n public isAnimated: IsAnimated = IsAnimated.No;\r\n public isInstanced: IsInstanced = IsInstanced.No;\r\n public isClassified: IsClassified = IsClassified.No;\r\n public isShadowable: IsShadowable = IsShadowable.No;\r\n public isThematic: IsThematic = IsThematic.No;\r\n private _isHilite = false;\r\n\r\n public constructor(translucent: boolean = false) {\r\n this.isTranslucent = translucent;\r\n }\r\n\r\n public get hasClip(): boolean {\r\n return this.numClipPlanes > 0;\r\n }\r\n\r\n public init(target: Target, pass: RenderPass, instanced: IsInstanced, animated: IsAnimated = IsAnimated.No, classified = IsClassified.No, shadowable = IsShadowable.No, thematic = IsThematic.No): void {\r\n const clipStack = target.uniforms.branch.clipStack;\r\n const numClipPlanes = clipStack.hasClip ? clipStack.textureHeight : 0;\r\n if (RenderPass.Hilite === pass || RenderPass.HiliteClassification === pass || RenderPass.HilitePlanarClassification === pass) {\r\n const isClassified = (classified === IsClassified.Yes && RenderPass.HilitePlanarClassification === pass) ? IsClassified.Yes : IsClassified.No;\r\n this.initForHilite(numClipPlanes, instanced, isClassified);\r\n } else {\r\n this._isHilite = false;\r\n this.isTranslucent = RenderPass.Translucent === pass;\r\n this.numClipPlanes = numClipPlanes;\r\n this.isAnimated = animated;\r\n this.isInstanced = instanced;\r\n this.isClassified = classified;\r\n this.isShadowable = shadowable;\r\n this.isThematic = thematic;\r\n this.featureMode = target.uniforms.batch.featureMode;\r\n\r\n // Determine if we should use the shaders which support discarding surfaces in favor of their edges (and discarding non-planar surfaces in favor of coincident planar surfaces).\r\n // These are only useful if the geometry defines feature Ids.\r\n // In 3d, if we're only displaying surfaces or edges, not both, don't bother, unless forceSurfaceDiscard is true.\r\n this.isEdgeTestNeeded = this.hasFeatures ? (this.isClassified ? IsEdgeTestNeeded.No : IsEdgeTestNeeded.Yes) : IsEdgeTestNeeded.No;\r\n if (!target.currentViewFlags.forceSurfaceDiscard && target.is3d && !target.isReadPixelsInProgress && this.isEdgeTestNeeded) {\r\n switch (target.currentViewFlags.renderMode) {\r\n case RenderMode.Wireframe:\r\n // We're only displaying edges (ignoring filled planar regions)\r\n this.isEdgeTestNeeded = IsEdgeTestNeeded.No;\r\n break;\r\n case RenderMode.SmoothShade:\r\n if (!target.currentViewFlags.visibleEdges && !target.wantAmbientOcclusion && pass !== RenderPass.PlanarClassification) {\r\n // We're only displaying surfaces (ignoring filled planar regions).\r\n // NB: Filled text (blanking region) is handled by adjusting the depth in the surface vertex shader.\r\n this.isEdgeTestNeeded = IsEdgeTestNeeded.No;\r\n }\r\n break;\r\n default:\r\n // SolidFill and HiddenLine always display edges and surfaces.\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n public reset(mode: FeatureMode, instanced: IsInstanced = IsInstanced.No, shadowable: IsShadowable, thematic: IsThematic) {\r\n this._isHilite = false;\r\n this.featureMode = mode;\r\n this.isTranslucent = false;\r\n this.isEdgeTestNeeded = IsEdgeTestNeeded.No;\r\n this.isAnimated = IsAnimated.No;\r\n this.isClassified = IsClassified.No;\r\n this.isInstanced = instanced;\r\n this.isShadowable = shadowable;\r\n this.isThematic = thematic;\r\n this.numClipPlanes = 0;\r\n }\r\n\r\n public get hasFeatures() { return FeatureMode.None !== this.featureMode; }\r\n\r\n public setAnimated(animated: boolean) { this.isAnimated = animated ? IsAnimated.Yes : IsAnimated.No; }\r\n public setInstanced(instanced: boolean) { this.isInstanced = instanced ? IsInstanced.Yes : IsInstanced.No; }\r\n public setClassified(classified: boolean) {\r\n this.isClassified = classified ? IsClassified.Yes : IsClassified.No;\r\n }\r\n\r\n public get isHilite() { return this._isHilite; }\r\n public initForHilite(numClipPlanes: number, instanced: IsInstanced, classified: IsClassified) {\r\n this.featureMode = classified ? FeatureMode.None : FeatureMode.Overrides;\r\n this._isHilite = true;\r\n this.isTranslucent = false;\r\n this.isEdgeTestNeeded = IsEdgeTestNeeded.No;\r\n this.isAnimated = IsAnimated.No;\r\n this.isInstanced = instanced;\r\n this.isClassified = classified;\r\n this.numClipPlanes = numClipPlanes;\r\n }\r\n\r\n public equals(other: TechniqueFlags): boolean {\r\n return this.numClipPlanes === other.numClipPlanes\r\n && this.featureMode === other.featureMode\r\n && this.isTranslucent === other.isTranslucent\r\n && this.isEdgeTestNeeded === other.isEdgeTestNeeded\r\n && this.isAnimated === other.isAnimated\r\n && this.isInstanced === other.isInstanced\r\n && this.isClassified === other.isClassified\r\n && this.isShadowable === other.isShadowable\r\n && this.isThematic === other.isThematic\r\n && this.isHilite === other.isHilite;\r\n }\r\n\r\n public buildDescription(): string {\r\n const parts = [this.isTranslucent ? \"Translucent\" : \"Opaque\"];\r\n if (this.isInstanced) parts.push(\"Instanced\");\r\n if (this.isEdgeTestNeeded) parts.push(\"EdgeTestNeeded\");\r\n if (this.isAnimated) parts.push(\"Animated\");\r\n if (this.isHilite) parts.push(\"Hilite\");\r\n if (this.isClassified) parts.push(\"Classified\");\r\n if (this.hasClip) parts.push(\"Clip\");\r\n if (this.isShadowable) parts.push(\"Shadowable\");\r\n if (this.isThematic) parts.push(\"Thematic\");\r\n if (this.hasFeatures) parts.push(FeatureMode.Pick === this.featureMode ? \"Pick\" : \"Overrides\");\r\n return parts.join(\"-\");\r\n }\r\n\r\n public static fromDescription(description: string): TechniqueFlags {\r\n const flags = new TechniqueFlags(false);\r\n const parts = description.split(\"-\");\r\n for (const part of parts) {\r\n switch (part) {\r\n case \"Translucent\":\r\n flags.isTranslucent = true;\r\n break;\r\n case \"Instanced\":\r\n flags.isInstanced = IsInstanced.Yes;\r\n break;\r\n case \"EdgeTestNeeded\":\r\n flags.isEdgeTestNeeded = IsEdgeTestNeeded.Yes;\r\n break;\r\n case \"Animated\":\r\n flags.isAnimated = IsAnimated.Yes;\r\n break;\r\n case \"Hilite\":\r\n flags._isHilite = true;\r\n break;\r\n case \"Classified\":\r\n flags.isClassified = IsClassified.Yes;\r\n break;\r\n case \"Clip\":\r\n flags.numClipPlanes = 1;\r\n break;\r\n case \"Shadowable\":\r\n flags.isShadowable = IsShadowable.Yes;\r\n break;\r\n case \"Thematic\":\r\n flags.isThematic = IsThematic.Yes;\r\n break;\r\n case \"Pick\":\r\n flags.featureMode = FeatureMode.Pick;\r\n break;\r\n case \"Overrides\":\r\n flags.featureMode = FeatureMode.Overrides;\r\n break;\r\n }\r\n }\r\n\r\n return flags;\r\n }\r\n\r\n public static readonly defaults = new TechniqueFlags();\r\n}\r\n"]}
1
+ {"version":3,"file":"TechniqueFlags.js","sourceRoot":"","sources":["../../../../src/render/webgl/TechniqueFlags.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { RenderMode } from \"@itwin/core-common\";\r\nimport { RenderPass } from \"./RenderFlags\";\r\nimport { Target } from \"./Target\";\r\n\r\n/* eslint-disable no-restricted-syntax */\r\n\r\n/** Specifies how a TechniqueFlags handles feature table/overrides.\r\n * @internal\r\n */\r\nexport const enum FeatureMode {\r\n None, // no features\r\n Pick, // feature table only\r\n Overrides, // feature table with symbology overrides\r\n}\r\n\r\n/** @internal */\r\nexport const enum IsInstanced { No, Yes }\r\n\r\n/** @internal */\r\nexport const enum IsAnimated { No, Yes }\r\n\r\n/** @internal */\r\nexport const enum IsClassified { No, Yes }\r\n\r\n/** @internal */\r\nexport const enum IsEdgeTestNeeded { No, Yes }\r\n\r\n/** @internal */\r\nexport const enum IsShadowable { No, Yes }\r\n\r\n/** @internal */\r\nexport const enum IsThematic { No, Yes }\r\n\r\n/** @internal */\r\nexport const enum IsWiremesh { No, Yes }\r\n\r\n/** Flags used to control which shader program is used by a rendering Technique.\r\n * @internal\r\n */\r\nexport class TechniqueFlags {\r\n public numClipPlanes = 0;\r\n public featureMode = FeatureMode.None;\r\n public isTranslucent: boolean;\r\n public isEdgeTestNeeded: IsEdgeTestNeeded = IsEdgeTestNeeded.No;\r\n public isAnimated: IsAnimated = IsAnimated.No;\r\n public isInstanced: IsInstanced = IsInstanced.No;\r\n public isClassified: IsClassified = IsClassified.No;\r\n public isShadowable: IsShadowable = IsShadowable.No;\r\n public isThematic: IsThematic = IsThematic.No;\r\n public isWiremesh: IsWiremesh = IsWiremesh.No;\r\n private _isHilite = false;\r\n\r\n public constructor(translucent: boolean = false) {\r\n this.isTranslucent = translucent;\r\n }\r\n\r\n public get hasClip(): boolean {\r\n return this.numClipPlanes > 0;\r\n }\r\n\r\n public init(target: Target, pass: RenderPass, instanced: IsInstanced, animated: IsAnimated = IsAnimated.No, classified = IsClassified.No, shadowable = IsShadowable.No, thematic = IsThematic.No, wiremesh = IsWiremesh.No): void {\r\n const clipStack = target.uniforms.branch.clipStack;\r\n const numClipPlanes = clipStack.hasClip ? clipStack.textureHeight : 0;\r\n if (RenderPass.Hilite === pass || RenderPass.HiliteClassification === pass || RenderPass.HilitePlanarClassification === pass) {\r\n const isClassified = (classified === IsClassified.Yes && RenderPass.HilitePlanarClassification === pass) ? IsClassified.Yes : IsClassified.No;\r\n this.initForHilite(numClipPlanes, instanced, isClassified);\r\n } else {\r\n this._isHilite = false;\r\n this.isTranslucent = RenderPass.Translucent === pass;\r\n this.numClipPlanes = numClipPlanes;\r\n this.isAnimated = animated;\r\n this.isInstanced = instanced;\r\n this.isClassified = classified;\r\n this.isShadowable = shadowable;\r\n this.isThematic = thematic;\r\n this.isWiremesh = wiremesh;\r\n this.featureMode = target.uniforms.batch.featureMode;\r\n\r\n // Determine if we should use the shaders which support discarding surfaces in favor of their edges (and discarding non-planar surfaces in favor of coincident planar surfaces).\r\n // These are only useful if the geometry defines feature Ids.\r\n // In 3d, if we're only displaying surfaces or edges, not both, don't bother, unless forceSurfaceDiscard is true.\r\n this.isEdgeTestNeeded = this.hasFeatures ? (this.isClassified ? IsEdgeTestNeeded.No : IsEdgeTestNeeded.Yes) : IsEdgeTestNeeded.No;\r\n if (!target.currentViewFlags.forceSurfaceDiscard && target.is3d && !target.isReadPixelsInProgress && this.isEdgeTestNeeded) {\r\n switch (target.currentViewFlags.renderMode) {\r\n case RenderMode.Wireframe:\r\n // We're only displaying edges (ignoring filled planar regions)\r\n this.isEdgeTestNeeded = IsEdgeTestNeeded.No;\r\n break;\r\n case RenderMode.SmoothShade:\r\n if (!target.currentViewFlags.visibleEdges && !target.wantAmbientOcclusion && pass !== RenderPass.PlanarClassification) {\r\n // We're only displaying surfaces (ignoring filled planar regions).\r\n // NB: Filled text (blanking region) is handled by adjusting the depth in the surface vertex shader.\r\n this.isEdgeTestNeeded = IsEdgeTestNeeded.No;\r\n }\r\n break;\r\n default:\r\n // SolidFill and HiddenLine always display edges and surfaces.\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n public reset(mode: FeatureMode, instanced: IsInstanced = IsInstanced.No, shadowable: IsShadowable, thematic: IsThematic) {\r\n this._isHilite = false;\r\n this.featureMode = mode;\r\n this.isTranslucent = false;\r\n this.isEdgeTestNeeded = IsEdgeTestNeeded.No;\r\n this.isAnimated = IsAnimated.No;\r\n this.isClassified = IsClassified.No;\r\n this.isInstanced = instanced;\r\n this.isShadowable = shadowable;\r\n this.isThematic = thematic;\r\n this.isWiremesh = IsWiremesh.No;\r\n this.numClipPlanes = 0;\r\n }\r\n\r\n public get hasFeatures() { return FeatureMode.None !== this.featureMode; }\r\n\r\n public setAnimated(animated: boolean) { this.isAnimated = animated ? IsAnimated.Yes : IsAnimated.No; }\r\n public setInstanced(instanced: boolean) { this.isInstanced = instanced ? IsInstanced.Yes : IsInstanced.No; }\r\n public setClassified(classified: boolean) {\r\n this.isClassified = classified ? IsClassified.Yes : IsClassified.No;\r\n }\r\n\r\n public get isHilite() { return this._isHilite; }\r\n public initForHilite(numClipPlanes: number, instanced: IsInstanced, classified: IsClassified) {\r\n this.featureMode = classified ? FeatureMode.None : FeatureMode.Overrides;\r\n this._isHilite = true;\r\n this.isTranslucent = false;\r\n this.isEdgeTestNeeded = IsEdgeTestNeeded.No;\r\n this.isAnimated = IsAnimated.No;\r\n this.isInstanced = instanced;\r\n this.isClassified = classified;\r\n this.numClipPlanes = numClipPlanes;\r\n }\r\n\r\n public equals(other: TechniqueFlags): boolean {\r\n return this.numClipPlanes === other.numClipPlanes\r\n && this.featureMode === other.featureMode\r\n && this.isTranslucent === other.isTranslucent\r\n && this.isEdgeTestNeeded === other.isEdgeTestNeeded\r\n && this.isAnimated === other.isAnimated\r\n && this.isInstanced === other.isInstanced\r\n && this.isClassified === other.isClassified\r\n && this.isShadowable === other.isShadowable\r\n && this.isThematic === other.isThematic\r\n && this.isWiremesh === other.isWiremesh\r\n && this.isHilite === other.isHilite;\r\n }\r\n\r\n public buildDescription(): string {\r\n const parts = [this.isTranslucent ? \"Translucent\" : \"Opaque\"];\r\n if (this.isInstanced) parts.push(\"Instanced\");\r\n if (this.isEdgeTestNeeded) parts.push(\"EdgeTestNeeded\");\r\n if (this.isAnimated) parts.push(\"Animated\");\r\n if (this.isHilite) parts.push(\"Hilite\");\r\n if (this.isClassified) parts.push(\"Classified\");\r\n if (this.hasClip) parts.push(\"Clip\");\r\n if (this.isShadowable) parts.push(\"Shadowable\");\r\n if (this.isThematic) parts.push(\"Thematic\");\r\n if (this.hasFeatures) parts.push(FeatureMode.Pick === this.featureMode ? \"Pick\" : \"Overrides\");\r\n if (this.isWiremesh) parts.push(\"Wiremesh\");\r\n return parts.join(\"-\");\r\n }\r\n\r\n public static fromDescription(description: string): TechniqueFlags {\r\n const flags = new TechniqueFlags(false);\r\n const parts = description.split(\"-\");\r\n for (const part of parts) {\r\n switch (part) {\r\n case \"Translucent\":\r\n flags.isTranslucent = true;\r\n break;\r\n case \"Instanced\":\r\n flags.isInstanced = IsInstanced.Yes;\r\n break;\r\n case \"EdgeTestNeeded\":\r\n flags.isEdgeTestNeeded = IsEdgeTestNeeded.Yes;\r\n break;\r\n case \"Animated\":\r\n flags.isAnimated = IsAnimated.Yes;\r\n break;\r\n case \"Hilite\":\r\n flags._isHilite = true;\r\n break;\r\n case \"Classified\":\r\n flags.isClassified = IsClassified.Yes;\r\n break;\r\n case \"Clip\":\r\n flags.numClipPlanes = 1;\r\n break;\r\n case \"Shadowable\":\r\n flags.isShadowable = IsShadowable.Yes;\r\n break;\r\n case \"Thematic\":\r\n flags.isThematic = IsThematic.Yes;\r\n break;\r\n case \"Wiremesh\":\r\n flags.isWiremesh = IsWiremesh.Yes;\r\n break;\r\n case \"Pick\":\r\n flags.featureMode = FeatureMode.Pick;\r\n break;\r\n case \"Overrides\":\r\n flags.featureMode = FeatureMode.Overrides;\r\n break;\r\n }\r\n }\r\n\r\n return flags;\r\n }\r\n\r\n public static readonly defaults = new TechniqueFlags();\r\n}\r\n"]}
@@ -156,7 +156,7 @@ function createAmbientOcclusionProgram(context) {
156
156
  frag.addFunction(Fragment_1.computeLinearDepth);
157
157
  (0, FeatureSymbology_1.addRenderOrderConstants)(frag);
158
158
  frag.set(1 /* ComputeBaseColor */, computeAmbientOcclusion);
159
- frag.set(15 /* AssignFragData */, Fragment_1.assignFragColor);
159
+ frag.set(16 /* AssignFragData */, Fragment_1.assignFragColor);
160
160
  frag.addUniform("u_pickDepthAndOrder", 8 /* Sampler2D */, (prog) => {
161
161
  prog.addGraphicUniform("u_pickDepthAndOrder", (uniform, params) => {
162
162
  const geom = params.geometry;
@@ -51,7 +51,7 @@ function createBlurProgram(context) {
51
51
  (0, Fragment_1.addWindowToTexCoords)(frag);
52
52
  frag.addFunction(Decode_1.decodeDepthRgb);
53
53
  frag.set(1 /* ComputeBaseColor */, computeBlur);
54
- frag.set(15 /* AssignFragData */, Fragment_1.assignFragColor);
54
+ frag.set(16 /* AssignFragData */, Fragment_1.assignFragColor);
55
55
  (0, Viewport_1.addViewport)(frag);
56
56
  frag.addUniform("u_textureToBlur", 8 /* Sampler2D */, (prog) => {
57
57
  prog.addGraphicUniform("u_textureToBlur", (uniform, params) => {
@@ -28,11 +28,11 @@ function createClearPickAndColorProgram(context) {
28
28
  frag.set(1 /* ComputeBaseColor */, computeBaseColor);
29
29
  if (!System_1.System.instance.capabilities.supportsMRTPickShaders) {
30
30
  // NB: This shader is never used - we gl.clear() directly
31
- frag.set(15 /* AssignFragData */, "FragColor = baseColor;");
31
+ frag.set(16 /* AssignFragData */, "FragColor = baseColor;");
32
32
  }
33
33
  else {
34
34
  frag.addDrawBuffersExtension(3);
35
- frag.set(15 /* AssignFragData */, assignFragData);
35
+ frag.set(16 /* AssignFragData */, assignFragData);
36
36
  }
37
37
  builder.vert.headerComment = "//!V! ClearPickAndColor";
38
38
  builder.frag.headerComment = "//!F! ClearPickAndColor";
@@ -23,11 +23,11 @@ function createClearTranslucentProgram(context) {
23
23
  frag.set(1 /* ComputeBaseColor */, computeBaseColor);
24
24
  if (System_1.System.instance.capabilities.supportsMRTTransparency) {
25
25
  frag.addDrawBuffersExtension(2);
26
- frag.set(15 /* AssignFragData */, assignFragData);
26
+ frag.set(16 /* AssignFragData */, assignFragData);
27
27
  }
28
28
  else {
29
29
  // NB: This shader is never used - we just gl.clear() directly
30
- frag.set(15 /* AssignFragData */, assignFragColor);
30
+ frag.set(16 /* AssignFragData */, assignFragColor);
31
31
  }
32
32
  builder.vert.headerComment = "//!V! ClearTranslucent";
33
33
  builder.frag.headerComment = "//!F! ClearTranslucent";
@@ -40,7 +40,7 @@ function createCombine3TexturesProgram(context) {
40
40
  Texture_1.Texture2DHandle.bindSampler(uniform, params.geometry.texture2, RenderFlags_1.TextureUnit.Two);
41
41
  });
42
42
  }, 3 /* High */);
43
- frag.set(15 /* AssignFragData */, assignFragData);
43
+ frag.set(16 /* AssignFragData */, assignFragData);
44
44
  builder.vert.headerComment = "//!V! Combine3Textures";
45
45
  builder.frag.headerComment = "//!F! Combine3Textures";
46
46
  return builder.buildProgram(context);
@@ -33,7 +33,7 @@ function createCombineTexturesProgram(context) {
33
33
  Texture_1.Texture2DHandle.bindSampler(uniform, params.geometry.texture1, RenderFlags_1.TextureUnit.One);
34
34
  });
35
35
  }, 3 /* High */);
36
- frag.set(15 /* AssignFragData */, assignFragData);
36
+ frag.set(16 /* AssignFragData */, assignFragData);
37
37
  builder.vert.headerComment = "//!V! CombineTextures";
38
38
  builder.frag.headerComment = "//!F! CombineTextures";
39
39
  return builder.buildProgram(context);
@@ -116,7 +116,7 @@ function createCompositeProgram(flags, context) {
116
116
  const frag = builder.frag;
117
117
  frag.addFunction(wantOcclusion ? computeAmbientOcclusion : computeDefaultAmbientOcclusion);
118
118
  frag.addFunction(computeOpaqueColor);
119
- frag.set(15 /* AssignFragData */, Fragment_1.assignFragColor);
119
+ frag.set(16 /* AssignFragData */, Fragment_1.assignFragColor);
120
120
  frag.addUniform("u_opaque", 8 /* Sampler2D */, (prog) => {
121
121
  prog.addGraphicUniform("u_opaque", (uniform, params) => {
122
122
  Texture_1.Texture2DHandle.bindSampler(uniform, params.geometry.opaque, RenderFlags_1.TextureUnit.Zero);
@@ -19,7 +19,7 @@ function createCopyColorProgram(context, copyAlpha = true) {
19
19
  const builder = (0, ViewportQuad_1.createViewportQuadBuilder)(true);
20
20
  const frag = builder.frag;
21
21
  frag.set(1 /* ComputeBaseColor */, copyAlpha ? computeColor : computeColorNoAlpha);
22
- frag.set(15 /* AssignFragData */, Fragment_1.assignFragColor);
22
+ frag.set(16 /* AssignFragData */, Fragment_1.assignFragColor);
23
23
  frag.addUniform("u_color", 8 /* Sampler2D */, (prog) => {
24
24
  prog.addGraphicUniform("u_color", (uniform, params) => {
25
25
  const geom = params.geometry;
@@ -24,7 +24,7 @@ function createCopyPickBuffersProgram(context) {
24
24
  frag.set(1 /* ComputeBaseColor */, computeBaseColor);
25
25
  if (System_1.System.instance.capabilities.maxColorAttachments < 2) {
26
26
  // NB: Never used - we gl.clear() each attachment directly.
27
- frag.set(15 /* AssignFragData */, "FragColor = vec4(0.0);");
27
+ frag.set(16 /* AssignFragData */, "FragColor = vec4(0.0);");
28
28
  }
29
29
  else {
30
30
  frag.addUniform("u_pickFeatureId", 8 /* Sampler2D */, (prog) => {
@@ -38,7 +38,7 @@ function createCopyPickBuffersProgram(context) {
38
38
  });
39
39
  }, 3 /* High */);
40
40
  frag.addDrawBuffersExtension(2);
41
- frag.set(15 /* AssignFragData */, assignFragData);
41
+ frag.set(16 /* AssignFragData */, assignFragData);
42
42
  }
43
43
  builder.vert.headerComment = "//!V! CopyPickBuffers";
44
44
  builder.frag.headerComment = "//!F! CopyPickBuffers";
@@ -67,7 +67,7 @@ function createVolClassColorUsingStencilProgram(context) {
67
67
  const builder = (0, ViewportQuad_1.createViewportQuadBuilder)(false);
68
68
  const frag = builder.frag;
69
69
  frag.set(1 /* ComputeBaseColor */, computehiliteColor);
70
- frag.set(15 /* AssignFragData */, Fragment_1.assignFragColor);
70
+ frag.set(16 /* AssignFragData */, Fragment_1.assignFragColor);
71
71
  frag.addUniform("u_hilite_color", 5 /* Vec4 */, (prog) => {
72
72
  prog.addGraphicUniform("u_hilite_color", (uniform, params) => {
73
73
  const useLighting = params.geometry.getFlashMode(params);
@@ -91,7 +91,7 @@ function createVolClassCopyZProgram(context) {
91
91
  builder.addInlineComputedVarying("v_texCoord", 3 /* Vec2 */, computeTexCoord); // TODO: I think this is not necessary because it's already added from the create above
92
92
  const frag = builder.frag;
93
93
  frag.set(1 /* ComputeBaseColor */, computeSetBlendColor);
94
- frag.set(15 /* AssignFragData */, Fragment_1.assignFragColor);
94
+ frag.set(16 /* AssignFragData */, Fragment_1.assignFragColor);
95
95
  frag.addUniform("u_blend_color", 5 /* Vec4 */, (prog) => {
96
96
  prog.addGraphicUniform("u_blend_color", (uniform, _params) => {
97
97
  scratchColor.set(0.0, 0.0, 0.0, 0.0);
@@ -106,7 +106,7 @@ function createVolClassCopyZProgram(context) {
106
106
  });
107
107
  if (!System_1.System.instance.capabilities.isWebGL2)
108
108
  frag.addExtension("GL_EXT_frag_depth");
109
- frag.set(17 /* FinalizeDepth */, depthFromTexture);
109
+ frag.set(18 /* FinalizeDepth */, depthFromTexture);
110
110
  builder.vert.headerComment = "//!V! VolClassCopyZ";
111
111
  builder.frag.headerComment = "//!F! VolClassCopyZ";
112
112
  return builder.buildProgram(context);
@@ -127,7 +127,7 @@ function createVolClassCopyZUsingPointsProgram(context) {
127
127
  vert.set(9 /* ComputePosition */, computePosition);
128
128
  const frag = builder.frag;
129
129
  frag.set(1 /* ComputeBaseColor */, computeSetBlendColor);
130
- frag.set(15 /* AssignFragData */, Fragment_1.assignFragColor);
130
+ frag.set(16 /* AssignFragData */, Fragment_1.assignFragColor);
131
131
  frag.addUniform("u_blend_color", 5 /* Vec4 */, (prog) => {
132
132
  prog.addGraphicUniform("u_blend_color", (uniform, _params) => {
133
133
  scratchColor.set(0.0, 0.0, 0.0, 0.0);
@@ -147,7 +147,7 @@ function createVolClassSetBlendProgram(context) {
147
147
  addBoundaryTypeConstants(frag);
148
148
  frag.set(0 /* CheckForEarlyDiscard */, checkDiscardBackgroundByZ);
149
149
  frag.set(1 /* ComputeBaseColor */, computeSetBlendColor);
150
- frag.set(15 /* AssignFragData */, Fragment_1.assignFragColor);
150
+ frag.set(16 /* AssignFragData */, Fragment_1.assignFragColor);
151
151
  frag.addUniform("u_boundaryType", 1 /* Int */, (prog) => {
152
152
  prog.addGraphicUniform("u_boundaryType", (uniform, params) => {
153
153
  const geom = params.geometry;
@@ -191,7 +191,7 @@ function createVolClassBlendProgram(context) {
191
191
  builder.addInlineComputedVarying("v_texCoord", 3 /* Vec2 */, computeTexCoord);
192
192
  const frag = builder.frag;
193
193
  frag.set(1 /* ComputeBaseColor */, computeBlendTextureColor);
194
- frag.set(15 /* AssignFragData */, Fragment_1.assignFragColor);
194
+ frag.set(16 /* AssignFragData */, Fragment_1.assignFragColor);
195
195
  frag.addUniform("u_blendTexture", 8 /* Sampler2D */, (prog) => {
196
196
  prog.addGraphicUniform("u_blendTexture", (uniform, params) => {
197
197
  const geom = params.geometry;
@@ -66,7 +66,7 @@ function createEVSMProgram(context) {
66
66
  (0, SolarShadowMapping_1.addEvsmExponent)(frag);
67
67
  frag.addFunction(SolarShadowMapping_1.warpDepth);
68
68
  frag.set(1 /* ComputeBaseColor */, computeEVSM);
69
- frag.set(15 /* AssignFragData */, Fragment_1.assignFragColor);
69
+ frag.set(16 /* AssignFragData */, Fragment_1.assignFragColor);
70
70
  builder.vert.headerComment = "//!V! EVSMFromDepth";
71
71
  builder.frag.headerComment = "//!F! EVSMFromDepth";
72
72
  return builder.buildProgram(context);
@@ -319,7 +319,7 @@ function addHiliter(builder, wantWeight = false) {
319
319
  addEmphasisFlags(builder.frag);
320
320
  (0, Common_1.addExtractNthBit)(builder.frag);
321
321
  builder.frag.set(1 /* ComputeBaseColor */, computeHiliteColor);
322
- builder.frag.set(15 /* AssignFragData */, Fragment_1.assignFragColor);
322
+ builder.frag.set(16 /* AssignFragData */, Fragment_1.assignFragColor);
323
323
  }
324
324
  exports.addHiliter = addHiliter;
325
325
  function addSamplers(frag, testFeatureId) {
@@ -673,7 +673,7 @@ exports.addFeatureSymbology = addFeatureSymbology;
673
673
  */
674
674
  function addUniformHiliter(builder) {
675
675
  builder.frag.set(1 /* ComputeBaseColor */, `return vec4(1.0, 0.0, 0.0, 0.0);`);
676
- builder.frag.set(15 /* AssignFragData */, Fragment_1.assignFragColor);
676
+ builder.frag.set(16 /* AssignFragData */, Fragment_1.assignFragColor);
677
677
  }
678
678
  exports.addUniformHiliter = addUniformHiliter;
679
679
  /** For a uniform feature table, the feature ID output to pick buffers is equal to the batch ID.
@@ -97,12 +97,12 @@ function addPickBufferOutputs(frag) {
97
97
  frag.addFunction(exports.computeLinearDepth);
98
98
  const prelude = new ShaderBuilder_1.SourceBuilder();
99
99
  prelude.add(computePickBufferOutputs);
100
- const overrideColor = frag.get(18 /* OverrideColor */);
100
+ const overrideColor = frag.get(19 /* OverrideColor */);
101
101
  if (undefined !== overrideColor) {
102
102
  frag.addFunction("vec4 overrideColor(vec4 currentColor)", overrideColor);
103
103
  prelude.addline(" output0 = overrideColor(output0);");
104
104
  }
105
- const overrideFeatureId = frag.get(16 /* OverrideFeatureId */);
105
+ const overrideFeatureId = frag.get(17 /* OverrideFeatureId */);
106
106
  if (undefined !== overrideFeatureId) {
107
107
  frag.addFunction("vec4 overrideFeatureId(vec4 currentId)", overrideFeatureId);
108
108
  prelude.addline(reassignFeatureId);
@@ -110,11 +110,11 @@ function addPickBufferOutputs(frag) {
110
110
  (0, RenderPass_1.addRenderPass)(frag);
111
111
  if (System_1.System.instance.capabilities.supportsMRTPickShaders) {
112
112
  frag.addDrawBuffersExtension(3);
113
- frag.set(15 /* AssignFragData */, prelude.source + assignPickBufferOutputsMRT);
113
+ frag.set(16 /* AssignFragData */, prelude.source + assignPickBufferOutputsMRT);
114
114
  }
115
115
  else {
116
116
  addRenderTargetIndex(frag);
117
- frag.set(15 /* AssignFragData */, prelude.source + assignPickBufferOutputsMP);
117
+ frag.set(16 /* AssignFragData */, prelude.source + assignPickBufferOutputsMP);
118
118
  }
119
119
  }
120
120
  exports.addPickBufferOutputs = addPickBufferOutputs;
@@ -122,7 +122,7 @@ exports.addPickBufferOutputs = addPickBufferOutputs;
122
122
  function addAltPickBufferOutputs(frag) {
123
123
  const prelude = new ShaderBuilder_1.SourceBuilder();
124
124
  prelude.add(computeAltPickBufferOutputs);
125
- const overrideColor = frag.get(18 /* OverrideColor */);
125
+ const overrideColor = frag.get(19 /* OverrideColor */);
126
126
  if (undefined !== overrideColor) {
127
127
  frag.addFunction("vec4 overrideColor(vec4 currentColor)", overrideColor);
128
128
  prelude.addline(" output0 = overrideColor(output0);");
@@ -130,24 +130,24 @@ function addAltPickBufferOutputs(frag) {
130
130
  (0, RenderPass_1.addRenderPass)(frag);
131
131
  if (System_1.System.instance.capabilities.supportsMRTPickShaders) {
132
132
  frag.addDrawBuffersExtension(3);
133
- frag.set(15 /* AssignFragData */, prelude.source + assignPickBufferOutputsMRT);
133
+ frag.set(16 /* AssignFragData */, prelude.source + assignPickBufferOutputsMRT);
134
134
  }
135
135
  else {
136
136
  addRenderTargetIndex(frag);
137
- frag.set(15 /* AssignFragData */, prelude.source + assignPickBufferOutputsMP);
137
+ frag.set(16 /* AssignFragData */, prelude.source + assignPickBufferOutputsMP);
138
138
  }
139
139
  }
140
140
  exports.addAltPickBufferOutputs = addAltPickBufferOutputs;
141
141
  /** @internal */
142
142
  function addFragColorWithPreMultipliedAlpha(frag) {
143
143
  (0, RenderPass_1.addRenderPass)(frag);
144
- const overrideColor = frag.get(18 /* OverrideColor */);
144
+ const overrideColor = frag.get(19 /* OverrideColor */);
145
145
  if (undefined === overrideColor) {
146
- frag.set(15 /* AssignFragData */, assignFragColorWithPreMultipliedAlpha);
146
+ frag.set(16 /* AssignFragData */, assignFragColorWithPreMultipliedAlpha);
147
147
  }
148
148
  else {
149
149
  frag.addFunction("vec4 overrideColor(vec4 currentColor)", overrideColor);
150
- frag.set(15 /* AssignFragData */, overrideAndAssignFragColorWithPreMultipliedAlpha);
150
+ frag.set(16 /* AssignFragData */, overrideAndAssignFragColorWithPreMultipliedAlpha);
151
151
  }
152
152
  }
153
153
  exports.addFragColorWithPreMultipliedAlpha = addFragColorWithPreMultipliedAlpha;
@@ -27,7 +27,7 @@ function addLogDepth(builder) {
27
27
  });
28
28
  if (!System_1.System.instance.capabilities.isWebGL2)
29
29
  frag.addExtension("GL_EXT_frag_depth");
30
- frag.set(17 /* FinalizeDepth */, finalizeDepth);
30
+ frag.set(18 /* FinalizeDepth */, finalizeDepth);
31
31
  }
32
32
  exports.addLogDepth = addLogDepth;
33
33
  //# sourceMappingURL=LogarithmicDepthBuffer.js.map
@@ -294,7 +294,7 @@ function addFeaturePlanarClassifier(builder) {
294
294
  uniform.setUniform4fv(scratchBatchBaseComponents);
295
295
  });
296
296
  });
297
- frag.set(16 /* OverrideFeatureId */, overrideFeatureId);
297
+ frag.set(17 /* OverrideFeatureId */, overrideFeatureId);
298
298
  frag.addFunction(Common_1.addUInt32s);
299
299
  }
300
300
  exports.addFeaturePlanarClassifier = addFeaturePlanarClassifier;
@@ -385,9 +385,9 @@ function addOverrideClassifierColor(builder, isThematic) {
385
385
  const haveOverrides = undefined !== builder.frag.find("v_feature_emphasis");
386
386
  builder.frag.addFunction(haveOverrides ? encodeNonLocatableWithFeatures : encodeNonLocatable);
387
387
  if (isThematic === 0 /* No */)
388
- builder.frag.set(18 /* OverrideColor */, haveOverrides ? overrideClassifierWithFeatures : overrideClassifierForClip);
388
+ builder.frag.set(19 /* OverrideColor */, haveOverrides ? overrideClassifierWithFeatures : overrideClassifierForClip);
389
389
  else
390
- builder.frag.set(18 /* OverrideColor */, haveOverrides ? overrideClassifierWithFeaturesForThematic : overrideClassifierForClipForThematic);
390
+ builder.frag.set(19 /* OverrideColor */, haveOverrides ? overrideClassifierWithFeaturesForThematic : overrideClassifierForClipForThematic);
391
391
  }
392
392
  exports.addOverrideClassifierColor = addOverrideClassifierColor;
393
393
  //# sourceMappingURL=PlanarClassification.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RealityMesh.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/RealityMesh.ts"],"names":[],"mappings":"AAIA;;GAEG;AAMH,OAAO,EAAkD,cAAc,EAAuC,MAAM,kBAAkB,CAAC;AAEvI,OAAO,EAAsD,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAmKvG,gBAAgB;AAChB,wBAAgB,kCAAkC,IAAI,cAAc,CAInE;AAED,gBAAgB;AAChB,wBAAgB,wBAAwB,IAAI,cAAc,CAIzD;AAED,gBAAgB;AAChB,MAAM,CAAC,OAAO,UAAU,wBAAwB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CAqEtF"}
1
+ {"version":3,"file":"RealityMesh.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/RealityMesh.ts"],"names":[],"mappings":"AAIA;;GAEG;AAMH,OAAO,EAAkD,cAAc,EAAuC,MAAM,kBAAkB,CAAC;AAEvI,OAAO,EAAsD,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAoKvG,gBAAgB;AAChB,wBAAgB,kCAAkC,IAAI,cAAc,CAInE;AAED,gBAAgB;AAChB,wBAAgB,wBAAwB,IAAI,cAAc,CAIzD;AAED,gBAAgB;AAChB,MAAM,CAAC,OAAO,UAAU,wBAAwB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CAwEtF"}
@@ -24,6 +24,7 @@ const SolarShadowMapping_1 = require("./SolarShadowMapping");
24
24
  const Surface_1 = require("./Surface");
25
25
  const Thematic_1 = require("./Thematic");
26
26
  const Vertex_1 = require("./Vertex");
27
+ const Wiremesh_1 = require("./Wiremesh");
27
28
  const computePosition = "gl_PointSize = 1.0; return MAT_MVP * rawPos;";
28
29
  const computeNormal = `
29
30
  vec3 normal = octDecodeNormal(a_norm); // normal coming in for is already in world space
@@ -158,7 +159,7 @@ function createRealityMeshHiliterBuilder() {
158
159
  const vert = builder.vert;
159
160
  vert.set(9 /* ComputePosition */, computePosition);
160
161
  (0, Vertex_1.addModelViewProjectionMatrix)(vert);
161
- builder.frag.set(15 /* AssignFragData */, Fragment_1.assignFragColor);
162
+ builder.frag.set(16 /* AssignFragData */, Fragment_1.assignFragColor);
162
163
  return builder;
163
164
  }
164
165
  /** @internal */
@@ -185,7 +186,7 @@ function createRealityMeshBuilder(flags) {
185
186
  (0, SolarShadowMapping_1.addSolarShadowMap)(builder, true);
186
187
  const frag = builder.frag;
187
188
  frag.addGlobal("featureIncrement", 2 /* Float */, "0.0");
188
- frag.set(16 /* OverrideFeatureId */, overrideFeatureId);
189
+ frag.set(17 /* OverrideFeatureId */, overrideFeatureId);
189
190
  let textureCount = System_1.System.instance.maxRealityImageryLayers;
190
191
  let gradientTextureUnit = RenderFlags_1.TextureUnit.RealityMeshThematicGradient;
191
192
  const caps = System_1.System.instance.capabilities;
@@ -234,6 +235,8 @@ function createRealityMeshBuilder(flags) {
234
235
  addTextures(builder, textureCount);
235
236
  if (1 /* Yes */ === flags.isThematic)
236
237
  addThematicToRealityMesh(builder, gradientTextureUnit);
238
+ if (flags.isWiremesh)
239
+ (0, Wiremesh_1.addWiremesh)(builder);
237
240
  return builder;
238
241
  }
239
242
  exports.default = createRealityMeshBuilder;
@@ -1 +1 @@
1
- {"version":3,"file":"RealityMesh.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/RealityMesh.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { ColorDef } from \"@itwin/core-common\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderBuilder, FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { FeatureMode, IsInstanced, IsShadowable, IsThematic, TechniqueFlags } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { Texture } from \"../Texture\";\r\nimport { addVaryingColor } from \"./Color\";\r\nimport { addShaderFlags, addUInt32s } from \"./Common\";\r\nimport { decodeDepthRgb, unquantize2d } from \"./Decode\";\r\nimport { addFeatureSymbology, addHiliter, FeatureSymbologyOptions } from \"./FeatureSymbology\";\r\nimport { addAltPickBufferOutputs, addPickBufferOutputs, assignFragColor } from \"./Fragment\";\r\nimport { addColorPlanarClassifier, addFeaturePlanarClassifier, addHilitePlanarClassifier } from \"./PlanarClassification\";\r\nimport { addSolarShadowMap } from \"./SolarShadowMapping\";\r\nimport { addClassificationTranslucencyDiscard, octDecodeNormal } from \"./Surface\";\r\nimport { addThematicDisplay, getComputeThematicIndex } from \"./Thematic\";\r\nimport { addModelViewProjectionMatrix, addNormalMatrix } from \"./Vertex\";\r\n\r\nconst computePosition = \"gl_PointSize = 1.0; return MAT_MVP * rawPos;\";\r\nconst computeNormal = `\r\n vec3 normal = octDecodeNormal(a_norm); // normal coming in for is already in world space\r\n g_hillshadeIndex = normal.z; // save off world Z for thematic hill shade mode index\r\n return normalize(u_worldToViewN * normal);\r\n`;\r\n\r\nconst applyTexture = `\r\nbool applyTexture(inout vec4 col, sampler2D sampler, mat4 params) {\r\n vec4 texTransform = params[0].xyzw;\r\n vec4 texClip = params[1].xyzw;\r\n float layerAlpha = params[2].x;\r\n vec2 uv = vec2(texTransform[0] + texTransform[2] * v_texCoord.x, texTransform[1] + texTransform[3] * v_texCoord.y);\r\n if (uv.x >= texClip[0] && uv.x <= texClip[2] && uv.y >= texClip[1] && uv.y <= texClip[3]) {\r\n uv.y = 1.0 - uv.y;\r\n vec4 texCol = TEXTURE(sampler, uv);\r\n float alpha = layerAlpha * texCol.a;\r\n if (alpha > 0.05) {\r\n col.rgb = (1.0 - alpha) * col.rgb + alpha * texCol.rgb;\r\n if (texCol.a > 0.1)\r\n featureIncrement = params[2].y;\r\n if (alpha > col.a)\r\n col.a = alpha;\r\n }\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n`;\r\n\r\nconst computeTexCoord = \"return unquantize2d(a_uvParam, u_qTexCoordParams);\";\r\nconst overrideFeatureId = \"return addUInt32s(feature_id * 255.0, vec4(featureIncrement, 0.0, 0.0, 0.0)) / 255.0;\";\r\n\r\nfunction addTextures(builder: ProgramBuilder, maxTexturesPerMesh: number) {\r\n builder.vert.addFunction(unquantize2d);\r\n builder.addFunctionComputedVarying(\"v_texCoord\", VariableType.Vec2, \"computeTexCoord\", computeTexCoord);\r\n builder.vert.addUniform(\"u_qTexCoordParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_qTexCoordParams\", (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n if (undefined !== realityMesh.uvQParams) {\r\n uniform.setUniform4fv(realityMesh.uvQParams);\r\n }\r\n });\r\n });\r\n\r\n builder.frag.addUniform(\"u_texturesPresent\", VariableType.Boolean, (program) => {\r\n program.addGraphicUniform(\"u_texturesPresent\", (uniform, params) => {\r\n const textureCount = params.geometry.asRealityMesh!.textureParams?.textures.length;\r\n uniform.setUniform1i(textureCount ? 1 : 0);\r\n });\r\n });\r\n\r\n for (let i = 0; i < maxTexturesPerMesh; i++) {\r\n const textureLabel = `s_texture${i}`;\r\n builder.frag.addUniform(textureLabel, VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(textureLabel, (uniform, params) => {\r\n const textureUnits = [TextureUnit.RealityMesh0, TextureUnit.RealityMesh1, params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder, TextureUnit.RealityMesh3, TextureUnit.RealityMesh4, TextureUnit.RealityMesh5];\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const realityTexture = realityMesh.textureParams ? realityMesh.textureParams.textures[i] : undefined;\r\n if (realityTexture !== undefined) {\r\n const texture = realityTexture as Texture;\r\n texture.texture.bindSampler(uniform, textureUnits[i]);\r\n } else {\r\n // assert(false, \"Terrain Mesh texture not defined when beginning texture.\");\r\n System.instance.ensureSamplerBound(uniform, textureUnits[i]);\r\n }\r\n });\r\n });\r\n const paramsLabel = `u_texTransform${i}`;\r\n builder.frag.addUniform(paramsLabel, VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(paramsLabel, (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const textureParams = realityMesh.textureParams;\r\n assert(undefined !== textureParams);\r\n if (undefined !== textureParams) {\r\n uniform.setMatrix4(textureParams.matrices[i]);\r\n }\r\n });\r\n });\r\n }\r\n}\r\nfunction baseColorFromTextures(textureCount: number, applyFeatureColor: string) {\r\n const applyTextureStrings = [];\r\n\r\n for (let i = 0; i < textureCount; i++)\r\n applyTextureStrings.push(`if (applyTexture(col, s_texture${i}, u_texTransform${i})) doDiscard = false; `);\r\n\r\n return `\r\n if (!u_texturesPresent)\r\n return u_baseColor;\r\n\r\n bool doDiscard = true;\r\n vec4 col = u_baseColor;\r\n ${applyTextureStrings.join(\"\\n \")}\r\n if (doDiscard)\r\n discard;\r\n\r\n ${applyFeatureColor}\r\n\r\n return col;\r\n`;\r\n}\r\n\r\n// feature_rgb.r = -1.0 if rgb color not overridden for feature.\r\n// feature_alpha = -1.0 if alpha not overridden for feature.\r\nconst mixFeatureColor = `\r\n col.rgb = mix(col.rgb, mix(col.rgb, v_color.rgb, u_overrideColorMix), step(0.0, v_color.r));\r\n col.a = mix(col.a, v_color.a, step(0.0, v_color.a));\r\n `;\r\n\r\nfunction addThematicToRealityMesh(builder: ProgramBuilder, gradientTextureUnit: TextureUnit) {\r\n addNormalMatrix(builder.vert, IsInstanced.No);\r\n builder.vert.addFunction(octDecodeNormal);\r\n builder.vert.addGlobal(\"g_hillshadeIndex\", VariableType.Float);\r\n builder.addFunctionComputedVarying(\"v_n\", VariableType.Vec3, \"computeLightingNormal\", computeNormal);\r\n addThematicDisplay(builder, false, true);\r\n builder.addInlineComputedVarying(\"v_thematicIndex\", VariableType.Float, getComputeThematicIndex(builder.vert.usesInstancedGeometry, false, false));\r\n builder.vert.addUniform(\"u_worldToViewN\", VariableType.Mat3, (prog) => {\r\n prog.addGraphicUniform(\"u_worldToViewN\", (uniform, params) => {\r\n params.target.uniforms.branch.bindWorldToViewNTransform(uniform, params.geometry, false);\r\n });\r\n });\r\n builder.frag.addUniform(\"s_texture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_texture\", (uniform, params) => {\r\n params.target.uniforms.thematic.bindTexture(uniform, gradientTextureUnit >= 0 ? gradientTextureUnit : (params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder));\r\n });\r\n });\r\n}\r\n\r\nfunction addColorOverrideMix(frag: FragmentShaderBuilder) {\r\n frag.addUniform(\"u_overrideColorMix\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_overrideColorMix\", (uniform, params) => {\r\n uniform.setUniform1f(params.geometry.asRealityMesh!.overrideColorMix);\r\n });\r\n });\r\n\r\n}\r\n\r\nfunction createRealityMeshHiliterBuilder(): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n return builder;\r\n\r\n}\r\n\r\n/** @internal */\r\nexport function createClassifierRealityMeshHiliter(): ProgramBuilder {\r\n const builder = createRealityMeshHiliterBuilder();\r\n addHilitePlanarClassifier(builder, false);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createRealityMeshHiliter(): ProgramBuilder {\r\n const builder = createRealityMeshHiliterBuilder();\r\n addHiliter(builder, false);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport default function createRealityMeshBuilder(flags: TechniqueFlags): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n\r\n if (flags.isShadowable === IsShadowable.Yes)\r\n addSolarShadowMap(builder, true);\r\n\r\n const frag = builder.frag;\r\n frag.addGlobal(\"featureIncrement\", VariableType.Float, \"0.0\");\r\n frag.set(FragmentShaderComponent.OverrideFeatureId, overrideFeatureId);\r\n let textureCount = System.instance.maxRealityImageryLayers;\r\n let gradientTextureUnit = TextureUnit.RealityMeshThematicGradient;\r\n const caps = System.instance.capabilities;\r\n if (Math.min(caps.maxFragTextureUnits, caps.maxVertTextureUnits) < 16 && IsThematic.Yes === flags.isThematic) {\r\n textureCount--; // steal the last bg map layer texture for thematic gradient (just when thematic display is applied)\r\n gradientTextureUnit = -1; // is dependent on drawing mode so will set later\r\n }\r\n\r\n const feat = flags.featureMode;\r\n let opts = FeatureMode.Overrides === feat ? FeatureSymbologyOptions.Surface : FeatureSymbologyOptions.None;\r\n let applyFragmentFeatureColor = \"\";\r\n\r\n if (flags.isClassified) {\r\n opts &= ~FeatureSymbologyOptions.Alpha;\r\n addColorPlanarClassifier(builder, flags.isTranslucent, flags.isThematic);\r\n addClassificationTranslucencyDiscard(builder);\r\n }\r\n\r\n addFeatureSymbology(builder, feat, opts);\r\n if (feat === FeatureMode.Overrides) {\r\n addShaderFlags(builder);\r\n addVaryingColor(builder, \"return vec4(-1.0, -1.0, -1.0, -1.0);\");\r\n applyFragmentFeatureColor = mixFeatureColor;\r\n addColorOverrideMix(builder.frag);\r\n }\r\n const computeFragmentBaseColor = baseColorFromTextures(textureCount, applyFragmentFeatureColor);\r\n\r\n frag.addFunction(applyTexture);\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\r\n frag.addFunction(addUInt32s);\r\n builder.frag.addUniform(\"u_baseColor\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_baseColor\", (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const baseColor = (realityMesh.baseColor ? realityMesh.baseColor : ColorDef.create(0xff000000)).colors;\r\n uniform.setUniform4fv([baseColor.r / 255, baseColor.g / 255, baseColor.b / 255, 1 - baseColor.t / 255]);\r\n });\r\n });\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\r\n if (!flags.isTranslucent) {\r\n if (FeatureMode.None !== feat) {\r\n if (flags.isClassified)\r\n addFeaturePlanarClassifier(builder);\r\n\r\n builder.frag.addFunction(decodeDepthRgb);\r\n if (flags.isClassified)\r\n addPickBufferOutputs(builder.frag);\r\n else\r\n addAltPickBufferOutputs(builder.frag);\r\n }\r\n }\r\n\r\n addTextures(builder, textureCount);\r\n\r\n if (IsThematic.Yes === flags.isThematic)\r\n addThematicToRealityMesh(builder, gradientTextureUnit);\r\n\r\n return builder;\r\n}\r\n\r\n"]}
1
+ {"version":3,"file":"RealityMesh.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/RealityMesh.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { ColorDef } from \"@itwin/core-common\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderBuilder, FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { FeatureMode, IsInstanced, IsShadowable, IsThematic, TechniqueFlags } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { Texture } from \"../Texture\";\r\nimport { addVaryingColor } from \"./Color\";\r\nimport { addShaderFlags, addUInt32s } from \"./Common\";\r\nimport { decodeDepthRgb, unquantize2d } from \"./Decode\";\r\nimport { addFeatureSymbology, addHiliter, FeatureSymbologyOptions } from \"./FeatureSymbology\";\r\nimport { addAltPickBufferOutputs, addPickBufferOutputs, assignFragColor } from \"./Fragment\";\r\nimport { addColorPlanarClassifier, addFeaturePlanarClassifier, addHilitePlanarClassifier } from \"./PlanarClassification\";\r\nimport { addSolarShadowMap } from \"./SolarShadowMapping\";\r\nimport { addClassificationTranslucencyDiscard, octDecodeNormal } from \"./Surface\";\r\nimport { addThematicDisplay, getComputeThematicIndex } from \"./Thematic\";\r\nimport { addModelViewProjectionMatrix, addNormalMatrix } from \"./Vertex\";\r\nimport { addWiremesh } from \"./Wiremesh\";\r\n\r\nconst computePosition = \"gl_PointSize = 1.0; return MAT_MVP * rawPos;\";\r\nconst computeNormal = `\r\n vec3 normal = octDecodeNormal(a_norm); // normal coming in for is already in world space\r\n g_hillshadeIndex = normal.z; // save off world Z for thematic hill shade mode index\r\n return normalize(u_worldToViewN * normal);\r\n`;\r\n\r\nconst applyTexture = `\r\nbool applyTexture(inout vec4 col, sampler2D sampler, mat4 params) {\r\n vec4 texTransform = params[0].xyzw;\r\n vec4 texClip = params[1].xyzw;\r\n float layerAlpha = params[2].x;\r\n vec2 uv = vec2(texTransform[0] + texTransform[2] * v_texCoord.x, texTransform[1] + texTransform[3] * v_texCoord.y);\r\n if (uv.x >= texClip[0] && uv.x <= texClip[2] && uv.y >= texClip[1] && uv.y <= texClip[3]) {\r\n uv.y = 1.0 - uv.y;\r\n vec4 texCol = TEXTURE(sampler, uv);\r\n float alpha = layerAlpha * texCol.a;\r\n if (alpha > 0.05) {\r\n col.rgb = (1.0 - alpha) * col.rgb + alpha * texCol.rgb;\r\n if (texCol.a > 0.1)\r\n featureIncrement = params[2].y;\r\n if (alpha > col.a)\r\n col.a = alpha;\r\n }\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n`;\r\n\r\nconst computeTexCoord = \"return unquantize2d(a_uvParam, u_qTexCoordParams);\";\r\nconst overrideFeatureId = \"return addUInt32s(feature_id * 255.0, vec4(featureIncrement, 0.0, 0.0, 0.0)) / 255.0;\";\r\n\r\nfunction addTextures(builder: ProgramBuilder, maxTexturesPerMesh: number) {\r\n builder.vert.addFunction(unquantize2d);\r\n builder.addFunctionComputedVarying(\"v_texCoord\", VariableType.Vec2, \"computeTexCoord\", computeTexCoord);\r\n builder.vert.addUniform(\"u_qTexCoordParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_qTexCoordParams\", (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n if (undefined !== realityMesh.uvQParams) {\r\n uniform.setUniform4fv(realityMesh.uvQParams);\r\n }\r\n });\r\n });\r\n\r\n builder.frag.addUniform(\"u_texturesPresent\", VariableType.Boolean, (program) => {\r\n program.addGraphicUniform(\"u_texturesPresent\", (uniform, params) => {\r\n const textureCount = params.geometry.asRealityMesh!.textureParams?.textures.length;\r\n uniform.setUniform1i(textureCount ? 1 : 0);\r\n });\r\n });\r\n\r\n for (let i = 0; i < maxTexturesPerMesh; i++) {\r\n const textureLabel = `s_texture${i}`;\r\n builder.frag.addUniform(textureLabel, VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(textureLabel, (uniform, params) => {\r\n const textureUnits = [TextureUnit.RealityMesh0, TextureUnit.RealityMesh1, params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder, TextureUnit.RealityMesh3, TextureUnit.RealityMesh4, TextureUnit.RealityMesh5];\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const realityTexture = realityMesh.textureParams ? realityMesh.textureParams.textures[i] : undefined;\r\n if (realityTexture !== undefined) {\r\n const texture = realityTexture as Texture;\r\n texture.texture.bindSampler(uniform, textureUnits[i]);\r\n } else {\r\n // assert(false, \"Terrain Mesh texture not defined when beginning texture.\");\r\n System.instance.ensureSamplerBound(uniform, textureUnits[i]);\r\n }\r\n });\r\n });\r\n const paramsLabel = `u_texTransform${i}`;\r\n builder.frag.addUniform(paramsLabel, VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(paramsLabel, (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const textureParams = realityMesh.textureParams;\r\n assert(undefined !== textureParams);\r\n if (undefined !== textureParams) {\r\n uniform.setMatrix4(textureParams.matrices[i]);\r\n }\r\n });\r\n });\r\n }\r\n}\r\nfunction baseColorFromTextures(textureCount: number, applyFeatureColor: string) {\r\n const applyTextureStrings = [];\r\n\r\n for (let i = 0; i < textureCount; i++)\r\n applyTextureStrings.push(`if (applyTexture(col, s_texture${i}, u_texTransform${i})) doDiscard = false; `);\r\n\r\n return `\r\n if (!u_texturesPresent)\r\n return u_baseColor;\r\n\r\n bool doDiscard = true;\r\n vec4 col = u_baseColor;\r\n ${applyTextureStrings.join(\"\\n \")}\r\n if (doDiscard)\r\n discard;\r\n\r\n ${applyFeatureColor}\r\n\r\n return col;\r\n`;\r\n}\r\n\r\n// feature_rgb.r = -1.0 if rgb color not overridden for feature.\r\n// feature_alpha = -1.0 if alpha not overridden for feature.\r\nconst mixFeatureColor = `\r\n col.rgb = mix(col.rgb, mix(col.rgb, v_color.rgb, u_overrideColorMix), step(0.0, v_color.r));\r\n col.a = mix(col.a, v_color.a, step(0.0, v_color.a));\r\n `;\r\n\r\nfunction addThematicToRealityMesh(builder: ProgramBuilder, gradientTextureUnit: TextureUnit) {\r\n addNormalMatrix(builder.vert, IsInstanced.No);\r\n builder.vert.addFunction(octDecodeNormal);\r\n builder.vert.addGlobal(\"g_hillshadeIndex\", VariableType.Float);\r\n builder.addFunctionComputedVarying(\"v_n\", VariableType.Vec3, \"computeLightingNormal\", computeNormal);\r\n addThematicDisplay(builder, false, true);\r\n builder.addInlineComputedVarying(\"v_thematicIndex\", VariableType.Float, getComputeThematicIndex(builder.vert.usesInstancedGeometry, false, false));\r\n builder.vert.addUniform(\"u_worldToViewN\", VariableType.Mat3, (prog) => {\r\n prog.addGraphicUniform(\"u_worldToViewN\", (uniform, params) => {\r\n params.target.uniforms.branch.bindWorldToViewNTransform(uniform, params.geometry, false);\r\n });\r\n });\r\n builder.frag.addUniform(\"s_texture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_texture\", (uniform, params) => {\r\n params.target.uniforms.thematic.bindTexture(uniform, gradientTextureUnit >= 0 ? gradientTextureUnit : (params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder));\r\n });\r\n });\r\n}\r\n\r\nfunction addColorOverrideMix(frag: FragmentShaderBuilder) {\r\n frag.addUniform(\"u_overrideColorMix\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_overrideColorMix\", (uniform, params) => {\r\n uniform.setUniform1f(params.geometry.asRealityMesh!.overrideColorMix);\r\n });\r\n });\r\n\r\n}\r\n\r\nfunction createRealityMeshHiliterBuilder(): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n return builder;\r\n\r\n}\r\n\r\n/** @internal */\r\nexport function createClassifierRealityMeshHiliter(): ProgramBuilder {\r\n const builder = createRealityMeshHiliterBuilder();\r\n addHilitePlanarClassifier(builder, false);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createRealityMeshHiliter(): ProgramBuilder {\r\n const builder = createRealityMeshHiliterBuilder();\r\n addHiliter(builder, false);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport default function createRealityMeshBuilder(flags: TechniqueFlags): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n\r\n if (flags.isShadowable === IsShadowable.Yes)\r\n addSolarShadowMap(builder, true);\r\n\r\n const frag = builder.frag;\r\n frag.addGlobal(\"featureIncrement\", VariableType.Float, \"0.0\");\r\n frag.set(FragmentShaderComponent.OverrideFeatureId, overrideFeatureId);\r\n let textureCount = System.instance.maxRealityImageryLayers;\r\n let gradientTextureUnit = TextureUnit.RealityMeshThematicGradient;\r\n const caps = System.instance.capabilities;\r\n if (Math.min(caps.maxFragTextureUnits, caps.maxVertTextureUnits) < 16 && IsThematic.Yes === flags.isThematic) {\r\n textureCount--; // steal the last bg map layer texture for thematic gradient (just when thematic display is applied)\r\n gradientTextureUnit = -1; // is dependent on drawing mode so will set later\r\n }\r\n\r\n const feat = flags.featureMode;\r\n let opts = FeatureMode.Overrides === feat ? FeatureSymbologyOptions.Surface : FeatureSymbologyOptions.None;\r\n let applyFragmentFeatureColor = \"\";\r\n\r\n if (flags.isClassified) {\r\n opts &= ~FeatureSymbologyOptions.Alpha;\r\n addColorPlanarClassifier(builder, flags.isTranslucent, flags.isThematic);\r\n addClassificationTranslucencyDiscard(builder);\r\n }\r\n\r\n addFeatureSymbology(builder, feat, opts);\r\n if (feat === FeatureMode.Overrides) {\r\n addShaderFlags(builder);\r\n addVaryingColor(builder, \"return vec4(-1.0, -1.0, -1.0, -1.0);\");\r\n applyFragmentFeatureColor = mixFeatureColor;\r\n addColorOverrideMix(builder.frag);\r\n }\r\n const computeFragmentBaseColor = baseColorFromTextures(textureCount, applyFragmentFeatureColor);\r\n\r\n frag.addFunction(applyTexture);\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\r\n frag.addFunction(addUInt32s);\r\n builder.frag.addUniform(\"u_baseColor\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_baseColor\", (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const baseColor = (realityMesh.baseColor ? realityMesh.baseColor : ColorDef.create(0xff000000)).colors;\r\n uniform.setUniform4fv([baseColor.r / 255, baseColor.g / 255, baseColor.b / 255, 1 - baseColor.t / 255]);\r\n });\r\n });\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\r\n if (!flags.isTranslucent) {\r\n if (FeatureMode.None !== feat) {\r\n if (flags.isClassified)\r\n addFeaturePlanarClassifier(builder);\r\n\r\n builder.frag.addFunction(decodeDepthRgb);\r\n if (flags.isClassified)\r\n addPickBufferOutputs(builder.frag);\r\n else\r\n addAltPickBufferOutputs(builder.frag);\r\n }\r\n }\r\n\r\n addTextures(builder, textureCount);\r\n\r\n if (IsThematic.Yes === flags.isThematic)\r\n addThematicToRealityMesh(builder, gradientTextureUnit);\r\n\r\n if (flags.isWiremesh)\r\n addWiremesh(builder);\r\n\r\n return builder;\r\n}\r\n\r\n"]}
@@ -41,7 +41,7 @@ function createScreenSpaceEffectProgramBuilder(params) {
41
41
  texture.bindSampler(uniform, RenderFlags_1.TextureUnit.Zero);
42
42
  });
43
43
  });
44
- builder.frag.set(15 /* AssignFragData */, Fragment_1.assignFragColor);
44
+ builder.frag.set(16 /* AssignFragData */, Fragment_1.assignFragColor);
45
45
  if (!params.source.sampleSourcePixel) {
46
46
  builder.frag.set(1 /* ComputeBaseColor */, computeBaseColor);
47
47
  }
@@ -21,7 +21,7 @@ const scratchRotMatrix = new Matrix_1.Matrix3();
21
21
  function createSkyBoxProgram(context) {
22
22
  const prog = new ShaderBuilder_1.ProgramBuilder(AttributeMap_1.AttributeMap.findAttributeMap(undefined, false));
23
23
  prog.frag.set(1 /* ComputeBaseColor */, computeBaseColor);
24
- prog.frag.set(15 /* AssignFragData */, assignFragData);
24
+ prog.frag.set(16 /* AssignFragData */, assignFragData);
25
25
  prog.vert.set(9 /* ComputePosition */, computePosition);
26
26
  prog.vert.addUniform("u_rot", 6 /* Mat3 */, (prg) => {
27
27
  prg.addGraphicUniform("u_rot", (uniform, params) => {
@@ -217,7 +217,7 @@ function createSkySphereProgram(context, isGradient) {
217
217
  });
218
218
  frag.set(1 /* ComputeBaseColor */, computeSkySphereColorTexture);
219
219
  }
220
- frag.set(15 /* AssignFragData */, Fragment_1.assignFragColor);
220
+ frag.set(16 /* AssignFragData */, Fragment_1.assignFragColor);
221
221
  builder.vert.headerComment = `//!V! SkySphere-${isGradient ? "Gradient" : "Texture"}`;
222
222
  builder.frag.headerComment = `//!F! SkySphere-${isGradient ? "Gradient" : "Texture"}`;
223
223
  return builder.buildProgram(context);
@@ -1 +1 @@
1
- {"version":3,"file":"Surface.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Surface.ts"],"names":[],"mappings":"AAIA;;GAEG;AAMH,OAAO,EAA2B,cAAc,EAA0E,MAAM,kBAAkB,CAAC;AAEnJ,OAAO,EAAe,UAAU,EAAE,YAAY,EAAE,WAAW,EAAgB,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAoOjI,gBAAgB;AAChB,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,GAAG,cAAc,CAcrG;AAgFD,gBAAgB;AAChB,eAAO,MAAM,eAAe,+SAW3B,CAAC;AA0DF,gBAAgB;AAChB,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,OAAO,EAAE,gBAAgB,EAAE,OAAO,QAuBhH;AAwBD,gBAAgB;AAChB,wBAAgB,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,UAAQ,QAmCrH;AAED,eAAO,MAAM,wBAAwB,mWAQpC,CAAC;AAOF,gBAAgB;AAChB,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CA4E1E;AAED,wBAAgB,oCAAoC,CAAC,OAAO,EAAE,cAAc,QAgB3E"}
1
+ {"version":3,"file":"Surface.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Surface.ts"],"names":[],"mappings":"AAIA;;GAEG;AAMH,OAAO,EAA2B,cAAc,EAA0E,MAAM,kBAAkB,CAAC;AAEnJ,OAAO,EAAe,UAAU,EAAE,YAAY,EAAE,WAAW,EAAgB,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAqOjI,gBAAgB;AAChB,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,GAAG,cAAc,CAcrG;AAgFD,gBAAgB;AAChB,eAAO,MAAM,eAAe,+SAW3B,CAAC;AA0DF,gBAAgB;AAChB,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,OAAO,EAAE,gBAAgB,EAAE,OAAO,QAuBhH;AAwBD,gBAAgB;AAChB,wBAAgB,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,UAAQ,QAmCrH;AAED,eAAO,MAAM,wBAAwB,mWAQpC,CAAC;AAOF,gBAAgB;AAChB,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CA+E1E;AAED,wBAAgB,oCAAoC,CAAC,OAAO,EAAE,cAAc,QAgB3E"}