@itwin/core-frontend 5.2.0-dev.1 → 5.2.0-dev.10

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 (616) hide show
  1. package/CHANGELOG.md +43 -1
  2. package/lib/cjs/BackgroundMapGeometry.js +13 -13
  3. package/lib/cjs/BackgroundMapGeometry.js.map +1 -1
  4. package/lib/cjs/BriefcaseConnection.d.ts.map +1 -1
  5. package/lib/cjs/BriefcaseConnection.js +2 -2
  6. package/lib/cjs/BriefcaseConnection.js.map +1 -1
  7. package/lib/cjs/CheckpointConnection.d.ts.map +1 -1
  8. package/lib/cjs/CheckpointConnection.js +3 -3
  9. package/lib/cjs/CheckpointConnection.js.map +1 -1
  10. package/lib/cjs/ContextRealityModelState.js.map +1 -1
  11. package/lib/cjs/ElementLocateManager.d.ts.map +1 -1
  12. package/lib/cjs/ElementLocateManager.js +7 -6
  13. package/lib/cjs/ElementLocateManager.js.map +1 -1
  14. package/lib/cjs/EmphasizeElements.d.ts.map +1 -1
  15. package/lib/cjs/EmphasizeElements.js +3 -1
  16. package/lib/cjs/EmphasizeElements.js.map +1 -1
  17. package/lib/cjs/EnvironmentDecorations.d.ts.map +1 -1
  18. package/lib/cjs/EnvironmentDecorations.js +4 -0
  19. package/lib/cjs/EnvironmentDecorations.js.map +1 -1
  20. package/lib/cjs/FrustumAnimator.d.ts.map +1 -1
  21. package/lib/cjs/FrustumAnimator.js +3 -2
  22. package/lib/cjs/FrustumAnimator.js.map +1 -1
  23. package/lib/cjs/GlobeAnimator.d.ts.map +1 -1
  24. package/lib/cjs/GlobeAnimator.js +7 -6
  25. package/lib/cjs/GlobeAnimator.js.map +1 -1
  26. package/lib/cjs/HitDetail.d.ts.map +1 -1
  27. package/lib/cjs/HitDetail.js +12 -7
  28. package/lib/cjs/HitDetail.js.map +1 -1
  29. package/lib/cjs/IModelApp.d.ts.map +1 -1
  30. package/lib/cjs/IModelApp.js +2 -1
  31. package/lib/cjs/IModelApp.js.map +1 -1
  32. package/lib/cjs/IModelConnection.d.ts +4 -0
  33. package/lib/cjs/IModelConnection.d.ts.map +1 -1
  34. package/lib/cjs/IModelConnection.js +156 -14
  35. package/lib/cjs/IModelConnection.js.map +1 -1
  36. package/lib/cjs/IpcApp.d.ts.map +1 -1
  37. package/lib/cjs/IpcApp.js +1 -1
  38. package/lib/cjs/IpcApp.js.map +1 -1
  39. package/lib/cjs/LinePlaneIntersect.d.ts.map +1 -1
  40. package/lib/cjs/LinePlaneIntersect.js +2 -0
  41. package/lib/cjs/LinePlaneIntersect.js.map +1 -1
  42. package/lib/cjs/LocalhostIpcApp.d.ts.map +1 -1
  43. package/lib/cjs/LocalhostIpcApp.js +2 -1
  44. package/lib/cjs/LocalhostIpcApp.js.map +1 -1
  45. package/lib/cjs/Marker.d.ts.map +1 -1
  46. package/lib/cjs/Marker.js +4 -3
  47. package/lib/cjs/Marker.js.map +1 -1
  48. package/lib/cjs/ModelState.d.ts.map +1 -1
  49. package/lib/cjs/ModelState.js +2 -2
  50. package/lib/cjs/ModelState.js.map +1 -1
  51. package/lib/cjs/NativeApp.d.ts.map +1 -1
  52. package/lib/cjs/NativeApp.js +5 -4
  53. package/lib/cjs/NativeApp.js.map +1 -1
  54. package/lib/cjs/NativeAppLogger.d.ts.map +1 -1
  55. package/lib/cjs/NativeAppLogger.js +1 -0
  56. package/lib/cjs/NativeAppLogger.js.map +1 -1
  57. package/lib/cjs/PlanarClipMaskState.js +3 -3
  58. package/lib/cjs/PlanarClipMaskState.js.map +1 -1
  59. package/lib/cjs/SelectionSet.d.ts.map +1 -1
  60. package/lib/cjs/SelectionSet.js +1 -0
  61. package/lib/cjs/SelectionSet.js.map +1 -1
  62. package/lib/cjs/SheetViewState.d.ts.map +1 -1
  63. package/lib/cjs/SheetViewState.js +5 -5
  64. package/lib/cjs/SheetViewState.js.map +1 -1
  65. package/lib/cjs/SpatialViewState.d.ts.map +1 -1
  66. package/lib/cjs/SpatialViewState.js +1 -1
  67. package/lib/cjs/SpatialViewState.js.map +1 -1
  68. package/lib/cjs/Sprites.js +2 -2
  69. package/lib/cjs/Sprites.js.map +1 -1
  70. package/lib/cjs/TentativePoint.d.ts.map +1 -1
  71. package/lib/cjs/TentativePoint.js +10 -9
  72. package/lib/cjs/TentativePoint.js.map +1 -1
  73. package/lib/cjs/ViewCreator2d.js +1 -1
  74. package/lib/cjs/ViewCreator2d.js.map +1 -1
  75. package/lib/cjs/ViewCreator3d.js +1 -1
  76. package/lib/cjs/ViewCreator3d.js.map +1 -1
  77. package/lib/cjs/ViewPose.d.ts.map +1 -1
  78. package/lib/cjs/ViewPose.js +4 -1
  79. package/lib/cjs/ViewPose.js.map +1 -1
  80. package/lib/cjs/ViewState.d.ts.map +1 -1
  81. package/lib/cjs/ViewState.js +17 -12
  82. package/lib/cjs/ViewState.js.map +1 -1
  83. package/lib/cjs/ViewingSpace.d.ts.map +1 -1
  84. package/lib/cjs/ViewingSpace.js +2 -0
  85. package/lib/cjs/ViewingSpace.js.map +1 -1
  86. package/lib/cjs/Viewport.d.ts.map +1 -1
  87. package/lib/cjs/Viewport.js +17 -10
  88. package/lib/cjs/Viewport.js.map +1 -1
  89. package/lib/cjs/common/ImageUtil.d.ts.map +1 -1
  90. package/lib/cjs/common/ImageUtil.js +2 -1
  91. package/lib/cjs/common/ImageUtil.js.map +1 -1
  92. package/lib/cjs/common/internal/render/GeometryAccumulator.d.ts.map +1 -1
  93. package/lib/cjs/common/internal/render/GeometryAccumulator.js +4 -3
  94. package/lib/cjs/common/internal/render/GeometryAccumulator.js.map +1 -1
  95. package/lib/cjs/common/internal/render/InstancedGraphicPropsBuilder.d.ts.map +1 -1
  96. package/lib/cjs/common/internal/render/InstancedGraphicPropsBuilder.js +2 -0
  97. package/lib/cjs/common/internal/render/InstancedGraphicPropsBuilder.js.map +1 -1
  98. package/lib/cjs/common/internal/render/MeshBuilder.js +1 -1
  99. package/lib/cjs/common/internal/render/MeshBuilder.js.map +1 -1
  100. package/lib/cjs/common/internal/render/VertexTableBuilder.d.ts.map +1 -1
  101. package/lib/cjs/common/internal/render/VertexTableBuilder.js +16 -7
  102. package/lib/cjs/common/internal/render/VertexTableBuilder.js.map +1 -1
  103. package/lib/cjs/extension/ExtensionAdmin.js +2 -2
  104. package/lib/cjs/extension/ExtensionAdmin.js.map +1 -1
  105. package/lib/cjs/internal/GoogleMapsDecorator.js +1 -1
  106. package/lib/cjs/internal/GoogleMapsDecorator.js.map +1 -1
  107. package/lib/cjs/internal/ScriptUtils.js +1 -0
  108. package/lib/cjs/internal/ScriptUtils.js.map +1 -1
  109. package/lib/cjs/internal/render/UpsampleRealityMeshParams.d.ts.map +1 -1
  110. package/lib/cjs/internal/render/UpsampleRealityMeshParams.js +2 -1
  111. package/lib/cjs/internal/render/UpsampleRealityMeshParams.js.map +1 -1
  112. package/lib/cjs/internal/render/webgl/AtmosphereUniforms.d.ts.map +1 -1
  113. package/lib/cjs/internal/render/webgl/AtmosphereUniforms.js +7 -2
  114. package/lib/cjs/internal/render/webgl/AtmosphereUniforms.js.map +1 -1
  115. package/lib/cjs/internal/render/webgl/AttributeBuffers.d.ts.map +1 -1
  116. package/lib/cjs/internal/render/webgl/AttributeBuffers.js +5 -3
  117. package/lib/cjs/internal/render/webgl/AttributeBuffers.js.map +1 -1
  118. package/lib/cjs/internal/render/webgl/AttributeMap.d.ts.map +1 -1
  119. package/lib/cjs/internal/render/webgl/AttributeMap.js +2 -0
  120. package/lib/cjs/internal/render/webgl/AttributeMap.js.map +1 -1
  121. package/lib/cjs/internal/render/webgl/BackgroundMapDrape.d.ts.map +1 -1
  122. package/lib/cjs/internal/render/webgl/BackgroundMapDrape.js +2 -2
  123. package/lib/cjs/internal/render/webgl/BackgroundMapDrape.js.map +1 -1
  124. package/lib/cjs/internal/render/webgl/BatchUniforms.js +1 -1
  125. package/lib/cjs/internal/render/webgl/BatchUniforms.js.map +1 -1
  126. package/lib/cjs/internal/render/webgl/BranchState.d.ts.map +1 -1
  127. package/lib/cjs/internal/render/webgl/BranchState.js +2 -1
  128. package/lib/cjs/internal/render/webgl/BranchState.js.map +1 -1
  129. package/lib/cjs/internal/render/webgl/BranchUniforms.js +2 -2
  130. package/lib/cjs/internal/render/webgl/BranchUniforms.js.map +1 -1
  131. package/lib/cjs/internal/render/webgl/CachedGeometry.d.ts.map +1 -1
  132. package/lib/cjs/internal/render/webgl/CachedGeometry.js +2 -2
  133. package/lib/cjs/internal/render/webgl/CachedGeometry.js.map +1 -1
  134. package/lib/cjs/internal/render/webgl/ClipStack.js +1 -1
  135. package/lib/cjs/internal/render/webgl/ClipStack.js.map +1 -1
  136. package/lib/cjs/internal/render/webgl/ColorInfo.js +1 -1
  137. package/lib/cjs/internal/render/webgl/ColorInfo.js.map +1 -1
  138. package/lib/cjs/internal/render/webgl/Contours.js +3 -3
  139. package/lib/cjs/internal/render/webgl/Contours.js.map +1 -1
  140. package/lib/cjs/internal/render/webgl/EDL.js +18 -18
  141. package/lib/cjs/internal/render/webgl/EDL.js.map +1 -1
  142. package/lib/cjs/internal/render/webgl/FeatureOverrides.js +4 -4
  143. package/lib/cjs/internal/render/webgl/FeatureOverrides.js.map +1 -1
  144. package/lib/cjs/internal/render/webgl/FrameBuffer.js +3 -3
  145. package/lib/cjs/internal/render/webgl/FrameBuffer.js.map +1 -1
  146. package/lib/cjs/internal/render/webgl/FrustumUniforms.d.ts.map +1 -1
  147. package/lib/cjs/internal/render/webgl/FrustumUniforms.js +2 -1
  148. package/lib/cjs/internal/render/webgl/FrustumUniforms.js.map +1 -1
  149. package/lib/cjs/internal/render/webgl/GLTimer.d.ts.map +1 -1
  150. package/lib/cjs/internal/render/webgl/GLTimer.js +2 -0
  151. package/lib/cjs/internal/render/webgl/GLTimer.js.map +1 -1
  152. package/lib/cjs/internal/render/webgl/MapLayerParams.js +2 -2
  153. package/lib/cjs/internal/render/webgl/MapLayerParams.js.map +1 -1
  154. package/lib/cjs/internal/render/webgl/MeshData.js +2 -2
  155. package/lib/cjs/internal/render/webgl/MeshData.js.map +1 -1
  156. package/lib/cjs/internal/render/webgl/PerformanceMetrics.js +1 -1
  157. package/lib/cjs/internal/render/webgl/PerformanceMetrics.js.map +1 -1
  158. package/lib/cjs/internal/render/webgl/PlanarClassifier.d.ts.map +1 -1
  159. package/lib/cjs/internal/render/webgl/PlanarClassifier.js +7 -7
  160. package/lib/cjs/internal/render/webgl/PlanarClassifier.js.map +1 -1
  161. package/lib/cjs/internal/render/webgl/PlanarGrid.js +1 -1
  162. package/lib/cjs/internal/render/webgl/PlanarGrid.js.map +1 -1
  163. package/lib/cjs/internal/render/webgl/PlanarTextureProjection.d.ts +0 -3
  164. package/lib/cjs/internal/render/webgl/PlanarTextureProjection.d.ts.map +1 -1
  165. package/lib/cjs/internal/render/webgl/PlanarTextureProjection.js +6 -5
  166. package/lib/cjs/internal/render/webgl/PlanarTextureProjection.js.map +1 -1
  167. package/lib/cjs/internal/render/webgl/PointCloud.js +1 -1
  168. package/lib/cjs/internal/render/webgl/PointCloud.js.map +1 -1
  169. package/lib/cjs/internal/render/webgl/RealityMesh.js +1 -1
  170. package/lib/cjs/internal/render/webgl/RealityMesh.js.map +1 -1
  171. package/lib/cjs/internal/render/webgl/RenderBuffer.js +2 -2
  172. package/lib/cjs/internal/render/webgl/RenderBuffer.js.map +1 -1
  173. package/lib/cjs/internal/render/webgl/SceneCompositor.d.ts.map +1 -1
  174. package/lib/cjs/internal/render/webgl/SceneCompositor.js +115 -85
  175. package/lib/cjs/internal/render/webgl/SceneCompositor.js.map +1 -1
  176. package/lib/cjs/internal/render/webgl/ScratchDrawParams.d.ts.map +1 -1
  177. package/lib/cjs/internal/render/webgl/ScratchDrawParams.js +11 -10
  178. package/lib/cjs/internal/render/webgl/ScratchDrawParams.js.map +1 -1
  179. package/lib/cjs/internal/render/webgl/ScreenSpaceEffect.js +3 -3
  180. package/lib/cjs/internal/render/webgl/ScreenSpaceEffect.js.map +1 -1
  181. package/lib/cjs/internal/render/webgl/ShaderProgram.js +3 -3
  182. package/lib/cjs/internal/render/webgl/ShaderProgram.js.map +1 -1
  183. package/lib/cjs/internal/render/webgl/ShadowUniforms.d.ts.map +1 -1
  184. package/lib/cjs/internal/render/webgl/ShadowUniforms.js +2 -1
  185. package/lib/cjs/internal/render/webgl/ShadowUniforms.js.map +1 -1
  186. package/lib/cjs/internal/render/webgl/SolarShadowMap.d.ts.map +1 -1
  187. package/lib/cjs/internal/render/webgl/SolarShadowMap.js +6 -4
  188. package/lib/cjs/internal/render/webgl/SolarShadowMap.js.map +1 -1
  189. package/lib/cjs/internal/render/webgl/System.d.ts.map +1 -1
  190. package/lib/cjs/internal/render/webgl/System.js +1 -1
  191. package/lib/cjs/internal/render/webgl/System.js.map +1 -1
  192. package/lib/cjs/internal/render/webgl/Target.d.ts.map +1 -1
  193. package/lib/cjs/internal/render/webgl/Target.js +10 -7
  194. package/lib/cjs/internal/render/webgl/Target.js.map +1 -1
  195. package/lib/cjs/internal/render/webgl/Texture.d.ts.map +1 -1
  196. package/lib/cjs/internal/render/webgl/Texture.js +10 -8
  197. package/lib/cjs/internal/render/webgl/Texture.js.map +1 -1
  198. package/lib/cjs/internal/render/webgl/glsl/Animation.d.ts.map +1 -1
  199. package/lib/cjs/internal/render/webgl/glsl/Animation.js +4 -2
  200. package/lib/cjs/internal/render/webgl/glsl/Animation.js.map +1 -1
  201. package/lib/cjs/internal/render/webgl/glsl/Color.d.ts.map +1 -1
  202. package/lib/cjs/internal/render/webgl/glsl/Color.js +2 -1
  203. package/lib/cjs/internal/render/webgl/glsl/Color.js.map +1 -1
  204. package/lib/cjs/internal/render/webgl/glsl/Composite.js +1 -1
  205. package/lib/cjs/internal/render/webgl/glsl/Composite.js.map +1 -1
  206. package/lib/cjs/internal/render/webgl/glsl/CopyStencil.d.ts.map +1 -1
  207. package/lib/cjs/internal/render/webgl/glsl/CopyStencil.js +3 -2
  208. package/lib/cjs/internal/render/webgl/glsl/CopyStencil.js.map +1 -1
  209. package/lib/cjs/internal/render/webgl/glsl/PlanarClassification.js +3 -3
  210. package/lib/cjs/internal/render/webgl/glsl/PlanarClassification.js.map +1 -1
  211. package/lib/cjs/internal/render/webgl/glsl/PlanarGrid.d.ts.map +1 -1
  212. package/lib/cjs/internal/render/webgl/glsl/PlanarGrid.js +4 -3
  213. package/lib/cjs/internal/render/webgl/glsl/PlanarGrid.js.map +1 -1
  214. package/lib/cjs/internal/render/webgl/glsl/RealityMesh.js +8 -8
  215. package/lib/cjs/internal/render/webgl/glsl/RealityMesh.js.map +1 -1
  216. package/lib/cjs/internal/render/webgl/glsl/Surface.js +10 -10
  217. package/lib/cjs/internal/render/webgl/glsl/Surface.js.map +1 -1
  218. package/lib/cjs/internal/render/webgl/glsl/Vertex.js +2 -2
  219. package/lib/cjs/internal/render/webgl/glsl/Vertex.js.map +1 -1
  220. package/lib/cjs/internal/tile/B3dmReader.d.ts.map +1 -1
  221. package/lib/cjs/internal/tile/B3dmReader.js +1 -1
  222. package/lib/cjs/internal/tile/B3dmReader.js.map +1 -1
  223. package/lib/cjs/internal/tile/DynamicIModelTile.js +1 -0
  224. package/lib/cjs/internal/tile/DynamicIModelTile.js.map +1 -1
  225. package/lib/cjs/internal/tile/FetchCloudStorage.js +1 -1
  226. package/lib/cjs/internal/tile/FetchCloudStorage.js.map +1 -1
  227. package/lib/cjs/internal/tile/LRUTileList.d.ts.map +1 -1
  228. package/lib/cjs/internal/tile/LRUTileList.js +4 -0
  229. package/lib/cjs/internal/tile/LRUTileList.js.map +1 -1
  230. package/lib/cjs/internal/tile/LayerTileTreeReferenceHandler.d.ts.map +1 -1
  231. package/lib/cjs/internal/tile/LayerTileTreeReferenceHandler.js +2 -1
  232. package/lib/cjs/internal/tile/LayerTileTreeReferenceHandler.js.map +1 -1
  233. package/lib/cjs/internal/tile/OPCFormatInterpreter.js +4 -4
  234. package/lib/cjs/internal/tile/OPCFormatInterpreter.js.map +1 -1
  235. package/lib/cjs/internal/tile/OrbitGtTileTree.d.ts.map +1 -1
  236. package/lib/cjs/internal/tile/OrbitGtTileTree.js +2 -2
  237. package/lib/cjs/internal/tile/OrbitGtTileTree.js.map +1 -1
  238. package/lib/cjs/internal/tile/RealityModelTileTree.d.ts.map +1 -1
  239. package/lib/cjs/internal/tile/RealityModelTileTree.js +3 -3
  240. package/lib/cjs/internal/tile/RealityModelTileTree.js.map +1 -1
  241. package/lib/cjs/internal/tile/RealityTileLoader.d.ts.map +1 -1
  242. package/lib/cjs/internal/tile/RealityTileLoader.js +3 -0
  243. package/lib/cjs/internal/tile/RealityTileLoader.js.map +1 -1
  244. package/lib/cjs/internal/tile/ThreeDTileFormatInterpreter.js +3 -3
  245. package/lib/cjs/internal/tile/ThreeDTileFormatInterpreter.js.map +1 -1
  246. package/lib/cjs/internal/tile/TileUserSet.d.ts.map +1 -1
  247. package/lib/cjs/internal/tile/TileUserSet.js +4 -0
  248. package/lib/cjs/internal/tile/TileUserSet.js.map +1 -1
  249. package/lib/cjs/internal/tile/map/ArcGISTileMap.js +1 -1
  250. package/lib/cjs/internal/tile/map/ArcGISTileMap.js.map +1 -1
  251. package/lib/cjs/internal/tile/map/ArcGisUtilities.d.ts.map +1 -1
  252. package/lib/cjs/internal/tile/map/ArcGisUtilities.js +4 -0
  253. package/lib/cjs/internal/tile/map/ArcGisUtilities.js.map +1 -1
  254. package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  255. package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +3 -1
  256. package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  257. package/lib/cjs/internal/tile/map/ImageryProviders/BingImageryProvider.js +2 -2
  258. package/lib/cjs/internal/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  259. package/lib/cjs/internal/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +1 -1
  260. package/lib/cjs/internal/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  261. package/lib/cjs/internal/tile/map/MapTileAvailability.d.ts.map +1 -1
  262. package/lib/cjs/internal/tile/map/MapTileAvailability.js +5 -2
  263. package/lib/cjs/internal/tile/map/MapTileAvailability.js.map +1 -1
  264. package/lib/cjs/internal/tile/map/WmtsCapabilities.d.ts.map +1 -1
  265. package/lib/cjs/internal/tile/map/WmtsCapabilities.js +3 -2
  266. package/lib/cjs/internal/tile/map/WmtsCapabilities.js.map +1 -1
  267. package/lib/cjs/properties/FormattedQuantityDescription.d.ts.map +1 -1
  268. package/lib/cjs/properties/FormattedQuantityDescription.js +2 -0
  269. package/lib/cjs/properties/FormattedQuantityDescription.js.map +1 -1
  270. package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts.map +1 -1
  271. package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js +2 -0
  272. package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
  273. package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
  274. package/lib/cjs/quantity-formatting/QuantityFormatter.js +7 -4
  275. package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
  276. package/lib/cjs/tile/GltfReader.d.ts +5 -2
  277. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  278. package/lib/cjs/tile/GltfReader.js +54 -16
  279. package/lib/cjs/tile/GltfReader.js.map +1 -1
  280. package/lib/cjs/tile/RealityTile.d.ts.map +1 -1
  281. package/lib/cjs/tile/RealityTile.js +2 -2
  282. package/lib/cjs/tile/RealityTile.js.map +1 -1
  283. package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
  284. package/lib/cjs/tile/RealityTileTree.js +5 -5
  285. package/lib/cjs/tile/RealityTileTree.js.map +1 -1
  286. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  287. package/lib/cjs/tile/TileDrawArgs.d.ts.map +1 -1
  288. package/lib/cjs/tile/TileDrawArgs.js +2 -1
  289. package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
  290. package/lib/cjs/tile/map/ImageryTileTree.js +1 -1
  291. package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
  292. package/lib/cjs/tile/map/MapLayerFormatRegistry.js +1 -1
  293. package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
  294. package/lib/cjs/tile/map/MapLayerSources.d.ts.map +1 -1
  295. package/lib/cjs/tile/map/MapLayerSources.js +9 -1
  296. package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
  297. package/lib/cjs/tile/map/MapTile.d.ts.map +1 -1
  298. package/lib/cjs/tile/map/MapTile.js +10 -8
  299. package/lib/cjs/tile/map/MapTile.js.map +1 -1
  300. package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
  301. package/lib/cjs/tile/map/MapTileTree.js +8 -7
  302. package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
  303. package/lib/cjs/tile/map/MapTilingScheme.d.ts.map +1 -1
  304. package/lib/cjs/tile/map/MapTilingScheme.js +2 -1
  305. package/lib/cjs/tile/map/MapTilingScheme.js.map +1 -1
  306. package/lib/cjs/tools/Tool.js +1 -1
  307. package/lib/cjs/tools/Tool.js.map +1 -1
  308. package/lib/esm/BackgroundMapGeometry.js +14 -14
  309. package/lib/esm/BackgroundMapGeometry.js.map +1 -1
  310. package/lib/esm/BriefcaseConnection.d.ts.map +1 -1
  311. package/lib/esm/BriefcaseConnection.js +2 -2
  312. package/lib/esm/BriefcaseConnection.js.map +1 -1
  313. package/lib/esm/CheckpointConnection.d.ts.map +1 -1
  314. package/lib/esm/CheckpointConnection.js +4 -4
  315. package/lib/esm/CheckpointConnection.js.map +1 -1
  316. package/lib/esm/ContextRealityModelState.js.map +1 -1
  317. package/lib/esm/ElementLocateManager.d.ts.map +1 -1
  318. package/lib/esm/ElementLocateManager.js +8 -7
  319. package/lib/esm/ElementLocateManager.js.map +1 -1
  320. package/lib/esm/EmphasizeElements.d.ts.map +1 -1
  321. package/lib/esm/EmphasizeElements.js +3 -1
  322. package/lib/esm/EmphasizeElements.js.map +1 -1
  323. package/lib/esm/EnvironmentDecorations.d.ts.map +1 -1
  324. package/lib/esm/EnvironmentDecorations.js +4 -0
  325. package/lib/esm/EnvironmentDecorations.js.map +1 -1
  326. package/lib/esm/FrustumAnimator.d.ts.map +1 -1
  327. package/lib/esm/FrustumAnimator.js +3 -2
  328. package/lib/esm/FrustumAnimator.js.map +1 -1
  329. package/lib/esm/GlobeAnimator.d.ts.map +1 -1
  330. package/lib/esm/GlobeAnimator.js +7 -6
  331. package/lib/esm/GlobeAnimator.js.map +1 -1
  332. package/lib/esm/HitDetail.d.ts.map +1 -1
  333. package/lib/esm/HitDetail.js +12 -7
  334. package/lib/esm/HitDetail.js.map +1 -1
  335. package/lib/esm/IModelApp.d.ts.map +1 -1
  336. package/lib/esm/IModelApp.js +4 -3
  337. package/lib/esm/IModelApp.js.map +1 -1
  338. package/lib/esm/IModelConnection.d.ts +4 -0
  339. package/lib/esm/IModelConnection.d.ts.map +1 -1
  340. package/lib/esm/IModelConnection.js +158 -16
  341. package/lib/esm/IModelConnection.js.map +1 -1
  342. package/lib/esm/IpcApp.d.ts.map +1 -1
  343. package/lib/esm/IpcApp.js +2 -2
  344. package/lib/esm/IpcApp.js.map +1 -1
  345. package/lib/esm/LinePlaneIntersect.d.ts.map +1 -1
  346. package/lib/esm/LinePlaneIntersect.js +2 -0
  347. package/lib/esm/LinePlaneIntersect.js.map +1 -1
  348. package/lib/esm/LocalhostIpcApp.d.ts.map +1 -1
  349. package/lib/esm/LocalhostIpcApp.js +2 -1
  350. package/lib/esm/LocalhostIpcApp.js.map +1 -1
  351. package/lib/esm/Marker.d.ts.map +1 -1
  352. package/lib/esm/Marker.js +5 -4
  353. package/lib/esm/Marker.js.map +1 -1
  354. package/lib/esm/ModelState.d.ts.map +1 -1
  355. package/lib/esm/ModelState.js +3 -3
  356. package/lib/esm/ModelState.js.map +1 -1
  357. package/lib/esm/NativeApp.d.ts.map +1 -1
  358. package/lib/esm/NativeApp.js +5 -4
  359. package/lib/esm/NativeApp.js.map +1 -1
  360. package/lib/esm/NativeAppLogger.d.ts.map +1 -1
  361. package/lib/esm/NativeAppLogger.js +1 -0
  362. package/lib/esm/NativeAppLogger.js.map +1 -1
  363. package/lib/esm/PlanarClipMaskState.js +3 -3
  364. package/lib/esm/PlanarClipMaskState.js.map +1 -1
  365. package/lib/esm/SelectionSet.d.ts.map +1 -1
  366. package/lib/esm/SelectionSet.js +2 -1
  367. package/lib/esm/SelectionSet.js.map +1 -1
  368. package/lib/esm/SheetViewState.d.ts.map +1 -1
  369. package/lib/esm/SheetViewState.js +6 -6
  370. package/lib/esm/SheetViewState.js.map +1 -1
  371. package/lib/esm/SpatialViewState.d.ts.map +1 -1
  372. package/lib/esm/SpatialViewState.js +2 -2
  373. package/lib/esm/SpatialViewState.js.map +1 -1
  374. package/lib/esm/Sprites.js +2 -2
  375. package/lib/esm/Sprites.js.map +1 -1
  376. package/lib/esm/TentativePoint.d.ts.map +1 -1
  377. package/lib/esm/TentativePoint.js +10 -9
  378. package/lib/esm/TentativePoint.js.map +1 -1
  379. package/lib/esm/ViewCreator2d.js +1 -1
  380. package/lib/esm/ViewCreator2d.js.map +1 -1
  381. package/lib/esm/ViewCreator3d.js +1 -1
  382. package/lib/esm/ViewCreator3d.js.map +1 -1
  383. package/lib/esm/ViewPose.d.ts.map +1 -1
  384. package/lib/esm/ViewPose.js +4 -1
  385. package/lib/esm/ViewPose.js.map +1 -1
  386. package/lib/esm/ViewState.d.ts.map +1 -1
  387. package/lib/esm/ViewState.js +18 -13
  388. package/lib/esm/ViewState.js.map +1 -1
  389. package/lib/esm/ViewingSpace.d.ts.map +1 -1
  390. package/lib/esm/ViewingSpace.js +2 -0
  391. package/lib/esm/ViewingSpace.js.map +1 -1
  392. package/lib/esm/Viewport.d.ts.map +1 -1
  393. package/lib/esm/Viewport.js +18 -11
  394. package/lib/esm/Viewport.js.map +1 -1
  395. package/lib/esm/common/ImageUtil.d.ts.map +1 -1
  396. package/lib/esm/common/ImageUtil.js +2 -1
  397. package/lib/esm/common/ImageUtil.js.map +1 -1
  398. package/lib/esm/common/internal/render/GeometryAccumulator.d.ts.map +1 -1
  399. package/lib/esm/common/internal/render/GeometryAccumulator.js +4 -3
  400. package/lib/esm/common/internal/render/GeometryAccumulator.js.map +1 -1
  401. package/lib/esm/common/internal/render/InstancedGraphicPropsBuilder.d.ts.map +1 -1
  402. package/lib/esm/common/internal/render/InstancedGraphicPropsBuilder.js +2 -0
  403. package/lib/esm/common/internal/render/InstancedGraphicPropsBuilder.js.map +1 -1
  404. package/lib/esm/common/internal/render/MeshBuilder.js +2 -2
  405. package/lib/esm/common/internal/render/MeshBuilder.js.map +1 -1
  406. package/lib/esm/common/internal/render/VertexTableBuilder.d.ts.map +1 -1
  407. package/lib/esm/common/internal/render/VertexTableBuilder.js +17 -8
  408. package/lib/esm/common/internal/render/VertexTableBuilder.js.map +1 -1
  409. package/lib/esm/extension/ExtensionAdmin.js +2 -2
  410. package/lib/esm/extension/ExtensionAdmin.js.map +1 -1
  411. package/lib/esm/internal/GoogleMapsDecorator.js +1 -1
  412. package/lib/esm/internal/GoogleMapsDecorator.js.map +1 -1
  413. package/lib/esm/internal/ScriptUtils.js +1 -0
  414. package/lib/esm/internal/ScriptUtils.js.map +1 -1
  415. package/lib/esm/internal/render/UpsampleRealityMeshParams.d.ts.map +1 -1
  416. package/lib/esm/internal/render/UpsampleRealityMeshParams.js +2 -1
  417. package/lib/esm/internal/render/UpsampleRealityMeshParams.js.map +1 -1
  418. package/lib/esm/internal/render/webgl/AtmosphereUniforms.d.ts.map +1 -1
  419. package/lib/esm/internal/render/webgl/AtmosphereUniforms.js +7 -2
  420. package/lib/esm/internal/render/webgl/AtmosphereUniforms.js.map +1 -1
  421. package/lib/esm/internal/render/webgl/AttributeBuffers.d.ts.map +1 -1
  422. package/lib/esm/internal/render/webgl/AttributeBuffers.js +5 -3
  423. package/lib/esm/internal/render/webgl/AttributeBuffers.js.map +1 -1
  424. package/lib/esm/internal/render/webgl/AttributeMap.d.ts.map +1 -1
  425. package/lib/esm/internal/render/webgl/AttributeMap.js +2 -0
  426. package/lib/esm/internal/render/webgl/AttributeMap.js.map +1 -1
  427. package/lib/esm/internal/render/webgl/BackgroundMapDrape.d.ts.map +1 -1
  428. package/lib/esm/internal/render/webgl/BackgroundMapDrape.js +3 -3
  429. package/lib/esm/internal/render/webgl/BackgroundMapDrape.js.map +1 -1
  430. package/lib/esm/internal/render/webgl/BatchUniforms.js +1 -1
  431. package/lib/esm/internal/render/webgl/BatchUniforms.js.map +1 -1
  432. package/lib/esm/internal/render/webgl/BranchState.d.ts.map +1 -1
  433. package/lib/esm/internal/render/webgl/BranchState.js +2 -1
  434. package/lib/esm/internal/render/webgl/BranchState.js.map +1 -1
  435. package/lib/esm/internal/render/webgl/BranchUniforms.js +3 -3
  436. package/lib/esm/internal/render/webgl/BranchUniforms.js.map +1 -1
  437. package/lib/esm/internal/render/webgl/CachedGeometry.d.ts.map +1 -1
  438. package/lib/esm/internal/render/webgl/CachedGeometry.js +3 -3
  439. package/lib/esm/internal/render/webgl/CachedGeometry.js.map +1 -1
  440. package/lib/esm/internal/render/webgl/ClipStack.js +1 -1
  441. package/lib/esm/internal/render/webgl/ClipStack.js.map +1 -1
  442. package/lib/esm/internal/render/webgl/ColorInfo.js +2 -2
  443. package/lib/esm/internal/render/webgl/ColorInfo.js.map +1 -1
  444. package/lib/esm/internal/render/webgl/Contours.js +4 -4
  445. package/lib/esm/internal/render/webgl/Contours.js.map +1 -1
  446. package/lib/esm/internal/render/webgl/EDL.js +19 -19
  447. package/lib/esm/internal/render/webgl/EDL.js.map +1 -1
  448. package/lib/esm/internal/render/webgl/FeatureOverrides.js +5 -5
  449. package/lib/esm/internal/render/webgl/FeatureOverrides.js.map +1 -1
  450. package/lib/esm/internal/render/webgl/FrameBuffer.js +4 -4
  451. package/lib/esm/internal/render/webgl/FrameBuffer.js.map +1 -1
  452. package/lib/esm/internal/render/webgl/FrustumUniforms.d.ts.map +1 -1
  453. package/lib/esm/internal/render/webgl/FrustumUniforms.js +2 -1
  454. package/lib/esm/internal/render/webgl/FrustumUniforms.js.map +1 -1
  455. package/lib/esm/internal/render/webgl/GLTimer.d.ts.map +1 -1
  456. package/lib/esm/internal/render/webgl/GLTimer.js +2 -0
  457. package/lib/esm/internal/render/webgl/GLTimer.js.map +1 -1
  458. package/lib/esm/internal/render/webgl/MapLayerParams.js +3 -3
  459. package/lib/esm/internal/render/webgl/MapLayerParams.js.map +1 -1
  460. package/lib/esm/internal/render/webgl/MeshData.js +3 -3
  461. package/lib/esm/internal/render/webgl/MeshData.js.map +1 -1
  462. package/lib/esm/internal/render/webgl/PerformanceMetrics.js +1 -1
  463. package/lib/esm/internal/render/webgl/PerformanceMetrics.js.map +1 -1
  464. package/lib/esm/internal/render/webgl/PlanarClassifier.d.ts.map +1 -1
  465. package/lib/esm/internal/render/webgl/PlanarClassifier.js +8 -8
  466. package/lib/esm/internal/render/webgl/PlanarClassifier.js.map +1 -1
  467. package/lib/esm/internal/render/webgl/PlanarGrid.js +2 -2
  468. package/lib/esm/internal/render/webgl/PlanarGrid.js.map +1 -1
  469. package/lib/esm/internal/render/webgl/PlanarTextureProjection.d.ts +0 -3
  470. package/lib/esm/internal/render/webgl/PlanarTextureProjection.d.ts.map +1 -1
  471. package/lib/esm/internal/render/webgl/PlanarTextureProjection.js +6 -5
  472. package/lib/esm/internal/render/webgl/PlanarTextureProjection.js.map +1 -1
  473. package/lib/esm/internal/render/webgl/PointCloud.js +2 -2
  474. package/lib/esm/internal/render/webgl/PointCloud.js.map +1 -1
  475. package/lib/esm/internal/render/webgl/RealityMesh.js +2 -2
  476. package/lib/esm/internal/render/webgl/RealityMesh.js.map +1 -1
  477. package/lib/esm/internal/render/webgl/RenderBuffer.js +3 -3
  478. package/lib/esm/internal/render/webgl/RenderBuffer.js.map +1 -1
  479. package/lib/esm/internal/render/webgl/SceneCompositor.d.ts.map +1 -1
  480. package/lib/esm/internal/render/webgl/SceneCompositor.js +116 -86
  481. package/lib/esm/internal/render/webgl/SceneCompositor.js.map +1 -1
  482. package/lib/esm/internal/render/webgl/ScratchDrawParams.d.ts.map +1 -1
  483. package/lib/esm/internal/render/webgl/ScratchDrawParams.js +11 -10
  484. package/lib/esm/internal/render/webgl/ScratchDrawParams.js.map +1 -1
  485. package/lib/esm/internal/render/webgl/ScreenSpaceEffect.js +4 -4
  486. package/lib/esm/internal/render/webgl/ScreenSpaceEffect.js.map +1 -1
  487. package/lib/esm/internal/render/webgl/ShaderProgram.js +4 -4
  488. package/lib/esm/internal/render/webgl/ShaderProgram.js.map +1 -1
  489. package/lib/esm/internal/render/webgl/ShadowUniforms.d.ts.map +1 -1
  490. package/lib/esm/internal/render/webgl/ShadowUniforms.js +2 -1
  491. package/lib/esm/internal/render/webgl/ShadowUniforms.js.map +1 -1
  492. package/lib/esm/internal/render/webgl/SolarShadowMap.d.ts.map +1 -1
  493. package/lib/esm/internal/render/webgl/SolarShadowMap.js +7 -5
  494. package/lib/esm/internal/render/webgl/SolarShadowMap.js.map +1 -1
  495. package/lib/esm/internal/render/webgl/System.d.ts.map +1 -1
  496. package/lib/esm/internal/render/webgl/System.js +2 -2
  497. package/lib/esm/internal/render/webgl/System.js.map +1 -1
  498. package/lib/esm/internal/render/webgl/Target.d.ts.map +1 -1
  499. package/lib/esm/internal/render/webgl/Target.js +11 -8
  500. package/lib/esm/internal/render/webgl/Target.js.map +1 -1
  501. package/lib/esm/internal/render/webgl/Texture.d.ts.map +1 -1
  502. package/lib/esm/internal/render/webgl/Texture.js +11 -9
  503. package/lib/esm/internal/render/webgl/Texture.js.map +1 -1
  504. package/lib/esm/internal/render/webgl/glsl/Animation.d.ts.map +1 -1
  505. package/lib/esm/internal/render/webgl/glsl/Animation.js +5 -3
  506. package/lib/esm/internal/render/webgl/glsl/Animation.js.map +1 -1
  507. package/lib/esm/internal/render/webgl/glsl/Color.d.ts.map +1 -1
  508. package/lib/esm/internal/render/webgl/glsl/Color.js +2 -1
  509. package/lib/esm/internal/render/webgl/glsl/Color.js.map +1 -1
  510. package/lib/esm/internal/render/webgl/glsl/Composite.js +2 -2
  511. package/lib/esm/internal/render/webgl/glsl/Composite.js.map +1 -1
  512. package/lib/esm/internal/render/webgl/glsl/CopyStencil.d.ts.map +1 -1
  513. package/lib/esm/internal/render/webgl/glsl/CopyStencil.js +3 -2
  514. package/lib/esm/internal/render/webgl/glsl/CopyStencil.js.map +1 -1
  515. package/lib/esm/internal/render/webgl/glsl/PlanarClassification.js +4 -4
  516. package/lib/esm/internal/render/webgl/glsl/PlanarClassification.js.map +1 -1
  517. package/lib/esm/internal/render/webgl/glsl/PlanarGrid.d.ts.map +1 -1
  518. package/lib/esm/internal/render/webgl/glsl/PlanarGrid.js +4 -3
  519. package/lib/esm/internal/render/webgl/glsl/PlanarGrid.js.map +1 -1
  520. package/lib/esm/internal/render/webgl/glsl/RealityMesh.js +9 -9
  521. package/lib/esm/internal/render/webgl/glsl/RealityMesh.js.map +1 -1
  522. package/lib/esm/internal/render/webgl/glsl/Surface.js +11 -11
  523. package/lib/esm/internal/render/webgl/glsl/Surface.js.map +1 -1
  524. package/lib/esm/internal/render/webgl/glsl/Vertex.js +3 -3
  525. package/lib/esm/internal/render/webgl/glsl/Vertex.js.map +1 -1
  526. package/lib/esm/internal/tile/B3dmReader.d.ts.map +1 -1
  527. package/lib/esm/internal/tile/B3dmReader.js +2 -2
  528. package/lib/esm/internal/tile/B3dmReader.js.map +1 -1
  529. package/lib/esm/internal/tile/DynamicIModelTile.js +1 -0
  530. package/lib/esm/internal/tile/DynamicIModelTile.js.map +1 -1
  531. package/lib/esm/internal/tile/FetchCloudStorage.js +1 -1
  532. package/lib/esm/internal/tile/FetchCloudStorage.js.map +1 -1
  533. package/lib/esm/internal/tile/LRUTileList.d.ts.map +1 -1
  534. package/lib/esm/internal/tile/LRUTileList.js +4 -0
  535. package/lib/esm/internal/tile/LRUTileList.js.map +1 -1
  536. package/lib/esm/internal/tile/LayerTileTreeReferenceHandler.d.ts.map +1 -1
  537. package/lib/esm/internal/tile/LayerTileTreeReferenceHandler.js +2 -1
  538. package/lib/esm/internal/tile/LayerTileTreeReferenceHandler.js.map +1 -1
  539. package/lib/esm/internal/tile/OPCFormatInterpreter.js +5 -5
  540. package/lib/esm/internal/tile/OPCFormatInterpreter.js.map +1 -1
  541. package/lib/esm/internal/tile/OrbitGtTileTree.d.ts.map +1 -1
  542. package/lib/esm/internal/tile/OrbitGtTileTree.js +3 -3
  543. package/lib/esm/internal/tile/OrbitGtTileTree.js.map +1 -1
  544. package/lib/esm/internal/tile/RealityModelTileTree.d.ts.map +1 -1
  545. package/lib/esm/internal/tile/RealityModelTileTree.js +4 -4
  546. package/lib/esm/internal/tile/RealityModelTileTree.js.map +1 -1
  547. package/lib/esm/internal/tile/RealityTileLoader.d.ts.map +1 -1
  548. package/lib/esm/internal/tile/RealityTileLoader.js +3 -0
  549. package/lib/esm/internal/tile/RealityTileLoader.js.map +1 -1
  550. package/lib/esm/internal/tile/ThreeDTileFormatInterpreter.js +4 -4
  551. package/lib/esm/internal/tile/ThreeDTileFormatInterpreter.js.map +1 -1
  552. package/lib/esm/internal/tile/TileUserSet.d.ts.map +1 -1
  553. package/lib/esm/internal/tile/TileUserSet.js +4 -0
  554. package/lib/esm/internal/tile/TileUserSet.js.map +1 -1
  555. package/lib/esm/internal/tile/map/ArcGISTileMap.js +1 -1
  556. package/lib/esm/internal/tile/map/ArcGISTileMap.js.map +1 -1
  557. package/lib/esm/internal/tile/map/ArcGisUtilities.d.ts.map +1 -1
  558. package/lib/esm/internal/tile/map/ArcGisUtilities.js +4 -0
  559. package/lib/esm/internal/tile/map/ArcGisUtilities.js.map +1 -1
  560. package/lib/esm/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  561. package/lib/esm/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +3 -1
  562. package/lib/esm/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  563. package/lib/esm/internal/tile/map/ImageryProviders/BingImageryProvider.js +3 -3
  564. package/lib/esm/internal/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  565. package/lib/esm/internal/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +2 -2
  566. package/lib/esm/internal/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  567. package/lib/esm/internal/tile/map/MapTileAvailability.d.ts.map +1 -1
  568. package/lib/esm/internal/tile/map/MapTileAvailability.js +6 -3
  569. package/lib/esm/internal/tile/map/MapTileAvailability.js.map +1 -1
  570. package/lib/esm/internal/tile/map/WmtsCapabilities.d.ts.map +1 -1
  571. package/lib/esm/internal/tile/map/WmtsCapabilities.js +3 -2
  572. package/lib/esm/internal/tile/map/WmtsCapabilities.js.map +1 -1
  573. package/lib/esm/properties/FormattedQuantityDescription.d.ts.map +1 -1
  574. package/lib/esm/properties/FormattedQuantityDescription.js +2 -0
  575. package/lib/esm/properties/FormattedQuantityDescription.js.map +1 -1
  576. package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts.map +1 -1
  577. package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js +2 -0
  578. package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
  579. package/lib/esm/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
  580. package/lib/esm/quantity-formatting/QuantityFormatter.js +7 -4
  581. package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
  582. package/lib/esm/tile/GltfReader.d.ts +5 -2
  583. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  584. package/lib/esm/tile/GltfReader.js +55 -17
  585. package/lib/esm/tile/GltfReader.js.map +1 -1
  586. package/lib/esm/tile/RealityTile.d.ts.map +1 -1
  587. package/lib/esm/tile/RealityTile.js +3 -3
  588. package/lib/esm/tile/RealityTile.js.map +1 -1
  589. package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
  590. package/lib/esm/tile/RealityTileTree.js +6 -6
  591. package/lib/esm/tile/RealityTileTree.js.map +1 -1
  592. package/lib/esm/tile/TileAdmin.js.map +1 -1
  593. package/lib/esm/tile/TileDrawArgs.d.ts.map +1 -1
  594. package/lib/esm/tile/TileDrawArgs.js +2 -1
  595. package/lib/esm/tile/TileDrawArgs.js.map +1 -1
  596. package/lib/esm/tile/map/ImageryTileTree.js +2 -2
  597. package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
  598. package/lib/esm/tile/map/MapLayerFormatRegistry.js +2 -2
  599. package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
  600. package/lib/esm/tile/map/MapLayerSources.d.ts.map +1 -1
  601. package/lib/esm/tile/map/MapLayerSources.js +10 -2
  602. package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
  603. package/lib/esm/tile/map/MapTile.d.ts.map +1 -1
  604. package/lib/esm/tile/map/MapTile.js +11 -9
  605. package/lib/esm/tile/map/MapTile.js.map +1 -1
  606. package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
  607. package/lib/esm/tile/map/MapTileTree.js +9 -8
  608. package/lib/esm/tile/map/MapTileTree.js.map +1 -1
  609. package/lib/esm/tile/map/MapTilingScheme.d.ts.map +1 -1
  610. package/lib/esm/tile/map/MapTilingScheme.js +2 -1
  611. package/lib/esm/tile/map/MapTilingScheme.js.map +1 -1
  612. package/lib/esm/tools/Tool.js +2 -2
  613. package/lib/esm/tools/Tool.js.map +1 -1
  614. package/lib/public/scripts/parse-imdl-worker.js +1 -1
  615. package/lib/workers/webpack/parse-imdl-worker.js +1 -1
  616. package/package.json +20 -20
