@itwin/core-frontend 5.2.0-dev.5 → 5.2.0-dev.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (609) hide show
  1. package/lib/cjs/BackgroundMapGeometry.js +13 -13
  2. package/lib/cjs/BackgroundMapGeometry.js.map +1 -1
  3. package/lib/cjs/BriefcaseConnection.d.ts.map +1 -1
  4. package/lib/cjs/BriefcaseConnection.js +2 -2
  5. package/lib/cjs/BriefcaseConnection.js.map +1 -1
  6. package/lib/cjs/CheckpointConnection.d.ts.map +1 -1
  7. package/lib/cjs/CheckpointConnection.js +3 -3
  8. package/lib/cjs/CheckpointConnection.js.map +1 -1
  9. package/lib/cjs/ContextRealityModelState.js.map +1 -1
  10. package/lib/cjs/ElementLocateManager.d.ts.map +1 -1
  11. package/lib/cjs/ElementLocateManager.js +7 -6
  12. package/lib/cjs/ElementLocateManager.js.map +1 -1
  13. package/lib/cjs/EmphasizeElements.d.ts.map +1 -1
  14. package/lib/cjs/EmphasizeElements.js +3 -1
  15. package/lib/cjs/EmphasizeElements.js.map +1 -1
  16. package/lib/cjs/EnvironmentDecorations.d.ts.map +1 -1
  17. package/lib/cjs/EnvironmentDecorations.js +4 -0
  18. package/lib/cjs/EnvironmentDecorations.js.map +1 -1
  19. package/lib/cjs/FrustumAnimator.d.ts.map +1 -1
  20. package/lib/cjs/FrustumAnimator.js +3 -2
  21. package/lib/cjs/FrustumAnimator.js.map +1 -1
  22. package/lib/cjs/GlobeAnimator.d.ts.map +1 -1
  23. package/lib/cjs/GlobeAnimator.js +7 -6
  24. package/lib/cjs/GlobeAnimator.js.map +1 -1
  25. package/lib/cjs/HitDetail.d.ts.map +1 -1
  26. package/lib/cjs/HitDetail.js +12 -7
  27. package/lib/cjs/HitDetail.js.map +1 -1
  28. package/lib/cjs/IModelApp.d.ts.map +1 -1
  29. package/lib/cjs/IModelApp.js +2 -1
  30. package/lib/cjs/IModelApp.js.map +1 -1
  31. package/lib/cjs/IModelConnection.d.ts.map +1 -1
  32. package/lib/cjs/IModelConnection.js +8 -9
  33. package/lib/cjs/IModelConnection.js.map +1 -1
  34. package/lib/cjs/IpcApp.d.ts.map +1 -1
  35. package/lib/cjs/IpcApp.js +1 -1
  36. package/lib/cjs/IpcApp.js.map +1 -1
  37. package/lib/cjs/LinePlaneIntersect.d.ts.map +1 -1
  38. package/lib/cjs/LinePlaneIntersect.js +2 -0
  39. package/lib/cjs/LinePlaneIntersect.js.map +1 -1
  40. package/lib/cjs/LocalhostIpcApp.d.ts.map +1 -1
  41. package/lib/cjs/LocalhostIpcApp.js +2 -1
  42. package/lib/cjs/LocalhostIpcApp.js.map +1 -1
  43. package/lib/cjs/Marker.d.ts.map +1 -1
  44. package/lib/cjs/Marker.js +4 -3
  45. package/lib/cjs/Marker.js.map +1 -1
  46. package/lib/cjs/ModelState.d.ts.map +1 -1
  47. package/lib/cjs/ModelState.js +2 -2
  48. package/lib/cjs/ModelState.js.map +1 -1
  49. package/lib/cjs/NativeApp.d.ts.map +1 -1
  50. package/lib/cjs/NativeApp.js +5 -4
  51. package/lib/cjs/NativeApp.js.map +1 -1
  52. package/lib/cjs/NativeAppLogger.d.ts.map +1 -1
  53. package/lib/cjs/NativeAppLogger.js +1 -0
  54. package/lib/cjs/NativeAppLogger.js.map +1 -1
  55. package/lib/cjs/PlanarClipMaskState.js +3 -3
  56. package/lib/cjs/PlanarClipMaskState.js.map +1 -1
  57. package/lib/cjs/SelectionSet.d.ts.map +1 -1
  58. package/lib/cjs/SelectionSet.js +1 -0
  59. package/lib/cjs/SelectionSet.js.map +1 -1
  60. package/lib/cjs/SheetViewState.d.ts.map +1 -1
  61. package/lib/cjs/SheetViewState.js +5 -5
  62. package/lib/cjs/SheetViewState.js.map +1 -1
  63. package/lib/cjs/SpatialViewState.d.ts.map +1 -1
  64. package/lib/cjs/SpatialViewState.js +1 -1
  65. package/lib/cjs/SpatialViewState.js.map +1 -1
  66. package/lib/cjs/Sprites.js +2 -2
  67. package/lib/cjs/Sprites.js.map +1 -1
  68. package/lib/cjs/TentativePoint.d.ts.map +1 -1
  69. package/lib/cjs/TentativePoint.js +10 -9
  70. package/lib/cjs/TentativePoint.js.map +1 -1
  71. package/lib/cjs/ViewCreator2d.js +1 -1
  72. package/lib/cjs/ViewCreator2d.js.map +1 -1
  73. package/lib/cjs/ViewCreator3d.js +1 -1
  74. package/lib/cjs/ViewCreator3d.js.map +1 -1
  75. package/lib/cjs/ViewPose.d.ts.map +1 -1
  76. package/lib/cjs/ViewPose.js +4 -1
  77. package/lib/cjs/ViewPose.js.map +1 -1
  78. package/lib/cjs/ViewState.d.ts.map +1 -1
  79. package/lib/cjs/ViewState.js +17 -12
  80. package/lib/cjs/ViewState.js.map +1 -1
  81. package/lib/cjs/ViewingSpace.d.ts.map +1 -1
  82. package/lib/cjs/ViewingSpace.js +2 -0
  83. package/lib/cjs/ViewingSpace.js.map +1 -1
  84. package/lib/cjs/Viewport.d.ts.map +1 -1
  85. package/lib/cjs/Viewport.js +17 -10
  86. package/lib/cjs/Viewport.js.map +1 -1
  87. package/lib/cjs/common/ImageUtil.d.ts.map +1 -1
  88. package/lib/cjs/common/ImageUtil.js +2 -1
  89. package/lib/cjs/common/ImageUtil.js.map +1 -1
  90. package/lib/cjs/common/internal/render/GeometryAccumulator.d.ts.map +1 -1
  91. package/lib/cjs/common/internal/render/GeometryAccumulator.js +4 -3
  92. package/lib/cjs/common/internal/render/GeometryAccumulator.js.map +1 -1
  93. package/lib/cjs/common/internal/render/InstancedGraphicPropsBuilder.d.ts.map +1 -1
  94. package/lib/cjs/common/internal/render/InstancedGraphicPropsBuilder.js +2 -0
  95. package/lib/cjs/common/internal/render/InstancedGraphicPropsBuilder.js.map +1 -1
  96. package/lib/cjs/common/internal/render/MeshBuilder.js +1 -1
  97. package/lib/cjs/common/internal/render/MeshBuilder.js.map +1 -1
  98. package/lib/cjs/common/internal/render/VertexTableBuilder.d.ts.map +1 -1
  99. package/lib/cjs/common/internal/render/VertexTableBuilder.js +16 -7
  100. package/lib/cjs/common/internal/render/VertexTableBuilder.js.map +1 -1
  101. package/lib/cjs/extension/ExtensionAdmin.js +2 -2
  102. package/lib/cjs/extension/ExtensionAdmin.js.map +1 -1
  103. package/lib/cjs/internal/GoogleMapsDecorator.js +1 -1
  104. package/lib/cjs/internal/GoogleMapsDecorator.js.map +1 -1
  105. package/lib/cjs/internal/ScriptUtils.js +1 -0
  106. package/lib/cjs/internal/ScriptUtils.js.map +1 -1
  107. package/lib/cjs/internal/render/UpsampleRealityMeshParams.d.ts.map +1 -1
  108. package/lib/cjs/internal/render/UpsampleRealityMeshParams.js +2 -1
  109. package/lib/cjs/internal/render/UpsampleRealityMeshParams.js.map +1 -1
  110. package/lib/cjs/internal/render/webgl/AtmosphereUniforms.d.ts.map +1 -1
  111. package/lib/cjs/internal/render/webgl/AtmosphereUniforms.js +7 -2
  112. package/lib/cjs/internal/render/webgl/AtmosphereUniforms.js.map +1 -1
  113. package/lib/cjs/internal/render/webgl/AttributeBuffers.d.ts.map +1 -1
  114. package/lib/cjs/internal/render/webgl/AttributeBuffers.js +5 -3
  115. package/lib/cjs/internal/render/webgl/AttributeBuffers.js.map +1 -1
  116. package/lib/cjs/internal/render/webgl/AttributeMap.d.ts.map +1 -1
  117. package/lib/cjs/internal/render/webgl/AttributeMap.js +2 -0
  118. package/lib/cjs/internal/render/webgl/AttributeMap.js.map +1 -1
  119. package/lib/cjs/internal/render/webgl/BackgroundMapDrape.d.ts.map +1 -1
  120. package/lib/cjs/internal/render/webgl/BackgroundMapDrape.js +2 -2
  121. package/lib/cjs/internal/render/webgl/BackgroundMapDrape.js.map +1 -1
  122. package/lib/cjs/internal/render/webgl/BatchUniforms.js +1 -1
  123. package/lib/cjs/internal/render/webgl/BatchUniforms.js.map +1 -1
  124. package/lib/cjs/internal/render/webgl/BranchState.d.ts.map +1 -1
  125. package/lib/cjs/internal/render/webgl/BranchState.js +2 -1
  126. package/lib/cjs/internal/render/webgl/BranchState.js.map +1 -1
  127. package/lib/cjs/internal/render/webgl/BranchUniforms.js +2 -2
  128. package/lib/cjs/internal/render/webgl/BranchUniforms.js.map +1 -1
  129. package/lib/cjs/internal/render/webgl/CachedGeometry.d.ts.map +1 -1
  130. package/lib/cjs/internal/render/webgl/CachedGeometry.js +2 -2
  131. package/lib/cjs/internal/render/webgl/CachedGeometry.js.map +1 -1
  132. package/lib/cjs/internal/render/webgl/ClipStack.js +1 -1
  133. package/lib/cjs/internal/render/webgl/ClipStack.js.map +1 -1
  134. package/lib/cjs/internal/render/webgl/ColorInfo.js +1 -1
  135. package/lib/cjs/internal/render/webgl/ColorInfo.js.map +1 -1
  136. package/lib/cjs/internal/render/webgl/Contours.js +3 -3
  137. package/lib/cjs/internal/render/webgl/Contours.js.map +1 -1
  138. package/lib/cjs/internal/render/webgl/EDL.js +18 -18
  139. package/lib/cjs/internal/render/webgl/EDL.js.map +1 -1
  140. package/lib/cjs/internal/render/webgl/FeatureOverrides.js +4 -4
  141. package/lib/cjs/internal/render/webgl/FeatureOverrides.js.map +1 -1
  142. package/lib/cjs/internal/render/webgl/FrameBuffer.js +3 -3
  143. package/lib/cjs/internal/render/webgl/FrameBuffer.js.map +1 -1
  144. package/lib/cjs/internal/render/webgl/FrustumUniforms.d.ts.map +1 -1
  145. package/lib/cjs/internal/render/webgl/FrustumUniforms.js +2 -1
  146. package/lib/cjs/internal/render/webgl/FrustumUniforms.js.map +1 -1
  147. package/lib/cjs/internal/render/webgl/GLTimer.d.ts.map +1 -1
  148. package/lib/cjs/internal/render/webgl/GLTimer.js +2 -0
  149. package/lib/cjs/internal/render/webgl/GLTimer.js.map +1 -1
  150. package/lib/cjs/internal/render/webgl/MapLayerParams.js +2 -2
  151. package/lib/cjs/internal/render/webgl/MapLayerParams.js.map +1 -1
  152. package/lib/cjs/internal/render/webgl/MeshData.js +2 -2
  153. package/lib/cjs/internal/render/webgl/MeshData.js.map +1 -1
  154. package/lib/cjs/internal/render/webgl/PerformanceMetrics.js +1 -1
  155. package/lib/cjs/internal/render/webgl/PerformanceMetrics.js.map +1 -1
  156. package/lib/cjs/internal/render/webgl/PlanarClassifier.d.ts.map +1 -1
  157. package/lib/cjs/internal/render/webgl/PlanarClassifier.js +7 -7
  158. package/lib/cjs/internal/render/webgl/PlanarClassifier.js.map +1 -1
  159. package/lib/cjs/internal/render/webgl/PlanarGrid.js +1 -1
  160. package/lib/cjs/internal/render/webgl/PlanarGrid.js.map +1 -1
  161. package/lib/cjs/internal/render/webgl/PlanarTextureProjection.d.ts +0 -3
  162. package/lib/cjs/internal/render/webgl/PlanarTextureProjection.d.ts.map +1 -1
  163. package/lib/cjs/internal/render/webgl/PlanarTextureProjection.js +6 -5
  164. package/lib/cjs/internal/render/webgl/PlanarTextureProjection.js.map +1 -1
  165. package/lib/cjs/internal/render/webgl/PointCloud.js +1 -1
  166. package/lib/cjs/internal/render/webgl/PointCloud.js.map +1 -1
  167. package/lib/cjs/internal/render/webgl/RealityMesh.js +1 -1
  168. package/lib/cjs/internal/render/webgl/RealityMesh.js.map +1 -1
  169. package/lib/cjs/internal/render/webgl/RenderBuffer.js +2 -2
  170. package/lib/cjs/internal/render/webgl/RenderBuffer.js.map +1 -1
  171. package/lib/cjs/internal/render/webgl/SceneCompositor.d.ts.map +1 -1
  172. package/lib/cjs/internal/render/webgl/SceneCompositor.js +115 -85
  173. package/lib/cjs/internal/render/webgl/SceneCompositor.js.map +1 -1
  174. package/lib/cjs/internal/render/webgl/ScratchDrawParams.d.ts.map +1 -1
  175. package/lib/cjs/internal/render/webgl/ScratchDrawParams.js +11 -10
  176. package/lib/cjs/internal/render/webgl/ScratchDrawParams.js.map +1 -1
  177. package/lib/cjs/internal/render/webgl/ScreenSpaceEffect.js +3 -3
  178. package/lib/cjs/internal/render/webgl/ScreenSpaceEffect.js.map +1 -1
  179. package/lib/cjs/internal/render/webgl/ShaderProgram.js +3 -3
  180. package/lib/cjs/internal/render/webgl/ShaderProgram.js.map +1 -1
  181. package/lib/cjs/internal/render/webgl/ShadowUniforms.d.ts.map +1 -1
  182. package/lib/cjs/internal/render/webgl/ShadowUniforms.js +2 -1
  183. package/lib/cjs/internal/render/webgl/ShadowUniforms.js.map +1 -1
  184. package/lib/cjs/internal/render/webgl/SolarShadowMap.d.ts.map +1 -1
  185. package/lib/cjs/internal/render/webgl/SolarShadowMap.js +6 -4
  186. package/lib/cjs/internal/render/webgl/SolarShadowMap.js.map +1 -1
  187. package/lib/cjs/internal/render/webgl/System.d.ts.map +1 -1
  188. package/lib/cjs/internal/render/webgl/System.js +1 -1
  189. package/lib/cjs/internal/render/webgl/System.js.map +1 -1
  190. package/lib/cjs/internal/render/webgl/Target.d.ts.map +1 -1
  191. package/lib/cjs/internal/render/webgl/Target.js +10 -7
  192. package/lib/cjs/internal/render/webgl/Target.js.map +1 -1
  193. package/lib/cjs/internal/render/webgl/Texture.d.ts.map +1 -1
  194. package/lib/cjs/internal/render/webgl/Texture.js +10 -8
  195. package/lib/cjs/internal/render/webgl/Texture.js.map +1 -1
  196. package/lib/cjs/internal/render/webgl/glsl/Animation.d.ts.map +1 -1
  197. package/lib/cjs/internal/render/webgl/glsl/Animation.js +4 -2
  198. package/lib/cjs/internal/render/webgl/glsl/Animation.js.map +1 -1
  199. package/lib/cjs/internal/render/webgl/glsl/Color.d.ts.map +1 -1
  200. package/lib/cjs/internal/render/webgl/glsl/Color.js +2 -1
  201. package/lib/cjs/internal/render/webgl/glsl/Color.js.map +1 -1
  202. package/lib/cjs/internal/render/webgl/glsl/Composite.js +1 -1
  203. package/lib/cjs/internal/render/webgl/glsl/Composite.js.map +1 -1
  204. package/lib/cjs/internal/render/webgl/glsl/CopyStencil.d.ts.map +1 -1
  205. package/lib/cjs/internal/render/webgl/glsl/CopyStencil.js +3 -2
  206. package/lib/cjs/internal/render/webgl/glsl/CopyStencil.js.map +1 -1
  207. package/lib/cjs/internal/render/webgl/glsl/PlanarClassification.js +3 -3
  208. package/lib/cjs/internal/render/webgl/glsl/PlanarClassification.js.map +1 -1
  209. package/lib/cjs/internal/render/webgl/glsl/PlanarGrid.d.ts.map +1 -1
  210. package/lib/cjs/internal/render/webgl/glsl/PlanarGrid.js +4 -3
  211. package/lib/cjs/internal/render/webgl/glsl/PlanarGrid.js.map +1 -1
  212. package/lib/cjs/internal/render/webgl/glsl/RealityMesh.js +8 -8
  213. package/lib/cjs/internal/render/webgl/glsl/RealityMesh.js.map +1 -1
  214. package/lib/cjs/internal/render/webgl/glsl/Surface.js +10 -10
  215. package/lib/cjs/internal/render/webgl/glsl/Surface.js.map +1 -1
  216. package/lib/cjs/internal/render/webgl/glsl/Vertex.js +2 -2
  217. package/lib/cjs/internal/render/webgl/glsl/Vertex.js.map +1 -1
  218. package/lib/cjs/internal/tile/B3dmReader.d.ts.map +1 -1
  219. package/lib/cjs/internal/tile/B3dmReader.js +1 -1
  220. package/lib/cjs/internal/tile/B3dmReader.js.map +1 -1
  221. package/lib/cjs/internal/tile/FetchCloudStorage.js +1 -1
  222. package/lib/cjs/internal/tile/FetchCloudStorage.js.map +1 -1
  223. package/lib/cjs/internal/tile/LRUTileList.d.ts.map +1 -1
  224. package/lib/cjs/internal/tile/LRUTileList.js +4 -0
  225. package/lib/cjs/internal/tile/LRUTileList.js.map +1 -1
  226. package/lib/cjs/internal/tile/LayerTileTreeReferenceHandler.d.ts.map +1 -1
  227. package/lib/cjs/internal/tile/LayerTileTreeReferenceHandler.js +2 -1
  228. package/lib/cjs/internal/tile/LayerTileTreeReferenceHandler.js.map +1 -1
  229. package/lib/cjs/internal/tile/OPCFormatInterpreter.js +4 -4
  230. package/lib/cjs/internal/tile/OPCFormatInterpreter.js.map +1 -1
  231. package/lib/cjs/internal/tile/OrbitGtTileTree.d.ts.map +1 -1
  232. package/lib/cjs/internal/tile/OrbitGtTileTree.js +2 -2
  233. package/lib/cjs/internal/tile/OrbitGtTileTree.js.map +1 -1
  234. package/lib/cjs/internal/tile/RealityModelTileTree.d.ts.map +1 -1
  235. package/lib/cjs/internal/tile/RealityModelTileTree.js +3 -3
  236. package/lib/cjs/internal/tile/RealityModelTileTree.js.map +1 -1
  237. package/lib/cjs/internal/tile/RealityTileLoader.d.ts.map +1 -1
  238. package/lib/cjs/internal/tile/RealityTileLoader.js +3 -0
  239. package/lib/cjs/internal/tile/RealityTileLoader.js.map +1 -1
  240. package/lib/cjs/internal/tile/ThreeDTileFormatInterpreter.js +3 -3
  241. package/lib/cjs/internal/tile/ThreeDTileFormatInterpreter.js.map +1 -1
  242. package/lib/cjs/internal/tile/TileUserSet.d.ts.map +1 -1
  243. package/lib/cjs/internal/tile/TileUserSet.js +4 -0
  244. package/lib/cjs/internal/tile/TileUserSet.js.map +1 -1
  245. package/lib/cjs/internal/tile/map/ArcGISTileMap.js +1 -1
  246. package/lib/cjs/internal/tile/map/ArcGISTileMap.js.map +1 -1
  247. package/lib/cjs/internal/tile/map/ArcGisUtilities.d.ts.map +1 -1
  248. package/lib/cjs/internal/tile/map/ArcGisUtilities.js +4 -0
  249. package/lib/cjs/internal/tile/map/ArcGisUtilities.js.map +1 -1
  250. package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  251. package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +3 -1
  252. package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  253. package/lib/cjs/internal/tile/map/ImageryProviders/BingImageryProvider.js +2 -2
  254. package/lib/cjs/internal/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  255. package/lib/cjs/internal/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +1 -1
  256. package/lib/cjs/internal/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  257. package/lib/cjs/internal/tile/map/MapTileAvailability.d.ts.map +1 -1
  258. package/lib/cjs/internal/tile/map/MapTileAvailability.js +5 -2
  259. package/lib/cjs/internal/tile/map/MapTileAvailability.js.map +1 -1
  260. package/lib/cjs/internal/tile/map/WmtsCapabilities.d.ts.map +1 -1
  261. package/lib/cjs/internal/tile/map/WmtsCapabilities.js +3 -2
  262. package/lib/cjs/internal/tile/map/WmtsCapabilities.js.map +1 -1
  263. package/lib/cjs/properties/FormattedQuantityDescription.d.ts.map +1 -1
  264. package/lib/cjs/properties/FormattedQuantityDescription.js +2 -0
  265. package/lib/cjs/properties/FormattedQuantityDescription.js.map +1 -1
  266. package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts.map +1 -1
  267. package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js +2 -0
  268. package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
  269. package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
  270. package/lib/cjs/quantity-formatting/QuantityFormatter.js +5 -3
  271. package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
  272. package/lib/cjs/tile/GltfReader.d.ts +5 -2
  273. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  274. package/lib/cjs/tile/GltfReader.js +54 -16
  275. package/lib/cjs/tile/GltfReader.js.map +1 -1
  276. package/lib/cjs/tile/RealityTile.d.ts.map +1 -1
  277. package/lib/cjs/tile/RealityTile.js +2 -2
  278. package/lib/cjs/tile/RealityTile.js.map +1 -1
  279. package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
  280. package/lib/cjs/tile/RealityTileTree.js +5 -5
  281. package/lib/cjs/tile/RealityTileTree.js.map +1 -1
  282. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  283. package/lib/cjs/tile/TileDrawArgs.d.ts.map +1 -1
  284. package/lib/cjs/tile/TileDrawArgs.js +2 -1
  285. package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
  286. package/lib/cjs/tile/map/ImageryTileTree.js +1 -1
  287. package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
  288. package/lib/cjs/tile/map/MapLayerFormatRegistry.js +1 -1
  289. package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
  290. package/lib/cjs/tile/map/MapLayerSources.d.ts.map +1 -1
  291. package/lib/cjs/tile/map/MapLayerSources.js +9 -1
  292. package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
  293. package/lib/cjs/tile/map/MapTile.d.ts.map +1 -1
  294. package/lib/cjs/tile/map/MapTile.js +10 -8
  295. package/lib/cjs/tile/map/MapTile.js.map +1 -1
  296. package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
  297. package/lib/cjs/tile/map/MapTileTree.js +8 -7
  298. package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
  299. package/lib/cjs/tile/map/MapTilingScheme.d.ts.map +1 -1
  300. package/lib/cjs/tile/map/MapTilingScheme.js +2 -1
  301. package/lib/cjs/tile/map/MapTilingScheme.js.map +1 -1
  302. package/lib/cjs/tools/Tool.js +1 -1
  303. package/lib/cjs/tools/Tool.js.map +1 -1
  304. package/lib/esm/BackgroundMapGeometry.js +14 -14
  305. package/lib/esm/BackgroundMapGeometry.js.map +1 -1
  306. package/lib/esm/BriefcaseConnection.d.ts.map +1 -1
  307. package/lib/esm/BriefcaseConnection.js +2 -2
  308. package/lib/esm/BriefcaseConnection.js.map +1 -1
  309. package/lib/esm/CheckpointConnection.d.ts.map +1 -1
  310. package/lib/esm/CheckpointConnection.js +4 -4
  311. package/lib/esm/CheckpointConnection.js.map +1 -1
  312. package/lib/esm/ContextRealityModelState.js.map +1 -1
  313. package/lib/esm/ElementLocateManager.d.ts.map +1 -1
  314. package/lib/esm/ElementLocateManager.js +8 -7
  315. package/lib/esm/ElementLocateManager.js.map +1 -1
  316. package/lib/esm/EmphasizeElements.d.ts.map +1 -1
  317. package/lib/esm/EmphasizeElements.js +3 -1
  318. package/lib/esm/EmphasizeElements.js.map +1 -1
  319. package/lib/esm/EnvironmentDecorations.d.ts.map +1 -1
  320. package/lib/esm/EnvironmentDecorations.js +4 -0
  321. package/lib/esm/EnvironmentDecorations.js.map +1 -1
  322. package/lib/esm/FrustumAnimator.d.ts.map +1 -1
  323. package/lib/esm/FrustumAnimator.js +3 -2
  324. package/lib/esm/FrustumAnimator.js.map +1 -1
  325. package/lib/esm/GlobeAnimator.d.ts.map +1 -1
  326. package/lib/esm/GlobeAnimator.js +7 -6
  327. package/lib/esm/GlobeAnimator.js.map +1 -1
  328. package/lib/esm/HitDetail.d.ts.map +1 -1
  329. package/lib/esm/HitDetail.js +12 -7
  330. package/lib/esm/HitDetail.js.map +1 -1
  331. package/lib/esm/IModelApp.d.ts.map +1 -1
  332. package/lib/esm/IModelApp.js +4 -3
  333. package/lib/esm/IModelApp.js.map +1 -1
  334. package/lib/esm/IModelConnection.d.ts.map +1 -1
  335. package/lib/esm/IModelConnection.js +9 -10
  336. package/lib/esm/IModelConnection.js.map +1 -1
  337. package/lib/esm/IpcApp.d.ts.map +1 -1
  338. package/lib/esm/IpcApp.js +2 -2
  339. package/lib/esm/IpcApp.js.map +1 -1
  340. package/lib/esm/LinePlaneIntersect.d.ts.map +1 -1
  341. package/lib/esm/LinePlaneIntersect.js +2 -0
  342. package/lib/esm/LinePlaneIntersect.js.map +1 -1
  343. package/lib/esm/LocalhostIpcApp.d.ts.map +1 -1
  344. package/lib/esm/LocalhostIpcApp.js +2 -1
  345. package/lib/esm/LocalhostIpcApp.js.map +1 -1
  346. package/lib/esm/Marker.d.ts.map +1 -1
  347. package/lib/esm/Marker.js +5 -4
  348. package/lib/esm/Marker.js.map +1 -1
  349. package/lib/esm/ModelState.d.ts.map +1 -1
  350. package/lib/esm/ModelState.js +3 -3
  351. package/lib/esm/ModelState.js.map +1 -1
  352. package/lib/esm/NativeApp.d.ts.map +1 -1
  353. package/lib/esm/NativeApp.js +5 -4
  354. package/lib/esm/NativeApp.js.map +1 -1
  355. package/lib/esm/NativeAppLogger.d.ts.map +1 -1
  356. package/lib/esm/NativeAppLogger.js +1 -0
  357. package/lib/esm/NativeAppLogger.js.map +1 -1
  358. package/lib/esm/PlanarClipMaskState.js +3 -3
  359. package/lib/esm/PlanarClipMaskState.js.map +1 -1
  360. package/lib/esm/SelectionSet.d.ts.map +1 -1
  361. package/lib/esm/SelectionSet.js +2 -1
  362. package/lib/esm/SelectionSet.js.map +1 -1
  363. package/lib/esm/SheetViewState.d.ts.map +1 -1
  364. package/lib/esm/SheetViewState.js +6 -6
  365. package/lib/esm/SheetViewState.js.map +1 -1
  366. package/lib/esm/SpatialViewState.d.ts.map +1 -1
  367. package/lib/esm/SpatialViewState.js +2 -2
  368. package/lib/esm/SpatialViewState.js.map +1 -1
  369. package/lib/esm/Sprites.js +2 -2
  370. package/lib/esm/Sprites.js.map +1 -1
  371. package/lib/esm/TentativePoint.d.ts.map +1 -1
  372. package/lib/esm/TentativePoint.js +10 -9
  373. package/lib/esm/TentativePoint.js.map +1 -1
  374. package/lib/esm/ViewCreator2d.js +1 -1
  375. package/lib/esm/ViewCreator2d.js.map +1 -1
  376. package/lib/esm/ViewCreator3d.js +1 -1
  377. package/lib/esm/ViewCreator3d.js.map +1 -1
  378. package/lib/esm/ViewPose.d.ts.map +1 -1
  379. package/lib/esm/ViewPose.js +4 -1
  380. package/lib/esm/ViewPose.js.map +1 -1
  381. package/lib/esm/ViewState.d.ts.map +1 -1
  382. package/lib/esm/ViewState.js +18 -13
  383. package/lib/esm/ViewState.js.map +1 -1
  384. package/lib/esm/ViewingSpace.d.ts.map +1 -1
  385. package/lib/esm/ViewingSpace.js +2 -0
  386. package/lib/esm/ViewingSpace.js.map +1 -1
  387. package/lib/esm/Viewport.d.ts.map +1 -1
  388. package/lib/esm/Viewport.js +18 -11
  389. package/lib/esm/Viewport.js.map +1 -1
  390. package/lib/esm/common/ImageUtil.d.ts.map +1 -1
  391. package/lib/esm/common/ImageUtil.js +2 -1
  392. package/lib/esm/common/ImageUtil.js.map +1 -1
  393. package/lib/esm/common/internal/render/GeometryAccumulator.d.ts.map +1 -1
  394. package/lib/esm/common/internal/render/GeometryAccumulator.js +4 -3
  395. package/lib/esm/common/internal/render/GeometryAccumulator.js.map +1 -1
  396. package/lib/esm/common/internal/render/InstancedGraphicPropsBuilder.d.ts.map +1 -1
  397. package/lib/esm/common/internal/render/InstancedGraphicPropsBuilder.js +2 -0
  398. package/lib/esm/common/internal/render/InstancedGraphicPropsBuilder.js.map +1 -1
  399. package/lib/esm/common/internal/render/MeshBuilder.js +2 -2
  400. package/lib/esm/common/internal/render/MeshBuilder.js.map +1 -1
  401. package/lib/esm/common/internal/render/VertexTableBuilder.d.ts.map +1 -1
  402. package/lib/esm/common/internal/render/VertexTableBuilder.js +17 -8
  403. package/lib/esm/common/internal/render/VertexTableBuilder.js.map +1 -1
  404. package/lib/esm/extension/ExtensionAdmin.js +2 -2
  405. package/lib/esm/extension/ExtensionAdmin.js.map +1 -1
  406. package/lib/esm/internal/GoogleMapsDecorator.js +1 -1
  407. package/lib/esm/internal/GoogleMapsDecorator.js.map +1 -1
  408. package/lib/esm/internal/ScriptUtils.js +1 -0
  409. package/lib/esm/internal/ScriptUtils.js.map +1 -1
  410. package/lib/esm/internal/render/UpsampleRealityMeshParams.d.ts.map +1 -1
  411. package/lib/esm/internal/render/UpsampleRealityMeshParams.js +2 -1
  412. package/lib/esm/internal/render/UpsampleRealityMeshParams.js.map +1 -1
  413. package/lib/esm/internal/render/webgl/AtmosphereUniforms.d.ts.map +1 -1
  414. package/lib/esm/internal/render/webgl/AtmosphereUniforms.js +7 -2
  415. package/lib/esm/internal/render/webgl/AtmosphereUniforms.js.map +1 -1
  416. package/lib/esm/internal/render/webgl/AttributeBuffers.d.ts.map +1 -1
  417. package/lib/esm/internal/render/webgl/AttributeBuffers.js +5 -3
  418. package/lib/esm/internal/render/webgl/AttributeBuffers.js.map +1 -1
  419. package/lib/esm/internal/render/webgl/AttributeMap.d.ts.map +1 -1
  420. package/lib/esm/internal/render/webgl/AttributeMap.js +2 -0
  421. package/lib/esm/internal/render/webgl/AttributeMap.js.map +1 -1
  422. package/lib/esm/internal/render/webgl/BackgroundMapDrape.d.ts.map +1 -1
  423. package/lib/esm/internal/render/webgl/BackgroundMapDrape.js +3 -3
  424. package/lib/esm/internal/render/webgl/BackgroundMapDrape.js.map +1 -1
  425. package/lib/esm/internal/render/webgl/BatchUniforms.js +1 -1
  426. package/lib/esm/internal/render/webgl/BatchUniforms.js.map +1 -1
  427. package/lib/esm/internal/render/webgl/BranchState.d.ts.map +1 -1
  428. package/lib/esm/internal/render/webgl/BranchState.js +2 -1
  429. package/lib/esm/internal/render/webgl/BranchState.js.map +1 -1
  430. package/lib/esm/internal/render/webgl/BranchUniforms.js +3 -3
  431. package/lib/esm/internal/render/webgl/BranchUniforms.js.map +1 -1
  432. package/lib/esm/internal/render/webgl/CachedGeometry.d.ts.map +1 -1
  433. package/lib/esm/internal/render/webgl/CachedGeometry.js +3 -3
  434. package/lib/esm/internal/render/webgl/CachedGeometry.js.map +1 -1
  435. package/lib/esm/internal/render/webgl/ClipStack.js +1 -1
  436. package/lib/esm/internal/render/webgl/ClipStack.js.map +1 -1
  437. package/lib/esm/internal/render/webgl/ColorInfo.js +2 -2
  438. package/lib/esm/internal/render/webgl/ColorInfo.js.map +1 -1
  439. package/lib/esm/internal/render/webgl/Contours.js +4 -4
  440. package/lib/esm/internal/render/webgl/Contours.js.map +1 -1
  441. package/lib/esm/internal/render/webgl/EDL.js +19 -19
  442. package/lib/esm/internal/render/webgl/EDL.js.map +1 -1
  443. package/lib/esm/internal/render/webgl/FeatureOverrides.js +5 -5
  444. package/lib/esm/internal/render/webgl/FeatureOverrides.js.map +1 -1
  445. package/lib/esm/internal/render/webgl/FrameBuffer.js +4 -4
  446. package/lib/esm/internal/render/webgl/FrameBuffer.js.map +1 -1
  447. package/lib/esm/internal/render/webgl/FrustumUniforms.d.ts.map +1 -1
  448. package/lib/esm/internal/render/webgl/FrustumUniforms.js +2 -1
  449. package/lib/esm/internal/render/webgl/FrustumUniforms.js.map +1 -1
  450. package/lib/esm/internal/render/webgl/GLTimer.d.ts.map +1 -1
  451. package/lib/esm/internal/render/webgl/GLTimer.js +2 -0
  452. package/lib/esm/internal/render/webgl/GLTimer.js.map +1 -1
  453. package/lib/esm/internal/render/webgl/MapLayerParams.js +3 -3
  454. package/lib/esm/internal/render/webgl/MapLayerParams.js.map +1 -1
  455. package/lib/esm/internal/render/webgl/MeshData.js +3 -3
  456. package/lib/esm/internal/render/webgl/MeshData.js.map +1 -1
  457. package/lib/esm/internal/render/webgl/PerformanceMetrics.js +1 -1
  458. package/lib/esm/internal/render/webgl/PerformanceMetrics.js.map +1 -1
  459. package/lib/esm/internal/render/webgl/PlanarClassifier.d.ts.map +1 -1
  460. package/lib/esm/internal/render/webgl/PlanarClassifier.js +8 -8
  461. package/lib/esm/internal/render/webgl/PlanarClassifier.js.map +1 -1
  462. package/lib/esm/internal/render/webgl/PlanarGrid.js +2 -2
  463. package/lib/esm/internal/render/webgl/PlanarGrid.js.map +1 -1
  464. package/lib/esm/internal/render/webgl/PlanarTextureProjection.d.ts +0 -3
  465. package/lib/esm/internal/render/webgl/PlanarTextureProjection.d.ts.map +1 -1
  466. package/lib/esm/internal/render/webgl/PlanarTextureProjection.js +6 -5
  467. package/lib/esm/internal/render/webgl/PlanarTextureProjection.js.map +1 -1
  468. package/lib/esm/internal/render/webgl/PointCloud.js +2 -2
  469. package/lib/esm/internal/render/webgl/PointCloud.js.map +1 -1
  470. package/lib/esm/internal/render/webgl/RealityMesh.js +2 -2
  471. package/lib/esm/internal/render/webgl/RealityMesh.js.map +1 -1
  472. package/lib/esm/internal/render/webgl/RenderBuffer.js +3 -3
  473. package/lib/esm/internal/render/webgl/RenderBuffer.js.map +1 -1
  474. package/lib/esm/internal/render/webgl/SceneCompositor.d.ts.map +1 -1
  475. package/lib/esm/internal/render/webgl/SceneCompositor.js +116 -86
  476. package/lib/esm/internal/render/webgl/SceneCompositor.js.map +1 -1
  477. package/lib/esm/internal/render/webgl/ScratchDrawParams.d.ts.map +1 -1
  478. package/lib/esm/internal/render/webgl/ScratchDrawParams.js +11 -10
  479. package/lib/esm/internal/render/webgl/ScratchDrawParams.js.map +1 -1
  480. package/lib/esm/internal/render/webgl/ScreenSpaceEffect.js +4 -4
  481. package/lib/esm/internal/render/webgl/ScreenSpaceEffect.js.map +1 -1
  482. package/lib/esm/internal/render/webgl/ShaderProgram.js +4 -4
  483. package/lib/esm/internal/render/webgl/ShaderProgram.js.map +1 -1
  484. package/lib/esm/internal/render/webgl/ShadowUniforms.d.ts.map +1 -1
  485. package/lib/esm/internal/render/webgl/ShadowUniforms.js +2 -1
  486. package/lib/esm/internal/render/webgl/ShadowUniforms.js.map +1 -1
  487. package/lib/esm/internal/render/webgl/SolarShadowMap.d.ts.map +1 -1
  488. package/lib/esm/internal/render/webgl/SolarShadowMap.js +7 -5
  489. package/lib/esm/internal/render/webgl/SolarShadowMap.js.map +1 -1
  490. package/lib/esm/internal/render/webgl/System.d.ts.map +1 -1
  491. package/lib/esm/internal/render/webgl/System.js +2 -2
  492. package/lib/esm/internal/render/webgl/System.js.map +1 -1
  493. package/lib/esm/internal/render/webgl/Target.d.ts.map +1 -1
  494. package/lib/esm/internal/render/webgl/Target.js +11 -8
  495. package/lib/esm/internal/render/webgl/Target.js.map +1 -1
  496. package/lib/esm/internal/render/webgl/Texture.d.ts.map +1 -1
  497. package/lib/esm/internal/render/webgl/Texture.js +11 -9
  498. package/lib/esm/internal/render/webgl/Texture.js.map +1 -1
  499. package/lib/esm/internal/render/webgl/glsl/Animation.d.ts.map +1 -1
  500. package/lib/esm/internal/render/webgl/glsl/Animation.js +5 -3
  501. package/lib/esm/internal/render/webgl/glsl/Animation.js.map +1 -1
  502. package/lib/esm/internal/render/webgl/glsl/Color.d.ts.map +1 -1
  503. package/lib/esm/internal/render/webgl/glsl/Color.js +2 -1
  504. package/lib/esm/internal/render/webgl/glsl/Color.js.map +1 -1
  505. package/lib/esm/internal/render/webgl/glsl/Composite.js +2 -2
  506. package/lib/esm/internal/render/webgl/glsl/Composite.js.map +1 -1
  507. package/lib/esm/internal/render/webgl/glsl/CopyStencil.d.ts.map +1 -1
  508. package/lib/esm/internal/render/webgl/glsl/CopyStencil.js +3 -2
  509. package/lib/esm/internal/render/webgl/glsl/CopyStencil.js.map +1 -1
  510. package/lib/esm/internal/render/webgl/glsl/PlanarClassification.js +4 -4
  511. package/lib/esm/internal/render/webgl/glsl/PlanarClassification.js.map +1 -1
  512. package/lib/esm/internal/render/webgl/glsl/PlanarGrid.d.ts.map +1 -1
  513. package/lib/esm/internal/render/webgl/glsl/PlanarGrid.js +4 -3
  514. package/lib/esm/internal/render/webgl/glsl/PlanarGrid.js.map +1 -1
  515. package/lib/esm/internal/render/webgl/glsl/RealityMesh.js +9 -9
  516. package/lib/esm/internal/render/webgl/glsl/RealityMesh.js.map +1 -1
  517. package/lib/esm/internal/render/webgl/glsl/Surface.js +11 -11
  518. package/lib/esm/internal/render/webgl/glsl/Surface.js.map +1 -1
  519. package/lib/esm/internal/render/webgl/glsl/Vertex.js +3 -3
  520. package/lib/esm/internal/render/webgl/glsl/Vertex.js.map +1 -1
  521. package/lib/esm/internal/tile/B3dmReader.d.ts.map +1 -1
  522. package/lib/esm/internal/tile/B3dmReader.js +2 -2
  523. package/lib/esm/internal/tile/B3dmReader.js.map +1 -1
  524. package/lib/esm/internal/tile/FetchCloudStorage.js +1 -1
  525. package/lib/esm/internal/tile/FetchCloudStorage.js.map +1 -1
  526. package/lib/esm/internal/tile/LRUTileList.d.ts.map +1 -1
  527. package/lib/esm/internal/tile/LRUTileList.js +4 -0
  528. package/lib/esm/internal/tile/LRUTileList.js.map +1 -1
  529. package/lib/esm/internal/tile/LayerTileTreeReferenceHandler.d.ts.map +1 -1
  530. package/lib/esm/internal/tile/LayerTileTreeReferenceHandler.js +2 -1
  531. package/lib/esm/internal/tile/LayerTileTreeReferenceHandler.js.map +1 -1
  532. package/lib/esm/internal/tile/OPCFormatInterpreter.js +5 -5
  533. package/lib/esm/internal/tile/OPCFormatInterpreter.js.map +1 -1
  534. package/lib/esm/internal/tile/OrbitGtTileTree.d.ts.map +1 -1
  535. package/lib/esm/internal/tile/OrbitGtTileTree.js +3 -3
  536. package/lib/esm/internal/tile/OrbitGtTileTree.js.map +1 -1
  537. package/lib/esm/internal/tile/RealityModelTileTree.d.ts.map +1 -1
  538. package/lib/esm/internal/tile/RealityModelTileTree.js +4 -4
  539. package/lib/esm/internal/tile/RealityModelTileTree.js.map +1 -1
  540. package/lib/esm/internal/tile/RealityTileLoader.d.ts.map +1 -1
  541. package/lib/esm/internal/tile/RealityTileLoader.js +3 -0
  542. package/lib/esm/internal/tile/RealityTileLoader.js.map +1 -1
  543. package/lib/esm/internal/tile/ThreeDTileFormatInterpreter.js +4 -4
  544. package/lib/esm/internal/tile/ThreeDTileFormatInterpreter.js.map +1 -1
  545. package/lib/esm/internal/tile/TileUserSet.d.ts.map +1 -1
  546. package/lib/esm/internal/tile/TileUserSet.js +4 -0
  547. package/lib/esm/internal/tile/TileUserSet.js.map +1 -1
  548. package/lib/esm/internal/tile/map/ArcGISTileMap.js +1 -1
  549. package/lib/esm/internal/tile/map/ArcGISTileMap.js.map +1 -1
  550. package/lib/esm/internal/tile/map/ArcGisUtilities.d.ts.map +1 -1
  551. package/lib/esm/internal/tile/map/ArcGisUtilities.js +4 -0
  552. package/lib/esm/internal/tile/map/ArcGisUtilities.js.map +1 -1
  553. package/lib/esm/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  554. package/lib/esm/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +3 -1
  555. package/lib/esm/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  556. package/lib/esm/internal/tile/map/ImageryProviders/BingImageryProvider.js +3 -3
  557. package/lib/esm/internal/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  558. package/lib/esm/internal/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +2 -2
  559. package/lib/esm/internal/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  560. package/lib/esm/internal/tile/map/MapTileAvailability.d.ts.map +1 -1
  561. package/lib/esm/internal/tile/map/MapTileAvailability.js +6 -3
  562. package/lib/esm/internal/tile/map/MapTileAvailability.js.map +1 -1
  563. package/lib/esm/internal/tile/map/WmtsCapabilities.d.ts.map +1 -1
  564. package/lib/esm/internal/tile/map/WmtsCapabilities.js +3 -2
  565. package/lib/esm/internal/tile/map/WmtsCapabilities.js.map +1 -1
  566. package/lib/esm/properties/FormattedQuantityDescription.d.ts.map +1 -1
  567. package/lib/esm/properties/FormattedQuantityDescription.js +2 -0
  568. package/lib/esm/properties/FormattedQuantityDescription.js.map +1 -1
  569. package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts.map +1 -1
  570. package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js +2 -0
  571. package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
  572. package/lib/esm/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
  573. package/lib/esm/quantity-formatting/QuantityFormatter.js +5 -3
  574. package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
  575. package/lib/esm/tile/GltfReader.d.ts +5 -2
  576. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  577. package/lib/esm/tile/GltfReader.js +55 -17
  578. package/lib/esm/tile/GltfReader.js.map +1 -1
  579. package/lib/esm/tile/RealityTile.d.ts.map +1 -1
  580. package/lib/esm/tile/RealityTile.js +3 -3
  581. package/lib/esm/tile/RealityTile.js.map +1 -1
  582. package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
  583. package/lib/esm/tile/RealityTileTree.js +6 -6
  584. package/lib/esm/tile/RealityTileTree.js.map +1 -1
  585. package/lib/esm/tile/TileAdmin.js.map +1 -1
  586. package/lib/esm/tile/TileDrawArgs.d.ts.map +1 -1
  587. package/lib/esm/tile/TileDrawArgs.js +2 -1
  588. package/lib/esm/tile/TileDrawArgs.js.map +1 -1
  589. package/lib/esm/tile/map/ImageryTileTree.js +2 -2
  590. package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
  591. package/lib/esm/tile/map/MapLayerFormatRegistry.js +2 -2
  592. package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
  593. package/lib/esm/tile/map/MapLayerSources.d.ts.map +1 -1
  594. package/lib/esm/tile/map/MapLayerSources.js +10 -2
  595. package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
  596. package/lib/esm/tile/map/MapTile.d.ts.map +1 -1
  597. package/lib/esm/tile/map/MapTile.js +11 -9
  598. package/lib/esm/tile/map/MapTile.js.map +1 -1
  599. package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
  600. package/lib/esm/tile/map/MapTileTree.js +9 -8
  601. package/lib/esm/tile/map/MapTileTree.js.map +1 -1
  602. package/lib/esm/tile/map/MapTilingScheme.d.ts.map +1 -1
  603. package/lib/esm/tile/map/MapTilingScheme.js +2 -1
  604. package/lib/esm/tile/map/MapTilingScheme.js.map +1 -1
  605. package/lib/esm/tools/Tool.js +2 -2
  606. package/lib/esm/tools/Tool.js.map +1 -1
  607. package/lib/public/scripts/parse-imdl-worker.js +1 -1
  608. package/lib/workers/webpack/parse-imdl-worker.js +1 -1
  609. package/package.json +20 -20