@@ -1 +1 @@
1
- {"version":3,"file":"Composite.js","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/Composite.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module WebGL\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { CompositeGeometry } from \"../CachedGeometry\";\nimport { CompositeFlags, TextureUnit } from \"../RenderFlags\";\nimport { FragmentShaderBuilder, FragmentShaderComponent, VariableType } from \"../ShaderBuilder\";\nimport { ShaderProgram } from \"../ShaderProgram\";\nimport { Texture2DHandle } from \"../Texture\";\nimport { addWindowToTexCoords, assignFragColor } from \"./Fragment\";\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\n\nfunction addHiliteSettings(frag: FragmentShaderBuilder): void {\n frag.addUniform(\"u_hilite_settings\", VariableType.Mat3, (prog) => {\n prog.addProgramUniform(\"u_hilite_settings\", (uniform, params) => {\n params.target.uniforms.hilite.bindCompositeSettings(uniform);\n });\n });\n\n frag.addUniform(\"u_hilite_width\", VariableType.Vec2, (prog) => {\n prog.addProgramUniform(\"u_hilite_width\", (uniform, params) => {\n params.target.uniforms.hilite.bindCompositeWidths(uniform);\n });\n });\n}\n\nconst readEdgePixel = `\nvec2 readEdgePixel(float xOffset, float yOffset) {\n vec2 t = windowCoordsToTexCoords(gl_FragCoord.xy + vec2(xOffset, yOffset));\n return TEXTURE(u_hilite, t).xy;\n}\n`;\n\nconst computeNearbyHilites = `\nvec2 computeNearbyHilites() {\n float hiliteWidth = u_hilite_width.x;\n float emphWidth = u_hilite_width.y;\n float maxWidth = max(hiliteWidth, emphWidth);\n if (0.0 == maxWidth)\n return vec2(0.0);\n\n vec2 nearest = vec2(0.0, 0.0);\n for (int x = -1; x <= 1; x++)\n for (int y = -1; y <= 1; y++)\n if (0 != x || 0 != y)\n nearest = nearest + readEdgePixel(float(x), float(y));\n\n nearest = nearest * vec2(float(hiliteWidth > 0.0), float(emphWidth > 0.0));\n\n if ((0.0 == nearest.x && hiliteWidth > 1.0) || (0.0 == nearest.y && emphWidth > 1.0)) {\n vec2 farthest = vec2(0.0, 0.0);\n for (int i = -2; i <= 2; i++) {\n float f = float(i);\n farthest = farthest + readEdgePixel(f, -2.0) + readEdgePixel(-2.0, f) + readEdgePixel(f, 2.0) + readEdgePixel(2.0, f);\n }\n\n farthest = farthest * vec2(float(hiliteWidth > 1.0), float(emphWidth > 1.0));\n nearest = nearest + farthest;\n }\n\n return nearest;\n}\n`;\n\nconst computeOpaqueColor = `\nvec4 computeOpaqueColor() {\n vec4 opaque = TEXTURE(u_opaque, v_texCoord);\n opaque.rgb *= computeAmbientOcclusion();\n return opaque;\n}\n`;\n\nconst computeDefaultAmbientOcclusion = `\\nfloat computeAmbientOcclusion() { return 1.0; }\\n`;\nconst computeAmbientOcclusion = `\\nfloat computeAmbientOcclusion() { return TEXTURE(u_occlusion, v_texCoord).r; }\\n`;\n\nconst computeHiliteColor = \"\\nvec4 computeColor() { return computeOpaqueColor(); }\\n\";\n\nconst computeHiliteBaseColor = `\n vec4 baseColor = computeColor();\n vec2 flags = TEXTURE(u_hilite, v_texCoord).rg;\n vec2 outline = computeNearbyHilites();\n if (u_hilite_width.y < u_hilite_width.x) { // check for emphasis outline first if it is thinner\n if (outline.y > 0.0 && flags.y == 0.0)\n return vec4(u_hilite_settings[1], 1.0);\n if (outline.x > 0.0 && flags.x == 0.0)\n return vec4(u_hilite_settings[0], 1.0);\n } else {\n if (outline.x > 0.0 && flags.x == 0.0)\n return vec4(u_hilite_settings[0], 1.0);\n if (outline.y > 0.0 && flags.y == 0.0)\n return vec4(u_hilite_settings[1], 1.0);\n }\n float hiliteMix = flags.x * u_hilite_settings[2][0];\n float emphasisMix = flags.y * u_hilite_settings[2][1];\n baseColor.rgb *= (1.0 - (hiliteMix + emphasisMix));\n baseColor.rgb += u_hilite_settings[0] * hiliteMix;\n baseColor.rgb += u_hilite_settings[1] * emphasisMix;\n return baseColor;\n`;\n\nconst computeTranslucentColor = `\nvec4 computeColor() {\n vec4 opaque = computeOpaqueColor();\n vec4 accum = TEXTURE(u_accumulation, v_texCoord);\n vec2 rg = TEXTURE(u_revealage, v_texCoord).rg;\n\n vec4 transparent = vec4(accum.rgb / clamp(rg.r, 1e-4, 5e4), accum.a);\n vec4 col = mix((1.0 - transparent.a) * transparent + transparent.a * opaque, vec4(u_clipIntersection.rgb, 1.0), rg.g);\n return col;\n}\n`;\n\nconst computeTranslucentBaseColor = \"return computeColor();\";\nconst computeAmbientOcclusionBaseColor = \"return computeOpaqueColor();\";\n\n/** @internal */\nexport function createCompositeProgram(flags: CompositeFlags, context: WebGL2RenderingContext): ShaderProgram {\n assert(CompositeFlags.None !== flags);\n\n const wantHilite = CompositeFlags.None !== (flags & CompositeFlags.Hilite);\n const wantTranslucent = CompositeFlags.None !== (flags & CompositeFlags.Translucent);\n const wantOcclusion = CompositeFlags.None !== (flags & CompositeFlags.AmbientOcclusion);\n\n const builder = createViewportQuadBuilder(true);\n const frag = builder.frag;\n\n frag.addFunction(wantOcclusion ? computeAmbientOcclusion : computeDefaultAmbientOcclusion);\n frag.addFunction(computeOpaqueColor);\n\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\n frag.addUniform(\"u_opaque\", VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(\"u_opaque\", (uniform, params) => {\n Texture2DHandle.bindSampler(uniform, (params.geometry as CompositeGeometry).opaque, TextureUnit.Zero);\n });\n });\n\n if (wantHilite) {\n addHiliteSettings(frag);\n addWindowToTexCoords(frag);\n frag.addFunction(readEdgePixel);\n frag.addFunction(computeNearbyHilites);\n\n frag.addUniform(\"u_hilite\", VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(\"u_hilite\", (uniform, params) => {\n Texture2DHandle.bindSampler(uniform, (params.geometry as CompositeGeometry).hilite, TextureUnit.Three);\n });\n });\n\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeHiliteBaseColor);\n if (!wantTranslucent) {\n frag.addFunction(computeHiliteColor);\n }\n }\n\n if (wantTranslucent) {\n frag.addUniform(\"u_accumulation\", VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(\"u_accumulation\", (uniform, params) => {\n Texture2DHandle.bindSampler(uniform, (params.geometry as CompositeGeometry).accum, TextureUnit.One);\n });\n });\n\n frag.addUniform(\"u_revealage\", VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(\"u_revealage\", (uniform, params) => {\n Texture2DHandle.bindSampler(uniform, (params.geometry as CompositeGeometry).reveal, TextureUnit.Two);\n });\n });\n\n builder.frag.addUniform(\"u_clipIntersection\", VariableType.Vec4, (program) => {\n program.addGraphicUniform(\"u_clipIntersection\", (uniform, params) => {\n params.target.uniforms.branch.clipStack.intersectionStyle.bind(uniform);\n });\n });\n\n frag.addFunction(computeTranslucentColor);\n if (!wantHilite) {\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeTranslucentBaseColor);\n }\n }\n\n if (wantOcclusion) {\n frag.addUniform(\"u_occlusion\", VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(\"u_occlusion\", (uniform, params) => {\n Texture2DHandle.bindSampler(uniform, (params.geometry as CompositeGeometry).occlusion!, TextureUnit.Four);\n });\n });\n\n if (!wantHilite && !wantTranslucent)\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeAmbientOcclusionBaseColor);\n }\n\n const flagString = (wantHilite ? \"-Hilite\" : \"\") + (wantTranslucent ? \"-Translucent\" : \"\") + (wantOcclusion ? \"-Occlusion\" : \"\");\n builder.vert.headerComment = `//!V! CombineTextures${flagString}`;\n builder.frag.headerComment = `//!F! CombineTextures${flagString}`;\n\n return builder.buildProgram(context);\n}\n"]}
1
+ {"version":3,"file":"Composite.js","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/Composite.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module WebGL\n */\n\nimport { assert, expectDefined } from \"@itwin/core-bentley\";\nimport { CompositeGeometry } from \"../CachedGeometry\";\nimport { CompositeFlags, TextureUnit } from \"../RenderFlags\";\nimport { FragmentShaderBuilder, FragmentShaderComponent, VariableType } from \"../ShaderBuilder\";\nimport { ShaderProgram } from \"../ShaderProgram\";\nimport { Texture2DHandle } from \"../Texture\";\nimport { addWindowToTexCoords, assignFragColor } from \"./Fragment\";\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\n\nfunction addHiliteSettings(frag: FragmentShaderBuilder): void {\n frag.addUniform(\"u_hilite_settings\", VariableType.Mat3, (prog) => {\n prog.addProgramUniform(\"u_hilite_settings\", (uniform, params) => {\n params.target.uniforms.hilite.bindCompositeSettings(uniform);\n });\n });\n\n frag.addUniform(\"u_hilite_width\", VariableType.Vec2, (prog) => {\n prog.addProgramUniform(\"u_hilite_width\", (uniform, params) => {\n params.target.uniforms.hilite.bindCompositeWidths(uniform);\n });\n });\n}\n\nconst readEdgePixel = `\nvec2 readEdgePixel(float xOffset, float yOffset) {\n vec2 t = windowCoordsToTexCoords(gl_FragCoord.xy + vec2(xOffset, yOffset));\n return TEXTURE(u_hilite, t).xy;\n}\n`;\n\nconst computeNearbyHilites = `\nvec2 computeNearbyHilites() {\n float hiliteWidth = u_hilite_width.x;\n float emphWidth = u_hilite_width.y;\n float maxWidth = max(hiliteWidth, emphWidth);\n if (0.0 == maxWidth)\n return vec2(0.0);\n\n vec2 nearest = vec2(0.0, 0.0);\n for (int x = -1; x <= 1; x++)\n for (int y = -1; y <= 1; y++)\n if (0 != x || 0 != y)\n nearest = nearest + readEdgePixel(float(x), float(y));\n\n nearest = nearest * vec2(float(hiliteWidth > 0.0), float(emphWidth > 0.0));\n\n if ((0.0 == nearest.x && hiliteWidth > 1.0) || (0.0 == nearest.y && emphWidth > 1.0)) {\n vec2 farthest = vec2(0.0, 0.0);\n for (int i = -2; i <= 2; i++) {\n float f = float(i);\n farthest = farthest + readEdgePixel(f, -2.0) + readEdgePixel(-2.0, f) + readEdgePixel(f, 2.0) + readEdgePixel(2.0, f);\n }\n\n farthest = farthest * vec2(float(hiliteWidth > 1.0), float(emphWidth > 1.0));\n nearest = nearest + farthest;\n }\n\n return nearest;\n}\n`;\n\nconst computeOpaqueColor = `\nvec4 computeOpaqueColor() {\n vec4 opaque = TEXTURE(u_opaque, v_texCoord);\n opaque.rgb *= computeAmbientOcclusion();\n return opaque;\n}\n`;\n\nconst computeDefaultAmbientOcclusion = `\\nfloat computeAmbientOcclusion() { return 1.0; }\\n`;\nconst computeAmbientOcclusion = `\\nfloat computeAmbientOcclusion() { return TEXTURE(u_occlusion, v_texCoord).r; }\\n`;\n\nconst computeHiliteColor = \"\\nvec4 computeColor() { return computeOpaqueColor(); }\\n\";\n\nconst computeHiliteBaseColor = `\n vec4 baseColor = computeColor();\n vec2 flags = TEXTURE(u_hilite, v_texCoord).rg;\n vec2 outline = computeNearbyHilites();\n if (u_hilite_width.y < u_hilite_width.x) { // check for emphasis outline first if it is thinner\n if (outline.y > 0.0 && flags.y == 0.0)\n return vec4(u_hilite_settings[1], 1.0);\n if (outline.x > 0.0 && flags.x == 0.0)\n return vec4(u_hilite_settings[0], 1.0);\n } else {\n if (outline.x > 0.0 && flags.x == 0.0)\n return vec4(u_hilite_settings[0], 1.0);\n if (outline.y > 0.0 && flags.y == 0.0)\n return vec4(u_hilite_settings[1], 1.0);\n }\n float hiliteMix = flags.x * u_hilite_settings[2][0];\n float emphasisMix = flags.y * u_hilite_settings[2][1];\n baseColor.rgb *= (1.0 - (hiliteMix + emphasisMix));\n baseColor.rgb += u_hilite_settings[0] * hiliteMix;\n baseColor.rgb += u_hilite_settings[1] * emphasisMix;\n return baseColor;\n`;\n\nconst computeTranslucentColor = `\nvec4 computeColor() {\n vec4 opaque = computeOpaqueColor();\n vec4 accum = TEXTURE(u_accumulation, v_texCoord);\n vec2 rg = TEXTURE(u_revealage, v_texCoord).rg;\n\n vec4 transparent = vec4(accum.rgb / clamp(rg.r, 1e-4, 5e4), accum.a);\n vec4 col = mix((1.0 - transparent.a) * transparent + transparent.a * opaque, vec4(u_clipIntersection.rgb, 1.0), rg.g);\n return col;\n}\n`;\n\nconst computeTranslucentBaseColor = \"return computeColor();\";\nconst computeAmbientOcclusionBaseColor = \"return computeOpaqueColor();\";\n\n/** @internal */\nexport function createCompositeProgram(flags: CompositeFlags, context: WebGL2RenderingContext): ShaderProgram {\n assert(CompositeFlags.None !== flags);\n\n const wantHilite = CompositeFlags.None !== (flags & CompositeFlags.Hilite);\n const wantTranslucent = CompositeFlags.None !== (flags & CompositeFlags.Translucent);\n const wantOcclusion = CompositeFlags.None !== (flags & CompositeFlags.AmbientOcclusion);\n\n const builder = createViewportQuadBuilder(true);\n const frag = builder.frag;\n\n frag.addFunction(wantOcclusion ? computeAmbientOcclusion : computeDefaultAmbientOcclusion);\n frag.addFunction(computeOpaqueColor);\n\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\n frag.addUniform(\"u_opaque\", VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(\"u_opaque\", (uniform, params) => {\n Texture2DHandle.bindSampler(uniform, (params.geometry as CompositeGeometry).opaque, TextureUnit.Zero);\n });\n });\n\n if (wantHilite) {\n addHiliteSettings(frag);\n addWindowToTexCoords(frag);\n frag.addFunction(readEdgePixel);\n frag.addFunction(computeNearbyHilites);\n\n frag.addUniform(\"u_hilite\", VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(\"u_hilite\", (uniform, params) => {\n Texture2DHandle.bindSampler(uniform, (params.geometry as CompositeGeometry).hilite, TextureUnit.Three);\n });\n });\n\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeHiliteBaseColor);\n if (!wantTranslucent) {\n frag.addFunction(computeHiliteColor);\n }\n }\n\n if (wantTranslucent) {\n frag.addUniform(\"u_accumulation\", VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(\"u_accumulation\", (uniform, params) => {\n Texture2DHandle.bindSampler(uniform, (params.geometry as CompositeGeometry).accum, TextureUnit.One);\n });\n });\n\n frag.addUniform(\"u_revealage\", VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(\"u_revealage\", (uniform, params) => {\n Texture2DHandle.bindSampler(uniform, (params.geometry as CompositeGeometry).reveal, TextureUnit.Two);\n });\n });\n\n builder.frag.addUniform(\"u_clipIntersection\", VariableType.Vec4, (program) => {\n program.addGraphicUniform(\"u_clipIntersection\", (uniform, params) => {\n params.target.uniforms.branch.clipStack.intersectionStyle.bind(uniform);\n });\n });\n\n frag.addFunction(computeTranslucentColor);\n if (!wantHilite) {\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeTranslucentBaseColor);\n }\n }\n\n if (wantOcclusion) {\n frag.addUniform(\"u_occlusion\", VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(\"u_occlusion\", (uniform, params) => {\n Texture2DHandle.bindSampler(uniform, expectDefined((params.geometry as CompositeGeometry).occlusion), TextureUnit.Four);\n });\n });\n\n if (!wantHilite && !wantTranslucent)\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeAmbientOcclusionBaseColor);\n }\n\n const flagString = (wantHilite ? \"-Hilite\" : \"\") + (wantTranslucent ? \"-Translucent\" : \"\") + (wantOcclusion ? \"-Occlusion\" : \"\");\n builder.vert.headerComment = `//!V! CombineTextures${flagString}`;\n builder.frag.headerComment = `//!F! CombineTextures${flagString}`;\n\n return builder.buildProgram(context);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"CopyStencil.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/CopyStencil.ts"],"names":[],"mappings":"AAIA;;GAEG;AAOH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAiDjD,gBAAgB;AAChB,wBAAgB,sCAAsC,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CAqBrG;AAED,gBAAgB;AAChB,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CA6BzF;AAED,gBAAgB;AAChB,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CAkD5F;AAED,gBAAgB;AAChB,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CAoBzF"}
1
+ {"version":3,"file":"CopyStencil.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/CopyStencil.ts"],"names":[],"mappings":"AAIA;;GAEG;AAQH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAiDjD,gBAAgB;AAChB,wBAAgB,sCAAsC,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CAqBrG;AAED,gBAAgB;AAChB,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CA6BzF;AAED,gBAAgB;AAChB,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CAkD5F;AAED,gBAAgB;AAChB,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CAoBzF"}
@@ -11,6 +11,7 @@ exports.createVolClassColorUsingStencilProgram = createVolClassColorUsingStencil
11
11
  exports.createVolClassCopyZProgram = createVolClassCopyZProgram;
12
12
  exports.createVolClassSetBlendProgram = createVolClassSetBlendProgram;
13
13
  exports.createVolClassBlendProgram = createVolClassBlendProgram;
14
+ const core_bentley_1 = require("@itwin/core-bentley");
14
15
  const core_common_1 = require("@itwin/core-common");
15
16
  const CachedGeometry_1 = require("../CachedGeometry");
16
17
  const FloatRGBA_1 = require("../FloatRGBA");
@@ -121,10 +122,10 @@ function createVolClassSetBlendProgram(context) {
121
122
  const hiliteAlpha = params.target.uniforms.hilite.hiliteSettings.visibleRatio;
122
123
  switch (geom.boundaryType) {
123
124
  case CachedGeometry_1.BoundaryType.Outside:
124
- setScratchColor(params.target.activeVolumeClassifierProps.flags.outside, hiliteColor, hiliteAlpha);
125
+ setScratchColor((0, core_bentley_1.expectDefined)(params.target.activeVolumeClassifierProps).flags.outside, hiliteColor, hiliteAlpha);
125
126
  break;
126
127
  case CachedGeometry_1.BoundaryType.Inside:
127
- setScratchColor(params.target.activeVolumeClassifierProps.flags.inside, hiliteColor, hiliteAlpha);
128
+ setScratchColor((0, core_bentley_1.expectDefined)(params.target.activeVolumeClassifierProps).flags.inside, hiliteColor, hiliteAlpha);
128
129
  break;
129
130
  case CachedGeometry_1.BoundaryType.Selected:
130
131
  // setScratchColor(params.target.activeVolumeClassifierProps!.flags.selected, hiliteColor, hiliteAlpha);
@@ -1 +1 @@
1
- {"version":3,"file":"CopyStencil.js","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/CopyStencil.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module WebGL\n */\n\nimport { ColorDef, SpatialClassifierInsideDisplay, SpatialClassifierOutsideDisplay } from \"@itwin/core-common\";\nimport { BoundaryType, SingleTexturedViewportQuadGeometry, VolumeClassifierGeometry } from \"../CachedGeometry\";\nimport { FloatRgb, FloatRgba } from \"../FloatRGBA\";\nimport { TextureUnit } from \"../RenderFlags\";\nimport { FragmentShaderComponent, ShaderBuilder, VariableType } from \"../ShaderBuilder\";\nimport { ShaderProgram } from \"../ShaderProgram\";\nimport { Texture2DHandle } from \"../Texture\";\nimport { assignFragColor } from \"./Fragment\";\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\n\nconst computehiliteColor = \"return vec4(u_hilite_color.rgb, 1.0);\";\n\nconst computeSetBlendColor = \"return u_blend_color;\";\n\nconst computeBlendTextureColor = \"return TEXTURE(u_blendTexture, v_texCoord);\";\n\nconst computeTexCoord = \"v_texCoord = (rawPosition.xy + 1.0) * 0.5;\";\n\nconst checkDiscardBackgroundByZ = `\n if (u_boundaryType == kBoundaryType_Out)\n return TEXTURE(u_depthTexture, v_texCoord).r == 1.0;\n return false;\n`;\n\nconst depthFromTexture = \"return TEXTURE(u_depthTexture, v_texCoord).r;\";\n\nconst scratchColor = FloatRgba.fromColorDef(ColorDef.white);\n\n/** @internal */\nfunction addBoundaryTypeConstants(builder: ShaderBuilder): void {\n // NB: These are the bit positions of each flag in OvrFlags enum - not the flag values\n builder.addConstant(\"kBoundaryType_Out\", VariableType.Int, \"0\");\n builder.addConstant(\"kBoundaryType_In\", VariableType.Int, \"1\");\n builder.addConstant(\"kBoundaryType_Selected\", VariableType.Int, \"2\");\n}\n\n/** @internal */\nfunction setScratchColor(display: number, hilite: FloatRgb, hAlpha: number): void {\n switch (display) {\n case SpatialClassifierOutsideDisplay.Dimmed:\n scratchColor.set(0.0, 0.0, 0.0, 0.3);\n break;\n case SpatialClassifierOutsideDisplay.Off:\n scratchColor.set(0.0, 0.0, 0.0, 0.8);\n break;\n case SpatialClassifierOutsideDisplay.On:\n scratchColor.set(0.0, 0.0, 0.0, 0.0);\n break;\n default: // Hilite or ByElementColor (though ByElementColor should never use this shader)\n scratchColor.set(hilite.red, hilite.green, hilite.blue, hAlpha);\n break;\n }\n}\n\n/** @internal */\nexport function createVolClassColorUsingStencilProgram(context: WebGL2RenderingContext): ShaderProgram {\n const builder = createViewportQuadBuilder(false);\n const frag = builder.frag;\n frag.set(FragmentShaderComponent.ComputeBaseColor, computehiliteColor);\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\n frag.addUniform(\"u_hilite_color\", VariableType.Vec4, (prog) => {\n prog.addGraphicUniform(\"u_hilite_color\", (uniform, params) => {\n const useLighting = params.geometry.getFlashMode(params);\n if (useLighting) {\n const hiliteColor = params.target.uniforms.hilite.hiliteColor;\n scratchColor.set(hiliteColor.red, hiliteColor.green, hiliteColor.blue, 1.0);\n } else\n scratchColor.set(1.0, 1.0, 1.0, 0.0);\n scratchColor.bind(uniform);\n });\n });\n\n builder.vert.headerComment = \"//!V! VolClassColorUsingStencil\";\n builder.frag.headerComment = \"//!F! VolClassColorUsingStencil\";\n\n return builder.buildProgram(context);\n}\n\n/** @internal */\nexport function createVolClassCopyZProgram(context: WebGL2RenderingContext): ShaderProgram {\n const builder = createViewportQuadBuilder(true);\n\n builder.addInlineComputedVarying(\"v_texCoord\", VariableType.Vec2, computeTexCoord); // TODO: I think this is not necessary because it's already added from the create above\n\n const frag = builder.frag;\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSetBlendColor);\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\n\n frag.addUniform(\"u_blend_color\", VariableType.Vec4, (prog) => {\n prog.addGraphicUniform(\"u_blend_color\", (uniform, _params) => {\n scratchColor.set(0.0, 0.0, 0.0, 0.0);\n scratchColor.bind(uniform);\n });\n });\n\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\n const geom = params.geometry as SingleTexturedViewportQuadGeometry;\n Texture2DHandle.bindSampler(uniform, geom.texture, TextureUnit.Zero);\n });\n });\n\n frag.set(FragmentShaderComponent.FinalizeDepth, depthFromTexture);\n\n builder.vert.headerComment = \"//!V! VolClassCopyZ\";\n builder.frag.headerComment = \"//!F! VolClassCopyZ\";\n\n return builder.buildProgram(context);\n}\n\n/** @internal */\nexport function createVolClassSetBlendProgram(context: WebGL2RenderingContext): ShaderProgram {\n const builder = createViewportQuadBuilder(true);\n\n builder.addInlineComputedVarying(\"v_texCoord\", VariableType.Vec2, computeTexCoord);\n\n const frag = builder.frag;\n addBoundaryTypeConstants(frag);\n frag.set(FragmentShaderComponent.CheckForEarlyDiscard, checkDiscardBackgroundByZ);\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSetBlendColor);\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\n\n frag.addUniform(\"u_boundaryType\", VariableType.Int, (prog) => {\n prog.addGraphicUniform(\"u_boundaryType\", (uniform, params) => {\n const geom = params.geometry as VolumeClassifierGeometry;\n uniform.setUniform1i(geom.boundaryType);\n });\n });\n\n frag.addUniform(\"u_blend_color\", VariableType.Vec4, (prog) => {\n prog.addGraphicUniform(\"u_blend_color\", (uniform, params) => {\n const geom = params.geometry as VolumeClassifierGeometry;\n const hiliteColor = params.target.uniforms.hilite.hiliteColor;\n const hiliteAlpha = params.target.uniforms.hilite.hiliteSettings.visibleRatio;\n switch (geom.boundaryType) {\n case BoundaryType.Outside:\n setScratchColor(params.target.activeVolumeClassifierProps!.flags.outside, hiliteColor, hiliteAlpha);\n break;\n case BoundaryType.Inside:\n setScratchColor(params.target.activeVolumeClassifierProps!.flags.inside, hiliteColor, hiliteAlpha);\n break;\n case BoundaryType.Selected:\n // setScratchColor(params.target.activeVolumeClassifierProps!.flags.selected, hiliteColor, hiliteAlpha);\n setScratchColor(SpatialClassifierInsideDisplay.Hilite, hiliteColor, hiliteAlpha); // option for how to display selected classifiers has been removed, always just hilite\n break;\n }\n scratchColor.bind(uniform);\n });\n });\n\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\n const geom = params.geometry as VolumeClassifierGeometry;\n Texture2DHandle.bindSampler(uniform, geom.texture, TextureUnit.Zero);\n });\n });\n\n builder.vert.headerComment = \"//!V! VolClassSetBlend\";\n builder.frag.headerComment = \"//!F! VolClassSetBlend\";\n\n return builder.buildProgram(context);\n}\n\n/** @internal */\nexport function createVolClassBlendProgram(context: WebGL2RenderingContext): ShaderProgram {\n const builder = createViewportQuadBuilder(true);\n\n builder.addInlineComputedVarying(\"v_texCoord\", VariableType.Vec2, computeTexCoord);\n\n const frag = builder.frag;\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeBlendTextureColor);\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\n\n frag.addUniform(\"u_blendTexture\", VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(\"u_blendTexture\", (uniform, params) => {\n const geom = params.geometry as SingleTexturedViewportQuadGeometry;\n Texture2DHandle.bindSampler(uniform, geom.texture, TextureUnit.Zero);\n });\n });\n\n builder.vert.headerComment = \"//!V! VolClassBlend\";\n builder.frag.headerComment = \"//!F! VolClassBlend\";\n\n return builder.buildProgram(context);\n}\n"]}
1
+ {"version":3,"file":"CopyStencil.js","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/CopyStencil.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module WebGL\n */\n\nimport { expectDefined } from \"@itwin/core-bentley\";\nimport { ColorDef, SpatialClassifierInsideDisplay, SpatialClassifierOutsideDisplay } from \"@itwin/core-common\";\nimport { BoundaryType, SingleTexturedViewportQuadGeometry, VolumeClassifierGeometry } from \"../CachedGeometry\";\nimport { FloatRgb, FloatRgba } from \"../FloatRGBA\";\nimport { TextureUnit } from \"../RenderFlags\";\nimport { FragmentShaderComponent, ShaderBuilder, VariableType } from \"../ShaderBuilder\";\nimport { ShaderProgram } from \"../ShaderProgram\";\nimport { Texture2DHandle } from \"../Texture\";\nimport { assignFragColor } from \"./Fragment\";\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\n\nconst computehiliteColor = \"return vec4(u_hilite_color.rgb, 1.0);\";\n\nconst computeSetBlendColor = \"return u_blend_color;\";\n\nconst computeBlendTextureColor = \"return TEXTURE(u_blendTexture, v_texCoord);\";\n\nconst computeTexCoord = \"v_texCoord = (rawPosition.xy + 1.0) * 0.5;\";\n\nconst checkDiscardBackgroundByZ = `\n if (u_boundaryType == kBoundaryType_Out)\n return TEXTURE(u_depthTexture, v_texCoord).r == 1.0;\n return false;\n`;\n\nconst depthFromTexture = \"return TEXTURE(u_depthTexture, v_texCoord).r;\";\n\nconst scratchColor = FloatRgba.fromColorDef(ColorDef.white);\n\n/** @internal */\nfunction addBoundaryTypeConstants(builder: ShaderBuilder): void {\n // NB: These are the bit positions of each flag in OvrFlags enum - not the flag values\n builder.addConstant(\"kBoundaryType_Out\", VariableType.Int, \"0\");\n builder.addConstant(\"kBoundaryType_In\", VariableType.Int, \"1\");\n builder.addConstant(\"kBoundaryType_Selected\", VariableType.Int, \"2\");\n}\n\n/** @internal */\nfunction setScratchColor(display: number, hilite: FloatRgb, hAlpha: number): void {\n switch (display) {\n case SpatialClassifierOutsideDisplay.Dimmed:\n scratchColor.set(0.0, 0.0, 0.0, 0.3);\n break;\n case SpatialClassifierOutsideDisplay.Off:\n scratchColor.set(0.0, 0.0, 0.0, 0.8);\n break;\n case SpatialClassifierOutsideDisplay.On:\n scratchColor.set(0.0, 0.0, 0.0, 0.0);\n break;\n default: // Hilite or ByElementColor (though ByElementColor should never use this shader)\n scratchColor.set(hilite.red, hilite.green, hilite.blue, hAlpha);\n break;\n }\n}\n\n/** @internal */\nexport function createVolClassColorUsingStencilProgram(context: WebGL2RenderingContext): ShaderProgram {\n const builder = createViewportQuadBuilder(false);\n const frag = builder.frag;\n frag.set(FragmentShaderComponent.ComputeBaseColor, computehiliteColor);\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\n frag.addUniform(\"u_hilite_color\", VariableType.Vec4, (prog) => {\n prog.addGraphicUniform(\"u_hilite_color\", (uniform, params) => {\n const useLighting = params.geometry.getFlashMode(params);\n if (useLighting) {\n const hiliteColor = params.target.uniforms.hilite.hiliteColor;\n scratchColor.set(hiliteColor.red, hiliteColor.green, hiliteColor.blue, 1.0);\n } else\n scratchColor.set(1.0, 1.0, 1.0, 0.0);\n scratchColor.bind(uniform);\n });\n });\n\n builder.vert.headerComment = \"//!V! VolClassColorUsingStencil\";\n builder.frag.headerComment = \"//!F! VolClassColorUsingStencil\";\n\n return builder.buildProgram(context);\n}\n\n/** @internal */\nexport function createVolClassCopyZProgram(context: WebGL2RenderingContext): ShaderProgram {\n const builder = createViewportQuadBuilder(true);\n\n builder.addInlineComputedVarying(\"v_texCoord\", VariableType.Vec2, computeTexCoord); // TODO: I think this is not necessary because it's already added from the create above\n\n const frag = builder.frag;\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSetBlendColor);\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\n\n frag.addUniform(\"u_blend_color\", VariableType.Vec4, (prog) => {\n prog.addGraphicUniform(\"u_blend_color\", (uniform, _params) => {\n scratchColor.set(0.0, 0.0, 0.0, 0.0);\n scratchColor.bind(uniform);\n });\n });\n\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\n const geom = params.geometry as SingleTexturedViewportQuadGeometry;\n Texture2DHandle.bindSampler(uniform, geom.texture, TextureUnit.Zero);\n });\n });\n\n frag.set(FragmentShaderComponent.FinalizeDepth, depthFromTexture);\n\n builder.vert.headerComment = \"//!V! VolClassCopyZ\";\n builder.frag.headerComment = \"//!F! VolClassCopyZ\";\n\n return builder.buildProgram(context);\n}\n\n/** @internal */\nexport function createVolClassSetBlendProgram(context: WebGL2RenderingContext): ShaderProgram {\n const builder = createViewportQuadBuilder(true);\n\n builder.addInlineComputedVarying(\"v_texCoord\", VariableType.Vec2, computeTexCoord);\n\n const frag = builder.frag;\n addBoundaryTypeConstants(frag);\n frag.set(FragmentShaderComponent.CheckForEarlyDiscard, checkDiscardBackgroundByZ);\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSetBlendColor);\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\n\n frag.addUniform(\"u_boundaryType\", VariableType.Int, (prog) => {\n prog.addGraphicUniform(\"u_boundaryType\", (uniform, params) => {\n const geom = params.geometry as VolumeClassifierGeometry;\n uniform.setUniform1i(geom.boundaryType);\n });\n });\n\n frag.addUniform(\"u_blend_color\", VariableType.Vec4, (prog) => {\n prog.addGraphicUniform(\"u_blend_color\", (uniform, params) => {\n const geom = params.geometry as VolumeClassifierGeometry;\n const hiliteColor = params.target.uniforms.hilite.hiliteColor;\n const hiliteAlpha = params.target.uniforms.hilite.hiliteSettings.visibleRatio;\n switch (geom.boundaryType) {\n case BoundaryType.Outside:\n setScratchColor(expectDefined(params.target.activeVolumeClassifierProps).flags.outside, hiliteColor, hiliteAlpha);\n break;\n case BoundaryType.Inside:\n setScratchColor(expectDefined(params.target.activeVolumeClassifierProps).flags.inside, hiliteColor, hiliteAlpha);\n break;\n case BoundaryType.Selected:\n // setScratchColor(params.target.activeVolumeClassifierProps!.flags.selected, hiliteColor, hiliteAlpha);\n setScratchColor(SpatialClassifierInsideDisplay.Hilite, hiliteColor, hiliteAlpha); // option for how to display selected classifiers has been removed, always just hilite\n break;\n }\n scratchColor.bind(uniform);\n });\n });\n\n frag.addUniform(\"u_depthTexture\", VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(\"u_depthTexture\", (uniform, params) => {\n const geom = params.geometry as VolumeClassifierGeometry;\n Texture2DHandle.bindSampler(uniform, geom.texture, TextureUnit.Zero);\n });\n });\n\n builder.vert.headerComment = \"//!V! VolClassSetBlend\";\n builder.frag.headerComment = \"//!F! VolClassSetBlend\";\n\n return builder.buildProgram(context);\n}\n\n/** @internal */\nexport function createVolClassBlendProgram(context: WebGL2RenderingContext): ShaderProgram {\n const builder = createViewportQuadBuilder(true);\n\n builder.addInlineComputedVarying(\"v_texCoord\", VariableType.Vec2, computeTexCoord);\n\n const frag = builder.frag;\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeBlendTextureColor);\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\n\n frag.addUniform(\"u_blendTexture\", VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(\"u_blendTexture\", (uniform, params) => {\n const geom = params.geometry as SingleTexturedViewportQuadGeometry;\n Texture2DHandle.bindSampler(uniform, geom.texture, TextureUnit.Zero);\n });\n });\n\n builder.vert.headerComment = \"//!V! VolClassBlend\";\n builder.frag.headerComment = \"//!F! VolClassBlend\";\n\n return builder.buildProgram(context);\n}\n"]}
@@ -197,7 +197,7 @@ function addPlanarClassifierCommon(builder) {
197
197
  const vert = builder.vert;
198
198
  vert.addUniform("u_pClassProj", 7 /* VariableType.Mat4 */, (prog) => {
199
199
  prog.addGraphicUniform("u_pClassProj", (uniform, params) => {
200
- const source = params.target.currentPlanarClassifierOrDrape;
200
+ const source = (0, core_bentley_1.expectDefined)(params.target.currentPlanarClassifierOrDrape);
201
201
  (0, core_bentley_1.assert)(undefined !== source || undefined !== params.target.activeVolumeClassifierTexture);
202
202
  if (undefined !== params.target.currentPlanarClassifierOrDrape) {
203
203
  source.projectionMatrix.multiplyMatrixMatrix(core_geometry_1.Matrix4d.createTransform(params.target.currentTransform, scratchModel), scratchModelProjection);
@@ -240,7 +240,7 @@ function addColorPlanarClassifier(builder, translucent, isThematic) {
240
240
  source.texture.texture.bindSampler(uniform, RenderFlags_1.TextureUnit.PlanarClassification);
241
241
  }
242
242
  else
243
- Texture_1.Texture2DHandle.bindSampler(uniform, volClass, RenderFlags_1.TextureUnit.PlanarClassification);
243
+ Texture_1.Texture2DHandle.bindSampler(uniform, (0, core_bentley_1.expectDefined)(volClass), RenderFlags_1.TextureUnit.PlanarClassification);
244
244
  });
245
245
  });
246
246
  frag.addUniform("u_pClassColorParams", 5 /* VariableType.Vec4 */, (prog) => {
@@ -306,7 +306,7 @@ function addHilitePlanarClassifier(builder, supportTextures = true) {
306
306
  const frag = builder.frag;
307
307
  frag.addUniform("s_pClassHiliteSampler", 8 /* VariableType.Sampler2D */, (prog) => {
308
308
  prog.addGraphicUniform("s_pClassHiliteSampler", (uniform, params) => {
309
- const classifier = params.target.currentPlanarClassifier;
309
+ const classifier = (0, core_bentley_1.expectDefined)(params.target.currentPlanarClassifier);
310
310
  (0, core_bentley_1.assert)(undefined !== classifier && undefined !== classifier.hiliteTexture);
311
311
  classifier.hiliteTexture.texture.bindSampler(uniform, RenderFlags_1.TextureUnit.PlanarClassificationHilite);
312
312
  });
@@ -1 +1 @@
1
- {"version":3,"file":"PlanarClassification.js","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/PlanarClassification.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module WebGL\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { Matrix4d } from \"@itwin/core-geometry\";\nimport { SpatialClassifierInsideDisplay } from \"@itwin/core-common\";\nimport { Matrix4 } from \"../Matrix\";\nimport { PlanarClassifierContent } from \"../PlanarClassifier\";\nimport { TextureUnit } from \"../RenderFlags\";\nimport { FragmentShaderComponent, ProgramBuilder, ShaderBuilder, VariableType } from \"../ShaderBuilder\";\nimport { IsThematic } from \"../TechniqueFlags\";\nimport { Texture2DHandle } from \"../Texture\";\nimport { addShaderFlags, addUInt32s } from \"./Common\";\nimport { addClassifierFlash } from \"./FeatureSymbology\";\nimport { addWindowToTexCoords } from \"./Fragment\";\nimport { addInstancedRtcMatrix } from \"./Vertex\";\n\nexport const volClassOpaqueColor = `\nvec4 volClassColor(vec4 baseColor, float depth) {\n if (depth <= TEXTURE(s_pClassSampler, windowCoordsToTexCoords(gl_FragCoord.xy)).r)\n discard;\n return vec4(baseColor.rgb, 1.0);\n}\n`;\n\nconst volClassTranslucentColor = `\nvec4 volClassColor(vec4 baseColor, float depth) {\n return vec4(baseColor.rgb, depth); // This will never be called, so we use depth here to avoid a compile error\n}\n`;\n\nconst applyPlanarClassificationPrelude = `\nconst float dimScale = .7;\n\nvec2 classPos = v_pClassPos.xy / v_pClassPosW;\nbool isOutside = classPos.x < 0.0 || classPos.x > 1.0 || classPos.y < 0.0 || classPos.y > 1.0;\nif (u_pClassColorParams.x > kClassifierDisplay_Element) { // texture/terrain drape.\n if (u_pClassColorParams.x > kTextureDrape) {\n return volClassColor(baseColor, depth);\n }\n if (isOutside)\n discard;\n\n vec3 rgb = TEXTURE(s_pClassSampler, classPos.xy).rgb;\n return vec4(rgb, baseColor.a);\n}\nfloat imageCount = u_pClassColorParams.z;\n// If imageCount is less than zero - the mask sense is inverted - inside rather than outside. (masks only)\nbool doInvert = false;\nif (imageCount < 0.0) {\n imageCount = - imageCount;\n doInvert = true;\n}\n\nvec4 colorTexel = vec4(0);\nvec4 maskTexel = vec4(0);\nbool doMask = imageCount != kTextureContentClassifierOnly;\nbool doClassify = imageCount != kTextureContentMaskOnly;\n\nif (!isOutside) {\n if (imageCount == kTextureContentClassifierOnly) {\n colorTexel = TEXTURE(s_pClassSampler, vec2(classPos.x, classPos.y / imageCount));\n } else if (imageCount == kTextureContentMaskOnly) {\n maskTexel = TEXTURE(s_pClassSampler, vec2(classPos.x, classPos.y));\n } else if (imageCount == kTextureContentClassifierAndMask) {\n colorTexel = TEXTURE(s_pClassSampler, vec2(classPos.x, classPos.y / imageCount));\n maskTexel = TEXTURE(s_pClassSampler, vec2(classPos.x, (2.0 + classPos.y) / imageCount));\n }\n if (colorTexel.b >= 0.5) {\n if (u_shaderFlags[kShaderBit_IgnoreNonLocatable]) {\n discard;\n return vec4(0.0);\n }\n colorTexel.b = (colorTexel.b * 255.0 - 128.0) / 127.0;\n } else {\n colorTexel.b *= 255.0 / 127.0;\n }\n}\nif (doMask) {\n bool masked = !isOutside && (maskTexel.r + maskTexel.g + maskTexel.b + maskTexel.a) > 0.0;\n if (doInvert)\n masked = !masked;\n if (masked) {\n float maskTransparency = u_pClassColorParams.w < 0.0 ? (1.0 - maskTexel.a) : u_pClassColorParams.w;\n if (maskTransparency <= 0.0) {\n discard;\n return vec4(0);\n }\n\n baseColor.a = baseColor.a * maskTransparency;\n }\n\n if (!doClassify)\n return baseColor;\n }\n\n bool isClassified = !isOutside && (colorTexel.r + colorTexel.g + colorTexel.b + colorTexel.a > 0.0);\n float param = isClassified ? u_pClassColorParams.x : u_pClassColorParams.y;\n if (kClassifierDisplay_Off == param) {\n discard;\n return vec4(0);\n}\n`\n ;\n\n// Currently we discard if classifier is pure black (acts as clipping mask).\n// These could be more efficiently handled with masks.\nconst applyPlanarClassificationColor = applyPlanarClassificationPrelude + // eslint-disable-line prefer-template\n `\n float colorMix = u_pClassPointCloud ? .65 : .35;\n vec4 classColor;\n if (kClassifierDisplay_On == param)\n classColor = baseColor;\n else if (!isClassified || kClassifierDisplay_Dimmed == param)\n classColor = vec4(baseColor.rgb * dimScale, baseColor.a);\n else if (kClassifierDisplay_Hilite == param)\n classColor = vec4(mix(baseColor.rgb, u_hilite_settings[0], u_hilite_settings[2][0]), baseColor.a);\n else {\n if (colorTexel.b > colorTexel.a) {\n discard;\n return vec4(0.0);\n }\n\n // NB: colorTexel contains pre-multiplied alpha. We know it is greater than zero from above.\n float alpha = colorTexel.a * baseColor.a;\n vec3 rgb = colorTexel.rgb / colorTexel.a;\n rgb = mix(baseColor.rgb, rgb, colorMix);\n classColor = vec4(rgb, alpha);\n }\n\n if (kClassifierDisplay_Element != param && isClassified) {\n if (colorTexel.r > colorTexel.a && kClassifierDisplay_Hilite != param)\n classColor = vec4(mix(baseColor.rgb, u_hilite_settings[0], u_hilite_settings[2][0]), 1.0);\n\n if (colorTexel.g > colorTexel.a)\n classColor = applyClassifierFlash(classColor);\n }\n\n return classColor;\n`;\n\nconst applyPlanarClassificationColorForThematic = applyPlanarClassificationPrelude + // eslint-disable-line prefer-template\n `\n vec4 classColor = baseColor;\n\n if (kClassifierDisplay_Element == param) {\n if (colorTexel.b > colorTexel.a) {\n discard;\n return vec4(0.0);\n }\n\n // We stashed the element alpha in blue channel. Make sure to handle pre-multiplied alpha.\n baseColor.rgb = baseColor.rgb / baseColor.a;\n classColor = vec4(baseColor.rgb, colorTexel.b);\n classColor.rgb *= classColor.a;\n colorTexel.a = 0.5; // make conditions below potentially pass\n }\n\n if (isClassified) {\n if (colorTexel.r > colorTexel.a && kClassifierDisplay_Hilite != param)\n classColor = vec4(mix(baseColor.rgb, u_hilite_settings[0], u_hilite_settings[2][0]), 1.0);\n\n if (colorTexel.g > colorTexel.a)\n classColor = applyClassifierFlash(classColor);\n }\n\n return classColor;\n`;\n\nconst overrideFeatureId = `\n if (u_pClassColorParams.x != kClassifierDisplay_Element) return currentId;\n vec2 classPos = v_pClassPos / v_pClassPosW;\n vec4 featureTexel = TEXTURE(s_pClassSampler, vec2(classPos.x, (1.0 + classPos.y) / u_pClassColorParams.z));\n return (featureTexel == vec4(0)) ? currentId : addUInt32s(u_batchBase, featureTexel * 255.0) / 255.0;\n `;\n\nconst computeClassifiedHiliteColor = `\n vec2 classPos = v_pClassPos / v_pClassPosW;\n return TEXTURE(s_pClassHiliteSampler, classPos);\n`;\nconst computeClassifiedSurfaceHiliteColor = `\n if (isSurfaceBitSet(kSurfaceBit_HasTexture) && TEXTURE(s_texture, v_texCoord).a <= 0.15)\n return vec4(0.0);\n${computeClassifiedHiliteColor}`;\n\nconst computeClassifierPos = \"vec4 classProj = u_pClassProj * rawPosition; v_pClassPos = classProj.xy;\";\nconst computeInstancedClassifierPos = \"vec4 classProj = u_pClassProj * g_instancedRtcMatrix * rawPosition; v_pClassPos = classProj.xy;\";\nconst computeClassifierPosW = \"v_pClassPosW = classProj.w;\";\n\nconst scratchBytes = new Uint8Array(4);\nconst scratchBatchBaseId = new Uint32Array(scratchBytes.buffer);\nconst scratchBatchBaseComponents = [0, 0, 0, 0];\nconst scratchColorParams = new Float32Array(4); // Unclassified scale, classified base scale, classified classifier scale, content/image count... MaskOnly = 1, ClassifierOnly = 2, ClassifierAndMask = 3\nconst scratchModel = Matrix4d.createIdentity();\nconst scratchModelProjection = Matrix4d.createIdentity();\nconst scratchMatrix = new Matrix4();\n\nfunction addPlanarClassifierCommon(builder: ProgramBuilder) {\n const vert = builder.vert;\n vert.addUniform(\"u_pClassProj\", VariableType.Mat4, (prog) => {\n prog.addGraphicUniform(\"u_pClassProj\", (uniform, params) => {\n const source = params.target.currentPlanarClassifierOrDrape!;\n assert(undefined !== source || undefined !== params.target.activeVolumeClassifierTexture);\n if (undefined !== params.target.currentPlanarClassifierOrDrape) {\n source.projectionMatrix.multiplyMatrixMatrix(Matrix4d.createTransform(params.target.currentTransform, scratchModel), scratchModelProjection);\n scratchMatrix.initFromMatrix4d(scratchModelProjection);\n } else\n scratchMatrix.initIdentity(); // needs to be identity for volume classifiers\n uniform.setMatrix4(scratchMatrix);\n });\n });\n\n if (vert.usesInstancedGeometry)\n addInstancedRtcMatrix(vert);\n\n builder.addInlineComputedVarying(\"v_pClassPos\", VariableType.Vec2, vert.usesInstancedGeometry ? computeInstancedClassifierPos : computeClassifierPos);\n builder.addInlineComputedVarying(\"v_pClassPosW\", VariableType.Float, computeClassifierPosW);\n\n addPlanarClassifierConstants(builder.frag);\n}\n\nfunction addPlanarClassifierConstants(builder: ShaderBuilder) {\n builder.addDefine(\"kClassifierDisplay_Off\", SpatialClassifierInsideDisplay.Off.toFixed(1));\n builder.addDefine(\"kClassifierDisplay_On\", SpatialClassifierInsideDisplay.On.toFixed(1));\n builder.addDefine(\"kClassifierDisplay_Dimmed\", SpatialClassifierInsideDisplay.Dimmed.toFixed(1));\n builder.addDefine(\"kClassifierDisplay_Hilite\", SpatialClassifierInsideDisplay.Hilite.toFixed(1));\n builder.addDefine(\"kClassifierDisplay_Element\", SpatialClassifierInsideDisplay.ElementColor.toFixed(1));\n const td = SpatialClassifierInsideDisplay.ElementColor + 1;\n builder.addDefine(\"kTextureDrape\", td.toFixed(1));\n builder.addDefine(\"kTextureContentClassifierOnly\", PlanarClassifierContent.ClassifierOnly.toFixed(1));\n builder.addDefine(\"kTextureContentMaskOnly\", PlanarClassifierContent.MaskOnly.toFixed(1));\n builder.addDefine(\"kTextureContentClassifierAndMask\", PlanarClassifierContent.ClassifierAndMask.toFixed(1));\n}\n\n/** @internal */\nexport function addColorPlanarClassifier(builder: ProgramBuilder, translucent: boolean, isThematic: IsThematic) {\n addPlanarClassifierCommon(builder);\n const frag = builder.frag;\n frag.addUniform(\"s_pClassSampler\", VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(\"s_pClassSampler\", (uniform, params) => {\n const source = params.target.currentPlanarClassifierOrDrape;\n const volClass = params.target.activeVolumeClassifierTexture;\n assert(undefined !== source || undefined !== volClass);\n if (source) {\n assert(undefined !== source.texture);\n source.texture.texture.bindSampler(uniform, TextureUnit.PlanarClassification);\n } else\n Texture2DHandle.bindSampler(uniform, volClass!, TextureUnit.PlanarClassification);\n });\n });\n\n frag.addUniform(\"u_pClassColorParams\", VariableType.Vec4, (prog) => {\n prog.addGraphicUniform(\"u_pClassColorParams\", (uniform, params) => {\n const source = params.target.currentPlanarClassifierOrDrape;\n const volClass = params.target.activeVolumeClassifierTexture;\n assert(undefined !== source || undefined !== volClass);\n if (undefined !== source) {\n source.getParams(scratchColorParams);\n } else {\n scratchColorParams[0] = 6.0; // Volume classifier, by element color.\n scratchColorParams[1] = 0.5; // used for alpha value\n scratchColorParams[2] = 0.0; // Not used for volume.\n scratchColorParams[3] = 0.0; // Not used for volume.\n }\n uniform.setUniform4fv(scratchColorParams);\n });\n });\n\n if (isThematic === IsThematic.No) {\n frag.addUniform(\"u_pClassPointCloud\", VariableType.Boolean, (prog) => {\n prog.addGraphicUniform(\"u_pClassPointCloud\", (uniform, params) => {\n const classifier = params.target.currentPlanarClassifier;\n const isPointCloud = undefined !== classifier && classifier.isClassifyingPointCloud;\n uniform.setUniform1i(isPointCloud ? 1 : 0);\n });\n });\n }\n\n addClassifierFlash(frag);\n\n if (translucent)\n // We will never call the shaders for volume classifiers with translucency,\n // so use a different version of the function which does not use glFragCoord to reduce the varyings count\n frag.addFunction(volClassTranslucentColor);\n else {\n addWindowToTexCoords(frag);\n frag.addFunction(volClassOpaqueColor);\n }\n\n addShaderFlags(builder);\n\n frag.set(FragmentShaderComponent.ApplyPlanarClassifier, (isThematic === IsThematic.No) ? applyPlanarClassificationColor : applyPlanarClassificationColorForThematic);\n}\n\n/** @internal */\nexport function addFeaturePlanarClassifier(builder: ProgramBuilder) {\n const frag = builder.frag;\n frag.addUniform(\"u_batchBase\", VariableType.Vec4, (prog) => { // TBD. Instancing.\n prog.addGraphicUniform(\"u_batchBase\", (uniform, params) => {\n const classifier = params.target.currentPlanarClassifier;\n if (classifier !== undefined) {\n scratchBatchBaseId[0] = classifier.baseBatchId;\n scratchBatchBaseComponents[0] = scratchBytes[0];\n scratchBatchBaseComponents[1] = scratchBytes[1];\n scratchBatchBaseComponents[2] = scratchBytes[2];\n scratchBatchBaseComponents[3] = scratchBytes[3];\n }\n uniform.setUniform4fv(scratchBatchBaseComponents);\n });\n });\n frag.set(FragmentShaderComponent.OverrideFeatureId, overrideFeatureId);\n frag.addFunction(addUInt32s);\n}\n\n/** @internal */\nexport function addHilitePlanarClassifier(builder: ProgramBuilder, supportTextures = true) {\n addPlanarClassifierCommon(builder);\n const frag = builder.frag;\n frag.addUniform(\"s_pClassHiliteSampler\", VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(\"s_pClassHiliteSampler\", (uniform, params) => {\n const classifier = params.target.currentPlanarClassifier!;\n assert(undefined !== classifier && undefined !== classifier.hiliteTexture);\n classifier.hiliteTexture.texture.bindSampler(uniform, TextureUnit.PlanarClassificationHilite);\n });\n });\n\n frag.set(FragmentShaderComponent.ComputeBaseColor, supportTextures ? computeClassifiedSurfaceHiliteColor : computeClassifiedHiliteColor);\n}\n\n// NonLocatable flag is put in upper bit of blue component when drawing the classification texture.\nconst encodeNonLocatableWithFeatures = `\nvec4 encodeNonLocatable(vec4 clr) {\n float encoded_b = (floor(clr.b * 127.0) + float(extractNthBit(floor(v_feature_emphasis + 0.5), kEmphBit_NonLocatable)) * 128.0) / 255.0;\n return vec4(clr.r, clr.g, encoded_b, clr.a);\n}\n`;\n\nconst encodeNonLocatable = `\nvec4 encodeNonLocatable(vec4 clr) {\n float encoded_b = floor(clr.b * 127.0) / 255.0;\n return vec4(clr.r, clr.g, encoded_b, clr.a);\n}\n`;\n\nconst overrideClassifierColorPrelude = `\n if (0.0 == u_planarClassifierInsideMode)\n return currentColor;\n\n if (0.0 == currentColor.a)\n return encodeNonLocatable(vec4(0.0, 0.0, 1.0, 0.5));\n`;\n\nconst overrideClassifierEmphasis = `\n if (kClassifierDisplay_Element != u_planarClassifierInsideMode) {\n float emph = floor(v_feature_emphasis + 0.5);\n if (0.0 != emph)\n return encodeNonLocatable(vec4(extractNthBit(emph, kEmphBit_Hilite), extractNthBit(emph, kEmphBit_Flash), 0.0, 0.5));\n }\n`;\n\nconst overrideClassifierColorPostlude = `\n return encodeNonLocatable(currentColor);\n`;\n\nconst overrideClassifierWithFeatures = overrideClassifierColorPrelude + overrideClassifierEmphasis + overrideClassifierColorPostlude;\nconst overrideClassifierForClip = overrideClassifierColorPrelude + overrideClassifierColorPostlude;\n\nconst overrideClassifierColorPreludeForThematic = `\n if (0.0 == u_planarClassifierInsideMode)\n return currentColor;\n\n if (0.0 == currentColor.a)\n return encodeNonLocatable(vec4(0.0, 0.0, 1.0, 0.5));\n\n bool isElem = kClassifierDisplay_Element == u_planarClassifierInsideMode;\n`;\n\nconst overrideClassifierEmphasisForThematic = `\n float emph = floor(v_feature_emphasis + 0.5);\n if (0.0 != emph)\n return encodeNonLocatable(vec4(extractNthBit(emph, kEmphBit_Hilite), extractNthBit(emph, kEmphBit_Flash), isElem ? currentColor.a : 0.0, isElem ? 1.0 : 0.5));\n else if (kClassifierDisplay_Element == u_planarClassifierInsideMode)\n return encodeNonLocatable(vec4(0.0, 0.0, currentColor.a, 1.0));\n`;\n\n// Thematic classifiers use alpha of 1 to blend; we just want thematic colors to largely win out except when selecting and flashing classifiers.\nconst overrideClassifierColorPostludeClipForThematic = `\n return encodeNonLocatable(isElem ? vec4(0.0, 0.0, 1.0, 1.0) : currentColor);\n`;\n\nconst overrideClassifierWithFeaturesForThematic = overrideClassifierColorPreludeForThematic + overrideClassifierEmphasisForThematic + overrideClassifierColorPostlude;\nconst overrideClassifierForClipForThematic = overrideClassifierColorPreludeForThematic + overrideClassifierColorPostludeClipForThematic;\n\n/** The classified geometry needs some information about the classifier geometry. The classified fragment shader outputs special values that do not represent valid RGB+A combinations when using\n * pre-multiplied alpha. The alpha channel will be 0.5, and the red, green, and/or blue channels will be 1.0:\n * - Red: hilited.\n * - Green: flashed.\n * - Blue: fully-transparent. Indicates clipping mask (discard the classified pixel).\n * @internal\n */\nexport function addOverrideClassifierColor(builder: ProgramBuilder, isThematic: IsThematic): void {\n addPlanarClassifierConstants(builder.frag);\n builder.frag.addUniform(\"u_planarClassifierInsideMode\", VariableType.Float, (prog) => {\n prog.addGraphicUniform(\"u_planarClassifierInsideMode\", (uniform, params) => {\n const classifier = params.target.currentlyDrawingClassifier;\n const override = undefined !== classifier ? classifier.insideDisplay : 0;\n uniform.setUniform1f(override);\n });\n });\n\n const haveOverrides = undefined !== builder.frag.find(\"v_feature_emphasis\");\n builder.frag.addFunction(haveOverrides ? encodeNonLocatableWithFeatures : encodeNonLocatable);\n if (isThematic === IsThematic.No)\n builder.frag.set(FragmentShaderComponent.OverrideColor, haveOverrides ? overrideClassifierWithFeatures : overrideClassifierForClip);\n else\n builder.frag.set(FragmentShaderComponent.OverrideColor, haveOverrides ? overrideClassifierWithFeaturesForThematic : overrideClassifierForClipForThematic);\n}\n"]}
1
+ {"version":3,"file":"PlanarClassification.js","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/PlanarClassification.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module WebGL\n */\n\nimport { assert, expectDefined } from \"@itwin/core-bentley\";\nimport { Matrix4d } from \"@itwin/core-geometry\";\nimport { SpatialClassifierInsideDisplay } from \"@itwin/core-common\";\nimport { Matrix4 } from \"../Matrix\";\nimport { PlanarClassifierContent } from \"../PlanarClassifier\";\nimport { TextureUnit } from \"../RenderFlags\";\nimport { FragmentShaderComponent, ProgramBuilder, ShaderBuilder, VariableType } from \"../ShaderBuilder\";\nimport { IsThematic } from \"../TechniqueFlags\";\nimport { Texture2DHandle } from \"../Texture\";\nimport { addShaderFlags, addUInt32s } from \"./Common\";\nimport { addClassifierFlash } from \"./FeatureSymbology\";\nimport { addWindowToTexCoords } from \"./Fragment\";\nimport { addInstancedRtcMatrix } from \"./Vertex\";\n\nexport const volClassOpaqueColor = `\nvec4 volClassColor(vec4 baseColor, float depth) {\n if (depth <= TEXTURE(s_pClassSampler, windowCoordsToTexCoords(gl_FragCoord.xy)).r)\n discard;\n return vec4(baseColor.rgb, 1.0);\n}\n`;\n\nconst volClassTranslucentColor = `\nvec4 volClassColor(vec4 baseColor, float depth) {\n return vec4(baseColor.rgb, depth); // This will never be called, so we use depth here to avoid a compile error\n}\n`;\n\nconst applyPlanarClassificationPrelude = `\nconst float dimScale = .7;\n\nvec2 classPos = v_pClassPos.xy / v_pClassPosW;\nbool isOutside = classPos.x < 0.0 || classPos.x > 1.0 || classPos.y < 0.0 || classPos.y > 1.0;\nif (u_pClassColorParams.x > kClassifierDisplay_Element) { // texture/terrain drape.\n if (u_pClassColorParams.x > kTextureDrape) {\n return volClassColor(baseColor, depth);\n }\n if (isOutside)\n discard;\n\n vec3 rgb = TEXTURE(s_pClassSampler, classPos.xy).rgb;\n return vec4(rgb, baseColor.a);\n}\nfloat imageCount = u_pClassColorParams.z;\n// If imageCount is less than zero - the mask sense is inverted - inside rather than outside. (masks only)\nbool doInvert = false;\nif (imageCount < 0.0) {\n imageCount = - imageCount;\n doInvert = true;\n}\n\nvec4 colorTexel = vec4(0);\nvec4 maskTexel = vec4(0);\nbool doMask = imageCount != kTextureContentClassifierOnly;\nbool doClassify = imageCount != kTextureContentMaskOnly;\n\nif (!isOutside) {\n if (imageCount == kTextureContentClassifierOnly) {\n colorTexel = TEXTURE(s_pClassSampler, vec2(classPos.x, classPos.y / imageCount));\n } else if (imageCount == kTextureContentMaskOnly) {\n maskTexel = TEXTURE(s_pClassSampler, vec2(classPos.x, classPos.y));\n } else if (imageCount == kTextureContentClassifierAndMask) {\n colorTexel = TEXTURE(s_pClassSampler, vec2(classPos.x, classPos.y / imageCount));\n maskTexel = TEXTURE(s_pClassSampler, vec2(classPos.x, (2.0 + classPos.y) / imageCount));\n }\n if (colorTexel.b >= 0.5) {\n if (u_shaderFlags[kShaderBit_IgnoreNonLocatable]) {\n discard;\n return vec4(0.0);\n }\n colorTexel.b = (colorTexel.b * 255.0 - 128.0) / 127.0;\n } else {\n colorTexel.b *= 255.0 / 127.0;\n }\n}\nif (doMask) {\n bool masked = !isOutside && (maskTexel.r + maskTexel.g + maskTexel.b + maskTexel.a) > 0.0;\n if (doInvert)\n masked = !masked;\n if (masked) {\n float maskTransparency = u_pClassColorParams.w < 0.0 ? (1.0 - maskTexel.a) : u_pClassColorParams.w;\n if (maskTransparency <= 0.0) {\n discard;\n return vec4(0);\n }\n\n baseColor.a = baseColor.a * maskTransparency;\n }\n\n if (!doClassify)\n return baseColor;\n }\n\n bool isClassified = !isOutside && (colorTexel.r + colorTexel.g + colorTexel.b + colorTexel.a > 0.0);\n float param = isClassified ? u_pClassColorParams.x : u_pClassColorParams.y;\n if (kClassifierDisplay_Off == param) {\n discard;\n return vec4(0);\n}\n`\n ;\n\n// Currently we discard if classifier is pure black (acts as clipping mask).\n// These could be more efficiently handled with masks.\nconst applyPlanarClassificationColor = applyPlanarClassificationPrelude + // eslint-disable-line prefer-template\n `\n float colorMix = u_pClassPointCloud ? .65 : .35;\n vec4 classColor;\n if (kClassifierDisplay_On == param)\n classColor = baseColor;\n else if (!isClassified || kClassifierDisplay_Dimmed == param)\n classColor = vec4(baseColor.rgb * dimScale, baseColor.a);\n else if (kClassifierDisplay_Hilite == param)\n classColor = vec4(mix(baseColor.rgb, u_hilite_settings[0], u_hilite_settings[2][0]), baseColor.a);\n else {\n if (colorTexel.b > colorTexel.a) {\n discard;\n return vec4(0.0);\n }\n\n // NB: colorTexel contains pre-multiplied alpha. We know it is greater than zero from above.\n float alpha = colorTexel.a * baseColor.a;\n vec3 rgb = colorTexel.rgb / colorTexel.a;\n rgb = mix(baseColor.rgb, rgb, colorMix);\n classColor = vec4(rgb, alpha);\n }\n\n if (kClassifierDisplay_Element != param && isClassified) {\n if (colorTexel.r > colorTexel.a && kClassifierDisplay_Hilite != param)\n classColor = vec4(mix(baseColor.rgb, u_hilite_settings[0], u_hilite_settings[2][0]), 1.0);\n\n if (colorTexel.g > colorTexel.a)\n classColor = applyClassifierFlash(classColor);\n }\n\n return classColor;\n`;\n\nconst applyPlanarClassificationColorForThematic = applyPlanarClassificationPrelude + // eslint-disable-line prefer-template\n `\n vec4 classColor = baseColor;\n\n if (kClassifierDisplay_Element == param) {\n if (colorTexel.b > colorTexel.a) {\n discard;\n return vec4(0.0);\n }\n\n // We stashed the element alpha in blue channel. Make sure to handle pre-multiplied alpha.\n baseColor.rgb = baseColor.rgb / baseColor.a;\n classColor = vec4(baseColor.rgb, colorTexel.b);\n classColor.rgb *= classColor.a;\n colorTexel.a = 0.5; // make conditions below potentially pass\n }\n\n if (isClassified) {\n if (colorTexel.r > colorTexel.a && kClassifierDisplay_Hilite != param)\n classColor = vec4(mix(baseColor.rgb, u_hilite_settings[0], u_hilite_settings[2][0]), 1.0);\n\n if (colorTexel.g > colorTexel.a)\n classColor = applyClassifierFlash(classColor);\n }\n\n return classColor;\n`;\n\nconst overrideFeatureId = `\n if (u_pClassColorParams.x != kClassifierDisplay_Element) return currentId;\n vec2 classPos = v_pClassPos / v_pClassPosW;\n vec4 featureTexel = TEXTURE(s_pClassSampler, vec2(classPos.x, (1.0 + classPos.y) / u_pClassColorParams.z));\n return (featureTexel == vec4(0)) ? currentId : addUInt32s(u_batchBase, featureTexel * 255.0) / 255.0;\n `;\n\nconst computeClassifiedHiliteColor = `\n vec2 classPos = v_pClassPos / v_pClassPosW;\n return TEXTURE(s_pClassHiliteSampler, classPos);\n`;\nconst computeClassifiedSurfaceHiliteColor = `\n if (isSurfaceBitSet(kSurfaceBit_HasTexture) && TEXTURE(s_texture, v_texCoord).a <= 0.15)\n return vec4(0.0);\n${computeClassifiedHiliteColor}`;\n\nconst computeClassifierPos = \"vec4 classProj = u_pClassProj * rawPosition; v_pClassPos = classProj.xy;\";\nconst computeInstancedClassifierPos = \"vec4 classProj = u_pClassProj * g_instancedRtcMatrix * rawPosition; v_pClassPos = classProj.xy;\";\nconst computeClassifierPosW = \"v_pClassPosW = classProj.w;\";\n\nconst scratchBytes = new Uint8Array(4);\nconst scratchBatchBaseId = new Uint32Array(scratchBytes.buffer);\nconst scratchBatchBaseComponents = [0, 0, 0, 0];\nconst scratchColorParams = new Float32Array(4); // Unclassified scale, classified base scale, classified classifier scale, content/image count... MaskOnly = 1, ClassifierOnly = 2, ClassifierAndMask = 3\nconst scratchModel = Matrix4d.createIdentity();\nconst scratchModelProjection = Matrix4d.createIdentity();\nconst scratchMatrix = new Matrix4();\n\nfunction addPlanarClassifierCommon(builder: ProgramBuilder) {\n const vert = builder.vert;\n vert.addUniform(\"u_pClassProj\", VariableType.Mat4, (prog) => {\n prog.addGraphicUniform(\"u_pClassProj\", (uniform, params) => {\n const source = expectDefined(params.target.currentPlanarClassifierOrDrape);\n assert(undefined !== source || undefined !== params.target.activeVolumeClassifierTexture);\n if (undefined !== params.target.currentPlanarClassifierOrDrape) {\n source.projectionMatrix.multiplyMatrixMatrix(Matrix4d.createTransform(params.target.currentTransform, scratchModel), scratchModelProjection);\n scratchMatrix.initFromMatrix4d(scratchModelProjection);\n } else\n scratchMatrix.initIdentity(); // needs to be identity for volume classifiers\n uniform.setMatrix4(scratchMatrix);\n });\n });\n\n if (vert.usesInstancedGeometry)\n addInstancedRtcMatrix(vert);\n\n builder.addInlineComputedVarying(\"v_pClassPos\", VariableType.Vec2, vert.usesInstancedGeometry ? computeInstancedClassifierPos : computeClassifierPos);\n builder.addInlineComputedVarying(\"v_pClassPosW\", VariableType.Float, computeClassifierPosW);\n\n addPlanarClassifierConstants(builder.frag);\n}\n\nfunction addPlanarClassifierConstants(builder: ShaderBuilder) {\n builder.addDefine(\"kClassifierDisplay_Off\", SpatialClassifierInsideDisplay.Off.toFixed(1));\n builder.addDefine(\"kClassifierDisplay_On\", SpatialClassifierInsideDisplay.On.toFixed(1));\n builder.addDefine(\"kClassifierDisplay_Dimmed\", SpatialClassifierInsideDisplay.Dimmed.toFixed(1));\n builder.addDefine(\"kClassifierDisplay_Hilite\", SpatialClassifierInsideDisplay.Hilite.toFixed(1));\n builder.addDefine(\"kClassifierDisplay_Element\", SpatialClassifierInsideDisplay.ElementColor.toFixed(1));\n const td = SpatialClassifierInsideDisplay.ElementColor + 1;\n builder.addDefine(\"kTextureDrape\", td.toFixed(1));\n builder.addDefine(\"kTextureContentClassifierOnly\", PlanarClassifierContent.ClassifierOnly.toFixed(1));\n builder.addDefine(\"kTextureContentMaskOnly\", PlanarClassifierContent.MaskOnly.toFixed(1));\n builder.addDefine(\"kTextureContentClassifierAndMask\", PlanarClassifierContent.ClassifierAndMask.toFixed(1));\n}\n\n/** @internal */\nexport function addColorPlanarClassifier(builder: ProgramBuilder, translucent: boolean, isThematic: IsThematic) {\n addPlanarClassifierCommon(builder);\n const frag = builder.frag;\n frag.addUniform(\"s_pClassSampler\", VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(\"s_pClassSampler\", (uniform, params) => {\n const source = params.target.currentPlanarClassifierOrDrape;\n const volClass = params.target.activeVolumeClassifierTexture;\n assert(undefined !== source || undefined !== volClass);\n if (source) {\n assert(undefined !== source.texture);\n source.texture.texture.bindSampler(uniform, TextureUnit.PlanarClassification);\n } else\n Texture2DHandle.bindSampler(uniform, expectDefined(volClass), TextureUnit.PlanarClassification);\n });\n });\n\n frag.addUniform(\"u_pClassColorParams\", VariableType.Vec4, (prog) => {\n prog.addGraphicUniform(\"u_pClassColorParams\", (uniform, params) => {\n const source = params.target.currentPlanarClassifierOrDrape;\n const volClass = params.target.activeVolumeClassifierTexture;\n assert(undefined !== source || undefined !== volClass);\n if (undefined !== source) {\n source.getParams(scratchColorParams);\n } else {\n scratchColorParams[0] = 6.0; // Volume classifier, by element color.\n scratchColorParams[1] = 0.5; // used for alpha value\n scratchColorParams[2] = 0.0; // Not used for volume.\n scratchColorParams[3] = 0.0; // Not used for volume.\n }\n uniform.setUniform4fv(scratchColorParams);\n });\n });\n\n if (isThematic === IsThematic.No) {\n frag.addUniform(\"u_pClassPointCloud\", VariableType.Boolean, (prog) => {\n prog.addGraphicUniform(\"u_pClassPointCloud\", (uniform, params) => {\n const classifier = params.target.currentPlanarClassifier;\n const isPointCloud = undefined !== classifier && classifier.isClassifyingPointCloud;\n uniform.setUniform1i(isPointCloud ? 1 : 0);\n });\n });\n }\n\n addClassifierFlash(frag);\n\n if (translucent)\n // We will never call the shaders for volume classifiers with translucency,\n // so use a different version of the function which does not use glFragCoord to reduce the varyings count\n frag.addFunction(volClassTranslucentColor);\n else {\n addWindowToTexCoords(frag);\n frag.addFunction(volClassOpaqueColor);\n }\n\n addShaderFlags(builder);\n\n frag.set(FragmentShaderComponent.ApplyPlanarClassifier, (isThematic === IsThematic.No) ? applyPlanarClassificationColor : applyPlanarClassificationColorForThematic);\n}\n\n/** @internal */\nexport function addFeaturePlanarClassifier(builder: ProgramBuilder) {\n const frag = builder.frag;\n frag.addUniform(\"u_batchBase\", VariableType.Vec4, (prog) => { // TBD. Instancing.\n prog.addGraphicUniform(\"u_batchBase\", (uniform, params) => {\n const classifier = params.target.currentPlanarClassifier;\n if (classifier !== undefined) {\n scratchBatchBaseId[0] = classifier.baseBatchId;\n scratchBatchBaseComponents[0] = scratchBytes[0];\n scratchBatchBaseComponents[1] = scratchBytes[1];\n scratchBatchBaseComponents[2] = scratchBytes[2];\n scratchBatchBaseComponents[3] = scratchBytes[3];\n }\n uniform.setUniform4fv(scratchBatchBaseComponents);\n });\n });\n frag.set(FragmentShaderComponent.OverrideFeatureId, overrideFeatureId);\n frag.addFunction(addUInt32s);\n}\n\n/** @internal */\nexport function addHilitePlanarClassifier(builder: ProgramBuilder, supportTextures = true) {\n addPlanarClassifierCommon(builder);\n const frag = builder.frag;\n frag.addUniform(\"s_pClassHiliteSampler\", VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(\"s_pClassHiliteSampler\", (uniform, params) => {\n const classifier = expectDefined(params.target.currentPlanarClassifier);\n assert(undefined !== classifier && undefined !== classifier.hiliteTexture);\n classifier.hiliteTexture.texture.bindSampler(uniform, TextureUnit.PlanarClassificationHilite);\n });\n });\n\n frag.set(FragmentShaderComponent.ComputeBaseColor, supportTextures ? computeClassifiedSurfaceHiliteColor : computeClassifiedHiliteColor);\n}\n\n// NonLocatable flag is put in upper bit of blue component when drawing the classification texture.\nconst encodeNonLocatableWithFeatures = `\nvec4 encodeNonLocatable(vec4 clr) {\n float encoded_b = (floor(clr.b * 127.0) + float(extractNthBit(floor(v_feature_emphasis + 0.5), kEmphBit_NonLocatable)) * 128.0) / 255.0;\n return vec4(clr.r, clr.g, encoded_b, clr.a);\n}\n`;\n\nconst encodeNonLocatable = `\nvec4 encodeNonLocatable(vec4 clr) {\n float encoded_b = floor(clr.b * 127.0) / 255.0;\n return vec4(clr.r, clr.g, encoded_b, clr.a);\n}\n`;\n\nconst overrideClassifierColorPrelude = `\n if (0.0 == u_planarClassifierInsideMode)\n return currentColor;\n\n if (0.0 == currentColor.a)\n return encodeNonLocatable(vec4(0.0, 0.0, 1.0, 0.5));\n`;\n\nconst overrideClassifierEmphasis = `\n if (kClassifierDisplay_Element != u_planarClassifierInsideMode) {\n float emph = floor(v_feature_emphasis + 0.5);\n if (0.0 != emph)\n return encodeNonLocatable(vec4(extractNthBit(emph, kEmphBit_Hilite), extractNthBit(emph, kEmphBit_Flash), 0.0, 0.5));\n }\n`;\n\nconst overrideClassifierColorPostlude = `\n return encodeNonLocatable(currentColor);\n`;\n\nconst overrideClassifierWithFeatures = overrideClassifierColorPrelude + overrideClassifierEmphasis + overrideClassifierColorPostlude;\nconst overrideClassifierForClip = overrideClassifierColorPrelude + overrideClassifierColorPostlude;\n\nconst overrideClassifierColorPreludeForThematic = `\n if (0.0 == u_planarClassifierInsideMode)\n return currentColor;\n\n if (0.0 == currentColor.a)\n return encodeNonLocatable(vec4(0.0, 0.0, 1.0, 0.5));\n\n bool isElem = kClassifierDisplay_Element == u_planarClassifierInsideMode;\n`;\n\nconst overrideClassifierEmphasisForThematic = `\n float emph = floor(v_feature_emphasis + 0.5);\n if (0.0 != emph)\n return encodeNonLocatable(vec4(extractNthBit(emph, kEmphBit_Hilite), extractNthBit(emph, kEmphBit_Flash), isElem ? currentColor.a : 0.0, isElem ? 1.0 : 0.5));\n else if (kClassifierDisplay_Element == u_planarClassifierInsideMode)\n return encodeNonLocatable(vec4(0.0, 0.0, currentColor.a, 1.0));\n`;\n\n// Thematic classifiers use alpha of 1 to blend; we just want thematic colors to largely win out except when selecting and flashing classifiers.\nconst overrideClassifierColorPostludeClipForThematic = `\n return encodeNonLocatable(isElem ? vec4(0.0, 0.0, 1.0, 1.0) : currentColor);\n`;\n\nconst overrideClassifierWithFeaturesForThematic = overrideClassifierColorPreludeForThematic + overrideClassifierEmphasisForThematic + overrideClassifierColorPostlude;\nconst overrideClassifierForClipForThematic = overrideClassifierColorPreludeForThematic + overrideClassifierColorPostludeClipForThematic;\n\n/** The classified geometry needs some information about the classifier geometry. The classified fragment shader outputs special values that do not represent valid RGB+A combinations when using\n * pre-multiplied alpha. The alpha channel will be 0.5, and the red, green, and/or blue channels will be 1.0:\n * - Red: hilited.\n * - Green: flashed.\n * - Blue: fully-transparent. Indicates clipping mask (discard the classified pixel).\n * @internal\n */\nexport function addOverrideClassifierColor(builder: ProgramBuilder, isThematic: IsThematic): void {\n addPlanarClassifierConstants(builder.frag);\n builder.frag.addUniform(\"u_planarClassifierInsideMode\", VariableType.Float, (prog) => {\n prog.addGraphicUniform(\"u_planarClassifierInsideMode\", (uniform, params) => {\n const classifier = params.target.currentlyDrawingClassifier;\n const override = undefined !== classifier ? classifier.insideDisplay : 0;\n uniform.setUniform1f(override);\n });\n });\n\n const haveOverrides = undefined !== builder.frag.find(\"v_feature_emphasis\");\n builder.frag.addFunction(haveOverrides ? encodeNonLocatableWithFeatures : encodeNonLocatable);\n if (isThematic === IsThematic.No)\n builder.frag.set(FragmentShaderComponent.OverrideColor, haveOverrides ? overrideClassifierWithFeatures : overrideClassifierForClip);\n else\n builder.frag.set(FragmentShaderComponent.OverrideColor, haveOverrides ? overrideClassifierWithFeaturesForThematic : overrideClassifierForClipForThematic);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"PlanarGrid.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/PlanarGrid.ts"],"names":[],"mappings":"AAIA;;GAEG;AAKH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAyCjD,gBAAgB;AAChB,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CA6C9F"}
1
+ {"version":3,"file":"PlanarGrid.d.ts","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/PlanarGrid.ts"],"names":[],"mappings":"AAIA;;GAEG;AAMH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAyCjD,gBAAgB;AAChB,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa,CA6C9F"}
@@ -8,6 +8,7 @@
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.default = createPlanarGridProgram;
11
+ const core_bentley_1 = require("@itwin/core-bentley");
11
12
  const RenderSystem_1 = require("../../../../render/RenderSystem");
12
13
  const AttributeMap_1 = require("../AttributeMap");
13
14
  const ShaderBuilder_1 = require("../ShaderBuilder");
@@ -65,20 +66,20 @@ function createPlanarGridProgram(context) {
65
66
  builder.addFunctionComputedVarying("v_texCoord", 3 /* VariableType.Vec2 */, "computeTexCoord", computeTexCoord);
66
67
  vert.addUniform("u_qTexCoordParams", 5 /* VariableType.Vec4 */, (prog) => {
67
68
  prog.addGraphicUniform("u_qTexCoordParams", (uniform, params) => {
68
- const planarGrid = params.geometry.asPlanarGrid;
69
+ const planarGrid = (0, core_bentley_1.expectDefined)(params.geometry.asPlanarGrid);
69
70
  uniform.setUniform4fv(planarGrid.uvParams.params);
70
71
  });
71
72
  });
72
73
  frag.addUniform("u_gridColor", 4 /* VariableType.Vec3 */, (prog) => {
73
74
  prog.addGraphicUniform("u_gridColor", (uniform, params) => {
74
- const planarGrid = params.geometry.asPlanarGrid;
75
+ const planarGrid = (0, core_bentley_1.expectDefined)(params.geometry.asPlanarGrid);
75
76
  const color = planarGrid.props.color.colors;
76
77
  uniform.setUniform3fv([color.r / 255, color.g / 255, color.b / 255]);
77
78
  });
78
79
  });
79
80
  frag.addUniform("u_gridProps", 5 /* VariableType.Vec4 */, (prog) => {
80
81
  prog.addGraphicUniform("u_gridProps", (uniform, params) => {
81
- const planarGridProps = params.geometry.asPlanarGrid.props;
82
+ const planarGridProps = (0, core_bentley_1.expectDefined)(params.geometry.asPlanarGrid).props;
82
83
  const transparency = planarGridProps.transparency ? planarGridProps.transparency : defaultTransparency;
83
84
  uniform.setUniform4fv([planarGridProps.gridsPerRef, 1.0 - transparency.planeTransparency, 1.0 - transparency.lineTransparency, 1.0 - transparency.refTransparency]);
84
85
  });
@@ -1 +1 @@
1
- {"version":3,"file":"PlanarGrid.js","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/PlanarGrid.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module WebGL\n */\n\nimport { PlanarGridTransparency } from \"../../../../render/RenderSystem\";\nimport { AttributeMap } from \"../AttributeMap\";\nimport { FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\nimport { ShaderProgram } from \"../ShaderProgram\";\nimport { System } from \"../System\";\nimport { TechniqueId } from \"../TechniqueId\";\nimport { addShaderFlags } from \"./Common\";\nimport { unquantize2d } from \"./Decode\";\nimport { addLogDepth } from \"./LogarithmicDepthBuffer\";\nimport { addTranslucency } from \"./Translucency\";\nimport { addModelViewProjectionMatrix } from \"./Vertex\";\n\nconst computePosition = \"gl_PointSize = 1.0; return MAT_MVP * rawPos;\";\nconst computeTexCoord = \"return unquantize2d(a_uvParam, u_qTexCoordParams);\";\n\nconst computeBaseColor = `\n // u_gridProps - x = gridsPerRef, y - planeAlpha, z = line alpha, w = ref alpha.\n vec4 color = vec4(u_gridColor, u_gridProps.y);\n float refsPerGrid = u_gridProps.x;\n if (0.0 == refsPerGrid || !drawGridLine(color, 1.0 / refsPerGrid, u_gridProps.w - color.a))\n drawGridLine(color, 1.0, u_gridProps.z - color.a);\n\n return color;\n`;\n\nconst drawGridLine = `\n bool drawGridLine(inout vec4 color, float mult, float alphaScale) {\n vec2 scaledTexCoord = v_texCoord * mult;\n vec2 deriv = mult * screenSpaceDeriv(v_texCoord);\n if (deriv.x != 0.0 && deriv.y != 0.0) {\n vec2 grid = abs(fract(mult * v_texCoord - 0.5) - 0.5) / deriv;\n float line = min(grid.x, grid.y);\n if (line < 1.0) {\n color.a += alphaScale * (1.0 - min(line, 1.0)) / max(1.0, length(deriv));\n return true;\n }\n }\n return false;\n }\n`;\n\nconst fwidth2d = `\\nvec2 screenSpaceDeriv(vec2 screenXY) { return fwidth(screenXY); }\\n`;\n\nconst defaultTransparency = new PlanarGridTransparency();\n/** @internal */\nexport default function createPlanarGridProgram(context: WebGL2RenderingContext): ShaderProgram {\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.PlanarGrid, false));\n const vert = builder.vert;\n const frag = builder.frag;\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\n addModelViewProjectionMatrix(vert);\n addShaderFlags(builder);\n\n addTranslucency(builder);\n frag.addFunction(fwidth2d);\n\n if (System.instance.supportsLogZBuffer)\n addLogDepth(builder);\n\n frag.addFunction(drawGridLine);\n\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColor);\n\n vert.headerComment = `//!V! PlanarGrid`;\n frag.headerComment = `//!F! PlanarGrid`;\n\n vert.addFunction(unquantize2d);\n builder.addFunctionComputedVarying(\"v_texCoord\", VariableType.Vec2, \"computeTexCoord\", computeTexCoord);\n vert.addUniform(\"u_qTexCoordParams\", VariableType.Vec4, (prog) => {\n prog.addGraphicUniform(\"u_qTexCoordParams\", (uniform, params) => {\n const planarGrid = params.geometry.asPlanarGrid!;\n uniform.setUniform4fv(planarGrid.uvParams.params);\n });\n });\n frag.addUniform(\"u_gridColor\", VariableType.Vec3, (prog) => {\n prog.addGraphicUniform(\"u_gridColor\", (uniform, params) => {\n const planarGrid = params.geometry.asPlanarGrid!;\n const color = planarGrid.props.color.colors;\n uniform.setUniform3fv([color.r / 255, color.g / 255, color.b / 255]);\n });\n });\n frag.addUniform(\"u_gridProps\", VariableType.Vec4, (prog) => {\n prog.addGraphicUniform(\"u_gridProps\", (uniform, params) => {\n const planarGridProps = params.geometry.asPlanarGrid!.props;\n const transparency = planarGridProps.transparency ? planarGridProps.transparency : defaultTransparency;\n uniform.setUniform4fv([planarGridProps.gridsPerRef, 1.0 - transparency.planeTransparency, 1.0 - transparency.lineTransparency, 1.0 - transparency.refTransparency]);\n });\n });\n\n return builder.buildProgram(context);\n}\n\n"]}
1
+ {"version":3,"file":"PlanarGrid.js","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/PlanarGrid.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module WebGL\n */\n\nimport { expectDefined } from \"@itwin/core-bentley\";\nimport { PlanarGridTransparency } from \"../../../../render/RenderSystem\";\nimport { AttributeMap } from \"../AttributeMap\";\nimport { FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\nimport { ShaderProgram } from \"../ShaderProgram\";\nimport { System } from \"../System\";\nimport { TechniqueId } from \"../TechniqueId\";\nimport { addShaderFlags } from \"./Common\";\nimport { unquantize2d } from \"./Decode\";\nimport { addLogDepth } from \"./LogarithmicDepthBuffer\";\nimport { addTranslucency } from \"./Translucency\";\nimport { addModelViewProjectionMatrix } from \"./Vertex\";\n\nconst computePosition = \"gl_PointSize = 1.0; return MAT_MVP * rawPos;\";\nconst computeTexCoord = \"return unquantize2d(a_uvParam, u_qTexCoordParams);\";\n\nconst computeBaseColor = `\n // u_gridProps - x = gridsPerRef, y - planeAlpha, z = line alpha, w = ref alpha.\n vec4 color = vec4(u_gridColor, u_gridProps.y);\n float refsPerGrid = u_gridProps.x;\n if (0.0 == refsPerGrid || !drawGridLine(color, 1.0 / refsPerGrid, u_gridProps.w - color.a))\n drawGridLine(color, 1.0, u_gridProps.z - color.a);\n\n return color;\n`;\n\nconst drawGridLine = `\n bool drawGridLine(inout vec4 color, float mult, float alphaScale) {\n vec2 scaledTexCoord = v_texCoord * mult;\n vec2 deriv = mult * screenSpaceDeriv(v_texCoord);\n if (deriv.x != 0.0 && deriv.y != 0.0) {\n vec2 grid = abs(fract(mult * v_texCoord - 0.5) - 0.5) / deriv;\n float line = min(grid.x, grid.y);\n if (line < 1.0) {\n color.a += alphaScale * (1.0 - min(line, 1.0)) / max(1.0, length(deriv));\n return true;\n }\n }\n return false;\n }\n`;\n\nconst fwidth2d = `\\nvec2 screenSpaceDeriv(vec2 screenXY) { return fwidth(screenXY); }\\n`;\n\nconst defaultTransparency = new PlanarGridTransparency();\n/** @internal */\nexport default function createPlanarGridProgram(context: WebGL2RenderingContext): ShaderProgram {\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.PlanarGrid, false));\n const vert = builder.vert;\n const frag = builder.frag;\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\n addModelViewProjectionMatrix(vert);\n addShaderFlags(builder);\n\n addTranslucency(builder);\n frag.addFunction(fwidth2d);\n\n if (System.instance.supportsLogZBuffer)\n addLogDepth(builder);\n\n frag.addFunction(drawGridLine);\n\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColor);\n\n vert.headerComment = `//!V! PlanarGrid`;\n frag.headerComment = `//!F! PlanarGrid`;\n\n vert.addFunction(unquantize2d);\n builder.addFunctionComputedVarying(\"v_texCoord\", VariableType.Vec2, \"computeTexCoord\", computeTexCoord);\n vert.addUniform(\"u_qTexCoordParams\", VariableType.Vec4, (prog) => {\n prog.addGraphicUniform(\"u_qTexCoordParams\", (uniform, params) => {\n const planarGrid = expectDefined(params.geometry.asPlanarGrid);\n uniform.setUniform4fv(planarGrid.uvParams.params);\n });\n });\n frag.addUniform(\"u_gridColor\", VariableType.Vec3, (prog) => {\n prog.addGraphicUniform(\"u_gridColor\", (uniform, params) => {\n const planarGrid = expectDefined(params.geometry.asPlanarGrid);\n const color = planarGrid.props.color.colors;\n uniform.setUniform3fv([color.r / 255, color.g / 255, color.b / 255]);\n });\n });\n frag.addUniform(\"u_gridProps\", VariableType.Vec4, (prog) => {\n prog.addGraphicUniform(\"u_gridProps\", (uniform, params) => {\n const planarGridProps = expectDefined(params.geometry.asPlanarGrid).props;\n const transparency = planarGridProps.transparency ? planarGridProps.transparency : defaultTransparency;\n uniform.setUniform4fv([planarGridProps.gridsPerRef, 1.0 - transparency.planeTransparency, 1.0 - transparency.lineTransparency, 1.0 - transparency.refTransparency]);\n });\n });\n\n return builder.buildProgram(context);\n}\n\n"]}
@@ -51,7 +51,7 @@ function addTextures(builder, maxTexturesPerMesh) {
51
51
  builder.addFunctionComputedVarying("v_texCoord", 3 /* VariableType.Vec2 */, "computeTexCoord", computeTexCoord);
52
52
  builder.vert.addUniform("u_qTexCoordParams", 5 /* VariableType.Vec4 */, (prog) => {
53
53
  prog.addGraphicUniform("u_qTexCoordParams", (uniform, params) => {
54
- const realityMesh = params.geometry.asRealityMesh;
54
+ const realityMesh = (0, core_bentley_1.expectDefined)(params.geometry.asRealityMesh);
55
55
  if (undefined !== realityMesh.uvQParams) {
56
56
  uniform.setUniform4fv(realityMesh.uvQParams);
57
57
  }
@@ -59,7 +59,7 @@ function addTextures(builder, maxTexturesPerMesh) {
59
59
  });
60
60
  builder.frag.addUniform("u_texturesPresent", 0 /* VariableType.Boolean */, (program) => {
61
61
  program.addGraphicUniform("u_texturesPresent", (uniform, params) => {
62
- uniform.setUniform1i(params.geometry.asRealityMesh.hasTextures ? 1 : 0);
62
+ uniform.setUniform1i((0, core_bentley_1.expectDefined)(params.geometry.asRealityMesh).hasTextures ? 1 : 0);
63
63
  });
64
64
  });
65
65
  for (let i = 0; i < maxTexturesPerMesh; i++) {
@@ -67,7 +67,7 @@ function addTextures(builder, maxTexturesPerMesh) {
67
67
  builder.frag.addUniform(textureLabel, 8 /* VariableType.Sampler2D */, (prog) => {
68
68
  prog.addGraphicUniform(textureLabel, (uniform, params) => {
69
69
  const textureUnits = [RenderFlags_1.TextureUnit.RealityMesh0, RenderFlags_1.TextureUnit.RealityMesh1, params.target.drawForReadPixels ? RenderFlags_1.TextureUnit.ShadowMap : RenderFlags_1.TextureUnit.PickDepthAndOrder, RenderFlags_1.TextureUnit.RealityMesh3, RenderFlags_1.TextureUnit.RealityMesh4, RenderFlags_1.TextureUnit.RealityMesh5];
70
- const realityMesh = params.geometry.asRealityMesh;
70
+ const realityMesh = (0, core_bentley_1.expectDefined)(params.geometry.asRealityMesh);
71
71
  const realityTexture = realityMesh.textureParams ? realityMesh.textureParams.params[i].texture : undefined;
72
72
  if (realityTexture !== undefined) {
73
73
  const texture = realityTexture;
@@ -81,24 +81,24 @@ function addTextures(builder, maxTexturesPerMesh) {
81
81
  const paramsLabel = `u_texParams${i}`, matrixLabel = `u_texMatrix${i}`;
82
82
  builder.frag.addUniform(matrixLabel, 7 /* VariableType.Mat4 */, (prog) => {
83
83
  prog.addGraphicUniform(matrixLabel, (uniform, params) => {
84
- const realityMesh = params.geometry.asRealityMesh;
84
+ const realityMesh = (0, core_bentley_1.expectDefined)(params.geometry.asRealityMesh);
85
85
  const textureParam = realityMesh.textureParams?.params[i];
86
86
  (0, core_bentley_1.assert)(undefined !== textureParam);
87
87
  if (undefined !== textureParam) {
88
88
  const projectionMatrix = textureParam.getProjectionMatrix();
89
89
  if (projectionMatrix) {
90
- const eyeToModel = core_geometry_1.Matrix4d.createTransform(params.target.uniforms.frustum.viewMatrix.inverse(), scratchMatrix4d1);
90
+ const eyeToModel = core_geometry_1.Matrix4d.createTransform((0, core_bentley_1.expectDefined)(params.target.uniforms.frustum.viewMatrix.inverse()), scratchMatrix4d1);
91
91
  const eyeToTexture = projectionMatrix.multiplyMatrixMatrix(eyeToModel, scratchMatrix4d2);
92
92
  uniform.setMatrix4(Matrix_1.Matrix4.fromMatrix4d(eyeToTexture, scratchMatrix));
93
93
  }
94
94
  else
95
- uniform.setMatrix4(textureParam.getTerrainMatrix());
95
+ uniform.setMatrix4((0, core_bentley_1.expectDefined)(textureParam.getTerrainMatrix()));
96
96
  }
97
97
  });
98
98
  });
99
99
  builder.frag.addUniform(paramsLabel, 7 /* VariableType.Mat4 */, (prog) => {
100
100
  prog.addGraphicUniform(paramsLabel, (uniform, params) => {
101
- const realityMesh = params.geometry.asRealityMesh;
101
+ const realityMesh = (0, core_bentley_1.expectDefined)(params.geometry.asRealityMesh);
102
102
  const textureParam = realityMesh.textureParams?.params[i];
103
103
  (0, core_bentley_1.assert)(undefined !== textureParam);
104
104
  if (undefined !== textureParam) {
@@ -221,7 +221,7 @@ function createRealityMeshBuilder(flags) {
221
221
  frag.set(1 /* FragmentShaderComponent.ComputeBaseColor */, computeFragmentBaseColor);
222
222
  builder.frag.addUniform("u_baseColor", 5 /* VariableType.Vec4 */, (prog) => {
223
223
  prog.addGraphicUniform("u_baseColor", (uniform, params) => {
224
- const realityMesh = params.geometry.asRealityMesh;
224
+ const realityMesh = (0, core_bentley_1.expectDefined)(params.geometry.asRealityMesh);
225
225
  const baseColor = (realityMesh.baseColor ? realityMesh.baseColor : core_common_1.ColorDef.create(0xff000000)).colors;
226
226
  uniform.setUniform4fv([baseColor.r / 255, baseColor.g / 255, baseColor.b / 255, 1 - baseColor.t / 255]);
227
227
  });
@@ -1 +1 @@
1
- {"version":3,"file":"RealityMesh.js","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/RealityMesh.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module WebGL\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { ColorDef } from \"@itwin/core-common\";\nimport { Matrix4d } from \"@itwin/core-geometry\";\nimport { AttributeMap } from \"../AttributeMap\";\nimport { Matrix4 } from \"../Matrix\";\nimport { TextureUnit } from \"../RenderFlags\";\nimport { FragmentShaderComponent, ProgramBuilder, ShaderBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\nimport { System } from \"../System\";\nimport { FeatureMode, IsShadowable, IsThematic, TechniqueFlags } from \"../TechniqueFlags\";\nimport { TechniqueId } from \"../TechniqueId\";\nimport { Texture } from \"../Texture\";\nimport { addAtmosphericScatteringEffect } from \"./Atmosphere\";\nimport { addVaryingColor } from \"./Color\";\nimport { addEyeSpace, addShaderFlags, addUInt32s } from \"./Common\";\nimport { decodeDepthRgb, unquantize2d } from \"./Decode\";\nimport { addFeatureSymbology, addHiliter, FeatureSymbologyOptions } from \"./FeatureSymbology\";\nimport { addAltPickBufferOutputs, addPickBufferOutputs, assignFragColor } from \"./Fragment\";\nimport { addColorPlanarClassifier, addFeaturePlanarClassifier, addHilitePlanarClassifier } from \"./PlanarClassification\";\nimport { addSolarShadowMap } from \"./SolarShadowMapping\";\nimport { addClassificationTranslucencyDiscard, octDecodeNormal } from \"./Surface\";\nimport { addThematicDisplay, getComputeThematicIndex } from \"./Thematic\";\nimport { addModelViewProjectionMatrix, addNormalMatrix } from \"./Vertex\";\nimport { addWiremesh } from \"./Wiremesh\";\nimport { applyTexture, overrideFeatureId, testInside } from \"./MaplayerDraping\";\n\nconst computePosition = \"gl_PointSize = 1.0; return MAT_MVP * rawPos;\";\nconst computeNormal = `\n vec3 normal = octDecodeNormal(a_norm); // normal coming in for is already in world space\n g_hillshadeIndex = normal.z; // save off world Z for thematic hill shade mode index\n return normalize(u_worldToViewN * normal);\n`;\n\nexport const finalizeNormal = `\n return normalize(v_n) * (2.0 * float(gl_FrontFacing) - 1.0);\n`;\n\nconst computeTexCoord = \"return unquantize2d(a_uvParam, u_qTexCoordParams);\";\nconst scratchMatrix4d1 = Matrix4d.createIdentity();\nconst scratchMatrix4d2 = Matrix4d.createIdentity();\nconst scratchMatrix = new Matrix4();\n\nfunction addTextures(builder: ProgramBuilder, maxTexturesPerMesh: number) {\n builder.vert.addFunction(unquantize2d);\n builder.addFunctionComputedVarying(\"v_texCoord\", VariableType.Vec2, \"computeTexCoord\", computeTexCoord);\n builder.vert.addUniform(\"u_qTexCoordParams\", VariableType.Vec4, (prog) => {\n prog.addGraphicUniform(\"u_qTexCoordParams\", (uniform, params) => {\n const realityMesh = params.geometry.asRealityMesh!;\n if (undefined !== realityMesh.uvQParams) {\n uniform.setUniform4fv(realityMesh.uvQParams);\n }\n });\n });\n\n builder.frag.addUniform(\"u_texturesPresent\", VariableType.Boolean, (program) => {\n program.addGraphicUniform(\"u_texturesPresent\", (uniform, params) => {\n uniform.setUniform1i(params.geometry.asRealityMesh!.hasTextures ? 1 : 0);\n });\n });\n\n for (let i = 0; i < maxTexturesPerMesh; i++) {\n const textureLabel = `s_texture${i}`;\n builder.frag.addUniform(textureLabel, VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(textureLabel, (uniform, params) => {\n const textureUnits = [TextureUnit.RealityMesh0, TextureUnit.RealityMesh1, params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder, TextureUnit.RealityMesh3, TextureUnit.RealityMesh4, TextureUnit.RealityMesh5];\n const realityMesh = params.geometry.asRealityMesh!;\n const realityTexture = realityMesh.textureParams ? realityMesh.textureParams.params[i].texture : undefined;\n if (realityTexture !== undefined) {\n const texture = realityTexture as Texture;\n texture.texture.bindSampler(uniform, textureUnits[i]);\n } else {\n System.instance.ensureSamplerBound(uniform, textureUnits[i]);\n }\n });\n });\n const paramsLabel = `u_texParams${i}`, matrixLabel = `u_texMatrix${i}`;\n builder.frag.addUniform(matrixLabel, VariableType.Mat4, (prog) => {\n prog.addGraphicUniform(matrixLabel, (uniform, params) => {\n const realityMesh = params.geometry.asRealityMesh!;\n const textureParam = realityMesh.textureParams?.params[i];\n assert(undefined !== textureParam);\n if (undefined !== textureParam) {\n const projectionMatrix = textureParam.getProjectionMatrix();\n if (projectionMatrix) {\n const eyeToModel = Matrix4d.createTransform(params.target.uniforms.frustum.viewMatrix.inverse()!, scratchMatrix4d1);\n const eyeToTexture = projectionMatrix.multiplyMatrixMatrix(eyeToModel, scratchMatrix4d2);\n uniform.setMatrix4(Matrix4.fromMatrix4d(eyeToTexture, scratchMatrix));\n } else\n uniform.setMatrix4(textureParam.getTerrainMatrix()!);\n }\n });\n });\n builder.frag.addUniform(paramsLabel, VariableType.Mat4, (prog) => {\n prog.addGraphicUniform(paramsLabel, (uniform, params) => {\n const realityMesh = params.geometry.asRealityMesh!;\n const textureParam = realityMesh.textureParams?.params[i];\n assert(undefined !== textureParam);\n if (undefined !== textureParam) {\n uniform.setMatrix4(textureParam.getParams(scratchMatrix));\n }\n });\n });\n }\n}\nfunction baseColorFromTextures(textureCount: number, applyFeatureColor: string) {\n const applyTextureStrings = [];\n\n for (let i = 0; i < textureCount; i++)\n applyTextureStrings.push(`if (applyTexture(col, s_texture${i}, u_texParams${i}, u_texMatrix${i})) doDiscard = false; `);\n\n return `\n if (!u_texturesPresent) {\n vec4 col = u_baseColor;\n ${applyFeatureColor}\n return col;\n }\n\n bool doDiscard = true;\n vec4 col = u_baseColor;\n ${applyTextureStrings.join(\"\\n \")}\n if (doDiscard)\n discard;\n\n ${applyFeatureColor}\n\n return col;\n`;\n}\n\n// feature_rgb.r = -1.0 if rgb color not overridden for feature.\n// feature_alpha = -1.0 if alpha not overridden for feature.\nconst mixFeatureColor = `\n col.rgb = mix(col.rgb, mix(col.rgb, v_color.rgb, u_overrideColorMix), step(0.0, v_color.r));\n col.a = mix(col.a, v_color.a, step(0.0, v_color.a));\n `;\n\nfunction addThematicToRealityMesh(builder: ProgramBuilder, gradientTextureUnit: TextureUnit) {\n addNormalMatrix(builder.vert);\n builder.vert.addFunction(octDecodeNormal);\n builder.vert.addGlobal(\"g_hillshadeIndex\", VariableType.Float);\n builder.addFunctionComputedVarying(\"v_n\", VariableType.Vec3, \"computeLightingNormal\", computeNormal);\n builder.frag.addGlobal(\"g_normal\", VariableType.Vec3);\n builder.frag.set(FragmentShaderComponent.FinalizeNormal, finalizeNormal);\n addThematicDisplay(builder, false, true);\n builder.addInlineComputedVarying(\"v_thematicIndex\", VariableType.Float, getComputeThematicIndex(builder.vert.usesInstancedGeometry, false, false));\n builder.vert.addUniform(\"u_worldToViewN\", VariableType.Mat3, (prog) => {\n prog.addGraphicUniform(\"u_worldToViewN\", (uniform, params) => {\n params.target.uniforms.branch.bindWorldToViewNTransform(uniform, params.geometry, false);\n });\n });\n builder.frag.addUniform(\"s_texture\", VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(\"s_texture\", (uniform, params) => {\n params.target.uniforms.thematic.bindTexture(uniform, gradientTextureUnit >= 0 ? gradientTextureUnit : (params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder));\n });\n });\n}\n\n/** @internal */\nexport function addColorOverrideMix(frag: ShaderBuilder) {\n frag.addUniform(\"u_overrideColorMix\", VariableType.Float, (prog) => {\n prog.addGraphicUniform(\"u_overrideColorMix\", (uniform, params) => {\n params.target.uniforms.realityModel.bindOverrideColorMix(uniform);\n });\n });\n}\n\nfunction createRealityMeshHiliterBuilder(): ProgramBuilder {\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\n const vert = builder.vert;\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\n addModelViewProjectionMatrix(vert);\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\n return builder;\n\n}\n\n/** @internal */\nexport function createClassifierRealityMeshHiliter(): ProgramBuilder {\n const builder = createRealityMeshHiliterBuilder();\n addHilitePlanarClassifier(builder, false);\n return builder;\n}\n\n/** @internal */\nexport function createRealityMeshHiliter(): ProgramBuilder {\n const builder = createRealityMeshHiliterBuilder();\n addHiliter(builder, false);\n return builder;\n}\n\n/** @internal */\nexport function createRealityMeshBuilder(flags: TechniqueFlags): ProgramBuilder {\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\n const vert = builder.vert;\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\n addModelViewProjectionMatrix(vert);\n\n if (flags.isShadowable === IsShadowable.Yes)\n addSolarShadowMap(builder, true);\n\n const frag = builder.frag;\n frag.addGlobal(\"featureIncrement\", VariableType.Float, \"0.0\");\n frag.addGlobal(\"classifierId\", VariableType.Vec4);\n frag.set(FragmentShaderComponent.OverrideFeatureId, overrideFeatureId);\n const textureCount = System.instance.maxRealityImageryLayers;\n const gradientTextureUnit = TextureUnit.RealityMeshThematicGradient;\n\n const feat = flags.featureMode;\n let opts = FeatureMode.Overrides === feat ? FeatureSymbologyOptions.Surface : FeatureSymbologyOptions.None;\n let applyFragmentFeatureColor = \"\";\n\n if (flags.isClassified) {\n opts &= ~FeatureSymbologyOptions.Alpha;\n addColorPlanarClassifier(builder, flags.isTranslucent, flags.isThematic);\n addClassificationTranslucencyDiscard(builder);\n }\n\n addFeatureSymbology(builder, feat, opts);\n if (feat === FeatureMode.Overrides) {\n addShaderFlags(builder);\n addVaryingColor(builder, \"return vec4(-1.0, -1.0, -1.0, -1.0);\");\n applyFragmentFeatureColor = mixFeatureColor;\n addColorOverrideMix(builder.frag);\n }\n const computeFragmentBaseColor = baseColorFromTextures(textureCount, applyFragmentFeatureColor);\n\n frag.addFunction(addUInt32s);\n frag.addFunction(testInside);\n addEyeSpace(builder);\n frag.addFunction(applyTexture(true));\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\n builder.frag.addUniform(\"u_baseColor\", VariableType.Vec4, (prog) => {\n prog.addGraphicUniform(\"u_baseColor\", (uniform, params) => {\n const realityMesh = params.geometry.asRealityMesh!;\n const baseColor = (realityMesh.baseColor ? realityMesh.baseColor : ColorDef.create(0xff000000)).colors;\n uniform.setUniform4fv([baseColor.r / 255, baseColor.g / 255, baseColor.b / 255, 1 - baseColor.t / 255]);\n });\n });\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\n if (!flags.isTranslucent) {\n if (FeatureMode.None !== feat) {\n if (flags.isClassified)\n addFeaturePlanarClassifier(builder);\n\n builder.frag.addFunction(decodeDepthRgb);\n if (flags.isClassified)\n addPickBufferOutputs(builder.frag);\n else\n addAltPickBufferOutputs(builder.frag);\n }\n }\n\n addTextures(builder, textureCount);\n\n if (IsThematic.Yes === flags.isThematic)\n addThematicToRealityMesh(builder, gradientTextureUnit);\n\n if (flags.isWiremesh)\n addWiremesh(builder);\n\n if (flags.enableAtmosphere)\n addAtmosphericScatteringEffect(builder, false, false);\n\n return builder;\n}\n"]}
1
+ {"version":3,"file":"RealityMesh.js","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/RealityMesh.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AA+JH,kDAMC;AAaD,gFAIC;AAGD,4DAIC;AAGD,4DAyEC;AAvQD,sDAA4D;AAC5D,oDAA8C;AAC9C,wDAAgD;AAChD,kDAA+C;AAC/C,sCAAoC;AACpC,gDAA6C;AAC7C,oDAA+H;AAC/H,sCAAmC;AAInC,6CAA8D;AAC9D,mCAA0C;AAC1C,qCAAmE;AACnE,qCAAwD;AACxD,yDAA8F;AAC9F,yCAA4F;AAC5F,iEAAyH;AACzH,6DAAyD;AACzD,uCAAkF;AAClF,yCAAyE;AACzE,qCAAyE;AACzE,yCAAyC;AACzC,uDAAgF;AAEhF,MAAM,eAAe,GAAG,8CAA8C,CAAC;AACvE,MAAM,aAAa,GAAG;;;;CAIrB,CAAC;AAEW,QAAA,cAAc,GAAG;;CAE7B,CAAC;AAEF,MAAM,eAAe,GAAG,oDAAoD,CAAC;AAC7E,MAAM,gBAAgB,GAAG,wBAAQ,CAAC,cAAc,EAAE,CAAC;AACnD,MAAM,gBAAgB,GAAG,wBAAQ,CAAC,cAAc,EAAE,CAAC;AACnD,MAAM,aAAa,GAAG,IAAI,gBAAO,EAAE,CAAC;AAEpC,SAAS,WAAW,CAAC,OAAuB,EAAE,kBAA0B;IACtE,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,qBAAY,CAAC,CAAC;IACvC,OAAO,CAAC,0BAA0B,CAAC,YAAY,6BAAqB,iBAAiB,EAAE,eAAe,CAAC,CAAC;IACxG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,6BAAqB,CAAC,IAAI,EAAE,EAAE;QACvE,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC9D,MAAM,WAAW,GAAG,IAAA,4BAAa,EAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YACjE,IAAI,SAAS,KAAK,WAAW,CAAC,SAAS,EAAE,CAAC;gBACxC,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,gCAAwB,CAAC,OAAO,EAAE,EAAE;QAC7E,OAAO,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACjE,OAAO,CAAC,YAAY,CAAC,IAAA,4BAAa,EAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,MAAM,YAAY,GAAG,YAAY,CAAC,EAAE,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,kCAA0B,CAAC,IAAI,EAAE,EAAE;YACrE,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACvD,MAAM,YAAY,GAAG,CAAC,yBAAW,CAAC,YAAY,EAAE,yBAAW,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,yBAAW,CAAC,SAAS,CAAC,CAAC,CAAC,yBAAW,CAAC,iBAAiB,EAAE,yBAAW,CAAC,YAAY,EAAE,yBAAW,CAAC,YAAY,EAAE,yBAAW,CAAC,YAAY,CAAC,CAAC;gBACjP,MAAM,WAAW,GAAG,IAAA,4BAAa,EAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;gBACjE,MAAM,cAAc,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC3G,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;oBACjC,MAAM,OAAO,GAAG,cAAyB,CAAC;oBAC1C,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxD,CAAC;qBAAM,CAAC;oBACN,eAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/D,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,cAAc,CAAC,EAAE,EAAE,WAAW,GAAG,cAAc,CAAC,EAAE,CAAC;QACvE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,6BAAqB,CAAC,IAAI,EAAE,EAAE;YAC/D,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACtD,MAAM,WAAW,GAAG,IAAA,4BAAa,EAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;gBACjE,MAAM,YAAY,GAAG,WAAW,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC1D,IAAA,qBAAM,EAAC,SAAS,KAAK,YAAY,CAAC,CAAC;gBACnC,IAAI,SAAS,KAAK,YAAY,EAAE,CAAC;oBAC/B,MAAM,gBAAgB,GAAG,YAAY,CAAC,mBAAmB,EAAE,CAAC;oBAC5D,IAAI,gBAAgB,EAAE,CAAC;wBACrB,MAAM,UAAU,GAAG,wBAAQ,CAAC,eAAe,CAAC,IAAA,4BAAa,EAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,gBAAgB,CAAC,CAAC;wBAClI,MAAM,YAAY,GAAG,gBAAgB,CAAC,oBAAoB,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;wBACzF,OAAO,CAAC,UAAU,CAAC,gBAAO,CAAC,YAAY,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC;oBACxE,CAAC;;wBACC,OAAO,CAAC,UAAU,CAAC,IAAA,4BAAa,EAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;gBACvE,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,6BAAqB,CAAC,IAAI,EAAE,EAAE;YAC/D,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACtD,MAAM,WAAW,GAAG,IAAA,4BAAa,EAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;gBACjE,MAAM,YAAY,GAAG,WAAW,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC1D,IAAA,qBAAM,EAAC,SAAS,KAAK,YAAY,CAAC,CAAC;gBACnC,IAAI,SAAS,KAAK,YAAY,EAAE,CAAC;oBAC/B,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AACD,SAAS,qBAAqB,CAAC,YAAoB,EAAE,iBAAyB;IAC5E,MAAM,mBAAmB,GAAG,EAAE,CAAC;IAE/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE;QACnC,mBAAmB,CAAC,IAAI,CAAC,kCAAkC,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,CAAC;IAE1H,OAAO;;;MAGH,iBAAiB;;;;;;IAMnB,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC;;;;IAIhC,iBAAiB;;;CAGpB,CAAC;AACF,CAAC;AAED,gEAAgE;AAChE,4DAA4D;AAC5D,MAAM,eAAe,GAAG;;;GAGrB,CAAC;AAEJ,SAAS,wBAAwB,CAAC,OAAuB,EAAE,mBAAgC;IACzF,IAAA,wBAAe,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,yBAAe,CAAC,CAAC;IAC1C,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,6BAAqB,CAAC;IAC/D,OAAO,CAAC,0BAA0B,CAAC,KAAK,6BAAqB,uBAAuB,EAAE,aAAa,CAAC,CAAC;IACrG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,4BAAoB,CAAC;IACtD,OAAO,CAAC,IAAI,CAAC,GAAG,kDAAyC,sBAAc,CAAC,CAAC;IACzE,IAAA,6BAAkB,EAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACzC,OAAO,CAAC,wBAAwB,CAAC,iBAAiB,8BAAsB,IAAA,kCAAuB,EAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IACnJ,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,6BAAqB,CAAC,IAAI,EAAE,EAAE;QACpE,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3D,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,yBAAyB,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC3F,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,kCAA0B,CAAC,IAAI,EAAE,EAAE;QACpE,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACtD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,mBAAmB,IAAI,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,yBAAW,CAAC,SAAS,CAAC,CAAC,CAAC,yBAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACnM,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,gBAAgB;AAChB,SAAgB,mBAAmB,CAAC,IAAmB;IACrD,IAAI,CAAC,UAAU,CAAC,oBAAoB,8BAAsB,CAAC,IAAI,EAAE,EAAE;QACjE,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC/D,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,+BAA+B;IACtC,MAAM,OAAO,GAAG,IAAI,8BAAc,CAAC,2BAAY,CAAC,gBAAgB,kCAA0B,KAAK,CAAC,CAAC,CAAC;IAClG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,IAAI,CAAC,GAAG,iDAAwC,eAAe,CAAC,CAAC;IACjE,IAAA,qCAA4B,EAAC,IAAI,CAAC,CAAC;IACnC,OAAO,CAAC,IAAI,CAAC,GAAG,kDAAyC,0BAAe,CAAC,CAAC;IAC1E,OAAO,OAAO,CAAC;AAEjB,CAAC;AAED,gBAAgB;AAChB,SAAgB,kCAAkC;IAChD,MAAM,OAAO,GAAG,+BAA+B,EAAE,CAAC;IAClD,IAAA,gDAAyB,EAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC1C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gBAAgB;AAChB,SAAgB,wBAAwB;IACtC,MAAM,OAAO,GAAG,+BAA+B,EAAE,CAAC;IAClD,IAAA,6BAAU,EAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC3B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gBAAgB;AAChB,SAAgB,wBAAwB,CAAC,KAAqB;IAC5D,MAAM,OAAO,GAAG,IAAI,8BAAc,CAAC,2BAAY,CAAC,gBAAgB,kCAA0B,KAAK,CAAC,CAAC,CAAC;IAClG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,IAAI,CAAC,GAAG,iDAAwC,eAAe,CAAC,CAAC;IACjE,IAAA,qCAA4B,EAAC,IAAI,CAAC,CAAC;IAEnC,IAAI,KAAK,CAAC,YAAY,6BAAqB;QACzC,IAAA,sCAAiB,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAEnC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,IAAI,CAAC,SAAS,CAAC,kBAAkB,8BAAsB,KAAK,CAAC,CAAC;IAC9D,IAAI,CAAC,SAAS,CAAC,cAAc,4BAAoB,CAAC;IAClD,IAAI,CAAC,GAAG,qDAA4C,mCAAiB,CAAC,CAAC;IACvE,MAAM,YAAY,GAAG,eAAM,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IAC7D,MAAM,mBAAmB,GAAG,yBAAW,CAAC,2BAA2B,CAAC;IAEpE,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC;IAC/B,IAAI,IAAI,GAAG,kCAA0B,IAAI,CAAC,CAAC,0CAAiC,CAAC,qCAA6B,CAAC;IAC3G,IAAI,yBAAyB,GAAG,EAAE,CAAC;IAEnC,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACvB,IAAI,IAAI,uCAA8B,CAAC;QACvC,IAAA,+CAAwB,EAAC,OAAO,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QACzE,IAAA,8CAAoC,EAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAED,IAAA,sCAAmB,EAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACzC,IAAI,IAAI,kCAA0B,EAAE,CAAC;QACnC,IAAA,uBAAc,EAAC,OAAO,CAAC,CAAC;QACxB,IAAA,uBAAe,EAAC,OAAO,EAAE,sCAAsC,CAAC,CAAC;QACjE,yBAAyB,GAAG,eAAe,CAAC;QAC5C,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IACD,MAAM,wBAAwB,GAAG,qBAAqB,CAAC,YAAY,EAAE,yBAAyB,CAAC,CAAC;IAEhG,IAAI,CAAC,WAAW,CAAC,mBAAU,CAAC,CAAC;IAC7B,IAAI,CAAC,WAAW,CAAC,4BAAU,CAAC,CAAC;IAC7B,IAAA,oBAAW,EAAC,OAAO,CAAC,CAAC;IACrB,IAAI,CAAC,WAAW,CAAC,IAAA,8BAAY,EAAC,IAAI,CAAC,CAAC,CAAC;IACrC,IAAI,CAAC,GAAG,mDAA2C,wBAAwB,CAAC,CAAC;IAC7E,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,6BAAqB,CAAC,IAAI,EAAE,EAAE;QACjE,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxD,MAAM,WAAW,GAAG,IAAA,4BAAa,EAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YACjE,MAAM,SAAS,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,sBAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;YACvG,OAAO,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,GAAG,EAAE,SAAS,CAAC,CAAC,GAAG,GAAG,EAAE,SAAS,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAC1G,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,CAAC,GAAG,mDAA2C,wBAAwB,CAAC,CAAC;IACrF,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QACzB,IAAI,6BAAqB,IAAI,EAAE,CAAC;YAC9B,IAAI,KAAK,CAAC,YAAY;gBACpB,IAAA,iDAA0B,EAAC,OAAO,CAAC,CAAC;YAEtC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,uBAAc,CAAC,CAAC;YACzC,IAAI,KAAK,CAAC,YAAY;gBACpB,IAAA,+BAAoB,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;gBAEnC,IAAA,kCAAuB,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAEnC,IAAI,2BAAmB,KAAK,CAAC,UAAU;QACrC,wBAAwB,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;IAEzD,IAAI,KAAK,CAAC,UAAU;QAClB,IAAA,sBAAW,EAAC,OAAO,CAAC,CAAC;IAEvB,IAAI,KAAK,CAAC,gBAAgB;QACxB,IAAA,2CAA8B,EAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAExD,OAAO,OAAO,CAAC;AACjB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module WebGL\n */\n\nimport { assert, expectDefined } from \"@itwin/core-bentley\";\nimport { ColorDef } from \"@itwin/core-common\";\nimport { Matrix4d } from \"@itwin/core-geometry\";\nimport { AttributeMap } from \"../AttributeMap\";\nimport { Matrix4 } from \"../Matrix\";\nimport { TextureUnit } from \"../RenderFlags\";\nimport { FragmentShaderComponent, ProgramBuilder, ShaderBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\nimport { System } from \"../System\";\nimport { FeatureMode, IsShadowable, IsThematic, TechniqueFlags } from \"../TechniqueFlags\";\nimport { TechniqueId } from \"../TechniqueId\";\nimport { Texture } from \"../Texture\";\nimport { addAtmosphericScatteringEffect } from \"./Atmosphere\";\nimport { addVaryingColor } from \"./Color\";\nimport { addEyeSpace, addShaderFlags, addUInt32s } from \"./Common\";\nimport { decodeDepthRgb, unquantize2d } from \"./Decode\";\nimport { addFeatureSymbology, addHiliter, FeatureSymbologyOptions } from \"./FeatureSymbology\";\nimport { addAltPickBufferOutputs, addPickBufferOutputs, assignFragColor } from \"./Fragment\";\nimport { addColorPlanarClassifier, addFeaturePlanarClassifier, addHilitePlanarClassifier } from \"./PlanarClassification\";\nimport { addSolarShadowMap } from \"./SolarShadowMapping\";\nimport { addClassificationTranslucencyDiscard, octDecodeNormal } from \"./Surface\";\nimport { addThematicDisplay, getComputeThematicIndex } from \"./Thematic\";\nimport { addModelViewProjectionMatrix, addNormalMatrix } from \"./Vertex\";\nimport { addWiremesh } from \"./Wiremesh\";\nimport { applyTexture, overrideFeatureId, testInside } from \"./MaplayerDraping\";\n\nconst computePosition = \"gl_PointSize = 1.0; return MAT_MVP * rawPos;\";\nconst computeNormal = `\n vec3 normal = octDecodeNormal(a_norm); // normal coming in for is already in world space\n g_hillshadeIndex = normal.z; // save off world Z for thematic hill shade mode index\n return normalize(u_worldToViewN * normal);\n`;\n\nexport const finalizeNormal = `\n return normalize(v_n) * (2.0 * float(gl_FrontFacing) - 1.0);\n`;\n\nconst computeTexCoord = \"return unquantize2d(a_uvParam, u_qTexCoordParams);\";\nconst scratchMatrix4d1 = Matrix4d.createIdentity();\nconst scratchMatrix4d2 = Matrix4d.createIdentity();\nconst scratchMatrix = new Matrix4();\n\nfunction addTextures(builder: ProgramBuilder, maxTexturesPerMesh: number) {\n builder.vert.addFunction(unquantize2d);\n builder.addFunctionComputedVarying(\"v_texCoord\", VariableType.Vec2, \"computeTexCoord\", computeTexCoord);\n builder.vert.addUniform(\"u_qTexCoordParams\", VariableType.Vec4, (prog) => {\n prog.addGraphicUniform(\"u_qTexCoordParams\", (uniform, params) => {\n const realityMesh = expectDefined(params.geometry.asRealityMesh);\n if (undefined !== realityMesh.uvQParams) {\n uniform.setUniform4fv(realityMesh.uvQParams);\n }\n });\n });\n\n builder.frag.addUniform(\"u_texturesPresent\", VariableType.Boolean, (program) => {\n program.addGraphicUniform(\"u_texturesPresent\", (uniform, params) => {\n uniform.setUniform1i(expectDefined(params.geometry.asRealityMesh).hasTextures ? 1 : 0);\n });\n });\n\n for (let i = 0; i < maxTexturesPerMesh; i++) {\n const textureLabel = `s_texture${i}`;\n builder.frag.addUniform(textureLabel, VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(textureLabel, (uniform, params) => {\n const textureUnits = [TextureUnit.RealityMesh0, TextureUnit.RealityMesh1, params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder, TextureUnit.RealityMesh3, TextureUnit.RealityMesh4, TextureUnit.RealityMesh5];\n const realityMesh = expectDefined(params.geometry.asRealityMesh);\n const realityTexture = realityMesh.textureParams ? realityMesh.textureParams.params[i].texture : undefined;\n if (realityTexture !== undefined) {\n const texture = realityTexture as Texture;\n texture.texture.bindSampler(uniform, textureUnits[i]);\n } else {\n System.instance.ensureSamplerBound(uniform, textureUnits[i]);\n }\n });\n });\n const paramsLabel = `u_texParams${i}`, matrixLabel = `u_texMatrix${i}`;\n builder.frag.addUniform(matrixLabel, VariableType.Mat4, (prog) => {\n prog.addGraphicUniform(matrixLabel, (uniform, params) => {\n const realityMesh = expectDefined(params.geometry.asRealityMesh);\n const textureParam = realityMesh.textureParams?.params[i];\n assert(undefined !== textureParam);\n if (undefined !== textureParam) {\n const projectionMatrix = textureParam.getProjectionMatrix();\n if (projectionMatrix) {\n const eyeToModel = Matrix4d.createTransform(expectDefined(params.target.uniforms.frustum.viewMatrix.inverse()), scratchMatrix4d1);\n const eyeToTexture = projectionMatrix.multiplyMatrixMatrix(eyeToModel, scratchMatrix4d2);\n uniform.setMatrix4(Matrix4.fromMatrix4d(eyeToTexture, scratchMatrix));\n } else\n uniform.setMatrix4(expectDefined(textureParam.getTerrainMatrix()));\n }\n });\n });\n builder.frag.addUniform(paramsLabel, VariableType.Mat4, (prog) => {\n prog.addGraphicUniform(paramsLabel, (uniform, params) => {\n const realityMesh = expectDefined(params.geometry.asRealityMesh);\n const textureParam = realityMesh.textureParams?.params[i];\n assert(undefined !== textureParam);\n if (undefined !== textureParam) {\n uniform.setMatrix4(textureParam.getParams(scratchMatrix));\n }\n });\n });\n }\n}\nfunction baseColorFromTextures(textureCount: number, applyFeatureColor: string) {\n const applyTextureStrings = [];\n\n for (let i = 0; i < textureCount; i++)\n applyTextureStrings.push(`if (applyTexture(col, s_texture${i}, u_texParams${i}, u_texMatrix${i})) doDiscard = false; `);\n\n return `\n if (!u_texturesPresent) {\n vec4 col = u_baseColor;\n ${applyFeatureColor}\n return col;\n }\n\n bool doDiscard = true;\n vec4 col = u_baseColor;\n ${applyTextureStrings.join(\"\\n \")}\n if (doDiscard)\n discard;\n\n ${applyFeatureColor}\n\n return col;\n`;\n}\n\n// feature_rgb.r = -1.0 if rgb color not overridden for feature.\n// feature_alpha = -1.0 if alpha not overridden for feature.\nconst mixFeatureColor = `\n col.rgb = mix(col.rgb, mix(col.rgb, v_color.rgb, u_overrideColorMix), step(0.0, v_color.r));\n col.a = mix(col.a, v_color.a, step(0.0, v_color.a));\n `;\n\nfunction addThematicToRealityMesh(builder: ProgramBuilder, gradientTextureUnit: TextureUnit) {\n addNormalMatrix(builder.vert);\n builder.vert.addFunction(octDecodeNormal);\n builder.vert.addGlobal(\"g_hillshadeIndex\", VariableType.Float);\n builder.addFunctionComputedVarying(\"v_n\", VariableType.Vec3, \"computeLightingNormal\", computeNormal);\n builder.frag.addGlobal(\"g_normal\", VariableType.Vec3);\n builder.frag.set(FragmentShaderComponent.FinalizeNormal, finalizeNormal);\n addThematicDisplay(builder, false, true);\n builder.addInlineComputedVarying(\"v_thematicIndex\", VariableType.Float, getComputeThematicIndex(builder.vert.usesInstancedGeometry, false, false));\n builder.vert.addUniform(\"u_worldToViewN\", VariableType.Mat3, (prog) => {\n prog.addGraphicUniform(\"u_worldToViewN\", (uniform, params) => {\n params.target.uniforms.branch.bindWorldToViewNTransform(uniform, params.geometry, false);\n });\n });\n builder.frag.addUniform(\"s_texture\", VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(\"s_texture\", (uniform, params) => {\n params.target.uniforms.thematic.bindTexture(uniform, gradientTextureUnit >= 0 ? gradientTextureUnit : (params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder));\n });\n });\n}\n\n/** @internal */\nexport function addColorOverrideMix(frag: ShaderBuilder) {\n frag.addUniform(\"u_overrideColorMix\", VariableType.Float, (prog) => {\n prog.addGraphicUniform(\"u_overrideColorMix\", (uniform, params) => {\n params.target.uniforms.realityModel.bindOverrideColorMix(uniform);\n });\n });\n}\n\nfunction createRealityMeshHiliterBuilder(): ProgramBuilder {\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\n const vert = builder.vert;\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\n addModelViewProjectionMatrix(vert);\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\n return builder;\n\n}\n\n/** @internal */\nexport function createClassifierRealityMeshHiliter(): ProgramBuilder {\n const builder = createRealityMeshHiliterBuilder();\n addHilitePlanarClassifier(builder, false);\n return builder;\n}\n\n/** @internal */\nexport function createRealityMeshHiliter(): ProgramBuilder {\n const builder = createRealityMeshHiliterBuilder();\n addHiliter(builder, false);\n return builder;\n}\n\n/** @internal */\nexport function createRealityMeshBuilder(flags: TechniqueFlags): ProgramBuilder {\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\n const vert = builder.vert;\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\n addModelViewProjectionMatrix(vert);\n\n if (flags.isShadowable === IsShadowable.Yes)\n addSolarShadowMap(builder, true);\n\n const frag = builder.frag;\n frag.addGlobal(\"featureIncrement\", VariableType.Float, \"0.0\");\n frag.addGlobal(\"classifierId\", VariableType.Vec4);\n frag.set(FragmentShaderComponent.OverrideFeatureId, overrideFeatureId);\n const textureCount = System.instance.maxRealityImageryLayers;\n const gradientTextureUnit = TextureUnit.RealityMeshThematicGradient;\n\n const feat = flags.featureMode;\n let opts = FeatureMode.Overrides === feat ? FeatureSymbologyOptions.Surface : FeatureSymbologyOptions.None;\n let applyFragmentFeatureColor = \"\";\n\n if (flags.isClassified) {\n opts &= ~FeatureSymbologyOptions.Alpha;\n addColorPlanarClassifier(builder, flags.isTranslucent, flags.isThematic);\n addClassificationTranslucencyDiscard(builder);\n }\n\n addFeatureSymbology(builder, feat, opts);\n if (feat === FeatureMode.Overrides) {\n addShaderFlags(builder);\n addVaryingColor(builder, \"return vec4(-1.0, -1.0, -1.0, -1.0);\");\n applyFragmentFeatureColor = mixFeatureColor;\n addColorOverrideMix(builder.frag);\n }\n const computeFragmentBaseColor = baseColorFromTextures(textureCount, applyFragmentFeatureColor);\n\n frag.addFunction(addUInt32s);\n frag.addFunction(testInside);\n addEyeSpace(builder);\n frag.addFunction(applyTexture(true));\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\n builder.frag.addUniform(\"u_baseColor\", VariableType.Vec4, (prog) => {\n prog.addGraphicUniform(\"u_baseColor\", (uniform, params) => {\n const realityMesh = expectDefined(params.geometry.asRealityMesh);\n const baseColor = (realityMesh.baseColor ? realityMesh.baseColor : ColorDef.create(0xff000000)).colors;\n uniform.setUniform4fv([baseColor.r / 255, baseColor.g / 255, baseColor.b / 255, 1 - baseColor.t / 255]);\n });\n });\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\n if (!flags.isTranslucent) {\n if (FeatureMode.None !== feat) {\n if (flags.isClassified)\n addFeaturePlanarClassifier(builder);\n\n builder.frag.addFunction(decodeDepthRgb);\n if (flags.isClassified)\n addPickBufferOutputs(builder.frag);\n else\n addAltPickBufferOutputs(builder.frag);\n }\n }\n\n addTextures(builder, textureCount);\n\n if (IsThematic.Yes === flags.isThematic)\n addThematicToRealityMesh(builder, gradientTextureUnit);\n\n if (flags.isWiremesh)\n addWiremesh(builder);\n\n if (flags.enableAtmosphere)\n addAtmosphericScatteringEffect(builder, false, false);\n\n return builder;\n}\n"]}