@@ -515,7 +515,7 @@ function addTexture(builder, animated, isThematic, isPointCloud, isHilite, isMap
515
515
  builder.addFunctionComputedVarying("v_texCoord", 3 /* VariableType.Vec2 */, "computeTexCoord", animated ? getComputeAnimatedTexCoord(quantized) : getComputeTexCoord(quantized));
516
516
  builder.vert.addUniform("u_qTexCoordParams", 5 /* VariableType.Vec4 */, (prog) => {
517
517
  prog.addGraphicUniform("u_qTexCoordParams", (uniform, params) => {
518
- const surfGeom = params.geometry.asSurface;
518
+ const surfGeom = (0, core_bentley_1.expectDefined)(params.geometry.asSurface);
519
519
  if (surfGeom.useTexture(params.programParams) || (surfGeom.useNormalMap(params.programParams) && !isPointCloud)) {
520
520
  const uvQParams = surfGeom.lut.uvQParams;
521
521
  if (undefined !== uvQParams) {
@@ -527,7 +527,7 @@ function addTexture(builder, animated, isThematic, isPointCloud, isHilite, isMap
527
527
  }
528
528
  builder.frag.addUniform("s_texture", 8 /* VariableType.Sampler2D */, (prog) => {
529
529
  prog.addGraphicUniform("s_texture", (uniform, params) => {
530
- const surfGeom = params.geometry.asSurface;
530
+ const surfGeom = (0, core_bentley_1.expectDefined)(params.geometry.asSurface);
531
531
  if (params.geometry.supportsThematicDisplay && params.target.wantThematicDisplay) { // NB: if thematic display is enabled, bind the thematic texture and ignore any applied surface textures
532
532
  params.target.uniforms.thematic.bindTexture(uniform, RenderFlags_1.TextureUnit.SurfaceTexture);
533
533
  }
@@ -544,7 +544,7 @@ function addTexture(builder, animated, isThematic, isPointCloud, isHilite, isMap
544
544
  if (!isHilite && !isPointCloud) {
545
545
  builder.frag.addUniform("s_normalMap", 8 /* VariableType.Sampler2D */, (prog) => {
546
546
  prog.addGraphicUniform("s_normalMap", (uniform, params) => {
547
- const surfGeom = params.geometry.asSurface;
547
+ const surfGeom = (0, core_bentley_1.expectDefined)(params.geometry.asSurface);
548
548
  if (surfGeom.useNormalMap(params.programParams)) {
549
549
  const normalMap = surfGeom.normalMap;
550
550
  (0, core_bentley_1.assert)(undefined !== normalMap);
@@ -559,7 +559,7 @@ function addTexture(builder, animated, isThematic, isPointCloud, isHilite, isMap
559
559
  if (isMaplayer) {
560
560
  builder.frag.addUniform("u_texturesPresent", 0 /* VariableType.Boolean */, (program) => {
561
561
  program.addGraphicUniform("u_texturesPresent", (uniform, params) => {
562
- uniform.setUniform1i(params.geometry.asSurface.hasTextures ? 1 : 0);
562
+ uniform.setUniform1i((0, core_bentley_1.expectDefined)(params.geometry.asSurface).hasTextures ? 1 : 0);
563
563
  });
564
564
  });
565
565
  const textureUnits = [
@@ -575,7 +575,7 @@ function addTexture(builder, animated, isThematic, isPointCloud, isHilite, isMap
575
575
  builder.frag.addUniform(textureLabel, 8 /* VariableType.Sampler2D */, (prog) => {
576
576
  prog.addGraphicUniform(textureLabel, (uniform, params) => {
577
577
  const textureUnit = textureUnits[i];
578
- const mesh = params.geometry.asSurface;
578
+ const mesh = (0, core_bentley_1.expectDefined)(params.geometry.asSurface);
579
579
  const drapeTexture = mesh.textureParams ? mesh.textureParams.params[i].texture : undefined;
580
580
  if (drapeTexture !== undefined) {
581
581
  const texture = drapeTexture;
@@ -590,23 +590,23 @@ function addTexture(builder, animated, isThematic, isPointCloud, isHilite, isMap
590
590
  const paramsLabel = `u_texParams${i}`, matrixLabel = `u_texMatrix${i}`;
591
591
  builder.frag.addUniform(matrixLabel, 7 /* VariableType.Mat4 */, (prog) => {
592
592
  prog.addGraphicUniform(matrixLabel, (uniform, params) => {
593
- const mesh = params.geometry.asSurface;
593
+ const mesh = (0, core_bentley_1.expectDefined)(params.geometry.asSurface);
594
594
  const textureParam = mesh.textureParams?.params[i];
595
595
  if (undefined !== textureParam) {
596
596
  const projectionMatrix = textureParam.getProjectionMatrix();
597
597
  if (projectionMatrix) {
598
- const eyeToModel = core_geometry_1.Matrix4d.createTransform(params.target.uniforms.frustum.viewMatrix.inverse(), scratchMatrix4d1);
598
+ const eyeToModel = core_geometry_1.Matrix4d.createTransform((0, core_bentley_1.expectDefined)(params.target.uniforms.frustum.viewMatrix.inverse()), scratchMatrix4d1);
599
599
  const eyeToTexture = projectionMatrix.multiplyMatrixMatrix(eyeToModel, scratchMatrix4d2);
600
600
  uniform.setMatrix4(Matrix_1.Matrix4.fromMatrix4d(eyeToTexture, scratchMatrix));
601
601
  }
602
602
  else
603
- uniform.setMatrix4(textureParam.getTerrainMatrix());
603
+ uniform.setMatrix4((0, core_bentley_1.expectDefined)(textureParam.getTerrainMatrix()));
604
604
  }
605
605
  });
606
606
  });
607
607
  builder.frag.addUniform(paramsLabel, 7 /* VariableType.Mat4 */, (prog) => {
608
608
  prog.addGraphicUniform(paramsLabel, (uniform, params) => {
609
- const mesh = params.geometry.asSurface;
609
+ const mesh = (0, core_bentley_1.expectDefined)(params.geometry.asSurface);
610
610
  const textureParam = mesh.textureParams?.params[i];
611
611
  if (undefined !== textureParam) {
612
612
  uniform.setMatrix4(textureParam.getParams(scratchMatrix));
@@ -682,7 +682,7 @@ function createSurfaceBuilder(flags) {
682
682
  addTexture(builder, flags.isAnimated, flags.isThematic, false, false, true);
683
683
  builder.frag.addUniform("u_applyGlyphTex", 0 /* VariableType.Boolean */, (prog) => {
684
684
  prog.addGraphicUniform("u_applyGlyphTex", (uniform, params) => {
685
- const surfGeom = params.geometry.asSurface;
685
+ const surfGeom = (0, core_bentley_1.expectDefined)(params.geometry.asSurface);
686
686
  uniform.setUniform1i(surfGeom.useTexture(params.programParams) && surfGeom.isGlyph ? 1 : 0);
687
687
  });
688
688
  });
@@ -1 +1 @@
1
- {"version":3,"file":"Surface.js","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/Surface.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 { AttributeMap } from \"../AttributeMap\";\nimport { Material } from \"../Material\";\nimport { Pass, SurfaceBitIndex, SurfaceFlags, TextureUnit } from \"../RenderFlags\";\nimport {\n FragmentShaderBuilder, FragmentShaderComponent, ProgramBuilder, ShaderBuilder, VariableType, VertexShaderComponent,\n} from \"../ShaderBuilder\";\nimport { System } from \"../System\";\nimport {\n FeatureMode, IsAnimated, IsClassified, IsInstanced, IsShadowable, IsThematic, PositionType, TechniqueFlags,\n} from \"../TechniqueFlags\";\nimport { TechniqueId } from \"../TechniqueId\";\nimport { Texture } from \"../Texture\";\nimport { addAnimation } from \"./Animation\";\nimport { unpackFloat } from \"./Clipping\";\nimport { addColor } from \"./Color\";\nimport { addChooseVec2WithBitFlagsFunction, addChooseVec3WithBitFlagFunction, addExtractNthBit, addFrustum, addShaderFlags } from \"./Common\";\nimport { addUnpackAndNormalize2Bytes, decodeDepthRgb, unquantize2d } from \"./Decode\";\nimport {\n addFeatureSymbology, addMaxAlpha, addRenderOrder, addRenderOrderConstants, addSurfaceDiscard, addSurfaceHiliter, FeatureSymbologyOptions,\n} from \"./FeatureSymbology\";\nimport {\n addAltPickBufferOutputs, addFragColorWithPreMultipliedAlpha, addPickBufferOutputs, addWhiteOnWhiteReversal, assignFragColor,\n} from \"./Fragment\";\nimport { addLighting } from \"./Lighting\";\nimport { addSurfaceMonochrome } from \"./Monochrome\";\nimport { addColorPlanarClassifier, addFeaturePlanarClassifier, addHilitePlanarClassifier, addOverrideClassifierColor } from \"./PlanarClassification\";\nimport { addRenderPass } from \"./RenderPass\";\nimport { addSolarShadowMap } from \"./SolarShadowMapping\";\nimport { addThematicDisplay, getComputeThematicIndex } from \"./Thematic\";\nimport { addTranslucency } from \"./Translucency\";\nimport { addModelViewMatrix, addNormalMatrix, addProjectionMatrix } from \"./Vertex\";\nimport { wantMaterials } from \"../SurfaceGeometry\";\nimport { addWiremesh } from \"./Wiremesh\";\nimport { Npc } from \"@itwin/core-common\";\nimport { addApplyContours } from \"./Contours\";\nimport { Matrix4d } from \"@itwin/core-geometry\";\nimport { Matrix4 } from \"../Matrix\";\nimport { addApplySurfaceDraping } from \"./MaplayerDraping\";\n\nconst constantLodTextureLookup = `\nvec4 constantLodTextureLookup(sampler2D textureSampler) {\n float logDepth = log2(v_uvCustom.z);\n float f = fract(logDepth);\n float p = floor(logDepth);\n // When p changes, both tc1 and tc2 jumped by a power of 2 at that transition (and f goes from ~1 to 0).\n // This caused a line to show up with incorrect tex coords, we believe due to a problem with the derivative\n // that is auto calculated on the tex coords for the mip-map. The below approach attempts to \"smooth\"\n // the transition of the coord in use at the transition by only changing the coord that is not in use\n // (but by 2 powers of 2) and switching the mix selector to account for it. It does this by using whether\n // p is odd or even to select which way it is going, so it alternates at the boundaries. This fixes the\n // line problem.\n float p1, p2;\n if (0u == (uint(p) & 1u)) { // p is even\n p1 = p;\n p2 = p + 1.0;\n } else { // p is odd\n p1 = p + 1.0;\n p2 = p;\n f = 1.0 - f;\n }\n\n vec2 tc1 = v_uvCustom.xy / clamp(pow(2.0, p1), float(u_constantLodFParams.x), float(u_constantLodFParams.y)) * u_constantLodFParams.z;\n vec2 tc2 = v_uvCustom.xy / clamp(pow(2.0, p2), float(u_constantLodFParams.x), float(u_constantLodFParams.y)) * u_constantLodFParams.z;\n return mix(TEXTURE(textureSampler, tc1), TEXTURE(textureSampler, tc2), f);\n}\n`;\n\n// NB: Textures do not contain pre-multiplied alpha.\nconst sampleSurfaceTexture = `\nvec4 sampleSurfaceTexture() {\n vec4 clr;\n if (!isSurfaceBitSet(kSurfaceBit_HasTexture))\n clr = vec4(1.0, 1.0, 1.0, 1.0);\n else if (u_surfaceFlags[kSurfaceBitIndex_UseConstantLodTextureMapping])\n clr = constantLodTextureLookup(s_texture);\n else\n clr = TEXTURE(s_texture, v_texCoord);\n return clr;\n}\n`;\n\nconst applyMaterialColor = `\n float useMatColor = float(use_material);\n vec3 rgb = mix(baseColor.rgb, mat_rgb.rgb, useMatColor * mat_rgb.a);\n float a = mix(baseColor.a, mat_alpha.x, useMatColor * mat_alpha.y);\n return vec4(rgb, a);\n`;\n\n// if this is a raster glyph, the sampled color has already been modified - do not modify further.\n// Mix diffuse color with texel based on texture weight.\n// Replace with diffuse RGB if RGB overridden.\n// Replace with diffuse alpha if alpha overridden.\n// Multiply texel alpha with diffuse alpha if specified.\nconst applyTextureWeight = `\n bool applyTexture = !u_applyGlyphTex && isSurfaceBitSet(kSurfaceBit_HasTexture);\n float textureWeight = applyTexture ? mat_texture_weight : 0.0;\n vec3 rgb = mix(baseColor.rgb, g_surfaceTexel.rgb, textureWeight);\n rgb = chooseVec3WithBitFlag(rgb, baseColor.rgb, surfaceFlags, kSurfaceBit_OverrideRgb);\n\n float a = applyTexture ? baseColor.a * g_surfaceTexel.a : baseColor.a;\n\n return vec4(rgb, a);\n`;\n\nconst decodeFragMaterialParams = `\nvoid decodeMaterialParams(vec4 params) {\n mat_weights = unpackAndNormalize2Bytes(params.x);\n\n vec2 texAndSpecR = unpackAndNormalize2Bytes(params.y);\n mat_texture_weight = texAndSpecR.x;\n\n vec2 specGB = unpackAndNormalize2Bytes(params.z);\n mat_specular = vec4(texAndSpecR.y, specGB, params.w);\n}\n`;\n\nconst decodeMaterialColor = `\nvoid decodeMaterialColor(vec4 rgba) {\n mat_rgb = vec4(rgba.rgb, float(rgba.r >= 0.0));\n mat_alpha = vec2(rgba.a, float(rgba.a >= 0.0));\n}\n`;\n\n// defaults: (0x6699, 0xffff, 0xffff, 13.5)\nconst computeMaterialParams = `\n const vec4 defaults = vec4(26265.0, 65535.0, 65535.0, 13.5);\n return use_material ? g_materialParams : defaults;\n`;\n\n// The 8-bit material index is stored with the 24-bit feature index, in the high byte.\nconst readMaterialAtlas = `\nvoid readMaterialAtlas() {\n float materialAtlasStart = u_vertParams.z * u_vertParams.w + u_numColors;\n float materialIndex = g_featureAndMaterialIndex.w * 4.0 + materialAtlasStart;\n\n vec2 tc = computeLUTCoords(materialIndex, u_vertParams.xy, g_vert_center, 1.0);\n vec4 rgba = TEXTURE(u_vertLUT, tc);\n\n tc = computeLUTCoords(materialIndex + 1.0, u_vertParams.xy, g_vert_center, 1.0);\n vec4 weightsAndFlags = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\n\n tc = computeLUTCoords(materialIndex + 2.0, u_vertParams.xy, g_vert_center, 1.0);\n vec3 specularRgb = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5).rgb;\n\n tc = computeLUTCoords(materialIndex + 3.0, u_vertParams.xy, g_vert_center, 1.0);\n vec4 packedSpecularExponent = TEXTURE(u_vertLUT, tc);\n\n float flags = weightsAndFlags.w;\n mat_rgb = vec4(rgba.rgb, float(flags == 1.0 || flags == 3.0));\n mat_alpha = vec2(rgba.a, float(flags == 2.0 || flags == 3.0));\n\n float specularExponent = unpackFloat(packedSpecularExponent);\n g_materialParams.x = weightsAndFlags.y + weightsAndFlags.z * 256.0;\n g_materialParams.y = 255.0 + specularRgb.r * 256.0;\n g_materialParams.z = specularRgb.g + specularRgb.b * 256.0;\n g_materialParams.w = specularExponent;\n}\n`;\n\nconst computeMaterial = `\n if (u_surfaceFlags[kSurfaceBitIndex_HasMaterialAtlas]) {\n readMaterialAtlas();\n } else {\n decodeMaterialColor(u_materialColor);\n g_materialParams = u_materialParams;\n }\n`;\n\nconst computeMaterialInstanced = `\n decodeMaterialColor(u_materialColor);\n g_materialParams = u_materialParams;\n`;\n\nfunction addMaterial(builder: ProgramBuilder, instanced: boolean): void {\n const frag = builder.frag;\n assert(undefined !== frag.find(\"v_surfaceFlags\"));\n\n frag.addGlobal(\"mat_texture_weight\", VariableType.Float);\n frag.addGlobal(\"mat_weights\", VariableType.Vec2); // diffuse, specular\n frag.addGlobal(\"mat_specular\", VariableType.Vec4); // rgb, exponent\n\n addUnpackAndNormalize2Bytes(frag);\n frag.addFunction(decodeFragMaterialParams);\n frag.addInitializer(\"decodeMaterialParams(v_materialParams);\");\n\n addChooseVec3WithBitFlagFunction(frag);\n frag.set(FragmentShaderComponent.ApplyMaterialOverrides, applyTextureWeight);\n\n const vert = builder.vert;\n vert.addGlobal(\"mat_rgb\", VariableType.Vec4); // a = 0 if not overridden, else 1\n vert.addGlobal(\"mat_alpha\", VariableType.Vec2); // a = 0 if not overridden, else 1\n vert.addGlobal(\"use_material\", VariableType.Boolean);\n vert.addInitializer(\"use_material = !u_surfaceFlags[kSurfaceBitIndex_IgnoreMaterial];\");\n\n // Uniform material\n vert.addFunction(decodeMaterialColor);\n vert.addUniform(\"u_materialColor\", VariableType.Vec4, (prog) => {\n prog.addGraphicUniform(\"u_materialColor\", (uniform, params) => {\n const info = wantMaterials(params.target.currentViewFlags) ? params.geometry.materialInfo : undefined;\n const mat = undefined !== info && !info.isAtlas ? info : Material.default;\n uniform.setUniform4fv(mat.rgba);\n });\n });\n\n vert.addUniform(\"u_materialParams\", VariableType.Vec4, (prog) => {\n prog.addGraphicUniform(\"u_materialParams\", (uniform, params) => {\n const info = wantMaterials(params.target.currentViewFlags) ? params.geometry.materialInfo : undefined;\n const mat = undefined !== info && !info.isAtlas ? info : Material.default;\n uniform.setUniform4fv(mat.fragUniforms);\n });\n });\n\n if (!instanced) {\n // Material atlas\n vert.addFunction(unpackFloat);\n vert.addFunction(readMaterialAtlas);\n vert.addUniform(\"u_numColors\", VariableType.Float, (prog) => {\n prog.addGraphicUniform(\"u_numColors\", (uniform, params) => {\n const info = params.geometry.materialInfo;\n const numColors = undefined !== info && info.isAtlas ? info.vertexTableOffset : 0;\n uniform.setUniform1f(numColors);\n });\n });\n }\n vert.addGlobal(\"g_materialParams\", VariableType.Vec4);\n vert.set(VertexShaderComponent.ComputeMaterial, instanced ? computeMaterialInstanced : computeMaterial);\n vert.set(VertexShaderComponent.ApplyMaterialColor, applyMaterialColor);\n builder.addFunctionComputedVarying(\"v_materialParams\", VariableType.Vec4, \"computeMaterialParams\", computeMaterialParams);\n}\n\nconst computePositionPrelude = `\n vec4 pos = MAT_MV * rawPos;\n`;\n\n// We used to use gl.polygonOffset() for blanking regions, but that doesn't work with logarithmic depth buffer which overwrites the\n// computed Z. Instead we must manually offset in vertex shader. We do this even if log depth is not enabled/supported.\n// NOTE: If log depth is *not* supported, then the hilite surface vertex shaders previously would still include this logic, but the\n// fragment shaders would not use v_eyeSpace. Some Ubuntu 20.04 graphics drivers cleverly and correctly optimized out the varying and the uniform,\n// causing an exception when gl.getProgramLocation() failed. So, omit this bit in that case.\nconst adjustEyeSpace = `\n v_eyeSpace = pos.xyz;\n const float blankingRegionOffset = 2.0 / 65536.0;\n if (kRenderOrder_BlankingRegion == u_renderOrder)\n v_eyeSpace.z -= blankingRegionOffset * (u_frustum.y - u_frustum.x);\n`;\n\nconst computeConstantLodUvCustom = `\n vec2 worldpos = (u_modelToWorld * vec4(rawPos.xyz, 0.0)).xy;\n v_uvCustom = vec3((u_constantLodVParams.xy + worldpos) * vec2(1.0, -1.0), kFrustumType_Perspective == u_frustum.z ? -v_eyeSpace.z : u_constantLodVParams.z);\n`;\n\nconst computePositionPostlude = `\n return u_proj * pos;\n`;\n\nfunction createCommon(isInstanced: IsInstanced, animated: IsAnimated, shadowable: IsShadowable, isHiliter: boolean, positionType: PositionType): ProgramBuilder {\n const instanced = IsInstanced.Yes === isInstanced;\n const attrMap = AttributeMap.findAttributeMap(TechniqueId.Surface, instanced);\n const builder = new ProgramBuilder(attrMap, { positionType, instanced });\n const vert = builder.vert;\n\n if (animated)\n addAnimation(vert, true);\n\n if (shadowable)\n addSolarShadowMap(builder);\n\n addProjectionMatrix(vert);\n addModelViewMatrix(vert);\n\n let computePosition = computePositionPrelude;\n if (!isHiliter || System.instance.supportsLogZBuffer) {\n addFrustum(builder);\n addRenderOrder(builder.vert);\n addRenderOrderConstants(builder.vert);\n builder.addVarying(\"v_eyeSpace\", VariableType.Vec3);\n computePosition += adjustEyeSpace;\n }\n if (!isHiliter)\n computePosition += computeConstantLodUvCustom;\n computePosition += computePositionPostlude;\n\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\n\n return builder;\n}\n\n/** @internal */\nexport function createSurfaceHiliter(instanced: IsInstanced, classified: IsClassified, posType: PositionType): ProgramBuilder {\n const builder = createCommon(instanced, IsAnimated.No, IsShadowable.No, true, posType);\n\n addSurfaceFlags(builder, true, false);\n addTexture(builder, IsAnimated.No, IsThematic.No, false, true, false);\n if (classified) {\n addHilitePlanarClassifier(builder);\n builder.vert.addGlobal(\"feature_ignore_material\", VariableType.Boolean, \"false\");\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\n } else {\n addSurfaceHiliter(builder);\n }\n\n return builder;\n}\n\nconst isSurfaceBitSet = `\nbool isSurfaceBitSet(uint flag) { return 0u != (surfaceFlags & flag); }\n`;\n\n/** @internal */\nfunction addSurfaceFlagsLookup(builder: ShaderBuilder) {\n builder.addConstant(\"kSurfaceBitIndex_HasTexture\", VariableType.Int, SurfaceBitIndex.HasTexture.toString());\n builder.addConstant(\"kSurfaceBitIndex_ApplyLighting\", VariableType.Int, SurfaceBitIndex.ApplyLighting.toString());\n builder.addConstant(\"kSurfaceBitIndex_HasNormals\", VariableType.Int, SurfaceBitIndex.HasNormals.toString());\n builder.addConstant(\"kSurfaceBitIndex_IgnoreMaterial\", VariableType.Int, SurfaceBitIndex.IgnoreMaterial.toString());\n builder.addConstant(\"kSurfaceBitIndex_TransparencyThreshold\", VariableType.Int, SurfaceBitIndex.TransparencyThreshold.toString());\n builder.addConstant(\"kSurfaceBitIndex_BackgroundFill\", VariableType.Int, SurfaceBitIndex.BackgroundFill.toString());\n builder.addConstant(\"kSurfaceBitIndex_HasColorAndNormal\", VariableType.Int, SurfaceBitIndex.HasColorAndNormal.toString());\n builder.addConstant(\"kSurfaceBitIndex_OverrideRgb\", VariableType.Int, SurfaceBitIndex.OverrideRgb.toString());\n builder.addConstant(\"kSurfaceBitIndex_HasNormalMap\", VariableType.Int, SurfaceBitIndex.HasNormalMap.toString());\n builder.addConstant(\"kSurfaceBitIndex_HasMaterialAtlas\", VariableType.Int, SurfaceBitIndex.HasMaterialAtlas.toString());\n builder.addConstant(\"kSurfaceBitIndex_UseConstantLodTextureMapping\", VariableType.Int, SurfaceBitIndex.UseConstantLodTextureMapping.toString());\n builder.addConstant(\"kSurfaceBitIndex_UseConstantLodNormalMapMapping\", VariableType.Int, SurfaceBitIndex.UseConstantLodNormalMapMapping.toString());\n\n // Surface flags which get modified in vertex shader are still passed to fragment shader as a single float & are thus\n // used differently there & so require different constants. Unused constants are commented out.\n builder.addBitFlagConstant(\"kSurfaceBit_HasTexture\", SurfaceBitIndex.HasTexture);\n builder.addBitFlagConstant(\"kSurfaceBit_IgnoreMaterial\", SurfaceBitIndex.IgnoreMaterial);\n builder.addBitFlagConstant(\"kSurfaceBit_OverrideRgb\", SurfaceBitIndex.OverrideRgb);\n builder.addBitFlagConstant(\"kSurfaceBit_HasNormalMap\", SurfaceBitIndex.HasNormalMap);\n\n // Only need masks for flags modified in vertex shader\n const suffix = \"u\";\n const type = VariableType.Uint;\n builder.addConstant(\"kSurfaceMask_HasTexture\", type, SurfaceFlags.HasTexture.toString() + suffix);\n builder.addConstant(\"kSurfaceMask_IgnoreMaterial\", type, SurfaceFlags.IgnoreMaterial.toString() + suffix);\n builder.addConstant(\"kSurfaceMask_OverrideRgb\", type, SurfaceFlags.OverrideRgb.toString() + suffix);\n builder.addConstant(\"kSurfaceMask_HasNormalMap\", type, SurfaceFlags.HasNormalMap.toString() + suffix);\n\n addExtractNthBit(builder);\n builder.addFunction(isSurfaceBitSet);\n builder.addGlobal(\"surfaceFlags\", VariableType.Uint);\n}\n\nconst initSurfaceFlags = `\n surfaceFlags = u_surfaceFlags[kSurfaceBitIndex_HasTexture] ? kSurfaceMask_HasTexture : 0u;\n surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_IgnoreMaterial] ? kSurfaceMask_IgnoreMaterial : 0u;\n surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_OverrideRgb] ? kSurfaceMask_OverrideRgb : 0u;\n surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_HasNormalMap] ? kSurfaceMask_HasNormalMap : 0u;\n`;\n\nconst computeBaseSurfaceFlags = `\n if (feature_ignore_material) {\n if (u_surfaceFlags[kSurfaceBitIndex_HasTexture])\n surfaceFlags -= kSurfaceMask_HasTexture;\n if (u_surfaceFlags[kSurfaceBitIndex_HasNormalMap])\n surfaceFlags -= kSurfaceMask_HasNormalMap;\n\n surfaceFlags += kSurfaceMask_IgnoreMaterial;\n }\n`;\n\n// Textured surfaces (including raster glyphs) always *multiply* the sampled alpha by the alpha override.\nconst computeColorSurfaceFlags = `\n if (feature_rgb.r >= 0.0)\n surfaceFlags += kSurfaceMask_OverrideRgb;\n`;\n\nconst returnSurfaceFlags = \" return float(surfaceFlags);\\n\";\n\nconst computeSurfaceFlags = computeBaseSurfaceFlags;\nconst computeSurfaceFlagsWithColor = computeBaseSurfaceFlags + computeColorSurfaceFlags;\n\n/** @internal */\nexport const octDecodeNormal = `\nvec3 octDecodeNormal(vec2 e) {\n e = e / 255.0 * 2.0 - 1.0;\n vec3 n = vec3(e.x, e.y, 1.0 - abs(e.x) - abs(e.y));\n if (n.z < 0.0) {\n vec2 signNotZero = vec2(n.x >= 0.0 ? 1.0 : -1.0, n.y >= 0.0 ? 1.0 : -1.0);\n n.xy = (1.0 - abs(n.yx)) * signNotZero;\n }\n\n return normalize(n);\n}\n`;\n\nfunction getComputeNormal(quantized: boolean): string {\n const a = quantized ? \"g_vertLutData3.xy\" : \"g_vertLutData4.zw\";\n const b = quantized ? \"g_vertLutData1.zw\" : \"g_vertLutData5.xy\";\n return `\n if (!u_surfaceFlags[kSurfaceBitIndex_HasNormals])\n return vec3(0.0);\n\n vec2 normal = (u_surfaceFlags[kSurfaceBitIndex_HasColorAndNormal]) ? ${a} : ${b};\n return normalize(MAT_NORM * octDecodeNormal(normal));\n`;\n}\n\nconst finalizeNormalPrelude = `\n vec3 normal = normalize(v_n) * (2.0 * float(gl_FrontFacing) - 1.0);\n`;\n\nconst finalizeNormalNormalMap = `\n if (isSurfaceBitSet(kSurfaceBit_HasNormalMap)) {\n // Modify the normal with the normal map texture.\n // First calculate the tangent.\n vec3 dp1 = dFdx(v_eyeSpace);\n vec3 dp2 = dFdy(v_eyeSpace);\n vec2 duv1 = dFdx(v_texCoord);\n vec2 duv2 = dFdy(v_texCoord);\n vec3 tangent = normalize(duv2.y * dp1 - duv1.y * dp2);\n tangent = normalize (tangent - normal * dot (normal, tangent)); // re-orthogonalize with normal\n bool flip = (duv1.x * duv2.y - duv2.x * duv1.y) < 0.0;\n if (flip)\n tangent = -tangent;\n vec3 biTangent = cross (normal, tangent);\n if (flip)\n biTangent = -biTangent;\n vec3 normM;\n if (u_surfaceFlags[kSurfaceBitIndex_UseConstantLodNormalMapMapping])\n normM = constantLodTextureLookup(s_normalMap).xyz;\n else\n normM = TEXTURE(s_normalMap, v_texCoord).xyz;\n if (length (normM) > 0.0001) { // check for empty normal texture\n normM = (normM - 0.5) * 2.0;\n normM = normalize (normM);\n normM.x *= abs(u_normalMapScale);\n normM.y *= u_normalMapScale;\n normM = normalize (normM);\n normal = normalize (normM.x * tangent + normM.y * biTangent + normM.z * normal);\n }\n }\n`;\n\nconst finalizeNormalPostlude = `\n return normal;\n`;\n\nfunction getComputeAnimatedNormal(quantized: boolean): string {\n return `\n if (u_animNormalParams.x >= 0.0)\n return normalize(MAT_NORM * computeAnimationNormal(u_animNormalParams.x, u_animNormalParams.y, u_animNormalParams.z));\n\n ${getComputeNormal(quantized)}`;\n}\n\nconst applyBackgroundColor = `\n return u_surfaceFlags[kSurfaceBitIndex_BackgroundFill] ? vec4(u_bgColor.rgb, baseColor.a) : baseColor;\n`;\n\nfunction getComputeTexCoord(quantized: boolean): string {\n const vertData = quantized ? \"g_vertLutData3\" : \"g_vertLutData4\";\n return `\n vec4 rgba = ${vertData};\n vec2 qcoords = vec2(decodeUInt16(rgba.xy), decodeUInt16(rgba.zw));\n return chooseVec2With2BitFlags(vec2(0.0), unquantize2d(qcoords, u_qTexCoordParams), surfaceFlags, kSurfaceBit_HasTexture, kSurfaceBit_HasNormalMap);\n`;\n}\n\nfunction getComputeAnimatedTexCoord(quantized: boolean): string {\n return `\n if (u_animScalarQParams.x >= 0.0)\n return computeAnimationParam(u_animScalarParams.x, u_animScalarParams.y, u_animScalarParams.z, u_animScalarQParams.x, u_animScalarQParams.y);\n\n ${getComputeTexCoord(quantized)}\n`;\n}\n\nconst getSurfaceColor = `\nvec4 getSurfaceColor() { return v_color; }\n`;\n\n// If we have texture weight < 1.0 we must compute the element/material color first then mix with texture color\n// in ApplyMaterialOverrides(). Do the sample once, here, and store in a global variable for possible later use.\n// If a glyph texture, must mix getSurfaceColor() with texture color so texture color alpha is applied 100% and\n// surface color rgb is scaled by texture color rgb (latter is full white originally but stretched via mipmapping).\nconst computeBaseColor = `\n g_surfaceTexel = sampleSurfaceTexture();\n vec4 surfaceColor = getSurfaceColor();\n\n if (!u_applyGlyphTex)\n return surfaceColor;\n\n // Compute color for raster glyph.\n const vec3 white = vec3(1.0);\n const vec3 epsilon = vec3(0.0001);\n vec3 almostWhite = white - epsilon;\n\n // set to black if almost white and reverse white-on-white is on\n bvec3 isAlmostWhite = greaterThan(surfaceColor.rgb, almostWhite);\n surfaceColor.rgb = (u_reverseWhiteOnWhite && isAlmostWhite.r && isAlmostWhite.g && isAlmostWhite.b ? vec3(0.0, 0.0, 0.0) : surfaceColor.rgb);\n return vec4(surfaceColor.rgb * g_surfaceTexel.rgb, g_surfaceTexel.a * surfaceColor.a);\n`;\n\nconst surfaceFlagArray = new Int32Array(SurfaceBitIndex.Count);\n\n/** @internal */\nexport function addSurfaceFlags(builder: ProgramBuilder, withFeatureOverrides: boolean, withFeatureColor: boolean) {\n addSurfaceFlagsLookup(builder.vert);\n addSurfaceFlagsLookup(builder.frag);\n\n let compute = initSurfaceFlags;\n if (withFeatureOverrides)\n compute += `${withFeatureColor ? computeSurfaceFlagsWithColor : computeSurfaceFlags}\\n`;\n compute += returnSurfaceFlags;\n builder.addFunctionComputedVarying(\"v_surfaceFlags\", VariableType.Float, \"computeSurfaceFlags\", compute);\n\n builder.frag.addInitializer(\"surfaceFlags = uint(floor(v_surfaceFlags + 0.5));\");\n\n builder.addUniformArray(\"u_surfaceFlags\", VariableType.Boolean, SurfaceBitIndex.Count, (prog) => {\n prog.addGraphicUniform(\"u_surfaceFlags\", (uniform, params) => {\n assert(undefined !== params.geometry.asSurface);\n const mesh = params.geometry.asSurface;\n mesh.computeSurfaceFlags(params.programParams, surfaceFlagArray);\n uniform.setUniform1iv(surfaceFlagArray);\n });\n });\n}\n\nfunction addNormal(builder: ProgramBuilder, animated: IsAnimated) {\n addNormalMatrix(builder.vert);\n\n const quantized = \"quantized\" === builder.vert.positionType;\n builder.vert.addFunction(octDecodeNormal);\n builder.vert.addFunction(\"vec3 computeSurfaceNormal()\", getComputeNormal(quantized));\n builder.addFunctionComputedVarying(\"v_n\", VariableType.Vec3, \"computeLightingNormal\", animated ? getComputeAnimatedNormal(quantized) : \"return computeSurfaceNormal();\");\n builder.frag.addGlobal(\"g_normal\", VariableType.Vec3);\n let finalizeNormal = finalizeNormalPrelude;\n\n finalizeNormal += finalizeNormalNormalMap;\n builder.frag.addFunction(constantLodTextureLookup);\n builder.frag.addUniform(\"u_normalMapScale\", VariableType.Float, (prog) => {\n prog.addGraphicUniform(\"u_normalMapScale\", (uniform, params) => {\n if (undefined !== params.geometry.materialInfo && !params.geometry.materialInfo.isAtlas) {\n const normalMapParams = params.geometry.materialInfo.textureMapping?.normalMapParams;\n if (undefined !== normalMapParams) {\n let normalMapScale = 1.0;\n normalMapScale = normalMapParams.scale ?? 1.0;\n if (normalMapParams.greenUp)\n normalMapScale = -normalMapScale;\n uniform.setUniform1f(normalMapScale);\n }\n }\n });\n });\n\n finalizeNormal += finalizeNormalPostlude;\n builder.frag.set(FragmentShaderComponent.FinalizeNormal, finalizeNormal);\n\n // Set to true to colorize surfaces based on normals (in world space).\n // You must also set checkMaxVarying to false in ProgramBuilder.buildProgram to avoid assertions, if using a non-optimized build.\n const debugNormals = false;\n if (debugNormals) {\n builder.frag.set(FragmentShaderComponent.ApplyDebugColor, \"return vec4(vec3(v_normal / 2.0 + 0.5), baseColor.a);\");\n builder.addInlineComputedVarying(\"v_normal\", VariableType.Vec3, \"v_normal = computeSurfaceNormal();\");\n }\n}\nconst scratchMatrix4d1 = Matrix4d.createIdentity();\nconst scratchMatrix4d2 = Matrix4d.createIdentity();\nconst scratchMatrix = new Matrix4();\n/** @internal */\nexport function addTexture(builder: ProgramBuilder, animated: IsAnimated, isThematic: IsThematic, isPointCloud: boolean, isHilite: boolean, isMaplayer:boolean) {\n if (isThematic) {\n builder.addInlineComputedVarying(\"v_thematicIndex\", VariableType.Float, getComputeThematicIndex(builder.vert.usesInstancedGeometry, isPointCloud, true));\n }\n\n // Point clouds do not need to compute texture coordinates since the only texture they use is the thematic gradient.\n // Surfaces now need texture coordinates even for thematic in case they have a normal map.\n if (!isPointCloud) {\n builder.vert.addFunction(unquantize2d);\n addChooseVec2WithBitFlagsFunction(builder.vert);\n const quantized = \"quantized\" === builder.vert.positionType;\n builder.addFunctionComputedVarying(\"v_texCoord\", VariableType.Vec2, \"computeTexCoord\", animated ? getComputeAnimatedTexCoord(quantized) : getComputeTexCoord(quantized));\n builder.vert.addUniform(\"u_qTexCoordParams\", VariableType.Vec4, (prog) => {\n prog.addGraphicUniform(\"u_qTexCoordParams\", (uniform, params) => {\n const surfGeom = params.geometry.asSurface!;\n if (surfGeom.useTexture(params.programParams) || (surfGeom.useNormalMap(params.programParams) && !isPointCloud)) {\n const uvQParams = surfGeom.lut.uvQParams;\n if (undefined !== uvQParams) {\n uniform.setUniform4fv(uvQParams);\n }\n }\n });\n });\n }\n\n builder.frag.addUniform(\"s_texture\", VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(\"s_texture\", (uniform, params) => {\n const surfGeom = params.geometry.asSurface!;\n if (params.geometry.supportsThematicDisplay && params.target.wantThematicDisplay) { // NB: if thematic display is enabled, bind the thematic texture and ignore any applied surface textures\n params.target.uniforms.thematic.bindTexture(uniform, TextureUnit.SurfaceTexture);\n } else if (surfGeom.useTexture(params.programParams)) {\n const texture = (params.geometry.hasAnimation && params.target.analysisTexture) ? (params.target.analysisTexture as Texture) : surfGeom.texture;\n assert(undefined !== texture);\n texture.texture.bindSampler(uniform, TextureUnit.SurfaceTexture);\n } else {\n System.instance.ensureSamplerBound(uniform, TextureUnit.SurfaceTexture);\n }\n });\n });\n\n if (!isHilite && !isPointCloud) {\n builder.frag.addUniform(\"s_normalMap\", VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(\"s_normalMap\", (uniform, params) => {\n const surfGeom = params.geometry.asSurface!;\n if (surfGeom.useNormalMap(params.programParams)) {\n const normalMap = surfGeom.normalMap;\n assert(undefined !== normalMap);\n normalMap.texture.bindSampler(uniform, TextureUnit.NormalMap);\n } else {\n System.instance.ensureSamplerBound(uniform, TextureUnit.NormalMap);\n }\n });\n });\n }\n\n if (isMaplayer) {\n builder.frag.addUniform(\"u_texturesPresent\", VariableType.Boolean, (program) => {\n program.addGraphicUniform(\"u_texturesPresent\", (uniform, params) => {\n uniform.setUniform1i(params.geometry.asSurface!.hasTextures ? 1 : 0);\n });\n });\n\n const textureUnits = [\n TextureUnit.SurfaceDraping0,\n TextureUnit.SurfaceDraping1,\n TextureUnit.SurfaceDraping2,\n TextureUnit.SurfaceDraping3,\n TextureUnit.SurfaceDraping4,\n TextureUnit.SurfaceDraping5,\n ];\n\n for (let i = 0; i < textureUnits.length; i++) {\n const textureLabel = `s_texture${i}`;\n\n builder.frag.addUniform(textureLabel, VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(textureLabel, (uniform, params) => {\n const textureUnit = textureUnits[i];\n const mesh = params.geometry.asSurface!;\n const drapeTexture = mesh.textureParams ? mesh.textureParams.params[i].texture : undefined;\n if (drapeTexture !== undefined) {\n const texture = drapeTexture as Texture;\n texture.texture.bindSampler(uniform, textureUnit);\n params.context\n } else {\n System.instance.ensureSamplerBound(uniform, textureUnit);\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 mesh = params.geometry.asSurface!;\n const textureParam = mesh.textureParams?.params[i];\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 mesh = params.geometry.asSurface!;\n const textureParam = mesh.textureParams?.params[i];\n if (undefined !== textureParam) {\n uniform.setMatrix4(textureParam.getParams(scratchMatrix));\n }\n });\n });\n }\n }\n\n}\n\nexport const discardClassifiedByAlpha = `\n if (u_no_classifier_discard)\n return false;\n\n bool hasAlpha = alpha <= s_maxAlpha;\n bool isOpaquePass = (kRenderPass_OpaqueLinear <= u_renderPass && kRenderPass_OpaqueGeneral >= u_renderPass);\n bool isTranslucentPass = kRenderPass_Translucent == u_renderPass;\n return (isOpaquePass && hasAlpha) || (isTranslucentPass && !hasAlpha);\n`;\n\nconst discardByAlphaCutoff = `\n float cutoff = abs(u_alphaCutoff);\n if (kRenderPass_Translucent == u_renderPass)\n return u_alphaCutoff > 0.0 && alpha >= cutoff;\n else\n return alpha < cutoff;\n`;\n\nfunction addTransparencyDiscard(frag: FragmentShaderBuilder): void {\n addRenderPass(frag);\n frag.addUniform(\"u_alphaCutoff\", VariableType.Float, (prog) => {\n prog.addGraphicUniform(\"u_alphaCutoff\", (uniform, params) => {\n // This cutoff is used to discard pixels based on the alpha value sampled from the surface texture.\n // During readPixels, or when transparency is disabled, only discard 100% opaque pixels.\n // Otherwise, if the geometry draws in both opaque and translucent passes, use DisplayParams.minTransparency to filter pixels into appropriate pass to produce appropriate blending.\n // Negative cutoff applies only during opaque pass; positive cutoff applies during opaque and translucent passes.\n const pass = params.geometry.getPass(params.target);\n const cutoff = (!Pass.rendersOpaqueAndTranslucent(pass) || params.target.isReadPixelsInProgress || !params.target.currentViewFlags.transparency) ? -1 / 255 : 241 / 255;\n uniform.setUniform1f(cutoff);\n });\n });\n\n frag.set(FragmentShaderComponent.DiscardByAlpha, discardByAlphaCutoff);\n}\n\n/** @internal */\nexport function createSurfaceBuilder(flags: TechniqueFlags): ProgramBuilder {\n const builder = createCommon(flags.isInstanced, flags.isAnimated, flags.isShadowable, false, flags.positionType);\n addShaderFlags(builder);\n\n const feat = flags.featureMode;\n let opts = FeatureMode.Overrides === feat ? FeatureSymbologyOptions.Surface : FeatureSymbologyOptions.None;\n if (flags.isClassified) {\n opts &= ~FeatureSymbologyOptions.Alpha;\n addColorPlanarClassifier(builder, flags.isTranslucent, flags.isThematic);\n }\n\n if (flags.isThematic) {\n addThematicDisplay(builder);\n } else {\n builder.vert.addUniform(\"u_modelToWorld\", VariableType.Mat4, (prog) => {\n prog.addGraphicUniform(\"u_modelToWorld\", (uniform, params) => {\n if (undefined !== params.geometry.asSurface?.mesh.constantLodVParams)\n params.target.uniforms.branch.bindModelToWorldTransform(uniform, params.geometry, false);\n });\n });\n }\n\n addFeatureSymbology(builder, feat, opts);\n addSurfaceFlags(builder, FeatureMode.Overrides === feat, true);\n addSurfaceDiscard(builder, flags);\n addNormal(builder, flags.isAnimated);\n\n // In HiddenLine mode, we must compute the base color (plus feature overrides etc) in order to get the alpha, then replace with background color (preserving alpha for the transparency threshold test).\n builder.frag.set(FragmentShaderComponent.FinalizeBaseColor, applyBackgroundColor);\n builder.frag.addUniform(\"u_bgColor\", VariableType.Vec3, (prog) => {\n prog.addProgramUniform(\"u_bgColor\", (uniform, params) => {\n params.target.uniforms.style.bindBackgroundRgb(uniform);\n });\n });\n\n addTexture(builder, flags.isAnimated, flags.isThematic, false, false, true);\n\n builder.frag.addUniform(\"u_applyGlyphTex\", VariableType.Boolean, (prog) => {\n prog.addGraphicUniform(\"u_applyGlyphTex\", (uniform, params) => {\n const surfGeom = params.geometry.asSurface!;\n uniform.setUniform1i(surfGeom.useTexture(params.programParams) && surfGeom.isGlyph ? 1 : 0);\n });\n });\n\n // Fragment and Vertex\n addColor(builder);\n\n // Fragment\n builder.frag.addFunction(getSurfaceColor);\n addLighting(builder);\n addWhiteOnWhiteReversal(builder.frag);\n addApplyContours(builder);\n addApplySurfaceDraping(builder.frag);\n\n if (flags.isTranslucent) {\n addTranslucency(builder);\n } else {\n if (FeatureMode.None === feat) {\n addFragColorWithPreMultipliedAlpha(builder.frag);\n } else {\n if (!flags.isClassified)\n addOverrideClassifierColor(builder, flags.isThematic);\n else\n addFeaturePlanarClassifier(builder);\n\n builder.frag.addFunction(decodeDepthRgb);\n if (flags.isEdgeTestNeeded || flags.isClassified)\n addPickBufferOutputs(builder.frag);\n else\n addAltPickBufferOutputs(builder.frag);\n }\n }\n\n builder.addVarying(\"v_uvCustom\", VariableType.Vec3);\n\n builder.vert.addUniform(\"u_constantLodVParams\", VariableType.Vec3, (prog) => {\n prog.addGraphicUniform(\"u_constantLodVParams\", (uniform, params) => {\n const vParams = params.geometry.asSurface?.mesh.constantLodVParams;\n if (undefined !== vParams) {\n vParams[2] = params.target.planFrustum.points[Npc.LeftTopRear].distance(params.target.planFrustum.points[Npc.RightTopRear]);\n uniform.setUniform3fv(vParams);\n }\n });\n });\n\n builder.frag.addUniform(\"u_constantLodFParams\", VariableType.Vec3, (prog) => {\n prog.addGraphicUniform(\"u_constantLodFParams\", (uniform, params) => {\n const fParams = params.geometry.asSurface?.mesh.constantLodFParams;\n if (undefined !== fParams)\n uniform.setUniform3fv(fParams);\n });\n });\n builder.frag.addFunction(constantLodTextureLookup);\n builder.frag.addFunction(sampleSurfaceTexture);\n\n builder.frag.addGlobal(\"g_surfaceTexel\", VariableType.Vec4);\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, (flags.isThematic === IsThematic.No) ? computeBaseColor : \"return getSurfaceColor();\");\n\n if (flags.isClassified)\n addClassificationTranslucencyDiscard(builder);\n else\n addTransparencyDiscard(builder.frag);\n\n addSurfaceMonochrome(builder.frag);\n addMaterial(builder, flags.isInstanced === IsInstanced.Yes);\n\n if (flags.isWiremesh)\n addWiremesh(builder);\n\n return builder;\n}\n\nexport function addClassificationTranslucencyDiscard(builder: ProgramBuilder) {\n // For unclassified geometry, we need to render in both the translucent and opaque passes if any feature transparency overrides are applied that would change the default render pass used.\n // Those shaders compute the transparency in the vertex shader and discard the vertex in one pass or the other.\n // For classified geometry, the transparency comes from the classifier geometry (when using Display.ElementColor), so even if there are no feature overrides, we may need to draw in both passes.\n // Since the transparency is not known until the fragment shader, we must perform the discard there instead.\n addMaxAlpha(builder.frag);\n addRenderPass(builder.frag);\n\n // Do not discard transparent classified geometry if we're trying to do a pick...\n builder.frag.addUniform(\"u_no_classifier_discard\", VariableType.Boolean, (prog) => {\n prog.addProgramUniform(\"u_no_classifier_discard\", (uniform, params) => {\n uniform.setUniform1i(params.target.isReadPixelsInProgress ? 1 : 0);\n });\n });\n\n builder.frag.set(FragmentShaderComponent.DiscardByAlpha, discardClassifiedByAlpha);\n}\n"]}
1
+ {"version":3,"file":"Surface.js","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/Surface.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 { AttributeMap } from \"../AttributeMap\";\nimport { Material } from \"../Material\";\nimport { Pass, SurfaceBitIndex, SurfaceFlags, TextureUnit } from \"../RenderFlags\";\nimport {\n FragmentShaderBuilder, FragmentShaderComponent, ProgramBuilder, ShaderBuilder, VariableType, VertexShaderComponent,\n} from \"../ShaderBuilder\";\nimport { System } from \"../System\";\nimport {\n FeatureMode, IsAnimated, IsClassified, IsInstanced, IsShadowable, IsThematic, PositionType, TechniqueFlags,\n} from \"../TechniqueFlags\";\nimport { TechniqueId } from \"../TechniqueId\";\nimport { Texture } from \"../Texture\";\nimport { addAnimation } from \"./Animation\";\nimport { unpackFloat } from \"./Clipping\";\nimport { addColor } from \"./Color\";\nimport { addChooseVec2WithBitFlagsFunction, addChooseVec3WithBitFlagFunction, addExtractNthBit, addFrustum, addShaderFlags } from \"./Common\";\nimport { addUnpackAndNormalize2Bytes, decodeDepthRgb, unquantize2d } from \"./Decode\";\nimport {\n addFeatureSymbology, addMaxAlpha, addRenderOrder, addRenderOrderConstants, addSurfaceDiscard, addSurfaceHiliter, FeatureSymbologyOptions,\n} from \"./FeatureSymbology\";\nimport {\n addAltPickBufferOutputs, addFragColorWithPreMultipliedAlpha, addPickBufferOutputs, addWhiteOnWhiteReversal, assignFragColor,\n} from \"./Fragment\";\nimport { addLighting } from \"./Lighting\";\nimport { addSurfaceMonochrome } from \"./Monochrome\";\nimport { addColorPlanarClassifier, addFeaturePlanarClassifier, addHilitePlanarClassifier, addOverrideClassifierColor } from \"./PlanarClassification\";\nimport { addRenderPass } from \"./RenderPass\";\nimport { addSolarShadowMap } from \"./SolarShadowMapping\";\nimport { addThematicDisplay, getComputeThematicIndex } from \"./Thematic\";\nimport { addTranslucency } from \"./Translucency\";\nimport { addModelViewMatrix, addNormalMatrix, addProjectionMatrix } from \"./Vertex\";\nimport { wantMaterials } from \"../SurfaceGeometry\";\nimport { addWiremesh } from \"./Wiremesh\";\nimport { Npc } from \"@itwin/core-common\";\nimport { addApplyContours } from \"./Contours\";\nimport { Matrix4d } from \"@itwin/core-geometry\";\nimport { Matrix4 } from \"../Matrix\";\nimport { addApplySurfaceDraping } from \"./MaplayerDraping\";\n\nconst constantLodTextureLookup = `\nvec4 constantLodTextureLookup(sampler2D textureSampler) {\n float logDepth = log2(v_uvCustom.z);\n float f = fract(logDepth);\n float p = floor(logDepth);\n // When p changes, both tc1 and tc2 jumped by a power of 2 at that transition (and f goes from ~1 to 0).\n // This caused a line to show up with incorrect tex coords, we believe due to a problem with the derivative\n // that is auto calculated on the tex coords for the mip-map. The below approach attempts to \"smooth\"\n // the transition of the coord in use at the transition by only changing the coord that is not in use\n // (but by 2 powers of 2) and switching the mix selector to account for it. It does this by using whether\n // p is odd or even to select which way it is going, so it alternates at the boundaries. This fixes the\n // line problem.\n float p1, p2;\n if (0u == (uint(p) & 1u)) { // p is even\n p1 = p;\n p2 = p + 1.0;\n } else { // p is odd\n p1 = p + 1.0;\n p2 = p;\n f = 1.0 - f;\n }\n\n vec2 tc1 = v_uvCustom.xy / clamp(pow(2.0, p1), float(u_constantLodFParams.x), float(u_constantLodFParams.y)) * u_constantLodFParams.z;\n vec2 tc2 = v_uvCustom.xy / clamp(pow(2.0, p2), float(u_constantLodFParams.x), float(u_constantLodFParams.y)) * u_constantLodFParams.z;\n return mix(TEXTURE(textureSampler, tc1), TEXTURE(textureSampler, tc2), f);\n}\n`;\n\n// NB: Textures do not contain pre-multiplied alpha.\nconst sampleSurfaceTexture = `\nvec4 sampleSurfaceTexture() {\n vec4 clr;\n if (!isSurfaceBitSet(kSurfaceBit_HasTexture))\n clr = vec4(1.0, 1.0, 1.0, 1.0);\n else if (u_surfaceFlags[kSurfaceBitIndex_UseConstantLodTextureMapping])\n clr = constantLodTextureLookup(s_texture);\n else\n clr = TEXTURE(s_texture, v_texCoord);\n return clr;\n}\n`;\n\nconst applyMaterialColor = `\n float useMatColor = float(use_material);\n vec3 rgb = mix(baseColor.rgb, mat_rgb.rgb, useMatColor * mat_rgb.a);\n float a = mix(baseColor.a, mat_alpha.x, useMatColor * mat_alpha.y);\n return vec4(rgb, a);\n`;\n\n// if this is a raster glyph, the sampled color has already been modified - do not modify further.\n// Mix diffuse color with texel based on texture weight.\n// Replace with diffuse RGB if RGB overridden.\n// Replace with diffuse alpha if alpha overridden.\n// Multiply texel alpha with diffuse alpha if specified.\nconst applyTextureWeight = `\n bool applyTexture = !u_applyGlyphTex && isSurfaceBitSet(kSurfaceBit_HasTexture);\n float textureWeight = applyTexture ? mat_texture_weight : 0.0;\n vec3 rgb = mix(baseColor.rgb, g_surfaceTexel.rgb, textureWeight);\n rgb = chooseVec3WithBitFlag(rgb, baseColor.rgb, surfaceFlags, kSurfaceBit_OverrideRgb);\n\n float a = applyTexture ? baseColor.a * g_surfaceTexel.a : baseColor.a;\n\n return vec4(rgb, a);\n`;\n\nconst decodeFragMaterialParams = `\nvoid decodeMaterialParams(vec4 params) {\n mat_weights = unpackAndNormalize2Bytes(params.x);\n\n vec2 texAndSpecR = unpackAndNormalize2Bytes(params.y);\n mat_texture_weight = texAndSpecR.x;\n\n vec2 specGB = unpackAndNormalize2Bytes(params.z);\n mat_specular = vec4(texAndSpecR.y, specGB, params.w);\n}\n`;\n\nconst decodeMaterialColor = `\nvoid decodeMaterialColor(vec4 rgba) {\n mat_rgb = vec4(rgba.rgb, float(rgba.r >= 0.0));\n mat_alpha = vec2(rgba.a, float(rgba.a >= 0.0));\n}\n`;\n\n// defaults: (0x6699, 0xffff, 0xffff, 13.5)\nconst computeMaterialParams = `\n const vec4 defaults = vec4(26265.0, 65535.0, 65535.0, 13.5);\n return use_material ? g_materialParams : defaults;\n`;\n\n// The 8-bit material index is stored with the 24-bit feature index, in the high byte.\nconst readMaterialAtlas = `\nvoid readMaterialAtlas() {\n float materialAtlasStart = u_vertParams.z * u_vertParams.w + u_numColors;\n float materialIndex = g_featureAndMaterialIndex.w * 4.0 + materialAtlasStart;\n\n vec2 tc = computeLUTCoords(materialIndex, u_vertParams.xy, g_vert_center, 1.0);\n vec4 rgba = TEXTURE(u_vertLUT, tc);\n\n tc = computeLUTCoords(materialIndex + 1.0, u_vertParams.xy, g_vert_center, 1.0);\n vec4 weightsAndFlags = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\n\n tc = computeLUTCoords(materialIndex + 2.0, u_vertParams.xy, g_vert_center, 1.0);\n vec3 specularRgb = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5).rgb;\n\n tc = computeLUTCoords(materialIndex + 3.0, u_vertParams.xy, g_vert_center, 1.0);\n vec4 packedSpecularExponent = TEXTURE(u_vertLUT, tc);\n\n float flags = weightsAndFlags.w;\n mat_rgb = vec4(rgba.rgb, float(flags == 1.0 || flags == 3.0));\n mat_alpha = vec2(rgba.a, float(flags == 2.0 || flags == 3.0));\n\n float specularExponent = unpackFloat(packedSpecularExponent);\n g_materialParams.x = weightsAndFlags.y + weightsAndFlags.z * 256.0;\n g_materialParams.y = 255.0 + specularRgb.r * 256.0;\n g_materialParams.z = specularRgb.g + specularRgb.b * 256.0;\n g_materialParams.w = specularExponent;\n}\n`;\n\nconst computeMaterial = `\n if (u_surfaceFlags[kSurfaceBitIndex_HasMaterialAtlas]) {\n readMaterialAtlas();\n } else {\n decodeMaterialColor(u_materialColor);\n g_materialParams = u_materialParams;\n }\n`;\n\nconst computeMaterialInstanced = `\n decodeMaterialColor(u_materialColor);\n g_materialParams = u_materialParams;\n`;\n\nfunction addMaterial(builder: ProgramBuilder, instanced: boolean): void {\n const frag = builder.frag;\n assert(undefined !== frag.find(\"v_surfaceFlags\"));\n\n frag.addGlobal(\"mat_texture_weight\", VariableType.Float);\n frag.addGlobal(\"mat_weights\", VariableType.Vec2); // diffuse, specular\n frag.addGlobal(\"mat_specular\", VariableType.Vec4); // rgb, exponent\n\n addUnpackAndNormalize2Bytes(frag);\n frag.addFunction(decodeFragMaterialParams);\n frag.addInitializer(\"decodeMaterialParams(v_materialParams);\");\n\n addChooseVec3WithBitFlagFunction(frag);\n frag.set(FragmentShaderComponent.ApplyMaterialOverrides, applyTextureWeight);\n\n const vert = builder.vert;\n vert.addGlobal(\"mat_rgb\", VariableType.Vec4); // a = 0 if not overridden, else 1\n vert.addGlobal(\"mat_alpha\", VariableType.Vec2); // a = 0 if not overridden, else 1\n vert.addGlobal(\"use_material\", VariableType.Boolean);\n vert.addInitializer(\"use_material = !u_surfaceFlags[kSurfaceBitIndex_IgnoreMaterial];\");\n\n // Uniform material\n vert.addFunction(decodeMaterialColor);\n vert.addUniform(\"u_materialColor\", VariableType.Vec4, (prog) => {\n prog.addGraphicUniform(\"u_materialColor\", (uniform, params) => {\n const info = wantMaterials(params.target.currentViewFlags) ? params.geometry.materialInfo : undefined;\n const mat = undefined !== info && !info.isAtlas ? info : Material.default;\n uniform.setUniform4fv(mat.rgba);\n });\n });\n\n vert.addUniform(\"u_materialParams\", VariableType.Vec4, (prog) => {\n prog.addGraphicUniform(\"u_materialParams\", (uniform, params) => {\n const info = wantMaterials(params.target.currentViewFlags) ? params.geometry.materialInfo : undefined;\n const mat = undefined !== info && !info.isAtlas ? info : Material.default;\n uniform.setUniform4fv(mat.fragUniforms);\n });\n });\n\n if (!instanced) {\n // Material atlas\n vert.addFunction(unpackFloat);\n vert.addFunction(readMaterialAtlas);\n vert.addUniform(\"u_numColors\", VariableType.Float, (prog) => {\n prog.addGraphicUniform(\"u_numColors\", (uniform, params) => {\n const info = params.geometry.materialInfo;\n const numColors = undefined !== info && info.isAtlas ? info.vertexTableOffset : 0;\n uniform.setUniform1f(numColors);\n });\n });\n }\n vert.addGlobal(\"g_materialParams\", VariableType.Vec4);\n vert.set(VertexShaderComponent.ComputeMaterial, instanced ? computeMaterialInstanced : computeMaterial);\n vert.set(VertexShaderComponent.ApplyMaterialColor, applyMaterialColor);\n builder.addFunctionComputedVarying(\"v_materialParams\", VariableType.Vec4, \"computeMaterialParams\", computeMaterialParams);\n}\n\nconst computePositionPrelude = `\n vec4 pos = MAT_MV * rawPos;\n`;\n\n// We used to use gl.polygonOffset() for blanking regions, but that doesn't work with logarithmic depth buffer which overwrites the\n// computed Z. Instead we must manually offset in vertex shader. We do this even if log depth is not enabled/supported.\n// NOTE: If log depth is *not* supported, then the hilite surface vertex shaders previously would still include this logic, but the\n// fragment shaders would not use v_eyeSpace. Some Ubuntu 20.04 graphics drivers cleverly and correctly optimized out the varying and the uniform,\n// causing an exception when gl.getProgramLocation() failed. So, omit this bit in that case.\nconst adjustEyeSpace = `\n v_eyeSpace = pos.xyz;\n const float blankingRegionOffset = 2.0 / 65536.0;\n if (kRenderOrder_BlankingRegion == u_renderOrder)\n v_eyeSpace.z -= blankingRegionOffset * (u_frustum.y - u_frustum.x);\n`;\n\nconst computeConstantLodUvCustom = `\n vec2 worldpos = (u_modelToWorld * vec4(rawPos.xyz, 0.0)).xy;\n v_uvCustom = vec3((u_constantLodVParams.xy + worldpos) * vec2(1.0, -1.0), kFrustumType_Perspective == u_frustum.z ? -v_eyeSpace.z : u_constantLodVParams.z);\n`;\n\nconst computePositionPostlude = `\n return u_proj * pos;\n`;\n\nfunction createCommon(isInstanced: IsInstanced, animated: IsAnimated, shadowable: IsShadowable, isHiliter: boolean, positionType: PositionType): ProgramBuilder {\n const instanced = IsInstanced.Yes === isInstanced;\n const attrMap = AttributeMap.findAttributeMap(TechniqueId.Surface, instanced);\n const builder = new ProgramBuilder(attrMap, { positionType, instanced });\n const vert = builder.vert;\n\n if (animated)\n addAnimation(vert, true);\n\n if (shadowable)\n addSolarShadowMap(builder);\n\n addProjectionMatrix(vert);\n addModelViewMatrix(vert);\n\n let computePosition = computePositionPrelude;\n if (!isHiliter || System.instance.supportsLogZBuffer) {\n addFrustum(builder);\n addRenderOrder(builder.vert);\n addRenderOrderConstants(builder.vert);\n builder.addVarying(\"v_eyeSpace\", VariableType.Vec3);\n computePosition += adjustEyeSpace;\n }\n if (!isHiliter)\n computePosition += computeConstantLodUvCustom;\n computePosition += computePositionPostlude;\n\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\n\n return builder;\n}\n\n/** @internal */\nexport function createSurfaceHiliter(instanced: IsInstanced, classified: IsClassified, posType: PositionType): ProgramBuilder {\n const builder = createCommon(instanced, IsAnimated.No, IsShadowable.No, true, posType);\n\n addSurfaceFlags(builder, true, false);\n addTexture(builder, IsAnimated.No, IsThematic.No, false, true, false);\n if (classified) {\n addHilitePlanarClassifier(builder);\n builder.vert.addGlobal(\"feature_ignore_material\", VariableType.Boolean, \"false\");\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\n } else {\n addSurfaceHiliter(builder);\n }\n\n return builder;\n}\n\nconst isSurfaceBitSet = `\nbool isSurfaceBitSet(uint flag) { return 0u != (surfaceFlags & flag); }\n`;\n\n/** @internal */\nfunction addSurfaceFlagsLookup(builder: ShaderBuilder) {\n builder.addConstant(\"kSurfaceBitIndex_HasTexture\", VariableType.Int, SurfaceBitIndex.HasTexture.toString());\n builder.addConstant(\"kSurfaceBitIndex_ApplyLighting\", VariableType.Int, SurfaceBitIndex.ApplyLighting.toString());\n builder.addConstant(\"kSurfaceBitIndex_HasNormals\", VariableType.Int, SurfaceBitIndex.HasNormals.toString());\n builder.addConstant(\"kSurfaceBitIndex_IgnoreMaterial\", VariableType.Int, SurfaceBitIndex.IgnoreMaterial.toString());\n builder.addConstant(\"kSurfaceBitIndex_TransparencyThreshold\", VariableType.Int, SurfaceBitIndex.TransparencyThreshold.toString());\n builder.addConstant(\"kSurfaceBitIndex_BackgroundFill\", VariableType.Int, SurfaceBitIndex.BackgroundFill.toString());\n builder.addConstant(\"kSurfaceBitIndex_HasColorAndNormal\", VariableType.Int, SurfaceBitIndex.HasColorAndNormal.toString());\n builder.addConstant(\"kSurfaceBitIndex_OverrideRgb\", VariableType.Int, SurfaceBitIndex.OverrideRgb.toString());\n builder.addConstant(\"kSurfaceBitIndex_HasNormalMap\", VariableType.Int, SurfaceBitIndex.HasNormalMap.toString());\n builder.addConstant(\"kSurfaceBitIndex_HasMaterialAtlas\", VariableType.Int, SurfaceBitIndex.HasMaterialAtlas.toString());\n builder.addConstant(\"kSurfaceBitIndex_UseConstantLodTextureMapping\", VariableType.Int, SurfaceBitIndex.UseConstantLodTextureMapping.toString());\n builder.addConstant(\"kSurfaceBitIndex_UseConstantLodNormalMapMapping\", VariableType.Int, SurfaceBitIndex.UseConstantLodNormalMapMapping.toString());\n\n // Surface flags which get modified in vertex shader are still passed to fragment shader as a single float & are thus\n // used differently there & so require different constants. Unused constants are commented out.\n builder.addBitFlagConstant(\"kSurfaceBit_HasTexture\", SurfaceBitIndex.HasTexture);\n builder.addBitFlagConstant(\"kSurfaceBit_IgnoreMaterial\", SurfaceBitIndex.IgnoreMaterial);\n builder.addBitFlagConstant(\"kSurfaceBit_OverrideRgb\", SurfaceBitIndex.OverrideRgb);\n builder.addBitFlagConstant(\"kSurfaceBit_HasNormalMap\", SurfaceBitIndex.HasNormalMap);\n\n // Only need masks for flags modified in vertex shader\n const suffix = \"u\";\n const type = VariableType.Uint;\n builder.addConstant(\"kSurfaceMask_HasTexture\", type, SurfaceFlags.HasTexture.toString() + suffix);\n builder.addConstant(\"kSurfaceMask_IgnoreMaterial\", type, SurfaceFlags.IgnoreMaterial.toString() + suffix);\n builder.addConstant(\"kSurfaceMask_OverrideRgb\", type, SurfaceFlags.OverrideRgb.toString() + suffix);\n builder.addConstant(\"kSurfaceMask_HasNormalMap\", type, SurfaceFlags.HasNormalMap.toString() + suffix);\n\n addExtractNthBit(builder);\n builder.addFunction(isSurfaceBitSet);\n builder.addGlobal(\"surfaceFlags\", VariableType.Uint);\n}\n\nconst initSurfaceFlags = `\n surfaceFlags = u_surfaceFlags[kSurfaceBitIndex_HasTexture] ? kSurfaceMask_HasTexture : 0u;\n surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_IgnoreMaterial] ? kSurfaceMask_IgnoreMaterial : 0u;\n surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_OverrideRgb] ? kSurfaceMask_OverrideRgb : 0u;\n surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_HasNormalMap] ? kSurfaceMask_HasNormalMap : 0u;\n`;\n\nconst computeBaseSurfaceFlags = `\n if (feature_ignore_material) {\n if (u_surfaceFlags[kSurfaceBitIndex_HasTexture])\n surfaceFlags -= kSurfaceMask_HasTexture;\n if (u_surfaceFlags[kSurfaceBitIndex_HasNormalMap])\n surfaceFlags -= kSurfaceMask_HasNormalMap;\n\n surfaceFlags += kSurfaceMask_IgnoreMaterial;\n }\n`;\n\n// Textured surfaces (including raster glyphs) always *multiply* the sampled alpha by the alpha override.\nconst computeColorSurfaceFlags = `\n if (feature_rgb.r >= 0.0)\n surfaceFlags += kSurfaceMask_OverrideRgb;\n`;\n\nconst returnSurfaceFlags = \" return float(surfaceFlags);\\n\";\n\nconst computeSurfaceFlags = computeBaseSurfaceFlags;\nconst computeSurfaceFlagsWithColor = computeBaseSurfaceFlags + computeColorSurfaceFlags;\n\n/** @internal */\nexport const octDecodeNormal = `\nvec3 octDecodeNormal(vec2 e) {\n e = e / 255.0 * 2.0 - 1.0;\n vec3 n = vec3(e.x, e.y, 1.0 - abs(e.x) - abs(e.y));\n if (n.z < 0.0) {\n vec2 signNotZero = vec2(n.x >= 0.0 ? 1.0 : -1.0, n.y >= 0.0 ? 1.0 : -1.0);\n n.xy = (1.0 - abs(n.yx)) * signNotZero;\n }\n\n return normalize(n);\n}\n`;\n\nfunction getComputeNormal(quantized: boolean): string {\n const a = quantized ? \"g_vertLutData3.xy\" : \"g_vertLutData4.zw\";\n const b = quantized ? \"g_vertLutData1.zw\" : \"g_vertLutData5.xy\";\n return `\n if (!u_surfaceFlags[kSurfaceBitIndex_HasNormals])\n return vec3(0.0);\n\n vec2 normal = (u_surfaceFlags[kSurfaceBitIndex_HasColorAndNormal]) ? ${a} : ${b};\n return normalize(MAT_NORM * octDecodeNormal(normal));\n`;\n}\n\nconst finalizeNormalPrelude = `\n vec3 normal = normalize(v_n) * (2.0 * float(gl_FrontFacing) - 1.0);\n`;\n\nconst finalizeNormalNormalMap = `\n if (isSurfaceBitSet(kSurfaceBit_HasNormalMap)) {\n // Modify the normal with the normal map texture.\n // First calculate the tangent.\n vec3 dp1 = dFdx(v_eyeSpace);\n vec3 dp2 = dFdy(v_eyeSpace);\n vec2 duv1 = dFdx(v_texCoord);\n vec2 duv2 = dFdy(v_texCoord);\n vec3 tangent = normalize(duv2.y * dp1 - duv1.y * dp2);\n tangent = normalize (tangent - normal * dot (normal, tangent)); // re-orthogonalize with normal\n bool flip = (duv1.x * duv2.y - duv2.x * duv1.y) < 0.0;\n if (flip)\n tangent = -tangent;\n vec3 biTangent = cross (normal, tangent);\n if (flip)\n biTangent = -biTangent;\n vec3 normM;\n if (u_surfaceFlags[kSurfaceBitIndex_UseConstantLodNormalMapMapping])\n normM = constantLodTextureLookup(s_normalMap).xyz;\n else\n normM = TEXTURE(s_normalMap, v_texCoord).xyz;\n if (length (normM) > 0.0001) { // check for empty normal texture\n normM = (normM - 0.5) * 2.0;\n normM = normalize (normM);\n normM.x *= abs(u_normalMapScale);\n normM.y *= u_normalMapScale;\n normM = normalize (normM);\n normal = normalize (normM.x * tangent + normM.y * biTangent + normM.z * normal);\n }\n }\n`;\n\nconst finalizeNormalPostlude = `\n return normal;\n`;\n\nfunction getComputeAnimatedNormal(quantized: boolean): string {\n return `\n if (u_animNormalParams.x >= 0.0)\n return normalize(MAT_NORM * computeAnimationNormal(u_animNormalParams.x, u_animNormalParams.y, u_animNormalParams.z));\n\n ${getComputeNormal(quantized)}`;\n}\n\nconst applyBackgroundColor = `\n return u_surfaceFlags[kSurfaceBitIndex_BackgroundFill] ? vec4(u_bgColor.rgb, baseColor.a) : baseColor;\n`;\n\nfunction getComputeTexCoord(quantized: boolean): string {\n const vertData = quantized ? \"g_vertLutData3\" : \"g_vertLutData4\";\n return `\n vec4 rgba = ${vertData};\n vec2 qcoords = vec2(decodeUInt16(rgba.xy), decodeUInt16(rgba.zw));\n return chooseVec2With2BitFlags(vec2(0.0), unquantize2d(qcoords, u_qTexCoordParams), surfaceFlags, kSurfaceBit_HasTexture, kSurfaceBit_HasNormalMap);\n`;\n}\n\nfunction getComputeAnimatedTexCoord(quantized: boolean): string {\n return `\n if (u_animScalarQParams.x >= 0.0)\n return computeAnimationParam(u_animScalarParams.x, u_animScalarParams.y, u_animScalarParams.z, u_animScalarQParams.x, u_animScalarQParams.y);\n\n ${getComputeTexCoord(quantized)}\n`;\n}\n\nconst getSurfaceColor = `\nvec4 getSurfaceColor() { return v_color; }\n`;\n\n// If we have texture weight < 1.0 we must compute the element/material color first then mix with texture color\n// in ApplyMaterialOverrides(). Do the sample once, here, and store in a global variable for possible later use.\n// If a glyph texture, must mix getSurfaceColor() with texture color so texture color alpha is applied 100% and\n// surface color rgb is scaled by texture color rgb (latter is full white originally but stretched via mipmapping).\nconst computeBaseColor = `\n g_surfaceTexel = sampleSurfaceTexture();\n vec4 surfaceColor = getSurfaceColor();\n\n if (!u_applyGlyphTex)\n return surfaceColor;\n\n // Compute color for raster glyph.\n const vec3 white = vec3(1.0);\n const vec3 epsilon = vec3(0.0001);\n vec3 almostWhite = white - epsilon;\n\n // set to black if almost white and reverse white-on-white is on\n bvec3 isAlmostWhite = greaterThan(surfaceColor.rgb, almostWhite);\n surfaceColor.rgb = (u_reverseWhiteOnWhite && isAlmostWhite.r && isAlmostWhite.g && isAlmostWhite.b ? vec3(0.0, 0.0, 0.0) : surfaceColor.rgb);\n return vec4(surfaceColor.rgb * g_surfaceTexel.rgb, g_surfaceTexel.a * surfaceColor.a);\n`;\n\nconst surfaceFlagArray = new Int32Array(SurfaceBitIndex.Count);\n\n/** @internal */\nexport function addSurfaceFlags(builder: ProgramBuilder, withFeatureOverrides: boolean, withFeatureColor: boolean) {\n addSurfaceFlagsLookup(builder.vert);\n addSurfaceFlagsLookup(builder.frag);\n\n let compute = initSurfaceFlags;\n if (withFeatureOverrides)\n compute += `${withFeatureColor ? computeSurfaceFlagsWithColor : computeSurfaceFlags}\\n`;\n compute += returnSurfaceFlags;\n builder.addFunctionComputedVarying(\"v_surfaceFlags\", VariableType.Float, \"computeSurfaceFlags\", compute);\n\n builder.frag.addInitializer(\"surfaceFlags = uint(floor(v_surfaceFlags + 0.5));\");\n\n builder.addUniformArray(\"u_surfaceFlags\", VariableType.Boolean, SurfaceBitIndex.Count, (prog) => {\n prog.addGraphicUniform(\"u_surfaceFlags\", (uniform, params) => {\n assert(undefined !== params.geometry.asSurface);\n const mesh = params.geometry.asSurface;\n mesh.computeSurfaceFlags(params.programParams, surfaceFlagArray);\n uniform.setUniform1iv(surfaceFlagArray);\n });\n });\n}\n\nfunction addNormal(builder: ProgramBuilder, animated: IsAnimated) {\n addNormalMatrix(builder.vert);\n\n const quantized = \"quantized\" === builder.vert.positionType;\n builder.vert.addFunction(octDecodeNormal);\n builder.vert.addFunction(\"vec3 computeSurfaceNormal()\", getComputeNormal(quantized));\n builder.addFunctionComputedVarying(\"v_n\", VariableType.Vec3, \"computeLightingNormal\", animated ? getComputeAnimatedNormal(quantized) : \"return computeSurfaceNormal();\");\n builder.frag.addGlobal(\"g_normal\", VariableType.Vec3);\n let finalizeNormal = finalizeNormalPrelude;\n\n finalizeNormal += finalizeNormalNormalMap;\n builder.frag.addFunction(constantLodTextureLookup);\n builder.frag.addUniform(\"u_normalMapScale\", VariableType.Float, (prog) => {\n prog.addGraphicUniform(\"u_normalMapScale\", (uniform, params) => {\n if (undefined !== params.geometry.materialInfo && !params.geometry.materialInfo.isAtlas) {\n const normalMapParams = params.geometry.materialInfo.textureMapping?.normalMapParams;\n if (undefined !== normalMapParams) {\n let normalMapScale = 1.0;\n normalMapScale = normalMapParams.scale ?? 1.0;\n if (normalMapParams.greenUp)\n normalMapScale = -normalMapScale;\n uniform.setUniform1f(normalMapScale);\n }\n }\n });\n });\n\n finalizeNormal += finalizeNormalPostlude;\n builder.frag.set(FragmentShaderComponent.FinalizeNormal, finalizeNormal);\n\n // Set to true to colorize surfaces based on normals (in world space).\n // You must also set checkMaxVarying to false in ProgramBuilder.buildProgram to avoid assertions, if using a non-optimized build.\n const debugNormals = false;\n if (debugNormals) {\n builder.frag.set(FragmentShaderComponent.ApplyDebugColor, \"return vec4(vec3(v_normal / 2.0 + 0.5), baseColor.a);\");\n builder.addInlineComputedVarying(\"v_normal\", VariableType.Vec3, \"v_normal = computeSurfaceNormal();\");\n }\n}\nconst scratchMatrix4d1 = Matrix4d.createIdentity();\nconst scratchMatrix4d2 = Matrix4d.createIdentity();\nconst scratchMatrix = new Matrix4();\n/** @internal */\nexport function addTexture(builder: ProgramBuilder, animated: IsAnimated, isThematic: IsThematic, isPointCloud: boolean, isHilite: boolean, isMaplayer:boolean) {\n if (isThematic) {\n builder.addInlineComputedVarying(\"v_thematicIndex\", VariableType.Float, getComputeThematicIndex(builder.vert.usesInstancedGeometry, isPointCloud, true));\n }\n\n // Point clouds do not need to compute texture coordinates since the only texture they use is the thematic gradient.\n // Surfaces now need texture coordinates even for thematic in case they have a normal map.\n if (!isPointCloud) {\n builder.vert.addFunction(unquantize2d);\n addChooseVec2WithBitFlagsFunction(builder.vert);\n const quantized = \"quantized\" === builder.vert.positionType;\n builder.addFunctionComputedVarying(\"v_texCoord\", VariableType.Vec2, \"computeTexCoord\", animated ? getComputeAnimatedTexCoord(quantized) : getComputeTexCoord(quantized));\n builder.vert.addUniform(\"u_qTexCoordParams\", VariableType.Vec4, (prog) => {\n prog.addGraphicUniform(\"u_qTexCoordParams\", (uniform, params) => {\n const surfGeom = expectDefined(params.geometry.asSurface);\n if (surfGeom.useTexture(params.programParams) || (surfGeom.useNormalMap(params.programParams) && !isPointCloud)) {\n const uvQParams = surfGeom.lut.uvQParams;\n if (undefined !== uvQParams) {\n uniform.setUniform4fv(uvQParams);\n }\n }\n });\n });\n }\n\n builder.frag.addUniform(\"s_texture\", VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(\"s_texture\", (uniform, params) => {\n const surfGeom = expectDefined(params.geometry.asSurface);\n if (params.geometry.supportsThematicDisplay && params.target.wantThematicDisplay) { // NB: if thematic display is enabled, bind the thematic texture and ignore any applied surface textures\n params.target.uniforms.thematic.bindTexture(uniform, TextureUnit.SurfaceTexture);\n } else if (surfGeom.useTexture(params.programParams)) {\n const texture = (params.geometry.hasAnimation && params.target.analysisTexture) ? (params.target.analysisTexture as Texture) : surfGeom.texture;\n assert(undefined !== texture);\n texture.texture.bindSampler(uniform, TextureUnit.SurfaceTexture);\n } else {\n System.instance.ensureSamplerBound(uniform, TextureUnit.SurfaceTexture);\n }\n });\n });\n\n if (!isHilite && !isPointCloud) {\n builder.frag.addUniform(\"s_normalMap\", VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(\"s_normalMap\", (uniform, params) => {\n const surfGeom = expectDefined(params.geometry.asSurface);\n if (surfGeom.useNormalMap(params.programParams)) {\n const normalMap = surfGeom.normalMap;\n assert(undefined !== normalMap);\n normalMap.texture.bindSampler(uniform, TextureUnit.NormalMap);\n } else {\n System.instance.ensureSamplerBound(uniform, TextureUnit.NormalMap);\n }\n });\n });\n }\n\n if (isMaplayer) {\n builder.frag.addUniform(\"u_texturesPresent\", VariableType.Boolean, (program) => {\n program.addGraphicUniform(\"u_texturesPresent\", (uniform, params) => {\n uniform.setUniform1i(expectDefined(params.geometry.asSurface).hasTextures ? 1 : 0);\n });\n });\n\n const textureUnits = [\n TextureUnit.SurfaceDraping0,\n TextureUnit.SurfaceDraping1,\n TextureUnit.SurfaceDraping2,\n TextureUnit.SurfaceDraping3,\n TextureUnit.SurfaceDraping4,\n TextureUnit.SurfaceDraping5,\n ];\n\n for (let i = 0; i < textureUnits.length; i++) {\n const textureLabel = `s_texture${i}`;\n\n builder.frag.addUniform(textureLabel, VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(textureLabel, (uniform, params) => {\n const textureUnit = textureUnits[i];\n const mesh = expectDefined(params.geometry.asSurface);\n const drapeTexture = mesh.textureParams ? mesh.textureParams.params[i].texture : undefined;\n if (drapeTexture !== undefined) {\n const texture = drapeTexture as Texture;\n texture.texture.bindSampler(uniform, textureUnit);\n params.context\n } else {\n System.instance.ensureSamplerBound(uniform, textureUnit);\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 mesh = expectDefined(params.geometry.asSurface);\n const textureParam = mesh.textureParams?.params[i];\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 mesh = expectDefined(params.geometry.asSurface);\n const textureParam = mesh.textureParams?.params[i];\n if (undefined !== textureParam) {\n uniform.setMatrix4(textureParam.getParams(scratchMatrix));\n }\n });\n });\n }\n }\n\n}\n\nexport const discardClassifiedByAlpha = `\n if (u_no_classifier_discard)\n return false;\n\n bool hasAlpha = alpha <= s_maxAlpha;\n bool isOpaquePass = (kRenderPass_OpaqueLinear <= u_renderPass && kRenderPass_OpaqueGeneral >= u_renderPass);\n bool isTranslucentPass = kRenderPass_Translucent == u_renderPass;\n return (isOpaquePass && hasAlpha) || (isTranslucentPass && !hasAlpha);\n`;\n\nconst discardByAlphaCutoff = `\n float cutoff = abs(u_alphaCutoff);\n if (kRenderPass_Translucent == u_renderPass)\n return u_alphaCutoff > 0.0 && alpha >= cutoff;\n else\n return alpha < cutoff;\n`;\n\nfunction addTransparencyDiscard(frag: FragmentShaderBuilder): void {\n addRenderPass(frag);\n frag.addUniform(\"u_alphaCutoff\", VariableType.Float, (prog) => {\n prog.addGraphicUniform(\"u_alphaCutoff\", (uniform, params) => {\n // This cutoff is used to discard pixels based on the alpha value sampled from the surface texture.\n // During readPixels, or when transparency is disabled, only discard 100% opaque pixels.\n // Otherwise, if the geometry draws in both opaque and translucent passes, use DisplayParams.minTransparency to filter pixels into appropriate pass to produce appropriate blending.\n // Negative cutoff applies only during opaque pass; positive cutoff applies during opaque and translucent passes.\n const pass = params.geometry.getPass(params.target);\n const cutoff = (!Pass.rendersOpaqueAndTranslucent(pass) || params.target.isReadPixelsInProgress || !params.target.currentViewFlags.transparency) ? -1 / 255 : 241 / 255;\n uniform.setUniform1f(cutoff);\n });\n });\n\n frag.set(FragmentShaderComponent.DiscardByAlpha, discardByAlphaCutoff);\n}\n\n/** @internal */\nexport function createSurfaceBuilder(flags: TechniqueFlags): ProgramBuilder {\n const builder = createCommon(flags.isInstanced, flags.isAnimated, flags.isShadowable, false, flags.positionType);\n addShaderFlags(builder);\n\n const feat = flags.featureMode;\n let opts = FeatureMode.Overrides === feat ? FeatureSymbologyOptions.Surface : FeatureSymbologyOptions.None;\n if (flags.isClassified) {\n opts &= ~FeatureSymbologyOptions.Alpha;\n addColorPlanarClassifier(builder, flags.isTranslucent, flags.isThematic);\n }\n\n if (flags.isThematic) {\n addThematicDisplay(builder);\n } else {\n builder.vert.addUniform(\"u_modelToWorld\", VariableType.Mat4, (prog) => {\n prog.addGraphicUniform(\"u_modelToWorld\", (uniform, params) => {\n if (undefined !== params.geometry.asSurface?.mesh.constantLodVParams)\n params.target.uniforms.branch.bindModelToWorldTransform(uniform, params.geometry, false);\n });\n });\n }\n\n addFeatureSymbology(builder, feat, opts);\n addSurfaceFlags(builder, FeatureMode.Overrides === feat, true);\n addSurfaceDiscard(builder, flags);\n addNormal(builder, flags.isAnimated);\n\n // In HiddenLine mode, we must compute the base color (plus feature overrides etc) in order to get the alpha, then replace with background color (preserving alpha for the transparency threshold test).\n builder.frag.set(FragmentShaderComponent.FinalizeBaseColor, applyBackgroundColor);\n builder.frag.addUniform(\"u_bgColor\", VariableType.Vec3, (prog) => {\n prog.addProgramUniform(\"u_bgColor\", (uniform, params) => {\n params.target.uniforms.style.bindBackgroundRgb(uniform);\n });\n });\n\n addTexture(builder, flags.isAnimated, flags.isThematic, false, false, true);\n\n builder.frag.addUniform(\"u_applyGlyphTex\", VariableType.Boolean, (prog) => {\n prog.addGraphicUniform(\"u_applyGlyphTex\", (uniform, params) => {\n const surfGeom = expectDefined(params.geometry.asSurface);\n uniform.setUniform1i(surfGeom.useTexture(params.programParams) && surfGeom.isGlyph ? 1 : 0);\n });\n });\n\n // Fragment and Vertex\n addColor(builder);\n\n // Fragment\n builder.frag.addFunction(getSurfaceColor);\n addLighting(builder);\n addWhiteOnWhiteReversal(builder.frag);\n addApplyContours(builder);\n addApplySurfaceDraping(builder.frag);\n\n if (flags.isTranslucent) {\n addTranslucency(builder);\n } else {\n if (FeatureMode.None === feat) {\n addFragColorWithPreMultipliedAlpha(builder.frag);\n } else {\n if (!flags.isClassified)\n addOverrideClassifierColor(builder, flags.isThematic);\n else\n addFeaturePlanarClassifier(builder);\n\n builder.frag.addFunction(decodeDepthRgb);\n if (flags.isEdgeTestNeeded || flags.isClassified)\n addPickBufferOutputs(builder.frag);\n else\n addAltPickBufferOutputs(builder.frag);\n }\n }\n\n builder.addVarying(\"v_uvCustom\", VariableType.Vec3);\n\n builder.vert.addUniform(\"u_constantLodVParams\", VariableType.Vec3, (prog) => {\n prog.addGraphicUniform(\"u_constantLodVParams\", (uniform, params) => {\n const vParams = params.geometry.asSurface?.mesh.constantLodVParams;\n if (undefined !== vParams) {\n vParams[2] = params.target.planFrustum.points[Npc.LeftTopRear].distance(params.target.planFrustum.points[Npc.RightTopRear]);\n uniform.setUniform3fv(vParams);\n }\n });\n });\n\n builder.frag.addUniform(\"u_constantLodFParams\", VariableType.Vec3, (prog) => {\n prog.addGraphicUniform(\"u_constantLodFParams\", (uniform, params) => {\n const fParams = params.geometry.asSurface?.mesh.constantLodFParams;\n if (undefined !== fParams)\n uniform.setUniform3fv(fParams);\n });\n });\n builder.frag.addFunction(constantLodTextureLookup);\n builder.frag.addFunction(sampleSurfaceTexture);\n\n builder.frag.addGlobal(\"g_surfaceTexel\", VariableType.Vec4);\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, (flags.isThematic === IsThematic.No) ? computeBaseColor : \"return getSurfaceColor();\");\n\n if (flags.isClassified)\n addClassificationTranslucencyDiscard(builder);\n else\n addTransparencyDiscard(builder.frag);\n\n addSurfaceMonochrome(builder.frag);\n addMaterial(builder, flags.isInstanced === IsInstanced.Yes);\n\n if (flags.isWiremesh)\n addWiremesh(builder);\n\n return builder;\n}\n\nexport function addClassificationTranslucencyDiscard(builder: ProgramBuilder) {\n // For unclassified geometry, we need to render in both the translucent and opaque passes if any feature transparency overrides are applied that would change the default render pass used.\n // Those shaders compute the transparency in the vertex shader and discard the vertex in one pass or the other.\n // For classified geometry, the transparency comes from the classifier geometry (when using Display.ElementColor), so even if there are no feature overrides, we may need to draw in both passes.\n // Since the transparency is not known until the fragment shader, we must perform the discard there instead.\n addMaxAlpha(builder.frag);\n addRenderPass(builder.frag);\n\n // Do not discard transparent classified geometry if we're trying to do a pick...\n builder.frag.addUniform(\"u_no_classifier_discard\", VariableType.Boolean, (prog) => {\n prog.addProgramUniform(\"u_no_classifier_discard\", (uniform, params) => {\n uniform.setUniform1i(params.target.isReadPixelsInProgress ? 1 : 0);\n });\n });\n\n builder.frag.set(FragmentShaderComponent.DiscardByAlpha, discardClassifiedByAlpha);\n}\n"]}
@@ -124,7 +124,7 @@ function addInstancedRtcMatrix(vert) {
124
124
  (0, core_bentley_1.assert)(undefined !== vert.find("g_modelMatrixRTC")); // set up in VertexShaderBuilder constructor...
125
125
  vert.addUniform("u_instanced_rtc", 7 /* VariableType.Mat4 */, (prog) => {
126
126
  prog.addGraphicUniform("u_instanced_rtc", (uniform, params) => {
127
- const modelt = params.geometry.asInstanced.getRtcOnlyTransform();
127
+ const modelt = (0, core_bentley_1.expectDefined)(params.geometry.asInstanced).getRtcOnlyTransform();
128
128
  uniform.setMatrix4(Matrix_1.Matrix4.fromTransform(modelt));
129
129
  });
130
130
  });
@@ -206,7 +206,7 @@ function addPositionFromLUT(vert) {
206
206
  vert.addFunction(unquantized ? computeUnquantizedPosition : computeVertexPositionFromLUT);
207
207
  vert.addUniform("u_vertLUT", 8 /* VariableType.Sampler2D */, (prog) => {
208
208
  prog.addGraphicUniform("u_vertLUT", (uniform, params) => {
209
- (params.geometry.asLUT).lut.texture.bindSampler(uniform, RenderFlags_1.TextureUnit.VertexLUT);
209
+ (0, core_bentley_1.expectDefined)(params.geometry.asLUT).lut.texture.bindSampler(uniform, RenderFlags_1.TextureUnit.VertexLUT);
210
210
  });
211
211
  });
212
212
  vert.addUniform("u_vertParams", 5 /* VariableType.Vec4 */, (prog) => {
@@ -1 +1 @@
1
- {"version":3,"file":"Vertex.js","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/Vertex.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 { DrawParams } from \"../DrawCommand\";\nimport { UniformHandle } from \"../UniformHandle\";\nimport { Matrix4 } from \"../Matrix\";\nimport { Pass, TextureUnit } from \"../RenderFlags\";\nimport { PositionType } from \"../TechniqueFlags\";\nimport { VariableType, VertexShaderBuilder } from \"../ShaderBuilder\";\nimport { decodeUint16, decodeUint24 } from \"./Decode\";\nimport { addInstanceOverrides } from \"./Instancing\";\nimport { addLookupTable } from \"./LookupTable\";\n\nconst initializeVertLUTCoords = `\n g_vertexLUTIndex = decodeUInt24(qpos);\n g_vertexBaseCoords = compute_vert_coords(g_vertexLUTIndex);\n`;\n\n/** @internal */\nexport const unquantizePosition = `\nvec4 unquantizePosition(vec3 pos, vec3 origin, vec3 scale) { return vec4(origin + scale * pos, 1.0); }\n`;\n\nconst computeQuantizedPosition = `\nvec4 computeVertexPosition(vec3 pos) { return unquantizePosition(pos, u_qOrigin, u_qScale); }\n`;\n\n// Need to read 2 rgba values to obtain 6 16-bit integers for position\nconst computeVertexPositionFromLUT = `\nvec4 computeVertexPosition(vec3 encodedIndex) {\n vec3 qpos = vec3(decodeUInt16(g_vertLutData0.xy), decodeUInt16(g_vertLutData0.zw), decodeUInt16(g_vertLutData1.xy));\n g_featureAndMaterialIndex = g_vertLutData2;\n return unquantizePosition(qpos, u_qOrigin, u_qScale);\n}\n`;\n\nconst computeUnquantizedPosition = `\nvec4 computeVertexPosition(vec3 encodedIndex) {\n uvec3 vux = uvec3(g_vertLutData0.xyz);\n g_featureAndMaterialIndex.x = g_vertLutData0.w;\n uvec3 vuy = uvec3(g_vertLutData1.xyz);\n g_featureAndMaterialIndex.y = g_vertLutData1.w;\n uvec3 vuz = uvec3(g_vertLutData2.xyz);\n g_featureAndMaterialIndex.z = g_vertLutData2.w;\n uvec3 vuw = uvec3(g_vertLutData3.xyz);\n g_featureAndMaterialIndex.w = g_vertLutData3.w;\n uvec3 u = (vuw << 24) | (vuz << 16) | (vuy << 8) | vux;\n return vec4(uintBitsToFloat(u), 1.0);\n}\n`;\n\nconst computeLineWeight = \"\\nfloat computeLineWeight() { return g_lineWeight; }\\n\";\nconst computeLineCode = \"\\nfloat computeLineCode() { return g_lineCode; }\\n\";\n\nexport function addSamplePosition(vert: VertexShaderBuilder): void {\n vert.addFunction(getSamplePosition(vert.positionType));\n}\n\nconst getSamplePositionPrelude = `\nvec4 samplePosition(float index) {\n vec2 tc = compute_vert_coords(index);`;\n\nconst getSamplePositionQuantizedPostlude = `\n vec4 e0 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\n tc.x += g_vert_stepX;\n vec4 e1 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\n vec3 qpos = vec3(decodeUInt16(e0.xy), decodeUInt16(e0.zw), decodeUInt16(e1.xy));\n return unquantizePosition(qpos, u_qOrigin, u_qScale);\n}\n`;\n\nconst getSamplePositionUnquantizedPostlude = `\n uvec3 vux = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));\n tc.x += g_vert_stepX;\n uvec3 vuy = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));\n tc.x += g_vert_stepX;\n uvec3 vuz = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));\n tc.x += g_vert_stepX;\n uvec3 vuw = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));\n uvec3 u = (vuw << 24) | (vuz << 16) | (vuy << 8) | vux;\n return vec4(uintBitsToFloat(u), 1.0);\n}\n`;\n\nfunction getSamplePosition(type: PositionType): string {\n return `${getSamplePositionPrelude}${\"quantized\" === type ? getSamplePositionQuantizedPostlude : getSamplePositionUnquantizedPostlude}`;\n}\n\n/** @internal */\nexport function addModelViewProjectionMatrix(vert: VertexShaderBuilder): void {\n if (vert.usesInstancedGeometry) {\n addModelViewMatrix(vert);\n addProjectionMatrix(vert);\n vert.addGlobal(\"g_mvp\", VariableType.Mat4);\n vert.addInitializer(\"g_mvp = u_proj * g_mv;\");\n } else {\n vert.addUniform(\"u_mvp\", VariableType.Mat4, (prog) => {\n prog.addGraphicUniform(\"u_mvp\", (uniform, params) => {\n params.target.uniforms.branch.bindModelViewProjectionMatrix(uniform, params.geometry, params.isViewCoords);\n });\n });\n }\n}\n\n/** @internal */\nexport function addProjectionMatrix(vert: VertexShaderBuilder): void {\n vert.addUniform(\"u_proj\", VariableType.Mat4, (prog) => {\n prog.addProgramUniform(\"u_proj\", (uniform, params) => {\n params.bindProjectionMatrix(uniform);\n });\n });\n}\n\nconst computeInstancedRtcMatrix = `\n g_instancedRtcMatrix = u_instanced_rtc * g_modelMatrixRTC;\n`;\n\n/** @internal */\nexport function addInstancedRtcMatrix(vert: VertexShaderBuilder): void {\n if (!vert.usesInstancedGeometry)\n return;\n\n assert(undefined !== vert.find(\"g_modelMatrixRTC\")); // set up in VertexShaderBuilder constructor...\n vert.addUniform(\"u_instanced_rtc\", VariableType.Mat4, (prog) => {\n prog.addGraphicUniform(\"u_instanced_rtc\", (uniform, params) => {\n const modelt = params.geometry.asInstanced!.getRtcOnlyTransform();\n uniform.setMatrix4(Matrix4.fromTransform(modelt));\n });\n });\n\n vert.addGlobal(\"g_instancedRtcMatrix\", VariableType.Mat4);\n vert.addInitializer(computeInstancedRtcMatrix);\n}\n\n/** @internal */\nexport function addModelViewMatrix(vert: VertexShaderBuilder): void {\n const bind = (uniform: UniformHandle, params: DrawParams) => {\n params.target.uniforms.branch.bindModelViewMatrix(uniform, params.geometry, params.isViewCoords);\n };\n\n if (vert.usesInstancedGeometry) {\n vert.addUniform(\"u_instanced_modelView\", VariableType.Mat4, (prog) => {\n prog.addGraphicUniform(\"u_instanced_modelView\", bind);\n });\n\n vert.addGlobal(\"g_mv\", VariableType.Mat4);\n vert.addInitializer(\"g_mv = u_instanced_modelView * g_modelMatrixRTC;\");\n } else {\n vert.addUniform(\"u_mv\", VariableType.Mat4, (prog) => {\n // ###TODO: We only need 3 rows, not 4...\n prog.addGraphicUniform(\"u_mv\", bind);\n });\n }\n}\n\nconst computeNormalMatrix = `\n g_nmx = transpose(inverse(mat3(MAT_MV)));\n g_nmx[0][0] *= u_frustumScale.x;\n g_nmx[1][1] *= u_frustumScale.y;\n`;\n\n/** @internal */\nexport function addNormalMatrix(vert: VertexShaderBuilder) {\n vert.addGlobal(\"g_nmx\", VariableType.Mat3);\n vert.addUniform(\"u_frustumScale\", VariableType.Vec2, (prog) => {\n prog.addGraphicUniform(\"u_frustumScale\", (uniform, params) => {\n const scale = params.target.uniforms.branch.top.frustumScale;\n uniform.setUniform2fv([scale.x, scale.y]);\n });\n });\n\n vert.addInitializer(computeNormalMatrix);\n}\n\nfunction readVertexData(index: number): string {\n return `g_vertLutData${index} = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);`;\n}\n\nconst nextVertexData = \"tc.x += g_vert_stepX;\";\n\nfunction readNextVertexData(index: number): string {\n return `\n ${nextVertexData}\n ${readVertexData(index)}`;\n}\n\nconst prereadVertexDataPrelude = `\n vec2 tc = g_vertexBaseCoords;\n ${readVertexData(0)}\n ${readNextVertexData(1)}\n ${readNextVertexData(2)}\n`;\n\nconst prereadQuantizedVertexData = `${prereadVertexDataPrelude}\n if (3.0 < u_vertParams.z) {\n ${readNextVertexData(3)}\n }\n`;\n\nconst prereadUnquantizedVertexData = `${prereadVertexDataPrelude}\n ${readNextVertexData(3)}\n ${readNextVertexData(4)}\n if (5.0 < u_vertParams.z) {\n ${readNextVertexData(5)}\n }\n`;\n\nconst scratchLutParams = new Float32Array(4);\nfunction addPositionFromLUT(vert: VertexShaderBuilder) {\n vert.addGlobal(\"g_vertexLUTIndex\", VariableType.Float);\n vert.addGlobal(\"g_vertexBaseCoords\", VariableType.Vec2);\n\n const unquantized = \"unquantized\" === vert.positionType;\n const maxRgbaPerVert = unquantized ? 6 : 4;\n for (let i = 0; i < maxRgbaPerVert; i++)\n vert.addGlobal(`g_vertLutData${i}`, VariableType.Vec4);\n\n vert.addFunction(decodeUint24);\n vert.addFunction(decodeUint16);\n\n vert.addFunction(unquantized ? computeUnquantizedPosition : computeVertexPositionFromLUT);\n\n vert.addUniform(\"u_vertLUT\", VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(\"u_vertLUT\", (uniform, params) => {\n (params.geometry.asLUT!).lut.texture.bindSampler(uniform, TextureUnit.VertexLUT);\n });\n });\n\n vert.addUniform(\"u_vertParams\", VariableType.Vec4, (prog) => {\n prog.addGraphicUniform(\"u_vertParams\", (uniform, params) => {\n assert(undefined !== params.geometry.asLUT);\n const lut = params.geometry.asLUT.lut;\n const lutParams = scratchLutParams;\n lutParams[0] = lut.texture.width;\n lutParams[1] = lut.texture.height;\n lutParams[2] = lut.numRgbaPerVertex;\n lutParams[3] = lut.numVertices;\n uniform.setUniform4fv(lutParams);\n });\n });\n\n addLookupTable(vert, \"vert\", \"u_vertParams.z\");\n vert.addInitializer(initializeVertLUTCoords);\n\n vert.addGlobal(\"g_featureAndMaterialIndex\", VariableType.Vec4);\n\n // Read the vertex data from the vertex table up front. Yields a consistent (if unexplainable) small performance boost.\n vert.addInitializer(unquantized ? prereadUnquantizedVertexData : prereadQuantizedVertexData);\n}\n\n/** @internal */\nexport function addPosition(vert: VertexShaderBuilder, fromLUT: boolean) {\n if (!fromLUT || \"quantized\" === vert.positionType) {\n vert.addFunction(unquantizePosition);\n vert.addUniform(\"u_qScale\", VariableType.Vec3, (prog) => {\n prog.addGraphicUniform(\"u_qScale\", (uniform, params) => {\n assert(params.geometry.usesQuantizedPositions);\n uniform.setUniform3fv(params.geometry.qScale);\n });\n });\n vert.addUniform(\"u_qOrigin\", VariableType.Vec3, (prog) => {\n prog.addGraphicUniform(\"u_qOrigin\", (uniform, params) => {\n assert(params.geometry.usesQuantizedPositions);\n uniform.setUniform3fv(params.geometry.qOrigin);\n });\n });\n }\n\n if (!fromLUT) {\n vert.addFunction(computeQuantizedPosition);\n } else {\n addPositionFromLUT(vert);\n }\n}\n\n/** @internal */\nexport function addAlpha(vert: VertexShaderBuilder): void {\n vert.addUniform(\"u_hasAlpha\", VariableType.Float, (prog) => {\n prog.addGraphicUniform(\"u_hasAlpha\", (uniform, params) => {\n uniform.setUniform1f(Pass.rendersTranslucent(params.geometry.getPass(params.target)) ? 1 : 0);\n });\n });\n}\n\n/** @internal */\nexport function addLineWeight(vert: VertexShaderBuilder): void {\n vert.addUniform(\"u_lineWeight\", VariableType.Float, (prog) => {\n prog.addGraphicUniform(\"u_lineWeight\", (attr, params) => {\n attr.setUniform1f(params.geometry.getLineWeight(params.programParams));\n });\n });\n\n vert.addGlobal(\"g_lineWeight\", VariableType.Float);\n if (vert.usesInstancedGeometry) {\n addInstanceOverrides(vert);\n vert.addInitializer(\"g_lineWeight = mix(u_lineWeight, a_instanceOverrides.g, extractInstanceBit(kOvrBit_Weight));\");\n } else {\n vert.addInitializer(\"g_lineWeight = u_lineWeight;\");\n }\n\n vert.addFunction(computeLineWeight);\n}\n\n/** @internal */\nexport function replaceLineWeight(vert: VertexShaderBuilder, func: string): void {\n vert.replaceFunction(computeLineWeight, func);\n}\n\n/** @internal */\nexport function addLineCode(vert: VertexShaderBuilder): void {\n vert.addUniform(\"u_lineCode\", VariableType.Float, (prog) => {\n prog.addGraphicUniform(\"u_lineCode\", (attr, params) => {\n attr.setUniform1f(params.geometry.getLineCode(params.programParams));\n });\n });\n\n vert.addGlobal(\"g_lineCode\", VariableType.Float);\n if (vert.usesInstancedGeometry) {\n addInstanceOverrides(vert);\n vert.addInitializer(\"g_lineCode = mix(u_lineCode, a_instanceOverrides.b, extractInstanceBit(kOvrBit_LineCode));\");\n } else {\n vert.addInitializer(\"g_lineCode = u_lineCode;\");\n }\n\n vert.addFunction(computeLineCode);\n}\n\n/** @internal */\nexport function replaceLineCode(vert: VertexShaderBuilder, func: string): void {\n vert.replaceFunction(computeLineCode, func);\n}\n\n// This vertex belongs to a triangle which should not be rendered. Produce a degenerate triangle.\n// Also place it outside NDC range (for GL_POINTS)\nconst discardVertex = ` {\n gl_Position = vec4(2.0, 2.0, 2.0, 1.0);\n return;\n }\n`;\n\n/** @internal */\nexport const earlyVertexDiscard = ` if (checkForEarlyDiscard(rawPosition))${discardVertex}`;\n/** @internal */\nexport const vertexDiscard = ` if (checkForDiscard())${discardVertex}`;\n/** @internal */\nexport const lateVertexDiscard = ` if (checkForLateDiscard())${discardVertex}`;\n"]}
1
+ {"version":3,"file":"Vertex.js","sourceRoot":"","sources":["../../../../../../src/internal/render/webgl/glsl/Vertex.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 { DrawParams } from \"../DrawCommand\";\nimport { UniformHandle } from \"../UniformHandle\";\nimport { Matrix4 } from \"../Matrix\";\nimport { Pass, TextureUnit } from \"../RenderFlags\";\nimport { PositionType } from \"../TechniqueFlags\";\nimport { VariableType, VertexShaderBuilder } from \"../ShaderBuilder\";\nimport { decodeUint16, decodeUint24 } from \"./Decode\";\nimport { addInstanceOverrides } from \"./Instancing\";\nimport { addLookupTable } from \"./LookupTable\";\n\nconst initializeVertLUTCoords = `\n g_vertexLUTIndex = decodeUInt24(qpos);\n g_vertexBaseCoords = compute_vert_coords(g_vertexLUTIndex);\n`;\n\n/** @internal */\nexport const unquantizePosition = `\nvec4 unquantizePosition(vec3 pos, vec3 origin, vec3 scale) { return vec4(origin + scale * pos, 1.0); }\n`;\n\nconst computeQuantizedPosition = `\nvec4 computeVertexPosition(vec3 pos) { return unquantizePosition(pos, u_qOrigin, u_qScale); }\n`;\n\n// Need to read 2 rgba values to obtain 6 16-bit integers for position\nconst computeVertexPositionFromLUT = `\nvec4 computeVertexPosition(vec3 encodedIndex) {\n vec3 qpos = vec3(decodeUInt16(g_vertLutData0.xy), decodeUInt16(g_vertLutData0.zw), decodeUInt16(g_vertLutData1.xy));\n g_featureAndMaterialIndex = g_vertLutData2;\n return unquantizePosition(qpos, u_qOrigin, u_qScale);\n}\n`;\n\nconst computeUnquantizedPosition = `\nvec4 computeVertexPosition(vec3 encodedIndex) {\n uvec3 vux = uvec3(g_vertLutData0.xyz);\n g_featureAndMaterialIndex.x = g_vertLutData0.w;\n uvec3 vuy = uvec3(g_vertLutData1.xyz);\n g_featureAndMaterialIndex.y = g_vertLutData1.w;\n uvec3 vuz = uvec3(g_vertLutData2.xyz);\n g_featureAndMaterialIndex.z = g_vertLutData2.w;\n uvec3 vuw = uvec3(g_vertLutData3.xyz);\n g_featureAndMaterialIndex.w = g_vertLutData3.w;\n uvec3 u = (vuw << 24) | (vuz << 16) | (vuy << 8) | vux;\n return vec4(uintBitsToFloat(u), 1.0);\n}\n`;\n\nconst computeLineWeight = \"\\nfloat computeLineWeight() { return g_lineWeight; }\\n\";\nconst computeLineCode = \"\\nfloat computeLineCode() { return g_lineCode; }\\n\";\n\nexport function addSamplePosition(vert: VertexShaderBuilder): void {\n vert.addFunction(getSamplePosition(vert.positionType));\n}\n\nconst getSamplePositionPrelude = `\nvec4 samplePosition(float index) {\n vec2 tc = compute_vert_coords(index);`;\n\nconst getSamplePositionQuantizedPostlude = `\n vec4 e0 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\n tc.x += g_vert_stepX;\n vec4 e1 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\n vec3 qpos = vec3(decodeUInt16(e0.xy), decodeUInt16(e0.zw), decodeUInt16(e1.xy));\n return unquantizePosition(qpos, u_qOrigin, u_qScale);\n}\n`;\n\nconst getSamplePositionUnquantizedPostlude = `\n uvec3 vux = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));\n tc.x += g_vert_stepX;\n uvec3 vuy = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));\n tc.x += g_vert_stepX;\n uvec3 vuz = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));\n tc.x += g_vert_stepX;\n uvec3 vuw = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));\n uvec3 u = (vuw << 24) | (vuz << 16) | (vuy << 8) | vux;\n return vec4(uintBitsToFloat(u), 1.0);\n}\n`;\n\nfunction getSamplePosition(type: PositionType): string {\n return `${getSamplePositionPrelude}${\"quantized\" === type ? getSamplePositionQuantizedPostlude : getSamplePositionUnquantizedPostlude}`;\n}\n\n/** @internal */\nexport function addModelViewProjectionMatrix(vert: VertexShaderBuilder): void {\n if (vert.usesInstancedGeometry) {\n addModelViewMatrix(vert);\n addProjectionMatrix(vert);\n vert.addGlobal(\"g_mvp\", VariableType.Mat4);\n vert.addInitializer(\"g_mvp = u_proj * g_mv;\");\n } else {\n vert.addUniform(\"u_mvp\", VariableType.Mat4, (prog) => {\n prog.addGraphicUniform(\"u_mvp\", (uniform, params) => {\n params.target.uniforms.branch.bindModelViewProjectionMatrix(uniform, params.geometry, params.isViewCoords);\n });\n });\n }\n}\n\n/** @internal */\nexport function addProjectionMatrix(vert: VertexShaderBuilder): void {\n vert.addUniform(\"u_proj\", VariableType.Mat4, (prog) => {\n prog.addProgramUniform(\"u_proj\", (uniform, params) => {\n params.bindProjectionMatrix(uniform);\n });\n });\n}\n\nconst computeInstancedRtcMatrix = `\n g_instancedRtcMatrix = u_instanced_rtc * g_modelMatrixRTC;\n`;\n\n/** @internal */\nexport function addInstancedRtcMatrix(vert: VertexShaderBuilder): void {\n if (!vert.usesInstancedGeometry)\n return;\n\n assert(undefined !== vert.find(\"g_modelMatrixRTC\")); // set up in VertexShaderBuilder constructor...\n vert.addUniform(\"u_instanced_rtc\", VariableType.Mat4, (prog) => {\n prog.addGraphicUniform(\"u_instanced_rtc\", (uniform, params) => {\n const modelt = expectDefined(params.geometry.asInstanced).getRtcOnlyTransform();\n uniform.setMatrix4(Matrix4.fromTransform(modelt));\n });\n });\n\n vert.addGlobal(\"g_instancedRtcMatrix\", VariableType.Mat4);\n vert.addInitializer(computeInstancedRtcMatrix);\n}\n\n/** @internal */\nexport function addModelViewMatrix(vert: VertexShaderBuilder): void {\n const bind = (uniform: UniformHandle, params: DrawParams) => {\n params.target.uniforms.branch.bindModelViewMatrix(uniform, params.geometry, params.isViewCoords);\n };\n\n if (vert.usesInstancedGeometry) {\n vert.addUniform(\"u_instanced_modelView\", VariableType.Mat4, (prog) => {\n prog.addGraphicUniform(\"u_instanced_modelView\", bind);\n });\n\n vert.addGlobal(\"g_mv\", VariableType.Mat4);\n vert.addInitializer(\"g_mv = u_instanced_modelView * g_modelMatrixRTC;\");\n } else {\n vert.addUniform(\"u_mv\", VariableType.Mat4, (prog) => {\n // ###TODO: We only need 3 rows, not 4...\n prog.addGraphicUniform(\"u_mv\", bind);\n });\n }\n}\n\nconst computeNormalMatrix = `\n g_nmx = transpose(inverse(mat3(MAT_MV)));\n g_nmx[0][0] *= u_frustumScale.x;\n g_nmx[1][1] *= u_frustumScale.y;\n`;\n\n/** @internal */\nexport function addNormalMatrix(vert: VertexShaderBuilder) {\n vert.addGlobal(\"g_nmx\", VariableType.Mat3);\n vert.addUniform(\"u_frustumScale\", VariableType.Vec2, (prog) => {\n prog.addGraphicUniform(\"u_frustumScale\", (uniform, params) => {\n const scale = params.target.uniforms.branch.top.frustumScale;\n uniform.setUniform2fv([scale.x, scale.y]);\n });\n });\n\n vert.addInitializer(computeNormalMatrix);\n}\n\nfunction readVertexData(index: number): string {\n return `g_vertLutData${index} = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);`;\n}\n\nconst nextVertexData = \"tc.x += g_vert_stepX;\";\n\nfunction readNextVertexData(index: number): string {\n return `\n ${nextVertexData}\n ${readVertexData(index)}`;\n}\n\nconst prereadVertexDataPrelude = `\n vec2 tc = g_vertexBaseCoords;\n ${readVertexData(0)}\n ${readNextVertexData(1)}\n ${readNextVertexData(2)}\n`;\n\nconst prereadQuantizedVertexData = `${prereadVertexDataPrelude}\n if (3.0 < u_vertParams.z) {\n ${readNextVertexData(3)}\n }\n`;\n\nconst prereadUnquantizedVertexData = `${prereadVertexDataPrelude}\n ${readNextVertexData(3)}\n ${readNextVertexData(4)}\n if (5.0 < u_vertParams.z) {\n ${readNextVertexData(5)}\n }\n`;\n\nconst scratchLutParams = new Float32Array(4);\nfunction addPositionFromLUT(vert: VertexShaderBuilder) {\n vert.addGlobal(\"g_vertexLUTIndex\", VariableType.Float);\n vert.addGlobal(\"g_vertexBaseCoords\", VariableType.Vec2);\n\n const unquantized = \"unquantized\" === vert.positionType;\n const maxRgbaPerVert = unquantized ? 6 : 4;\n for (let i = 0; i < maxRgbaPerVert; i++)\n vert.addGlobal(`g_vertLutData${i}`, VariableType.Vec4);\n\n vert.addFunction(decodeUint24);\n vert.addFunction(decodeUint16);\n\n vert.addFunction(unquantized ? computeUnquantizedPosition : computeVertexPositionFromLUT);\n\n vert.addUniform(\"u_vertLUT\", VariableType.Sampler2D, (prog) => {\n prog.addGraphicUniform(\"u_vertLUT\", (uniform, params) => {\n expectDefined(params.geometry.asLUT).lut.texture.bindSampler(uniform, TextureUnit.VertexLUT);\n });\n });\n\n vert.addUniform(\"u_vertParams\", VariableType.Vec4, (prog) => {\n prog.addGraphicUniform(\"u_vertParams\", (uniform, params) => {\n assert(undefined !== params.geometry.asLUT);\n const lut = params.geometry.asLUT.lut;\n const lutParams = scratchLutParams;\n lutParams[0] = lut.texture.width;\n lutParams[1] = lut.texture.height;\n lutParams[2] = lut.numRgbaPerVertex;\n lutParams[3] = lut.numVertices;\n uniform.setUniform4fv(lutParams);\n });\n });\n\n addLookupTable(vert, \"vert\", \"u_vertParams.z\");\n vert.addInitializer(initializeVertLUTCoords);\n\n vert.addGlobal(\"g_featureAndMaterialIndex\", VariableType.Vec4);\n\n // Read the vertex data from the vertex table up front. Yields a consistent (if unexplainable) small performance boost.\n vert.addInitializer(unquantized ? prereadUnquantizedVertexData : prereadQuantizedVertexData);\n}\n\n/** @internal */\nexport function addPosition(vert: VertexShaderBuilder, fromLUT: boolean) {\n if (!fromLUT || \"quantized\" === vert.positionType) {\n vert.addFunction(unquantizePosition);\n vert.addUniform(\"u_qScale\", VariableType.Vec3, (prog) => {\n prog.addGraphicUniform(\"u_qScale\", (uniform, params) => {\n assert(params.geometry.usesQuantizedPositions);\n uniform.setUniform3fv(params.geometry.qScale);\n });\n });\n vert.addUniform(\"u_qOrigin\", VariableType.Vec3, (prog) => {\n prog.addGraphicUniform(\"u_qOrigin\", (uniform, params) => {\n assert(params.geometry.usesQuantizedPositions);\n uniform.setUniform3fv(params.geometry.qOrigin);\n });\n });\n }\n\n if (!fromLUT) {\n vert.addFunction(computeQuantizedPosition);\n } else {\n addPositionFromLUT(vert);\n }\n}\n\n/** @internal */\nexport function addAlpha(vert: VertexShaderBuilder): void {\n vert.addUniform(\"u_hasAlpha\", VariableType.Float, (prog) => {\n prog.addGraphicUniform(\"u_hasAlpha\", (uniform, params) => {\n uniform.setUniform1f(Pass.rendersTranslucent(params.geometry.getPass(params.target)) ? 1 : 0);\n });\n });\n}\n\n/** @internal */\nexport function addLineWeight(vert: VertexShaderBuilder): void {\n vert.addUniform(\"u_lineWeight\", VariableType.Float, (prog) => {\n prog.addGraphicUniform(\"u_lineWeight\", (attr, params) => {\n attr.setUniform1f(params.geometry.getLineWeight(params.programParams));\n });\n });\n\n vert.addGlobal(\"g_lineWeight\", VariableType.Float);\n if (vert.usesInstancedGeometry) {\n addInstanceOverrides(vert);\n vert.addInitializer(\"g_lineWeight = mix(u_lineWeight, a_instanceOverrides.g, extractInstanceBit(kOvrBit_Weight));\");\n } else {\n vert.addInitializer(\"g_lineWeight = u_lineWeight;\");\n }\n\n vert.addFunction(computeLineWeight);\n}\n\n/** @internal */\nexport function replaceLineWeight(vert: VertexShaderBuilder, func: string): void {\n vert.replaceFunction(computeLineWeight, func);\n}\n\n/** @internal */\nexport function addLineCode(vert: VertexShaderBuilder): void {\n vert.addUniform(\"u_lineCode\", VariableType.Float, (prog) => {\n prog.addGraphicUniform(\"u_lineCode\", (attr, params) => {\n attr.setUniform1f(params.geometry.getLineCode(params.programParams));\n });\n });\n\n vert.addGlobal(\"g_lineCode\", VariableType.Float);\n if (vert.usesInstancedGeometry) {\n addInstanceOverrides(vert);\n vert.addInitializer(\"g_lineCode = mix(u_lineCode, a_instanceOverrides.b, extractInstanceBit(kOvrBit_LineCode));\");\n } else {\n vert.addInitializer(\"g_lineCode = u_lineCode;\");\n }\n\n vert.addFunction(computeLineCode);\n}\n\n/** @internal */\nexport function replaceLineCode(vert: VertexShaderBuilder, func: string): void {\n vert.replaceFunction(computeLineCode, func);\n}\n\n// This vertex belongs to a triangle which should not be rendered. Produce a degenerate triangle.\n// Also place it outside NDC range (for GL_POINTS)\nconst discardVertex = ` {\n gl_Position = vec4(2.0, 2.0, 2.0, 1.0);\n return;\n }\n`;\n\n/** @internal */\nexport const earlyVertexDiscard = ` if (checkForEarlyDiscard(rawPosition))${discardVertex}`;\n/** @internal */\nexport const vertexDiscard = ` if (checkForDiscard())${discardVertex}`;\n/** @internal */\nexport const lateVertexDiscard = ` if (checkForLateDiscard())${discardVertex}`;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"B3dmReader.d.ts","sourceRoot":"","sources":["../../../../src/internal/tile/B3dmReader.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAa,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAY,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAwB,mBAAmB,EAAyC,MAAM,oBAAoB,CAAC;AACtH,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,6CAA6C,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAgB,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAC/E,OAAO,EACL,gBAAgB,EAAkB,UAAU,EAAmB,gBAAgB,EAAE,mBAAmB,EACrG,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAG/D;;GAEG;AACH,qBAAa,UAAW,SAAQ,UAAU;IAsCtC,OAAO,CAAC,MAAM;IAAuB,OAAO,CAAC,OAAO;IAAW,OAAO,CAAC,iBAAiB;IAAU,OAAO,CAAC,gBAAgB,CAAC;IAAa,OAAO,CAAC,eAAe,CAAC;IAChG,OAAO,CAAC,cAAc,CAAC;IAtCzF,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,OAAO,CAAC,CAAgB;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;WAExB,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAC/H,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,SAAS,EACzG,UAAU,CAAC,EAAE,mBAAmB,EAAE,KAAK,CAAC,EAAE,gBAAgB,EAAE,mBAAmB,UAAM,EAAE,QAAQ,CAAC,EAAE,aAAa,GAAG,UAAU,GAAG,SAAS;IA8B1I,OAAO;IAUM,IAAI,IAAI,OAAO,CAAC,gBAAgB,CAAC;cAiF3B,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,iBAAiB;CA+BtE"}
1
+ {"version":3,"file":"B3dmReader.d.ts","sourceRoot":"","sources":["../../../../src/internal/tile/B3dmReader.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAiB,UAAU,EAAa,MAAM,qBAAqB,CAAC;AACvF,OAAO,EAAE,OAAO,EAAE,SAAS,EAAY,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAwB,mBAAmB,EAAyC,MAAM,oBAAoB,CAAC;AACtH,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,6CAA6C,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAgB,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAC/E,OAAO,EACL,gBAAgB,EAAkB,UAAU,EAAmB,gBAAgB,EAAE,mBAAmB,EACrG,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAG/D;;GAEG;AACH,qBAAa,UAAW,SAAQ,UAAU;IAsCtC,OAAO,CAAC,MAAM;IAAuB,OAAO,CAAC,OAAO;IAAW,OAAO,CAAC,iBAAiB;IAAU,OAAO,CAAC,gBAAgB,CAAC;IAAa,OAAO,CAAC,eAAe,CAAC;IAChG,OAAO,CAAC,cAAc,CAAC;IAtCzF,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,OAAO,CAAC,CAAgB;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;WAExB,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAC/H,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,SAAS,EACzG,UAAU,CAAC,EAAE,mBAAmB,EAAE,KAAK,CAAC,EAAE,gBAAgB,EAAE,mBAAmB,UAAM,EAAE,QAAQ,CAAC,EAAE,aAAa,GAAG,UAAU,GAAG,SAAS;IA8B1I,OAAO;IAUM,IAAI,IAAI,OAAO,CAAC,gBAAgB,CAAC;cAiF3B,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,iBAAiB;CA+BtE"}
@@ -98,7 +98,7 @@ class B3dmReader extends internal_1.GltfReader {
98
98
  instance[key] = value;
99
99
  }
100
100
  if (parentIds !== undefined) {
101
- const thisParents = parentMap[instanceIndex];
101
+ const thisParents = (0, core_bentley_1.expectDefined)(parentMap)[instanceIndex];
102
102
  for (const parentId of thisParents) {
103
103
  if (parentId !== instanceIndex)
104
104
  getProperties(instance, parentId);