@itwin/core-frontend 4.10.0-dev.30 → 4.10.0-dev.32

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 (385) hide show
  1. package/CHANGELOG.md +6 -1
  2. package/lib/cjs/AccuDraw.js +2 -2
  3. package/lib/cjs/AccuDraw.js.map +1 -1
  4. package/lib/cjs/AccuSnap.d.ts.map +1 -1
  5. package/lib/cjs/AccuSnap.js +7 -2
  6. package/lib/cjs/AccuSnap.js.map +1 -1
  7. package/lib/cjs/BackgroundMapGeometry.js +3 -3
  8. package/lib/cjs/BackgroundMapGeometry.js.map +1 -1
  9. package/lib/cjs/BriefcaseConnection.d.ts.map +1 -1
  10. package/lib/cjs/BriefcaseTxns.d.ts.map +1 -1
  11. package/lib/cjs/DisplayStyleState.d.ts.map +1 -1
  12. package/lib/cjs/DrawingViewState.d.ts +3 -3
  13. package/lib/cjs/DrawingViewState.d.ts.map +1 -1
  14. package/lib/cjs/DrawingViewState.js +9 -8
  15. package/lib/cjs/DrawingViewState.js.map +1 -1
  16. package/lib/cjs/GraphicalEditingScope.d.ts.map +1 -1
  17. package/lib/cjs/HitDetail.d.ts +36 -7
  18. package/lib/cjs/HitDetail.d.ts.map +1 -1
  19. package/lib/cjs/HitDetail.js +11 -3
  20. package/lib/cjs/HitDetail.js.map +1 -1
  21. package/lib/cjs/IModelApp.d.ts.map +1 -1
  22. package/lib/cjs/LinePlaneIntersect.js +1 -2
  23. package/lib/cjs/LinePlaneIntersect.js.map +1 -1
  24. package/lib/cjs/NoRenderApp.d.ts.map +1 -1
  25. package/lib/cjs/NotificationManager.d.ts +2 -2
  26. package/lib/cjs/NotificationManager.d.ts.map +1 -1
  27. package/lib/cjs/SheetViewState.d.ts +3 -3
  28. package/lib/cjs/SheetViewState.d.ts.map +1 -1
  29. package/lib/cjs/SheetViewState.js +18 -5
  30. package/lib/cjs/SheetViewState.js.map +1 -1
  31. package/lib/cjs/ViewGlobalLocation.js +9 -9
  32. package/lib/cjs/ViewGlobalLocation.js.map +1 -1
  33. package/lib/cjs/ViewState.d.ts +16 -7
  34. package/lib/cjs/ViewState.d.ts.map +1 -1
  35. package/lib/cjs/ViewState.js +4 -4
  36. package/lib/cjs/ViewState.js.map +1 -1
  37. package/lib/cjs/Viewport.d.ts.map +1 -1
  38. package/lib/cjs/Viewport.js +1 -0
  39. package/lib/cjs/Viewport.js.map +1 -1
  40. package/lib/cjs/ViewportSync.js +6 -6
  41. package/lib/cjs/ViewportSync.js.map +1 -1
  42. package/lib/cjs/common/ImageUtil.js +15 -16
  43. package/lib/cjs/common/ImageUtil.js.map +1 -1
  44. package/lib/cjs/common/WorkerProxy.js +1 -2
  45. package/lib/cjs/common/WorkerProxy.js.map +1 -1
  46. package/lib/cjs/common/gltf/GltfParser.js +1 -2
  47. package/lib/cjs/common/gltf/GltfParser.js.map +1 -1
  48. package/lib/cjs/common/gltf/GltfSchema.js +5 -5
  49. package/lib/cjs/common/gltf/GltfSchema.js.map +1 -1
  50. package/lib/cjs/common/imdl/CompactEdges.js +1 -2
  51. package/lib/cjs/common/imdl/CompactEdges.js.map +1 -1
  52. package/lib/cjs/common/imdl/ImdlModel.js +2 -3
  53. package/lib/cjs/common/imdl/ImdlModel.js.map +1 -1
  54. package/lib/cjs/common/imdl/ParseImdlDocument.js +6 -7
  55. package/lib/cjs/common/imdl/ParseImdlDocument.js.map +1 -1
  56. package/lib/cjs/common/internal/render/EdgeParams.js +2 -3
  57. package/lib/cjs/common/internal/render/EdgeParams.js.map +1 -1
  58. package/lib/cjs/common/internal/render/GeometryList.d.ts +1 -1
  59. package/lib/cjs/common/internal/render/GraphicDescriptionBuilderImpl.js +3 -3
  60. package/lib/cjs/common/internal/render/GraphicDescriptionBuilderImpl.js.map +1 -1
  61. package/lib/cjs/common/internal/render/LineCode.js +1 -2
  62. package/lib/cjs/common/internal/render/LineCode.js.map +1 -1
  63. package/lib/cjs/common/internal/render/MeshPrimitives.js +3 -3
  64. package/lib/cjs/common/internal/render/MeshPrimitives.js.map +1 -1
  65. package/lib/cjs/common/internal/render/PointStringParams.js +1 -2
  66. package/lib/cjs/common/internal/render/PointStringParams.js.map +1 -1
  67. package/lib/cjs/common/internal/render/PolylineParams.js +4 -5
  68. package/lib/cjs/common/internal/render/PolylineParams.js.map +1 -1
  69. package/lib/cjs/common/internal/render/SurfaceParams.js +3 -3
  70. package/lib/cjs/common/internal/render/SurfaceParams.js.map +1 -1
  71. package/lib/cjs/common/internal/render/VertexTable.js +1 -2
  72. package/lib/cjs/common/internal/render/VertexTable.js.map +1 -1
  73. package/lib/cjs/common/internal/render/VertexTableBuilder.js +2 -2
  74. package/lib/cjs/common/internal/render/VertexTableBuilder.js.map +1 -1
  75. package/lib/cjs/common/internal/render/VertexTableSplitter.js +4 -4
  76. package/lib/cjs/common/internal/render/VertexTableSplitter.js.map +1 -1
  77. package/lib/cjs/extension/providers/ExtensionLoadScript.js +1 -2
  78. package/lib/cjs/extension/providers/ExtensionLoadScript.js.map +1 -1
  79. package/lib/cjs/internal/render/RenderInstancesParamsImpl.js +2 -3
  80. package/lib/cjs/internal/render/RenderInstancesParamsImpl.js.map +1 -1
  81. package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts.map +1 -1
  82. package/lib/cjs/quantity-formatting/BasicUnitsProvider.js +2 -2
  83. package/lib/cjs/quantity-formatting/BasicUnitsProvider.js.map +1 -1
  84. package/lib/cjs/quantity-formatting/QuantityFormatter.js +3 -3
  85. package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
  86. package/lib/cjs/quantity-formatting/QuantityTypesEditorSpecs.d.ts.map +1 -1
  87. package/lib/cjs/render/GraphicBranch.d.ts +3 -1
  88. package/lib/cjs/render/GraphicBranch.d.ts.map +1 -1
  89. package/lib/cjs/render/GraphicBranch.js +2 -2
  90. package/lib/cjs/render/GraphicBranch.js.map +1 -1
  91. package/lib/cjs/render/GraphicTemplate.js +1 -2
  92. package/lib/cjs/render/GraphicTemplate.js.map +1 -1
  93. package/lib/cjs/render/MockRender.d.ts.map +1 -1
  94. package/lib/cjs/render/Pixel.d.ts +9 -7
  95. package/lib/cjs/render/Pixel.d.ts.map +1 -1
  96. package/lib/cjs/render/Pixel.js +20 -5
  97. package/lib/cjs/render/Pixel.js.map +1 -1
  98. package/lib/cjs/render/RenderPlan.js +3 -3
  99. package/lib/cjs/render/RenderPlan.js.map +1 -1
  100. package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
  101. package/lib/cjs/render/UpsampleRealityMeshParams.js +1 -2
  102. package/lib/cjs/render/UpsampleRealityMeshParams.js.map +1 -1
  103. package/lib/cjs/render/VisibleFeature.js +1 -2
  104. package/lib/cjs/render/VisibleFeature.js.map +1 -1
  105. package/lib/cjs/render/webgl/AttributeBuffers.js +5 -5
  106. package/lib/cjs/render/webgl/AttributeBuffers.js.map +1 -1
  107. package/lib/cjs/render/webgl/BranchState.d.ts +2 -0
  108. package/lib/cjs/render/webgl/BranchState.d.ts.map +1 -1
  109. package/lib/cjs/render/webgl/BranchState.js +2 -0
  110. package/lib/cjs/render/webgl/BranchState.js.map +1 -1
  111. package/lib/cjs/render/webgl/ClippingProgram.js +2 -2
  112. package/lib/cjs/render/webgl/ClippingProgram.js.map +1 -1
  113. package/lib/cjs/render/webgl/DrawCommand.js +3 -3
  114. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  115. package/lib/cjs/render/webgl/FeatureOverrides.js +2 -2
  116. package/lib/cjs/render/webgl/FeatureOverrides.js.map +1 -1
  117. package/lib/cjs/render/webgl/FrustumUniforms.js +2 -2
  118. package/lib/cjs/render/webgl/FrustumUniforms.js.map +1 -1
  119. package/lib/cjs/render/webgl/Graphic.d.ts +3 -0
  120. package/lib/cjs/render/webgl/Graphic.d.ts.map +1 -1
  121. package/lib/cjs/render/webgl/Graphic.js +4 -0
  122. package/lib/cjs/render/webgl/Graphic.js.map +1 -1
  123. package/lib/cjs/render/webgl/InstancedGeometry.js +2 -2
  124. package/lib/cjs/render/webgl/InstancedGeometry.js.map +1 -1
  125. package/lib/cjs/render/webgl/Material.js +2 -2
  126. package/lib/cjs/render/webgl/Material.js.map +1 -1
  127. package/lib/cjs/render/webgl/Matrix.js +3 -3
  128. package/lib/cjs/render/webgl/Matrix.js.map +1 -1
  129. package/lib/cjs/render/webgl/RenderFlags.js +2 -2
  130. package/lib/cjs/render/webgl/RenderFlags.js.map +1 -1
  131. package/lib/cjs/render/webgl/SceneCompositor.d.ts.map +1 -1
  132. package/lib/cjs/render/webgl/SceneCompositor.js +7 -4
  133. package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
  134. package/lib/cjs/render/webgl/ScratchDrawParams.js +2 -3
  135. package/lib/cjs/render/webgl/ScratchDrawParams.js.map +1 -1
  136. package/lib/cjs/render/webgl/ScreenSpaceEffect.js +2 -2
  137. package/lib/cjs/render/webgl/ScreenSpaceEffect.js.map +1 -1
  138. package/lib/cjs/render/webgl/SurfaceGeometry.js +2 -2
  139. package/lib/cjs/render/webgl/SurfaceGeometry.js.map +1 -1
  140. package/lib/cjs/render/webgl/Sync.js +3 -4
  141. package/lib/cjs/render/webgl/Sync.js.map +1 -1
  142. package/lib/cjs/render/webgl/System.d.ts.map +1 -1
  143. package/lib/cjs/render/webgl/TechniqueFlags.d.ts.map +1 -1
  144. package/lib/cjs/render/webgl/TechniqueId.js +1 -2
  145. package/lib/cjs/render/webgl/TechniqueId.js.map +1 -1
  146. package/lib/cjs/render/webgl/Texture.d.ts.map +1 -1
  147. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js +1 -2
  148. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js.map +1 -1
  149. package/lib/cjs/render/webgl/glsl/Animation.js +1 -2
  150. package/lib/cjs/render/webgl/glsl/Animation.js.map +1 -1
  151. package/lib/cjs/render/webgl/glsl/Atmosphere.js +1 -2
  152. package/lib/cjs/render/webgl/glsl/Atmosphere.js.map +1 -1
  153. package/lib/cjs/render/webgl/glsl/Blur.js +1 -2
  154. package/lib/cjs/render/webgl/glsl/Blur.js.map +1 -1
  155. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.js +1 -2
  156. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
  157. package/lib/cjs/render/webgl/glsl/ClearTranslucent.js +1 -2
  158. package/lib/cjs/render/webgl/glsl/ClearTranslucent.js.map +1 -1
  159. package/lib/cjs/render/webgl/glsl/Clipping.js +2 -2
  160. package/lib/cjs/render/webgl/glsl/Clipping.js.map +1 -1
  161. package/lib/cjs/render/webgl/glsl/Color.js +2 -3
  162. package/lib/cjs/render/webgl/glsl/Color.js.map +1 -1
  163. package/lib/cjs/render/webgl/glsl/Combine3Textures.js +1 -2
  164. package/lib/cjs/render/webgl/glsl/Combine3Textures.js.map +1 -1
  165. package/lib/cjs/render/webgl/glsl/CombineTextures.js +1 -2
  166. package/lib/cjs/render/webgl/glsl/CombineTextures.js.map +1 -1
  167. package/lib/cjs/render/webgl/glsl/Common.js +7 -7
  168. package/lib/cjs/render/webgl/glsl/Common.js.map +1 -1
  169. package/lib/cjs/render/webgl/glsl/Composite.js +1 -2
  170. package/lib/cjs/render/webgl/glsl/Composite.js.map +1 -1
  171. package/lib/cjs/render/webgl/glsl/Contours.js +1 -2
  172. package/lib/cjs/render/webgl/glsl/Contours.js.map +1 -1
  173. package/lib/cjs/render/webgl/glsl/CopyColor.js +1 -2
  174. package/lib/cjs/render/webgl/glsl/CopyColor.js.map +1 -1
  175. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.js +1 -2
  176. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.js.map +1 -1
  177. package/lib/cjs/render/webgl/glsl/CopyStencil.js +4 -5
  178. package/lib/cjs/render/webgl/glsl/CopyStencil.js.map +1 -1
  179. package/lib/cjs/render/webgl/glsl/Decode.js +2 -2
  180. package/lib/cjs/render/webgl/glsl/Decode.js.map +1 -1
  181. package/lib/cjs/render/webgl/glsl/EDL.js +4 -5
  182. package/lib/cjs/render/webgl/glsl/EDL.js.map +1 -1
  183. package/lib/cjs/render/webgl/glsl/EVSMFromDepth.js +1 -2
  184. package/lib/cjs/render/webgl/glsl/EVSMFromDepth.js.map +1 -1
  185. package/lib/cjs/render/webgl/glsl/Edge.js +2 -3
  186. package/lib/cjs/render/webgl/glsl/Edge.js.map +1 -1
  187. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +15 -15
  188. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  189. package/lib/cjs/render/webgl/glsl/Fragment.js +6 -6
  190. package/lib/cjs/render/webgl/glsl/Fragment.js.map +1 -1
  191. package/lib/cjs/render/webgl/glsl/Instancing.js +3 -4
  192. package/lib/cjs/render/webgl/glsl/Instancing.js.map +1 -1
  193. package/lib/cjs/render/webgl/glsl/Lighting.js +1 -2
  194. package/lib/cjs/render/webgl/glsl/Lighting.js.map +1 -1
  195. package/lib/cjs/render/webgl/glsl/LogarithmicDepthBuffer.js +1 -2
  196. package/lib/cjs/render/webgl/glsl/LogarithmicDepthBuffer.js.map +1 -1
  197. package/lib/cjs/render/webgl/glsl/LookupTable.js +1 -2
  198. package/lib/cjs/render/webgl/glsl/LookupTable.js.map +1 -1
  199. package/lib/cjs/render/webgl/glsl/Monochrome.js +2 -3
  200. package/lib/cjs/render/webgl/glsl/Monochrome.js.map +1 -1
  201. package/lib/cjs/render/webgl/glsl/PlanarClassification.js +5 -5
  202. package/lib/cjs/render/webgl/glsl/PlanarClassification.js.map +1 -1
  203. package/lib/cjs/render/webgl/glsl/PlanarGrid.js +1 -1
  204. package/lib/cjs/render/webgl/glsl/PlanarGrid.js.map +1 -1
  205. package/lib/cjs/render/webgl/glsl/PointCloud.js +2 -3
  206. package/lib/cjs/render/webgl/glsl/PointCloud.js.map +1 -1
  207. package/lib/cjs/render/webgl/glsl/PointString.js +2 -3
  208. package/lib/cjs/render/webgl/glsl/PointString.js.map +1 -1
  209. package/lib/cjs/render/webgl/glsl/Polyline.js +6 -6
  210. package/lib/cjs/render/webgl/glsl/Polyline.js.map +1 -1
  211. package/lib/cjs/render/webgl/glsl/RealityMesh.js +5 -5
  212. package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
  213. package/lib/cjs/render/webgl/glsl/RenderPass.js +1 -2
  214. package/lib/cjs/render/webgl/glsl/RenderPass.js.map +1 -1
  215. package/lib/cjs/render/webgl/glsl/ScreenSpaceEffect.js +1 -2
  216. package/lib/cjs/render/webgl/glsl/ScreenSpaceEffect.js.map +1 -1
  217. package/lib/cjs/render/webgl/glsl/SkyBox.js +1 -2
  218. package/lib/cjs/render/webgl/glsl/SkyBox.js.map +1 -1
  219. package/lib/cjs/render/webgl/glsl/SkySphere.js +1 -2
  220. package/lib/cjs/render/webgl/glsl/SkySphere.js.map +1 -1
  221. package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js +3 -3
  222. package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js.map +1 -1
  223. package/lib/cjs/render/webgl/glsl/Surface.js +6 -6
  224. package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
  225. package/lib/cjs/render/webgl/glsl/Thematic.js +2 -3
  226. package/lib/cjs/render/webgl/glsl/Thematic.js.map +1 -1
  227. package/lib/cjs/render/webgl/glsl/Translucency.js +2 -2
  228. package/lib/cjs/render/webgl/glsl/Translucency.js.map +1 -1
  229. package/lib/cjs/render/webgl/glsl/Vertex.js +13 -13
  230. package/lib/cjs/render/webgl/glsl/Vertex.js.map +1 -1
  231. package/lib/cjs/render/webgl/glsl/Viewport.js +3 -4
  232. package/lib/cjs/render/webgl/glsl/Viewport.js.map +1 -1
  233. package/lib/cjs/render/webgl/glsl/ViewportQuad.js +1 -2
  234. package/lib/cjs/render/webgl/glsl/ViewportQuad.js.map +1 -1
  235. package/lib/cjs/render/webgl/glsl/Wiremesh.js +1 -2
  236. package/lib/cjs/render/webgl/glsl/Wiremesh.js.map +1 -1
  237. package/lib/cjs/request/Request.d.ts.map +1 -1
  238. package/lib/cjs/request/Request.js +2 -2
  239. package/lib/cjs/request/Request.js.map +1 -1
  240. package/lib/cjs/request/utils.js +3 -4
  241. package/lib/cjs/request/utils.js.map +1 -1
  242. package/lib/cjs/tile/ClassifierTileTree.js +2 -2
  243. package/lib/cjs/tile/ClassifierTileTree.js.map +1 -1
  244. package/lib/cjs/tile/GltfReader.js +4 -4
  245. package/lib/cjs/tile/GltfReader.js.map +1 -1
  246. package/lib/cjs/tile/IModelTile.js +2 -2
  247. package/lib/cjs/tile/IModelTile.js.map +1 -1
  248. package/lib/cjs/tile/IModelTileTree.js +2 -2
  249. package/lib/cjs/tile/IModelTileTree.js.map +1 -1
  250. package/lib/cjs/tile/ImdlDecoder.js +1 -2
  251. package/lib/cjs/tile/ImdlDecoder.js.map +1 -1
  252. package/lib/cjs/tile/ImdlGraphicsCreator.js +3 -4
  253. package/lib/cjs/tile/ImdlGraphicsCreator.js.map +1 -1
  254. package/lib/cjs/tile/ImdlParser.js +1 -2
  255. package/lib/cjs/tile/ImdlParser.js.map +1 -1
  256. package/lib/cjs/tile/ImdlReader.js +3 -3
  257. package/lib/cjs/tile/ImdlReader.js.map +1 -1
  258. package/lib/cjs/tile/MeshoptCompression.js +1 -2
  259. package/lib/cjs/tile/MeshoptCompression.js.map +1 -1
  260. package/lib/cjs/tile/OrbitGtTileTree.js +2 -2
  261. package/lib/cjs/tile/OrbitGtTileTree.js.map +1 -1
  262. package/lib/cjs/tile/PntsReader.js +1 -2
  263. package/lib/cjs/tile/PntsReader.js.map +1 -1
  264. package/lib/cjs/tile/PrimaryTileTree.d.ts.map +1 -1
  265. package/lib/cjs/tile/PrimaryTileTree.js +6 -6
  266. package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
  267. package/lib/cjs/tile/RealityModelTileTree.js +2 -2
  268. package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
  269. package/lib/cjs/tile/RealityTileDrawArgs.d.ts.map +1 -1
  270. package/lib/cjs/tile/RealityTileLoader.d.ts.map +1 -1
  271. package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
  272. package/lib/cjs/tile/RenderGraphicTileTree.js +1 -2
  273. package/lib/cjs/tile/RenderGraphicTileTree.js.map +1 -1
  274. package/lib/cjs/tile/ThreeDTileFormatInterpreter.js.map +1 -1
  275. package/lib/cjs/tile/Tile.js +2 -2
  276. package/lib/cjs/tile/Tile.js.map +1 -1
  277. package/lib/cjs/tile/TileAdmin.js +2 -2
  278. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  279. package/lib/cjs/tile/TileRequestChannel.js +1 -1
  280. package/lib/cjs/tile/TileRequestChannel.js.map +1 -1
  281. package/lib/cjs/tile/ViewFlagOverrides.js +1 -2
  282. package/lib/cjs/tile/ViewFlagOverrides.js.map +1 -1
  283. package/lib/cjs/tile/map/CesiumTerrainProvider.js +4 -5
  284. package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
  285. package/lib/cjs/tile/map/ImageryProviders/CoordinatesUtils.js +1 -2
  286. package/lib/cjs/tile/map/ImageryProviders/CoordinatesUtils.js.map +1 -1
  287. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  288. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  289. package/lib/cjs/tile/map/MapLayerTileTreeReference.js +2 -2
  290. package/lib/cjs/tile/map/MapLayerTileTreeReference.js.map +1 -1
  291. package/lib/cjs/tile/map/MapTile.d.ts.map +1 -1
  292. package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
  293. package/lib/cjs/tile/map/MapTileTree.js +2 -2
  294. package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
  295. package/lib/cjs/tile/map/UrlUtils.js +1 -2
  296. package/lib/cjs/tile/map/UrlUtils.js.map +1 -1
  297. package/lib/cjs/tile/map/WmsCapabilities.d.ts.map +1 -1
  298. package/lib/cjs/tools/ClipViewTool.d.ts.map +1 -1
  299. package/lib/cjs/tools/Tool.d.ts +1 -1
  300. package/lib/cjs/tools/Tool.d.ts.map +1 -1
  301. package/lib/cjs/tools/ViewTool.d.ts.map +1 -1
  302. package/lib/cjs/tools/ViewTool.js +2 -2
  303. package/lib/cjs/tools/ViewTool.js.map +1 -1
  304. package/lib/cjs/workers/RegisterWorker.js +1 -2
  305. package/lib/cjs/workers/RegisterWorker.js.map +1 -1
  306. package/lib/esm/AccuDraw.js +2 -2
  307. package/lib/esm/AccuDraw.js.map +1 -1
  308. package/lib/esm/AccuSnap.d.ts.map +1 -1
  309. package/lib/esm/AccuSnap.js +7 -2
  310. package/lib/esm/AccuSnap.js.map +1 -1
  311. package/lib/esm/BriefcaseConnection.d.ts.map +1 -1
  312. package/lib/esm/BriefcaseTxns.d.ts.map +1 -1
  313. package/lib/esm/DisplayStyleState.d.ts.map +1 -1
  314. package/lib/esm/DrawingViewState.d.ts +3 -3
  315. package/lib/esm/DrawingViewState.d.ts.map +1 -1
  316. package/lib/esm/DrawingViewState.js +9 -8
  317. package/lib/esm/DrawingViewState.js.map +1 -1
  318. package/lib/esm/GraphicalEditingScope.d.ts.map +1 -1
  319. package/lib/esm/HitDetail.d.ts +36 -7
  320. package/lib/esm/HitDetail.d.ts.map +1 -1
  321. package/lib/esm/HitDetail.js +11 -3
  322. package/lib/esm/HitDetail.js.map +1 -1
  323. package/lib/esm/IModelApp.d.ts.map +1 -1
  324. package/lib/esm/NoRenderApp.d.ts.map +1 -1
  325. package/lib/esm/NotificationManager.d.ts +2 -2
  326. package/lib/esm/NotificationManager.d.ts.map +1 -1
  327. package/lib/esm/SheetViewState.d.ts +3 -3
  328. package/lib/esm/SheetViewState.d.ts.map +1 -1
  329. package/lib/esm/SheetViewState.js +18 -5
  330. package/lib/esm/SheetViewState.js.map +1 -1
  331. package/lib/esm/ViewState.d.ts +16 -7
  332. package/lib/esm/ViewState.d.ts.map +1 -1
  333. package/lib/esm/ViewState.js +4 -4
  334. package/lib/esm/ViewState.js.map +1 -1
  335. package/lib/esm/Viewport.d.ts.map +1 -1
  336. package/lib/esm/Viewport.js +1 -0
  337. package/lib/esm/Viewport.js.map +1 -1
  338. package/lib/esm/common/internal/render/GeometryList.d.ts +1 -1
  339. package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts.map +1 -1
  340. package/lib/esm/quantity-formatting/QuantityTypesEditorSpecs.d.ts.map +1 -1
  341. package/lib/esm/render/GraphicBranch.d.ts +3 -1
  342. package/lib/esm/render/GraphicBranch.d.ts.map +1 -1
  343. package/lib/esm/render/GraphicBranch.js.map +1 -1
  344. package/lib/esm/render/MockRender.d.ts.map +1 -1
  345. package/lib/esm/render/Pixel.d.ts +9 -7
  346. package/lib/esm/render/Pixel.d.ts.map +1 -1
  347. package/lib/esm/render/Pixel.js +20 -5
  348. package/lib/esm/render/Pixel.js.map +1 -1
  349. package/lib/esm/render/RenderSystem.d.ts.map +1 -1
  350. package/lib/esm/render/webgl/BranchState.d.ts +2 -0
  351. package/lib/esm/render/webgl/BranchState.d.ts.map +1 -1
  352. package/lib/esm/render/webgl/BranchState.js +2 -0
  353. package/lib/esm/render/webgl/BranchState.js.map +1 -1
  354. package/lib/esm/render/webgl/Graphic.d.ts +3 -0
  355. package/lib/esm/render/webgl/Graphic.d.ts.map +1 -1
  356. package/lib/esm/render/webgl/Graphic.js +4 -0
  357. package/lib/esm/render/webgl/Graphic.js.map +1 -1
  358. package/lib/esm/render/webgl/SceneCompositor.d.ts.map +1 -1
  359. package/lib/esm/render/webgl/SceneCompositor.js +4 -1
  360. package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
  361. package/lib/esm/render/webgl/System.d.ts.map +1 -1
  362. package/lib/esm/render/webgl/TechniqueFlags.d.ts.map +1 -1
  363. package/lib/esm/render/webgl/Texture.d.ts.map +1 -1
  364. package/lib/esm/request/Request.d.ts.map +1 -1
  365. package/lib/esm/tile/PrimaryTileTree.d.ts.map +1 -1
  366. package/lib/esm/tile/RealityTileDrawArgs.d.ts.map +1 -1
  367. package/lib/esm/tile/RealityTileLoader.d.ts.map +1 -1
  368. package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
  369. package/lib/esm/tile/ThreeDTileFormatInterpreter.js.map +1 -1
  370. package/lib/esm/tile/TileRequestChannel.js +1 -1
  371. package/lib/esm/tile/TileRequestChannel.js.map +1 -1
  372. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  373. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  374. package/lib/esm/tile/map/MapTile.d.ts.map +1 -1
  375. package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
  376. package/lib/esm/tile/map/WmsCapabilities.d.ts.map +1 -1
  377. package/lib/esm/tools/ClipViewTool.d.ts.map +1 -1
  378. package/lib/esm/tools/Tool.d.ts +1 -1
  379. package/lib/esm/tools/Tool.d.ts.map +1 -1
  380. package/lib/esm/tools/ViewTool.d.ts.map +1 -1
  381. package/lib/esm/tools/ViewTool.js +2 -2
  382. package/lib/esm/tools/ViewTool.js.map +1 -1
  383. package/lib/public/scripts/parse-imdl-worker.js +1 -1
  384. package/lib/workers/webpack/parse-imdl-worker.js +1 -1
  385. package/package.json +18 -18
@@ -1 +1 @@
1
- {"version":3,"file":"RealityMesh.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/RealityMesh.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { ColorDef } from \"@itwin/core-common\";\r\nimport { Matrix4d } from \"@itwin/core-geometry\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { Matrix4 } from \"../Matrix\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, ShaderBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { FeatureMode, IsShadowable, IsThematic, TechniqueFlags } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { Texture } from \"../Texture\";\r\nimport { addAtmosphericScatteringEffect } from \"./Atmosphere\";\r\nimport { addVaryingColor } from \"./Color\";\r\nimport { addEyeSpace, addShaderFlags, addUInt32s } from \"./Common\";\r\nimport { decodeDepthRgb, unquantize2d } from \"./Decode\";\r\nimport { addFeatureSymbology, addHiliter, FeatureSymbologyOptions } from \"./FeatureSymbology\";\r\nimport { addAltPickBufferOutputs, addPickBufferOutputs, assignFragColor } from \"./Fragment\";\r\nimport { addColorPlanarClassifier, addFeaturePlanarClassifier, addHilitePlanarClassifier } from \"./PlanarClassification\";\r\nimport { addSolarShadowMap } from \"./SolarShadowMapping\";\r\nimport { addClassificationTranslucencyDiscard, octDecodeNormal } from \"./Surface\";\r\nimport { addThematicDisplay, getComputeThematicIndex } from \"./Thematic\";\r\nimport { addModelViewProjectionMatrix, addNormalMatrix } from \"./Vertex\";\r\nimport { addWiremesh } from \"./Wiremesh\";\r\n\r\nconst computePosition = \"gl_PointSize = 1.0; return MAT_MVP * rawPos;\";\r\nconst computeNormal = `\r\n vec3 normal = octDecodeNormal(a_norm); // normal coming in for is already in world space\r\n g_hillshadeIndex = normal.z; // save off world Z for thematic hill shade mode index\r\n return normalize(u_worldToViewN * normal);\r\n`;\r\n\r\nexport const finalizeNormal = `\r\n return normalize(v_n) * (2.0 * float(gl_FrontFacing) - 1.0);\r\n`;\r\n\r\nconst testInside = `\r\nbool testInside(float x0, float y0, float x1, float y1, float x, float y) {\r\n vec2 perp = vec2(y0 - y1, x1 - x0), test = vec2(x - x0, y - y0);\r\n float dot = (test.x * perp.x + test.y * perp.y) / sqrt(perp.x * perp.x + perp.y * perp.y);\r\n return dot >= -0.001;\r\n}\r\n`;\r\n\r\n/* There are two methods of applying a texture to a reality mesh. the first member of \"params\" denotes which\r\n method is to be used. A value of zero indicates a standard texture and one represents a projected texture.\r\n\r\n A standard (nonprojected) texture is generated by multiplying v_textCoord by the scaling and translation packed into the first row\r\n of \"matrix\". A clip rectangle is packed into second row of \"matrix\".\r\n\r\n A \"projected\" reality mesh texture is used for map layers. It does not uses v_texCoord, the texture coordinates\r\n are instead generated by a projection of the model position onto the X-Y plane. We only have eye position, not model position\r\n so the matrix in this case is a real transform matrix that contains a mapping from eye to model position\r\n followed by the model to texture projection.\r\n*/\r\nconst applyTexture = `\r\nbool applyTexture(inout vec4 col, sampler2D sampler, mat4 params, mat4 matrix) {\r\n vec2 uv;\r\n float layerAlpha;\r\n bool isProjected = params[0][0] != 0.0;\r\n float imageCount = params[0][1];\r\n vec2 classPos;\r\n\r\n if (isProjected) {\r\n vec4 eye4 = vec4(v_eyeSpace, 1.0);\r\n vec4 classPos4 = matrix * eye4;\r\n classPos = classPos4.xy / classPos4.w;\r\n\r\n if (!testInside(params[2].x, params[2].y, params[2].z, params[2].w, classPos.x, classPos.y) ||\r\n !testInside(params[2].z, params[2].w, params[3].x, params[3].y, classPos.x, classPos.y) ||\r\n !testInside(params[3].x, params[3].y, params[3].z, params[3].w, classPos.x, classPos.y) ||\r\n !testInside(params[3].z, params[3].w, params[2].x, params[2].y, classPos.x, classPos.y))\r\n return false;\r\n\r\n uv.x = classPos.x;\r\n uv.y = classPos.y / imageCount;\r\n layerAlpha = params[0][2];\r\n\r\n if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0)\r\n return false;\r\n\r\n } else {\r\n vec4 texTransform = matrix[0].xyzw;\r\n vec4 texClip = matrix[1].xyzw;\r\n layerAlpha = matrix[2].x;\r\n uv = vec2(texTransform[0] + texTransform[2] * v_texCoord.x, texTransform[1] + texTransform[3] * v_texCoord.y);\r\n\r\n if (uv.x < texClip[0] || uv.x > texClip[2] || uv.y < texClip[1] || uv.y > texClip[3])\r\n return false;\r\n\r\n uv.y = 1.0 - uv.y;\r\n }\r\n\r\n vec4 texCol = TEXTURE(sampler, uv);\r\n float alpha = layerAlpha * texCol.a;\r\n\r\n if (alpha > 0.05) {\r\n vec3 texRgb = isProjected ? (texCol.rgb / texCol.a) : texCol.rgb; // If projected, undo premultiplication\r\n // Texture color is premultiplied earlier by alpha only if projected (from classification).\r\n\r\n col.rgb = (1.0 - alpha) * col.rgb + alpha * texRgb;\r\n\r\n if (isProjected) {\r\n vec4 featureTexel = TEXTURE(sampler, vec2(uv.x, (1.0 + classPos.y) / imageCount));\r\n classifierId = addUInt32s(params[1], featureTexel * 255.0) / 255.0;\r\n } else {\r\n featureIncrement = matrix[2].y;\r\n classifierId = vec4(0);\r\n }\r\n\r\n if (alpha > col.a)\r\n col.a = alpha;\r\n\r\n return true;\r\n }\r\n\r\n // If texture color is transparent but base color is not, return true (don't discard)\r\n // Else return false (discard) if both the texture and base color are transparent\r\n return (col.a > 0.05);\r\n}\r\n`;\r\n\r\nconst computeTexCoord = \"return unquantize2d(a_uvParam, u_qTexCoordParams);\";\r\nconst scratchMatrix4d1 = Matrix4d.createIdentity();\r\nconst scratchMatrix4d2 = Matrix4d.createIdentity();\r\nconst scratchMatrix = new Matrix4();\r\n\r\nconst overrideFeatureId = `return (classifierId == vec4(0)) ? (addUInt32s(feature_id * 255.0, vec4(featureIncrement, 0.0, 0.0, 0.0)) / 255.0) : classifierId;`;\r\n\r\nfunction addTextures(builder: ProgramBuilder, maxTexturesPerMesh: number) {\r\n builder.vert.addFunction(unquantize2d);\r\n builder.addFunctionComputedVarying(\"v_texCoord\", VariableType.Vec2, \"computeTexCoord\", computeTexCoord);\r\n builder.vert.addUniform(\"u_qTexCoordParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_qTexCoordParams\", (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n if (undefined !== realityMesh.uvQParams) {\r\n uniform.setUniform4fv(realityMesh.uvQParams);\r\n }\r\n });\r\n });\r\n\r\n builder.frag.addUniform(\"u_texturesPresent\", VariableType.Boolean, (program) => {\r\n program.addGraphicUniform(\"u_texturesPresent\", (uniform, params) => {\r\n uniform.setUniform1i(params.geometry.asRealityMesh!.hasTextures ? 1 : 0);\r\n });\r\n });\r\n\r\n for (let i = 0; i < maxTexturesPerMesh; i++) {\r\n const textureLabel = `s_texture${i}`;\r\n builder.frag.addUniform(textureLabel, VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(textureLabel, (uniform, params) => {\r\n const textureUnits = [TextureUnit.RealityMesh0, TextureUnit.RealityMesh1, params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder, TextureUnit.RealityMesh3, TextureUnit.RealityMesh4, TextureUnit.RealityMesh5];\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const realityTexture = realityMesh.textureParams ? realityMesh.textureParams.params[i].texture : undefined;\r\n if (realityTexture !== undefined) {\r\n const texture = realityTexture as Texture;\r\n texture.texture.bindSampler(uniform, textureUnits[i]);\r\n } else {\r\n // assert(false, \"Terrain Mesh texture not defined when beginning texture.\");\r\n System.instance.ensureSamplerBound(uniform, textureUnits[i]);\r\n }\r\n });\r\n });\r\n const paramsLabel = `u_texParams${i}`, matrixLabel = `u_texMatrix${i}`;\r\n builder.frag.addUniform(matrixLabel, VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(matrixLabel, (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const textureParam = realityMesh.textureParams?.params[i];\r\n assert(undefined !== textureParam);\r\n if (undefined !== textureParam) {\r\n const projectionMatrix = textureParam.getProjectionMatrix();\r\n if (projectionMatrix) {\r\n const eyeToModel = Matrix4d.createTransform(params.target.uniforms.frustum.viewMatrix.inverse()!, scratchMatrix4d1);\r\n const eyeToTexture = projectionMatrix.multiplyMatrixMatrix(eyeToModel, scratchMatrix4d2);\r\n uniform.setMatrix4(Matrix4.fromMatrix4d(eyeToTexture, scratchMatrix));\r\n } else\r\n uniform.setMatrix4(textureParam.getTerrainMatrix()!);\r\n }\r\n });\r\n });\r\n builder.frag.addUniform(paramsLabel, VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(paramsLabel, (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const textureParam = realityMesh.textureParams?.params[i];\r\n assert(undefined !== textureParam);\r\n if (undefined !== textureParam) {\r\n uniform.setMatrix4(textureParam.getParams(scratchMatrix));\r\n }\r\n });\r\n });\r\n }\r\n}\r\nfunction baseColorFromTextures(textureCount: number, applyFeatureColor: string) {\r\n const applyTextureStrings = [];\r\n\r\n for (let i = 0; i < textureCount; i++)\r\n applyTextureStrings.push(`if (applyTexture(col, s_texture${i}, u_texParams${i}, u_texMatrix${i})) doDiscard = false; `);\r\n\r\n return `\r\n if (!u_texturesPresent) {\r\n vec4 col = u_baseColor;\r\n ${applyFeatureColor}\r\n return col;\r\n }\r\n\r\n bool doDiscard = true;\r\n vec4 col = u_baseColor;\r\n ${applyTextureStrings.join(\"\\n \")}\r\n if (doDiscard)\r\n discard;\r\n\r\n ${applyFeatureColor}\r\n\r\n return col;\r\n`;\r\n}\r\n\r\n// feature_rgb.r = -1.0 if rgb color not overridden for feature.\r\n// feature_alpha = -1.0 if alpha not overridden for feature.\r\nconst mixFeatureColor = `\r\n col.rgb = mix(col.rgb, mix(col.rgb, v_color.rgb, u_overrideColorMix), step(0.0, v_color.r));\r\n col.a = mix(col.a, v_color.a, step(0.0, v_color.a));\r\n `;\r\n\r\nfunction addThematicToRealityMesh(builder: ProgramBuilder, gradientTextureUnit: TextureUnit) {\r\n addNormalMatrix(builder.vert);\r\n builder.vert.addFunction(octDecodeNormal);\r\n builder.vert.addGlobal(\"g_hillshadeIndex\", VariableType.Float);\r\n builder.addFunctionComputedVarying(\"v_n\", VariableType.Vec3, \"computeLightingNormal\", computeNormal);\r\n builder.frag.addGlobal(\"g_normal\", VariableType.Vec3);\r\n builder.frag.set(FragmentShaderComponent.FinalizeNormal, finalizeNormal);\r\n addThematicDisplay(builder, false, true);\r\n builder.addInlineComputedVarying(\"v_thematicIndex\", VariableType.Float, getComputeThematicIndex(builder.vert.usesInstancedGeometry, false, false));\r\n builder.vert.addUniform(\"u_worldToViewN\", VariableType.Mat3, (prog) => {\r\n prog.addGraphicUniform(\"u_worldToViewN\", (uniform, params) => {\r\n params.target.uniforms.branch.bindWorldToViewNTransform(uniform, params.geometry, false);\r\n });\r\n });\r\n builder.frag.addUniform(\"s_texture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_texture\", (uniform, params) => {\r\n params.target.uniforms.thematic.bindTexture(uniform, gradientTextureUnit >= 0 ? gradientTextureUnit : (params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder));\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function addColorOverrideMix(frag: ShaderBuilder) {\r\n frag.addUniform(\"u_overrideColorMix\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_overrideColorMix\", (uniform, params) => {\r\n params.target.uniforms.realityModel.bindOverrideColorMix(uniform);\r\n });\r\n });\r\n}\r\n\r\nfunction createRealityMeshHiliterBuilder(): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n return builder;\r\n\r\n}\r\n\r\n/** @internal */\r\nexport function createClassifierRealityMeshHiliter(): ProgramBuilder {\r\n const builder = createRealityMeshHiliterBuilder();\r\n addHilitePlanarClassifier(builder, false);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createRealityMeshHiliter(): ProgramBuilder {\r\n const builder = createRealityMeshHiliterBuilder();\r\n addHiliter(builder, false);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createRealityMeshBuilder(flags: TechniqueFlags): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n\r\n if (flags.isShadowable === IsShadowable.Yes)\r\n addSolarShadowMap(builder, true);\r\n\r\n const frag = builder.frag;\r\n frag.addGlobal(\"featureIncrement\", VariableType.Float, \"0.0\");\r\n frag.addGlobal(\"classifierId\", VariableType.Vec4);\r\n frag.set(FragmentShaderComponent.OverrideFeatureId, overrideFeatureId);\r\n const textureCount = System.instance.maxRealityImageryLayers;\r\n const gradientTextureUnit = TextureUnit.RealityMeshThematicGradient;\r\n\r\n const feat = flags.featureMode;\r\n let opts = FeatureMode.Overrides === feat ? FeatureSymbologyOptions.Surface : FeatureSymbologyOptions.None;\r\n let applyFragmentFeatureColor = \"\";\r\n\r\n if (flags.isClassified) {\r\n opts &= ~FeatureSymbologyOptions.Alpha;\r\n addColorPlanarClassifier(builder, flags.isTranslucent, flags.isThematic);\r\n addClassificationTranslucencyDiscard(builder);\r\n }\r\n\r\n addFeatureSymbology(builder, feat, opts);\r\n if (feat === FeatureMode.Overrides) {\r\n addShaderFlags(builder);\r\n addVaryingColor(builder, \"return vec4(-1.0, -1.0, -1.0, -1.0);\");\r\n applyFragmentFeatureColor = mixFeatureColor;\r\n addColorOverrideMix(builder.frag);\r\n }\r\n const computeFragmentBaseColor = baseColorFromTextures(textureCount, applyFragmentFeatureColor);\r\n\r\n frag.addFunction(addUInt32s);\r\n frag.addFunction(testInside);\r\n addEyeSpace(builder);\r\n frag.addFunction(applyTexture);\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\r\n builder.frag.addUniform(\"u_baseColor\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_baseColor\", (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const baseColor = (realityMesh.baseColor ? realityMesh.baseColor : ColorDef.create(0xff000000)).colors;\r\n uniform.setUniform4fv([baseColor.r / 255, baseColor.g / 255, baseColor.b / 255, 1 - baseColor.t / 255]);\r\n });\r\n });\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\r\n if (!flags.isTranslucent) {\r\n if (FeatureMode.None !== feat) {\r\n if (flags.isClassified)\r\n addFeaturePlanarClassifier(builder);\r\n\r\n builder.frag.addFunction(decodeDepthRgb);\r\n if (flags.isClassified)\r\n addPickBufferOutputs(builder.frag);\r\n else\r\n addAltPickBufferOutputs(builder.frag);\r\n }\r\n }\r\n\r\n addTextures(builder, textureCount);\r\n\r\n if (IsThematic.Yes === flags.isThematic)\r\n addThematicToRealityMesh(builder, gradientTextureUnit);\r\n\r\n if (flags.isWiremesh)\r\n addWiremesh(builder);\r\n\r\n if (flags.enableAtmosphere)\r\n addAtmosphericScatteringEffect(builder, false, false);\r\n\r\n return builder;\r\n}\r\n"]}
1
+ {"version":3,"file":"RealityMesh.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/RealityMesh.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { ColorDef } from \"@itwin/core-common\";\r\nimport { Matrix4d } from \"@itwin/core-geometry\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { Matrix4 } from \"../Matrix\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, ShaderBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { FeatureMode, IsShadowable, IsThematic, TechniqueFlags } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { Texture } from \"../Texture\";\r\nimport { addAtmosphericScatteringEffect } from \"./Atmosphere\";\r\nimport { addVaryingColor } from \"./Color\";\r\nimport { addEyeSpace, addShaderFlags, addUInt32s } from \"./Common\";\r\nimport { decodeDepthRgb, unquantize2d } from \"./Decode\";\r\nimport { addFeatureSymbology, addHiliter, FeatureSymbologyOptions } from \"./FeatureSymbology\";\r\nimport { addAltPickBufferOutputs, addPickBufferOutputs, assignFragColor } from \"./Fragment\";\r\nimport { addColorPlanarClassifier, addFeaturePlanarClassifier, addHilitePlanarClassifier } from \"./PlanarClassification\";\r\nimport { addSolarShadowMap } from \"./SolarShadowMapping\";\r\nimport { addClassificationTranslucencyDiscard, octDecodeNormal } from \"./Surface\";\r\nimport { addThematicDisplay, getComputeThematicIndex } from \"./Thematic\";\r\nimport { addModelViewProjectionMatrix, addNormalMatrix } from \"./Vertex\";\r\nimport { addWiremesh } from \"./Wiremesh\";\r\n\r\nconst computePosition = \"gl_PointSize = 1.0; return MAT_MVP * rawPos;\";\r\nconst computeNormal = `\r\n vec3 normal = octDecodeNormal(a_norm); // normal coming in for is already in world space\r\n g_hillshadeIndex = normal.z; // save off world Z for thematic hill shade mode index\r\n return normalize(u_worldToViewN * normal);\r\n`;\r\n\r\nexport const finalizeNormal = `\r\n return normalize(v_n) * (2.0 * float(gl_FrontFacing) - 1.0);\r\n`;\r\n\r\nconst testInside = `\r\nbool testInside(float x0, float y0, float x1, float y1, float x, float y) {\r\n vec2 perp = vec2(y0 - y1, x1 - x0), test = vec2(x - x0, y - y0);\r\n float dot = (test.x * perp.x + test.y * perp.y) / sqrt(perp.x * perp.x + perp.y * perp.y);\r\n return dot >= -0.001;\r\n}\r\n`;\r\n\r\n/* There are two methods of applying a texture to a reality mesh. the first member of \"params\" denotes which\r\n method is to be used. A value of zero indicates a standard texture and one represents a projected texture.\r\n\r\n A standard (nonprojected) texture is generated by multiplying v_textCoord by the scaling and translation packed into the first row\r\n of \"matrix\". A clip rectangle is packed into second row of \"matrix\".\r\n\r\n A \"projected\" reality mesh texture is used for map layers. It does not uses v_texCoord, the texture coordinates\r\n are instead generated by a projection of the model position onto the X-Y plane. We only have eye position, not model position\r\n so the matrix in this case is a real transform matrix that contains a mapping from eye to model position\r\n followed by the model to texture projection.\r\n*/\r\nconst applyTexture = `\r\nbool applyTexture(inout vec4 col, sampler2D sampler, mat4 params, mat4 matrix) {\r\n vec2 uv;\r\n float layerAlpha;\r\n bool isProjected = params[0][0] != 0.0;\r\n float imageCount = params[0][1];\r\n vec2 classPos;\r\n\r\n if (isProjected) {\r\n vec4 eye4 = vec4(v_eyeSpace, 1.0);\r\n vec4 classPos4 = matrix * eye4;\r\n classPos = classPos4.xy / classPos4.w;\r\n\r\n if (!testInside(params[2].x, params[2].y, params[2].z, params[2].w, classPos.x, classPos.y) ||\r\n !testInside(params[2].z, params[2].w, params[3].x, params[3].y, classPos.x, classPos.y) ||\r\n !testInside(params[3].x, params[3].y, params[3].z, params[3].w, classPos.x, classPos.y) ||\r\n !testInside(params[3].z, params[3].w, params[2].x, params[2].y, classPos.x, classPos.y))\r\n return false;\r\n\r\n uv.x = classPos.x;\r\n uv.y = classPos.y / imageCount;\r\n layerAlpha = params[0][2];\r\n\r\n if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0)\r\n return false;\r\n\r\n } else {\r\n vec4 texTransform = matrix[0].xyzw;\r\n vec4 texClip = matrix[1].xyzw;\r\n layerAlpha = matrix[2].x;\r\n uv = vec2(texTransform[0] + texTransform[2] * v_texCoord.x, texTransform[1] + texTransform[3] * v_texCoord.y);\r\n\r\n if (uv.x < texClip[0] || uv.x > texClip[2] || uv.y < texClip[1] || uv.y > texClip[3])\r\n return false;\r\n\r\n uv.y = 1.0 - uv.y;\r\n }\r\n\r\n vec4 texCol = TEXTURE(sampler, uv);\r\n float alpha = layerAlpha * texCol.a;\r\n\r\n if (alpha > 0.05) {\r\n vec3 texRgb = isProjected ? (texCol.rgb / texCol.a) : texCol.rgb; // If projected, undo premultiplication\r\n // Texture color is premultiplied earlier by alpha only if projected (from classification).\r\n\r\n col.rgb = (1.0 - alpha) * col.rgb + alpha * texRgb;\r\n\r\n if (isProjected) {\r\n vec4 featureTexel = TEXTURE(sampler, vec2(uv.x, (1.0 + classPos.y) / imageCount));\r\n classifierId = addUInt32s(params[1], featureTexel * 255.0) / 255.0;\r\n } else {\r\n featureIncrement = matrix[2].y;\r\n classifierId = vec4(0);\r\n }\r\n\r\n if (alpha > col.a)\r\n col.a = alpha;\r\n\r\n return true;\r\n }\r\n\r\n // If texture color is transparent but base color is not, return true (don't discard)\r\n // Else return false (discard) if both the texture and base color are transparent\r\n return (col.a > 0.05);\r\n}\r\n`;\r\n\r\nconst computeTexCoord = \"return unquantize2d(a_uvParam, u_qTexCoordParams);\";\r\nconst scratchMatrix4d1 = Matrix4d.createIdentity();\r\nconst scratchMatrix4d2 = Matrix4d.createIdentity();\r\nconst scratchMatrix = new Matrix4();\r\n\r\nconst overrideFeatureId = `return (classifierId == vec4(0)) ? (addUInt32s(feature_id * 255.0, vec4(featureIncrement, 0.0, 0.0, 0.0)) / 255.0) : classifierId;`;\r\n\r\nfunction addTextures(builder: ProgramBuilder, maxTexturesPerMesh: number) {\r\n builder.vert.addFunction(unquantize2d);\r\n builder.addFunctionComputedVarying(\"v_texCoord\", VariableType.Vec2, \"computeTexCoord\", computeTexCoord);\r\n builder.vert.addUniform(\"u_qTexCoordParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_qTexCoordParams\", (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n if (undefined !== realityMesh.uvQParams) {\r\n uniform.setUniform4fv(realityMesh.uvQParams);\r\n }\r\n });\r\n });\r\n\r\n builder.frag.addUniform(\"u_texturesPresent\", VariableType.Boolean, (program) => {\r\n program.addGraphicUniform(\"u_texturesPresent\", (uniform, params) => {\r\n uniform.setUniform1i(params.geometry.asRealityMesh!.hasTextures ? 1 : 0);\r\n });\r\n });\r\n\r\n for (let i = 0; i < maxTexturesPerMesh; i++) {\r\n const textureLabel = `s_texture${i}`;\r\n builder.frag.addUniform(textureLabel, VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(textureLabel, (uniform, params) => {\r\n const textureUnits = [TextureUnit.RealityMesh0, TextureUnit.RealityMesh1, params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder, TextureUnit.RealityMesh3, TextureUnit.RealityMesh4, TextureUnit.RealityMesh5];\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const realityTexture = realityMesh.textureParams ? realityMesh.textureParams.params[i].texture : undefined;\r\n if (realityTexture !== undefined) {\r\n const texture = realityTexture as Texture;\r\n texture.texture.bindSampler(uniform, textureUnits[i]);\r\n } else {\r\n // assert(false, \"Terrain Mesh texture not defined when beginning texture.\");\r\n System.instance.ensureSamplerBound(uniform, textureUnits[i]);\r\n }\r\n });\r\n });\r\n const paramsLabel = `u_texParams${i}`, matrixLabel = `u_texMatrix${i}`;\r\n builder.frag.addUniform(matrixLabel, VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(matrixLabel, (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const textureParam = realityMesh.textureParams?.params[i];\r\n assert(undefined !== textureParam);\r\n if (undefined !== textureParam) {\r\n const projectionMatrix = textureParam.getProjectionMatrix();\r\n if (projectionMatrix) {\r\n const eyeToModel = Matrix4d.createTransform(params.target.uniforms.frustum.viewMatrix.inverse()!, scratchMatrix4d1);\r\n const eyeToTexture = projectionMatrix.multiplyMatrixMatrix(eyeToModel, scratchMatrix4d2);\r\n uniform.setMatrix4(Matrix4.fromMatrix4d(eyeToTexture, scratchMatrix));\r\n } else\r\n uniform.setMatrix4(textureParam.getTerrainMatrix()!);\r\n }\r\n });\r\n });\r\n builder.frag.addUniform(paramsLabel, VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(paramsLabel, (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const textureParam = realityMesh.textureParams?.params[i];\r\n assert(undefined !== textureParam);\r\n if (undefined !== textureParam) {\r\n uniform.setMatrix4(textureParam.getParams(scratchMatrix));\r\n }\r\n });\r\n });\r\n }\r\n}\r\nfunction baseColorFromTextures(textureCount: number, applyFeatureColor: string) {\r\n const applyTextureStrings = [];\r\n\r\n for (let i = 0; i < textureCount; i++)\r\n applyTextureStrings.push(`if (applyTexture(col, s_texture${i}, u_texParams${i}, u_texMatrix${i})) doDiscard = false; `);\r\n\r\n return `\r\n if (!u_texturesPresent) {\r\n vec4 col = u_baseColor;\r\n ${applyFeatureColor}\r\n return col;\r\n }\r\n\r\n bool doDiscard = true;\r\n vec4 col = u_baseColor;\r\n ${applyTextureStrings.join(\"\\n \")}\r\n if (doDiscard)\r\n discard;\r\n\r\n ${applyFeatureColor}\r\n\r\n return col;\r\n`;\r\n}\r\n\r\n// feature_rgb.r = -1.0 if rgb color not overridden for feature.\r\n// feature_alpha = -1.0 if alpha not overridden for feature.\r\nconst mixFeatureColor = `\r\n col.rgb = mix(col.rgb, mix(col.rgb, v_color.rgb, u_overrideColorMix), step(0.0, v_color.r));\r\n col.a = mix(col.a, v_color.a, step(0.0, v_color.a));\r\n `;\r\n\r\nfunction addThematicToRealityMesh(builder: ProgramBuilder, gradientTextureUnit: TextureUnit) {\r\n addNormalMatrix(builder.vert);\r\n builder.vert.addFunction(octDecodeNormal);\r\n builder.vert.addGlobal(\"g_hillshadeIndex\", VariableType.Float);\r\n builder.addFunctionComputedVarying(\"v_n\", VariableType.Vec3, \"computeLightingNormal\", computeNormal);\r\n builder.frag.addGlobal(\"g_normal\", VariableType.Vec3);\r\n builder.frag.set(FragmentShaderComponent.FinalizeNormal, finalizeNormal);\r\n addThematicDisplay(builder, false, true);\r\n builder.addInlineComputedVarying(\"v_thematicIndex\", VariableType.Float, getComputeThematicIndex(builder.vert.usesInstancedGeometry, false, false));\r\n builder.vert.addUniform(\"u_worldToViewN\", VariableType.Mat3, (prog) => {\r\n prog.addGraphicUniform(\"u_worldToViewN\", (uniform, params) => {\r\n params.target.uniforms.branch.bindWorldToViewNTransform(uniform, params.geometry, false);\r\n });\r\n });\r\n builder.frag.addUniform(\"s_texture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_texture\", (uniform, params) => {\r\n params.target.uniforms.thematic.bindTexture(uniform, gradientTextureUnit >= 0 ? gradientTextureUnit : (params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder));\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function addColorOverrideMix(frag: ShaderBuilder) {\r\n frag.addUniform(\"u_overrideColorMix\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_overrideColorMix\", (uniform, params) => {\r\n params.target.uniforms.realityModel.bindOverrideColorMix(uniform);\r\n });\r\n });\r\n}\r\n\r\nfunction createRealityMeshHiliterBuilder(): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n return builder;\r\n\r\n}\r\n\r\n/** @internal */\r\nexport function createClassifierRealityMeshHiliter(): ProgramBuilder {\r\n const builder = createRealityMeshHiliterBuilder();\r\n addHilitePlanarClassifier(builder, false);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createRealityMeshHiliter(): ProgramBuilder {\r\n const builder = createRealityMeshHiliterBuilder();\r\n addHiliter(builder, false);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createRealityMeshBuilder(flags: TechniqueFlags): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n\r\n if (flags.isShadowable === IsShadowable.Yes)\r\n addSolarShadowMap(builder, true);\r\n\r\n const frag = builder.frag;\r\n frag.addGlobal(\"featureIncrement\", VariableType.Float, \"0.0\");\r\n frag.addGlobal(\"classifierId\", VariableType.Vec4);\r\n frag.set(FragmentShaderComponent.OverrideFeatureId, overrideFeatureId);\r\n const textureCount = System.instance.maxRealityImageryLayers;\r\n const gradientTextureUnit = TextureUnit.RealityMeshThematicGradient;\r\n\r\n const feat = flags.featureMode;\r\n let opts = FeatureMode.Overrides === feat ? FeatureSymbologyOptions.Surface : FeatureSymbologyOptions.None;\r\n let applyFragmentFeatureColor = \"\";\r\n\r\n if (flags.isClassified) {\r\n opts &= ~FeatureSymbologyOptions.Alpha;\r\n addColorPlanarClassifier(builder, flags.isTranslucent, flags.isThematic);\r\n addClassificationTranslucencyDiscard(builder);\r\n }\r\n\r\n addFeatureSymbology(builder, feat, opts);\r\n if (feat === FeatureMode.Overrides) {\r\n addShaderFlags(builder);\r\n addVaryingColor(builder, \"return vec4(-1.0, -1.0, -1.0, -1.0);\");\r\n applyFragmentFeatureColor = mixFeatureColor;\r\n addColorOverrideMix(builder.frag);\r\n }\r\n const computeFragmentBaseColor = baseColorFromTextures(textureCount, applyFragmentFeatureColor);\r\n\r\n frag.addFunction(addUInt32s);\r\n frag.addFunction(testInside);\r\n addEyeSpace(builder);\r\n frag.addFunction(applyTexture);\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\r\n builder.frag.addUniform(\"u_baseColor\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_baseColor\", (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const baseColor = (realityMesh.baseColor ? realityMesh.baseColor : ColorDef.create(0xff000000)).colors;\r\n uniform.setUniform4fv([baseColor.r / 255, baseColor.g / 255, baseColor.b / 255, 1 - baseColor.t / 255]);\r\n });\r\n });\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\r\n if (!flags.isTranslucent) {\r\n if (FeatureMode.None !== feat) {\r\n if (flags.isClassified)\r\n addFeaturePlanarClassifier(builder);\r\n\r\n builder.frag.addFunction(decodeDepthRgb);\r\n if (flags.isClassified)\r\n addPickBufferOutputs(builder.frag);\r\n else\r\n addAltPickBufferOutputs(builder.frag);\r\n }\r\n }\r\n\r\n addTextures(builder, textureCount);\r\n\r\n if (IsThematic.Yes === flags.isThematic)\r\n addThematicToRealityMesh(builder, gradientTextureUnit);\r\n\r\n if (flags.isWiremesh)\r\n addWiremesh(builder);\r\n\r\n if (flags.enableAtmosphere)\r\n addAtmosphericScatteringEffect(builder, false, false);\r\n\r\n return builder;\r\n}\r\n"]}
@@ -7,7 +7,7 @@
7
7
  * @module WebGL
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.addRenderPass = void 0;
10
+ exports.addRenderPass = addRenderPass;
11
11
  // render passes actually used in shader code.
12
12
  const renderPasses = [
13
13
  [0 /* RenderPass.Background */, "Background"],
@@ -47,5 +47,4 @@ function addRenderPass(builder) {
47
47
  for (const renderPass of renderPasses)
48
48
  builder.addGlobal(`kRenderPass_${renderPass[1]}`, 2 /* VariableType.Float */, `${renderPass[0].toString()}.0`, true);
49
49
  }
50
- exports.addRenderPass = addRenderPass;
51
50
  //# sourceMappingURL=RenderPass.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RenderPass.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/RenderPass.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAKH,8CAA8C;AAC9C,MAAM,YAAY,GAAG;IACnB,gCAAwB,YAAY,CAAC;IACrC,kCAA0B,QAAQ,CAAC,EAAE,0CAA0C;IAC/E,kCAA0B,cAAc,CAAC;IACzC,kCAA0B,cAAc,CAAC;IACzC,mCAA2B,eAAe,CAAC;IAC3C,oCAA4B,gBAAgB,CAAC;IAC7C,iCAAyB,aAAa,CAAC;IACvC,gCAAwB,YAAY,CAAC;IACrC,6BAAoB,QAAQ,CAAC;IAC7B,mCAA0B,cAAc,CAAC;IACzC,kCAAyB,aAAa,CAAC;IACvC,2CAAkC,sBAAsB,CAAC;CAC1D,CAAC;AAEF;;;;GAIG;AACH,SAAgB,aAAa,CAAC,OAAsB;IAClD,OAAO,CAAC,UAAU,CAAC,cAAc,8BAAsB,CAAC,IAAI,EAAE,EAAE;QAC9D,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACzD,IAAI,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;YACnC,QAAQ,UAAU,EAAE,CAAC;gBACnB;oBACE,UAAU,mCAA2B,CAAC,CAAC,oCAAoC;oBAC3E,MAAM;gBACR,uCAA8B;gBAC9B;oBACE,UAAU,kCAA0B,CAAC,CAAC,oCAAoC;oBAC1E,MAAM;YACV,CAAC;YAED,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,KAAK,MAAM,UAAU,IAAI,YAAY;QACnC,OAAO,CAAC,SAAS,CAAC,eAAe,UAAU,CAAC,CAAC,CAAC,EAAE,8BAAsB,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACjH,CAAC;AApBD,sCAoBC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { RenderPass } from \"../RenderFlags\";\r\nimport { ShaderBuilder, VariableType } from \"../ShaderBuilder\";\r\n\r\n// render passes actually used in shader code.\r\nconst renderPasses = [\r\n [RenderPass.Background, \"Background\"],\r\n [RenderPass.OpaqueLayers, \"Layers\"], // Shaders treat all layer passes the same\r\n [RenderPass.OpaqueLinear, \"OpaqueLinear\"],\r\n [RenderPass.OpaquePlanar, \"OpaquePlanar\"],\r\n [RenderPass.OpaqueGeneral, \"OpaqueGeneral\"],\r\n [RenderPass.Classification, \"Classification\"],\r\n [RenderPass.Translucent, \"Translucent\"],\r\n [RenderPass.HiddenEdge, \"HiddenEdge\"],\r\n [RenderPass.Hilite, \"Hilite\"],\r\n [RenderPass.WorldOverlay, \"WorldOverlay\"],\r\n [RenderPass.ViewOverlay, \"ViewOverlay\"],\r\n [RenderPass.PlanarClassification, \"PlanarClassification\"],\r\n];\r\n\r\n/**\r\n * Adds a uniform holding the current render pass and a set of kRenderPass_* constants\r\n * uniform float u_renderPass\r\n * @internal\r\n */\r\nexport function addRenderPass(builder: ShaderBuilder) {\r\n builder.addUniform(\"u_renderPass\", VariableType.Float, (prog) => {\r\n prog.addProgramUniform(\"u_renderPass\", (uniform, params) => {\r\n let renderPass = params.renderPass;\r\n switch (renderPass) {\r\n case RenderPass.HiddenEdge:\r\n renderPass = RenderPass.OpaqueGeneral; // no distinction from shader POV...\r\n break;\r\n case RenderPass.OverlayLayers:\r\n case RenderPass.TranslucentLayers:\r\n renderPass = RenderPass.OpaqueLayers; // no distinction from shader POV...\r\n break;\r\n }\r\n\r\n uniform.setUniform1f(renderPass);\r\n });\r\n });\r\n\r\n for (const renderPass of renderPasses)\r\n builder.addGlobal(`kRenderPass_${renderPass[1]}`, VariableType.Float, `${renderPass[0].toString()}.0`, true);\r\n}\r\n"]}
1
+ {"version":3,"file":"RenderPass.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/RenderPass.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;AA0BH,sCAoBC;AAzCD,8CAA8C;AAC9C,MAAM,YAAY,GAAG;IACnB,gCAAwB,YAAY,CAAC;IACrC,kCAA0B,QAAQ,CAAC,EAAE,0CAA0C;IAC/E,kCAA0B,cAAc,CAAC;IACzC,kCAA0B,cAAc,CAAC;IACzC,mCAA2B,eAAe,CAAC;IAC3C,oCAA4B,gBAAgB,CAAC;IAC7C,iCAAyB,aAAa,CAAC;IACvC,gCAAwB,YAAY,CAAC;IACrC,6BAAoB,QAAQ,CAAC;IAC7B,mCAA0B,cAAc,CAAC;IACzC,kCAAyB,aAAa,CAAC;IACvC,2CAAkC,sBAAsB,CAAC;CAC1D,CAAC;AAEF;;;;GAIG;AACH,SAAgB,aAAa,CAAC,OAAsB;IAClD,OAAO,CAAC,UAAU,CAAC,cAAc,8BAAsB,CAAC,IAAI,EAAE,EAAE;QAC9D,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACzD,IAAI,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;YACnC,QAAQ,UAAU,EAAE,CAAC;gBACnB;oBACE,UAAU,mCAA2B,CAAC,CAAC,oCAAoC;oBAC3E,MAAM;gBACR,uCAA8B;gBAC9B;oBACE,UAAU,kCAA0B,CAAC,CAAC,oCAAoC;oBAC1E,MAAM;YACV,CAAC;YAED,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,KAAK,MAAM,UAAU,IAAI,YAAY;QACnC,OAAO,CAAC,SAAS,CAAC,eAAe,UAAU,CAAC,CAAC,CAAC,EAAE,8BAAsB,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACjH,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { RenderPass } from \"../RenderFlags\";\r\nimport { ShaderBuilder, VariableType } from \"../ShaderBuilder\";\r\n\r\n// render passes actually used in shader code.\r\nconst renderPasses = [\r\n [RenderPass.Background, \"Background\"],\r\n [RenderPass.OpaqueLayers, \"Layers\"], // Shaders treat all layer passes the same\r\n [RenderPass.OpaqueLinear, \"OpaqueLinear\"],\r\n [RenderPass.OpaquePlanar, \"OpaquePlanar\"],\r\n [RenderPass.OpaqueGeneral, \"OpaqueGeneral\"],\r\n [RenderPass.Classification, \"Classification\"],\r\n [RenderPass.Translucent, \"Translucent\"],\r\n [RenderPass.HiddenEdge, \"HiddenEdge\"],\r\n [RenderPass.Hilite, \"Hilite\"],\r\n [RenderPass.WorldOverlay, \"WorldOverlay\"],\r\n [RenderPass.ViewOverlay, \"ViewOverlay\"],\r\n [RenderPass.PlanarClassification, \"PlanarClassification\"],\r\n];\r\n\r\n/**\r\n * Adds a uniform holding the current render pass and a set of kRenderPass_* constants\r\n * uniform float u_renderPass\r\n * @internal\r\n */\r\nexport function addRenderPass(builder: ShaderBuilder) {\r\n builder.addUniform(\"u_renderPass\", VariableType.Float, (prog) => {\r\n prog.addProgramUniform(\"u_renderPass\", (uniform, params) => {\r\n let renderPass = params.renderPass;\r\n switch (renderPass) {\r\n case RenderPass.HiddenEdge:\r\n renderPass = RenderPass.OpaqueGeneral; // no distinction from shader POV...\r\n break;\r\n case RenderPass.OverlayLayers:\r\n case RenderPass.TranslucentLayers:\r\n renderPass = RenderPass.OpaqueLayers; // no distinction from shader POV...\r\n break;\r\n }\r\n\r\n uniform.setUniform1f(renderPass);\r\n });\r\n });\r\n\r\n for (const renderPass of renderPasses)\r\n builder.addGlobal(`kRenderPass_${renderPass[1]}`, VariableType.Float, `${renderPass[0].toString()}.0`, true);\r\n}\r\n"]}
@@ -7,7 +7,7 @@
7
7
  * @module WebGL
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.createScreenSpaceEffectProgramBuilder = void 0;
10
+ exports.createScreenSpaceEffectProgramBuilder = createScreenSpaceEffectProgramBuilder;
11
11
  const RenderFlags_1 = require("../RenderFlags");
12
12
  const AttributeMap_1 = require("../AttributeMap");
13
13
  const ShaderBuilder_1 = require("../ShaderBuilder");
@@ -55,5 +55,4 @@ function createScreenSpaceEffectProgramBuilder(params) {
55
55
  }
56
56
  return builder;
57
57
  }
58
- exports.createScreenSpaceEffectProgramBuilder = createScreenSpaceEffectProgramBuilder;
59
58
  //# sourceMappingURL=ScreenSpaceEffect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ScreenSpaceEffect.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/ScreenSpaceEffect.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAGH,gDAA6C;AAC7C,kDAA+C;AAC/C,oDAAgH;AAChH,yCAA6C;AAE7C,MAAM,eAAe,GAAG;;;CAGvB,CAAC;AAEF,MAAM,wBAAwB,GAAG;;;;CAIhC,CAAC;AAEF,MAAM,gBAAgB,GAAG,wBAAwB,CAAC;AAElD,MAAM,yBAAyB,GAAG;;CAEjC,CAAC;AAEF,gBAAgB;AAChB,SAAgB,qCAAqC,CAAC,MAAsC;IAC1F,MAAM,OAAO,GAAG,IAAI,8BAAc,CAAC,2BAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IAEpF,IAAI,MAAM,CAAC,wBAAwB;QACjC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IAErD,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/C,OAAO,CAAC,IAAI,CAAC,GAAG,iDAAwC,eAAe,CAAC,CAAC;IAEzE,IAAI,MAAM,CAAC,MAAM,CAAC,iBAAiB;QACjC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,0BAA0B,EAAE,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAExF,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACjD,OAAO,CAAC,UAAU,CAAC,WAAW,kCAA0B,CAAC,IAAI,EAAE,EAAE;QAC/D,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE;YAC1D,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC9E,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,yBAAW,CAAC,IAAI,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,CAAC,GAAG,kDAAyC,0BAAe,CAAC,CAAC;IAE1E,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,GAAG,mDAA2C,gBAAgB,CAAC,CAAC;IAC/E,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,GAAG,mDAA2C,yBAAyB,CAAC,CAAC;QACtF,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,gCAAwB,CAAC,IAAI,EAAE,EAAE;YACxE,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE;gBAChE,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAlCD,sFAkCC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { ScreenSpaceEffectBuilderParams } from \"../../ScreenSpaceEffectBuilder\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { assignFragColor } from \"./Fragment\";\r\n\r\nconst computePosition = `\r\n effectMain(rawPos);\r\n return rawPos;\r\n`;\r\n\r\nconst textureCoordFromPosition = `\r\n vec2 textureCoordFromPosition(vec4 pos) {\r\n return (pos.xy + 1.0) * 0.5;\r\n }\r\n`;\r\n\r\nconst computeBaseColor = \" return effectMain();\";\r\n\r\nconst computeBaseColorWithShift = `\r\n return u_readingPixels ? sampleSourcePixel() : effectMain();\r\n`;\r\n\r\n/** @internal */\r\nexport function createScreenSpaceEffectProgramBuilder(params: ScreenSpaceEffectBuilderParams): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(undefined, false));\r\n\r\n if (params.textureCoordFromPosition)\r\n builder.vert.addFunction(textureCoordFromPosition);\r\n\r\n builder.vert.addFunction(params.source.vertex);\r\n builder.vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n\r\n if (params.source.sampleSourcePixel)\r\n builder.frag.addFunction(\"vec4 sampleSourcePixel()\", params.source.sampleSourcePixel);\r\n\r\n builder.frag.addFunction(params.source.fragment);\r\n builder.addUniform(\"u_diffuse\", VariableType.Sampler2D, (prog) => {\r\n prog.addProgramUniform(\"u_diffuse\", (uniform, progParams) => {\r\n const texture = progParams.target.compositor.screenSpaceEffectFbo.getColor(0);\r\n texture.bindSampler(uniform, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n if (!params.source.sampleSourcePixel) {\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColor);\r\n } else {\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColorWithShift);\r\n builder.frag.addUniform(\"u_readingPixels\", VariableType.Boolean, (prog) => {\r\n prog.addProgramUniform(\"u_readingPixels\", (uniform, progParams) => {\r\n uniform.setUniform1i(progParams.target.isReadPixelsInProgress ? 1 : 0);\r\n });\r\n });\r\n }\r\n\r\n return builder;\r\n}\r\n"]}
1
+ {"version":3,"file":"ScreenSpaceEffect.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/ScreenSpaceEffect.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;AA0BH,sFAkCC;AAzDD,gDAA6C;AAC7C,kDAA+C;AAC/C,oDAAgH;AAChH,yCAA6C;AAE7C,MAAM,eAAe,GAAG;;;CAGvB,CAAC;AAEF,MAAM,wBAAwB,GAAG;;;;CAIhC,CAAC;AAEF,MAAM,gBAAgB,GAAG,wBAAwB,CAAC;AAElD,MAAM,yBAAyB,GAAG;;CAEjC,CAAC;AAEF,gBAAgB;AAChB,SAAgB,qCAAqC,CAAC,MAAsC;IAC1F,MAAM,OAAO,GAAG,IAAI,8BAAc,CAAC,2BAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IAEpF,IAAI,MAAM,CAAC,wBAAwB;QACjC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IAErD,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/C,OAAO,CAAC,IAAI,CAAC,GAAG,iDAAwC,eAAe,CAAC,CAAC;IAEzE,IAAI,MAAM,CAAC,MAAM,CAAC,iBAAiB;QACjC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,0BAA0B,EAAE,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAExF,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACjD,OAAO,CAAC,UAAU,CAAC,WAAW,kCAA0B,CAAC,IAAI,EAAE,EAAE;QAC/D,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE;YAC1D,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC9E,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,yBAAW,CAAC,IAAI,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,CAAC,GAAG,kDAAyC,0BAAe,CAAC,CAAC;IAE1E,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,GAAG,mDAA2C,gBAAgB,CAAC,CAAC;IAC/E,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,GAAG,mDAA2C,yBAAyB,CAAC,CAAC;QACtF,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,gCAAwB,CAAC,IAAI,EAAE,EAAE;YACxE,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE;gBAChE,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { ScreenSpaceEffectBuilderParams } from \"../../ScreenSpaceEffectBuilder\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { assignFragColor } from \"./Fragment\";\r\n\r\nconst computePosition = `\r\n effectMain(rawPos);\r\n return rawPos;\r\n`;\r\n\r\nconst textureCoordFromPosition = `\r\n vec2 textureCoordFromPosition(vec4 pos) {\r\n return (pos.xy + 1.0) * 0.5;\r\n }\r\n`;\r\n\r\nconst computeBaseColor = \" return effectMain();\";\r\n\r\nconst computeBaseColorWithShift = `\r\n return u_readingPixels ? sampleSourcePixel() : effectMain();\r\n`;\r\n\r\n/** @internal */\r\nexport function createScreenSpaceEffectProgramBuilder(params: ScreenSpaceEffectBuilderParams): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(undefined, false));\r\n\r\n if (params.textureCoordFromPosition)\r\n builder.vert.addFunction(textureCoordFromPosition);\r\n\r\n builder.vert.addFunction(params.source.vertex);\r\n builder.vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n\r\n if (params.source.sampleSourcePixel)\r\n builder.frag.addFunction(\"vec4 sampleSourcePixel()\", params.source.sampleSourcePixel);\r\n\r\n builder.frag.addFunction(params.source.fragment);\r\n builder.addUniform(\"u_diffuse\", VariableType.Sampler2D, (prog) => {\r\n prog.addProgramUniform(\"u_diffuse\", (uniform, progParams) => {\r\n const texture = progParams.target.compositor.screenSpaceEffectFbo.getColor(0);\r\n texture.bindSampler(uniform, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n if (!params.source.sampleSourcePixel) {\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColor);\r\n } else {\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColorWithShift);\r\n builder.frag.addUniform(\"u_readingPixels\", VariableType.Boolean, (prog) => {\r\n prog.addProgramUniform(\"u_readingPixels\", (uniform, progParams) => {\r\n uniform.setUniform1i(progParams.target.isReadPixelsInProgress ? 1 : 0);\r\n });\r\n });\r\n }\r\n\r\n return builder;\r\n}\r\n"]}
@@ -7,7 +7,7 @@
7
7
  * @module WebGL
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.createSkyBoxProgram = void 0;
10
+ exports.createSkyBoxProgram = createSkyBoxProgram;
11
11
  const AttributeMap_1 = require("../AttributeMap");
12
12
  const Matrix_1 = require("../Matrix");
13
13
  const RenderFlags_1 = require("../RenderFlags");
@@ -50,5 +50,4 @@ function createSkyBoxProgram(context) {
50
50
  prog.frag.headerComment = "//!F! SkyBox";
51
51
  return prog.buildProgram(context);
52
52
  }
53
- exports.createSkyBoxProgram = createSkyBoxProgram;
54
53
  //# sourceMappingURL=SkyBox.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SkyBox.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/SkyBox.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { SkyBoxQuadsGeometry } from \"../CachedGeometry\";\r\nimport { Matrix3 } from \"../Matrix\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { Texture } from \"../Texture\";\r\n\r\nconst computeBaseColor = `return vec4(0, 0, 0, 0);`;\r\nconst assignFragData = `FragColor = TEXTURE_CUBE(s_cube, v_texDir);`;\r\nconst computePosition = `vec3 pos = u_rot * vec3(rawPos.x, rawPos.z, -rawPos.y); return pos.xyzz;`; // rawPos swizzling accounts for iModel rotation.\r\nconst computeTexDir = `v_texDir = rawPosition.xyz;`;\r\n\r\nconst scratchRotMatrix = new Matrix3();\r\n\r\n/** @internal */\r\nexport function createSkyBoxProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const prog = new ProgramBuilder(AttributeMap.findAttributeMap(undefined, false));\r\n\r\n prog.frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColor);\r\n prog.frag.set(FragmentShaderComponent.AssignFragData, assignFragData);\r\n prog.vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n prog.vert.addUniform(\"u_rot\", VariableType.Mat3, (prg) => {\r\n prg.addGraphicUniform(\"u_rot\", (uniform, params) => {\r\n const rot = params.target.uniforms.frustum.viewMatrix.matrix;\r\n const mat3 = scratchRotMatrix;\r\n mat3.m00 = -rot.at(0, 0);\r\n mat3.m01 = -rot.at(0, 1);\r\n mat3.m02 = -rot.at(0, 2);\r\n mat3.m10 = -rot.at(1, 0);\r\n mat3.m11 = -rot.at(1, 1);\r\n mat3.m12 = -rot.at(1, 2);\r\n mat3.m20 = rot.at(2, 0);\r\n mat3.m21 = rot.at(2, 1);\r\n mat3.m22 = rot.at(2, 2);\r\n uniform.setMatrix3(mat3);\r\n });\r\n });\r\n\r\n prog.frag.addUniform(\"s_cube\", VariableType.SamplerCube, (prg) => {\r\n prg.addGraphicUniform(\"s_cube\", (uniform, params) => {\r\n const geom = params.geometry as SkyBoxQuadsGeometry;\r\n (geom.cube as Texture).texture.bindSampler(uniform, TextureUnit.Zero);\r\n });\r\n });\r\n prog.addInlineComputedVarying(\"v_texDir\", VariableType.Vec3, computeTexDir);\r\n\r\n prog.vert.headerComment = \"//!V! SkyBox\";\r\n prog.frag.headerComment = \"//!F! SkyBox\";\r\n\r\n return prog.buildProgram(context);\r\n}\r\n"]}
1
+ {"version":3,"file":"SkyBox.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/SkyBox.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;AAkBH,kDAmCC;AAnDD,kDAA+C;AAE/C,sCAAoC;AACpC,gDAA6C;AAC7C,oDAAgH;AAIhH,MAAM,gBAAgB,GAAG,0BAA0B,CAAC;AACpD,MAAM,cAAc,GAAG,6CAA6C,CAAC;AACrE,MAAM,eAAe,GAAG,0EAA0E,CAAC,CAAC,iDAAiD;AACrJ,MAAM,aAAa,GAAG,6BAA6B,CAAC;AAEpD,MAAM,gBAAgB,GAAG,IAAI,gBAAO,EAAE,CAAC;AAEvC,gBAAgB;AAChB,SAAgB,mBAAmB,CAAC,OAA+B;IACjE,MAAM,IAAI,GAAG,IAAI,8BAAc,CAAC,2BAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IAEjF,IAAI,CAAC,IAAI,CAAC,GAAG,mDAA2C,gBAAgB,CAAC,CAAC;IAC1E,IAAI,CAAC,IAAI,CAAC,GAAG,kDAAyC,cAAc,CAAC,CAAC;IACtE,IAAI,CAAC,IAAI,CAAC,GAAG,iDAAwC,eAAe,CAAC,CAAC;IACtE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,6BAAqB,CAAC,GAAG,EAAE,EAAE;QACvD,GAAG,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACjD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;YAC7D,MAAM,IAAI,GAAG,gBAAgB,CAAC;YAC9B,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,oCAA4B,CAAC,GAAG,EAAE,EAAE;QAC/D,GAAG,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAClD,MAAM,IAAI,GAAG,MAAM,CAAC,QAA+B,CAAC;YACnD,IAAI,CAAC,IAAgB,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,yBAAW,CAAC,IAAI,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,wBAAwB,CAAC,UAAU,6BAAqB,aAAa,CAAC,CAAC;IAE5E,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,cAAc,CAAC;IACzC,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,cAAc,CAAC;IAEzC,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { SkyBoxQuadsGeometry } from \"../CachedGeometry\";\r\nimport { Matrix3 } from \"../Matrix\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { Texture } from \"../Texture\";\r\n\r\nconst computeBaseColor = `return vec4(0, 0, 0, 0);`;\r\nconst assignFragData = `FragColor = TEXTURE_CUBE(s_cube, v_texDir);`;\r\nconst computePosition = `vec3 pos = u_rot * vec3(rawPos.x, rawPos.z, -rawPos.y); return pos.xyzz;`; // rawPos swizzling accounts for iModel rotation.\r\nconst computeTexDir = `v_texDir = rawPosition.xyz;`;\r\n\r\nconst scratchRotMatrix = new Matrix3();\r\n\r\n/** @internal */\r\nexport function createSkyBoxProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const prog = new ProgramBuilder(AttributeMap.findAttributeMap(undefined, false));\r\n\r\n prog.frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColor);\r\n prog.frag.set(FragmentShaderComponent.AssignFragData, assignFragData);\r\n prog.vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n prog.vert.addUniform(\"u_rot\", VariableType.Mat3, (prg) => {\r\n prg.addGraphicUniform(\"u_rot\", (uniform, params) => {\r\n const rot = params.target.uniforms.frustum.viewMatrix.matrix;\r\n const mat3 = scratchRotMatrix;\r\n mat3.m00 = -rot.at(0, 0);\r\n mat3.m01 = -rot.at(0, 1);\r\n mat3.m02 = -rot.at(0, 2);\r\n mat3.m10 = -rot.at(1, 0);\r\n mat3.m11 = -rot.at(1, 1);\r\n mat3.m12 = -rot.at(1, 2);\r\n mat3.m20 = rot.at(2, 0);\r\n mat3.m21 = rot.at(2, 1);\r\n mat3.m22 = rot.at(2, 2);\r\n uniform.setMatrix3(mat3);\r\n });\r\n });\r\n\r\n prog.frag.addUniform(\"s_cube\", VariableType.SamplerCube, (prg) => {\r\n prg.addGraphicUniform(\"s_cube\", (uniform, params) => {\r\n const geom = params.geometry as SkyBoxQuadsGeometry;\r\n (geom.cube as Texture).texture.bindSampler(uniform, TextureUnit.Zero);\r\n });\r\n });\r\n prog.addInlineComputedVarying(\"v_texDir\", VariableType.Vec3, computeTexDir);\r\n\r\n prog.vert.headerComment = \"//!V! SkyBox\";\r\n prog.frag.headerComment = \"//!F! SkyBox\";\r\n\r\n return prog.buildProgram(context);\r\n}\r\n"]}
@@ -7,7 +7,7 @@
7
7
  * @module WebGL
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.createSkySphereBuilder = void 0;
10
+ exports.createSkySphereBuilder = createSkySphereBuilder;
11
11
  const core_geometry_1 = require("@itwin/core-geometry");
12
12
  const core_common_1 = require("@itwin/core-common");
13
13
  const AttributeMap_1 = require("../AttributeMap");
@@ -264,5 +264,4 @@ function createSkySphereBuilder(isGradient, flags) {
264
264
  }
265
265
  return builder;
266
266
  }
267
- exports.createSkySphereBuilder = createSkySphereBuilder;
268
267
  //# sourceMappingURL=SkySphere.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SkySphere.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/SkySphere.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,wDAAgE;AAChE,oDAAyC;AACzC,kDAA+C;AAE/C,wDAAmE;AACnE,gDAA6C;AAE7C,sCAAmC;AAGnC,yCAA6C;AAC7C,iDAA2D;AAC3D,6CAA8D;AAG9D,MAAM,oBAAoB,GAAG;;;;;;;;;;;;CAY5B,CAAC;AAEF,MAAM,6BAA6B,GAAG;;;;;;;;;;CAUrC,CAAC;AAEF,MAAM,+BAA+B,GAAG;;CAEvC,CAAC;AAEF,MAAM,gBAAgB,GAAG,wCAAwC,CAAC;AAElE,MAAM,4BAA4B,GAAG;;;;;;;;;;;CAWpC,CAAC;AAEF;;;;GAIG;AACH,MAAM,eAAe,GAAG;;;;;;;;;;;;;;EActB,CAAC;AAEH,MAAM,cAAc,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;AAC3C,MAAM,WAAW,GAAG,IAAI,wBAAQ,EAAE,CAAC;AACnC,MAAM,aAAa,GAAG,IAAI,uBAAO,EAAE,CAAC;AAEpC,gBAAgB;AAChB,SAAS,aAAa,CAAC,OAAqB,EAAE,CAAS,EAAE,QAAsB;IAC7E,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;IAClB,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7B,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7B,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED,gBAAgB;AAChB,SAAS,mBAAmB,CAAC,OAAuB;IAClD,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,6BAAqB,CAAC,MAAM,EAAE,EAAE;QACnE,MAAM,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1D,MAAM,IAAI,GAAG,MAAM,CAAC,QAAyC,CAAC;YAC9D,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,8BAAsB,CAAC,MAAM,EAAE,EAAE;QAClE,MAAM,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAyC,CAAC;YAC9D,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,6BAAqB,CAAC,MAAM,EAAE,EAAE;QACnE,MAAM,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1D,MAAM,IAAI,GAAG,MAAM,CAAC,QAAyC,CAAC;YAC9D,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,6BAAqB,CAAC,MAAM,EAAE,EAAE;QACrE,MAAM,CAAC,iBAAiB,CAAC,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,QAAyC,CAAC;YAC9D,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;YAChC,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBAC/C,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,oBAAoB,EAAE,cAAc,CAAC,CAAC;gBAC3E,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;YACxC,CAAC;;gBACC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,6BAAqB,CAAC,MAAM,EAAE,EAAE;QAClE,MAAM,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACzD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAyC,CAAC;YAC9D,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;YAChC,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBAC/C,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,oBAAoB,EAAE,cAAc,CAAC,CAAC;gBACxE,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;YACxC,CAAC;;gBACC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,eAAe,6BAAqB,CAAC,MAAM,EAAE,EAAE;QACrE,MAAM,CAAC,iBAAiB,CAAC,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,QAAyC,CAAC;YAC9D,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;YAChC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBACzB,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;gBACxB,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,mBAAmB;oBACtD,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC;gBACzB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;oBACvB,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,oBAAoB,EAAE,cAAc,CAAC,CAAC;oBAC9D,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;gBACxC,CAAC;;oBACC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,6BAAqB,CAAC,MAAM,EAAE,EAAE;QACpE,MAAM,CAAC,iBAAiB,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,QAAyC,CAAC;YAC9D,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;YAChC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBACzB,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;gBACxB,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,mBAAmB;oBACtD,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;gBACxB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;oBACvB,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,oBAAoB,EAAE,cAAc,CAAC,CAAC;oBAC9D,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;gBACxC,CAAC;;oBACC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACzC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,gBAAgB;AAChB,SAAS,kBAAkB,CAAC,OAAuB;IACjD,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,kCAA0B,CAAC,MAAM,EAAE,EAAE;QACtE,MAAM,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAyC,CAAC;YAC9D,IAAI,SAAS,KAAK,IAAI,CAAC,UAAU;gBAC9B,IAAI,CAAC,UAAsB,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,yBAAW,CAAC,IAAI,CAAC,CAAC;;gBAE5E,eAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,OAAO,EAAE,yBAAW,CAAC,gBAAgB,CAAC,CAAC;QAC9E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,8BAAsB,CAAC,MAAM,EAAE,EAAE;QAClE,MAAM,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAyC,CAAC;YAC9D,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,8BAAsB,CAAC,MAAM,EAAE,EAAE;QACnE,MAAM,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACzD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAyC,CAAC;YAC9D,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,gBAAgB;AAChB,SAAgB,sBAAsB,CAAC,UAAmB,EAAE,KAAqB;IAC/E,MAAM,OAAO,GAAG,2BAAY,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,wCAA+B,CAAC,sCAA6B,EAAE,KAAK,CAAC,CAAC;IAChI,MAAM,OAAO,GAAG,IAAA,wCAAyB,EAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE1B,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IAClC,OAAO,CAAC,wBAAwB,CAAC,YAAY,6BAAqB,4CAA4C,CAAC,CAAC;IAEhH,IAAI,CAAC,UAAU,CAAC,iBAAiB,6BAAqB,CAAC,GAAG,EAAE,EAAE;QAC5D,GAAG,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3D,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,+BAA+B;QAC/F,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,UAAU,CAAC,WAAW,6BAAqB,CAAC,GAAG,EAAE,EAAE;QACtD,GAAG,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrD,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB;QACvF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,kDAAyC,0BAAe,CAAC,CAAC;IAElE,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;QAC3B,IAAI,CAAC,GAAG,mDAA2C,+BAA+B,CAAC,CAAC;QACpF,IAAA,2CAA8B,EAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACpD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,6BAAqB,CAAC,MAAM,EAAE,EAAE;QAClE,MAAM,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACzD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;YAC1C,IAAI,2CAAmC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBAC3E,kCAAkC;gBAClC,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,iBAAG,CAAC,cAAc,CAAC,CAAC;gBAC3D,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,iBAAG,CAAC,eAAe,CAAC,CAAC;gBAC7D,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBACvD,MAAM,IAAI,GAAG,wBAAQ,CAAC,cAAc,CAAC,YAAY,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;gBAC/E,MAAM,cAAc,GAAG,IAAA,2BAAS,EAAC,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;gBAC3E,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC;gBACrC,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC;gBACrC,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC;gBACrC,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,MAAM,KAAK,GAAG,wBAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,iBAAG,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,iBAAG,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC,CAAC;gBAClI,MAAM,qBAAqB,GAAG,IAAI,CAAC;gBACnC,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,iBAAG,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,iBAAG,CAAC,YAAY,CAAC,CAAC,CAAC;gBACrG,MAAM,WAAW,GAAG,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,qBAAqB,GAAG,qBAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;gBAC/F,IAAI,MAAM,GAAG,WAAW,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;gBAC7C,IAAI,MAAM,GAAG,QAAQ;oBACnB,MAAM,GAAG,QAAQ,CAAC,CAAC,oEAAoE;gBACzF,MAAM,QAAQ,GAAG,uBAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,iBAAG,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,SAAS,CAAC,iBAAG,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;gBAC5J,cAAc,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;gBAC/B,cAAc,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;gBAC/B,cAAc,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;gBAC/B,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;YACxC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,UAAU,EAAE,CAAC;QACf,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC7B,OAAO,CAAC,SAAS,CAAC,aAAa,uDAAuC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACtF,OAAO,CAAC,0BAA0B,CAAC,iBAAiB,6BAAqB,sBAAsB,EAAE,oBAAoB,CAAC,CAAC;QACvH,IAAI,CAAC,GAAG,mDAA2C,6BAA6B,CAAC,CAAC;IACpF,CAAC;SAAM,CAAC;QACN,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC5B,OAAO,CAAC,wBAAwB,CAAC,aAAa,6BAAqB,gBAAgB,CAAC,CAAC;QACrF,IAAI,CAAC,GAAG,mDAA2C,4BAA4B,CAAC,CAAC;IACnF,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAvED,wDAuEC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { Angle, Point3d, Vector3d } from \"@itwin/core-geometry\";\r\nimport { Npc } from \"@itwin/core-common\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { SkySphereViewportQuadGeometry } from \"../CachedGeometry\";\r\nimport { fromSumOf, FrustumUniformType } from \"../FrustumUniforms\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, ShaderType, VariableType } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { Texture } from \"../Texture\";\r\nimport { assignFragColor } from \"./Fragment\";\r\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\r\nimport { addAtmosphericScatteringEffect } from \"./Atmosphere\";\r\nimport { TechniqueFlags } from \"../TechniqueFlags\";\r\n\r\nconst computeGradientValue = `\r\n // For the gradient sky it's good enough to calculate these in the vertex shader.\r\n vec3 eyeToVert = a_worldPos - u_worldEye;\r\n float radius = sqrt(eyeToVert.x * eyeToVert.x + eyeToVert.y * eyeToVert.y);\r\n float zValue = eyeToVert.z - radius * u_zOffset;\r\n float d = atan(zValue, radius);\r\n if (u_skyParams.x < 0.0) { // 2-color gradient\r\n d = 0.5 - d / 3.14159265359;\r\n return vec4(d, 0.0, 0.0, 0.0);\r\n }\r\n d = d / 1.570796326795;\r\n return vec4(d, 1.0 - (d - horizonSize) / (1.0 - horizonSize), 1.0 - (-d - horizonSize) / (1.0 - horizonSize), (d + horizonSize) / (horizonSize * 2.0));\r\n`;\r\n\r\nconst computeSkySphereColorGradient = `\r\n if (u_skyParams.x < 0.0) // 2-color\r\n return vec4(mix(u_zenithColor, u_nadirColor, v_gradientValue.x), 1.0);\r\n\r\n if (v_gradientValue.x > horizonSize) // above horizon\r\n return vec4(mix(u_zenithColor, u_skyColor, pow(v_gradientValue.y, u_skyParams.y)), 1.0);\r\n else if (v_gradientValue.x < -horizonSize) // below horizon\r\n return vec4(mix(u_nadirColor, u_groundColor, pow(v_gradientValue.z, u_skyParams.z)), 1.0);\r\n\r\n return vec4(mix(u_groundColor, u_skyColor, v_gradientValue.w), 1.0);\r\n`;\r\n\r\nconst computeSkySphereColorAtmosphere = `\r\n return vec4(0.0, 0.0, 0.0, 1.0);\r\n`;\r\n\r\nconst computeEyeToVert = \"v_eyeToVert = a_worldPos - u_worldEye;\";\r\n\r\nconst computeSkySphereColorTexture = `\r\n // For the texture we must calculate these per pixel. Alternatively we could use a finer mesh.\r\n float radius = sqrt(v_eyeToVert.x * v_eyeToVert.x + v_eyeToVert.y * v_eyeToVert.y);\r\n float zValue = v_eyeToVert.z - radius * u_zOffset;\r\n float u = 0.25 - (atan(v_eyeToVert.y, v_eyeToVert.x) + u_rotation) / 6.28318530718;\r\n float v = 0.5 - atan(zValue, radius) / 3.14159265359;\r\n if (u < 0.0)\r\n u += 1.0;\r\n if (v < 0.0)\r\n v += 1.0;\r\n return TEXTURE(s_skyTxtr, vec2(u, v));\r\n`;\r\n\r\n/**\r\n * Eye Space for the SkySphere is unique because the ViewportQuad is already aligned with the view.\r\n * For this reason, the modelView matrix is not useful in calculating eyeSpace.\r\n * Instead, we can calculate the eyeSpace coordinates via the frustum values directly.\r\n */\r\nconst computeEyeSpace = `\r\nvec3 computeEyeSpace(vec4 rawPos) {\r\n vec3 pos01 = rawPos.xyz * 0.5 + 0.5;\r\n\r\n float top = u_frustumPlanes.x;\r\n float bottom = u_frustumPlanes.y;\r\n float left = u_frustumPlanes.z;\r\n float right = u_frustumPlanes.w;\r\n\r\n return vec3(\r\n mix(left, right, pos01.x),\r\n mix(bottom, top, pos01.y),\r\n -u_frustum.x\r\n );\r\n}`;\r\n\r\nconst scratch3Floats = new Float32Array(3);\r\nconst scratchVec3 = new Vector3d();\r\nconst scratchPoint3 = new Point3d();\r\n\r\n/** @internal */\r\nfunction modulateColor(colorIn: Float32Array, t: number, colorOut: Float32Array): void {\r\n const b = 1.0 - t;\r\n colorOut[0] = colorIn[0] * b;\r\n colorOut[1] = colorIn[1] * b;\r\n colorOut[2] = colorIn[2] * b;\r\n}\r\n\r\n/** @internal */\r\nfunction addGradientUniforms(builder: ProgramBuilder): void {\r\n builder.vert.addUniform(\"u_skyParams\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_skyParams\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform3fv(geom.typeAndExponents);\r\n });\r\n });\r\n builder.vert.addUniform(\"u_zOffset\", VariableType.Float, (shader) => {\r\n shader.addGraphicUniform(\"u_zOffset\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform1f(geom.zOffset);\r\n });\r\n });\r\n\r\n builder.frag.addUniform(\"u_skyParams\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_skyParams\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform3fv(geom.typeAndExponents);\r\n });\r\n });\r\n builder.frag.addUniform(\"u_zenithColor\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_zenithColor\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n const plan = params.target.plan;\r\n if (plan.backgroundMapOn && plan.isGlobeMode3D) {\r\n modulateColor(geom.zenithColor, plan.globalViewTransition, scratch3Floats);\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else\r\n uniform.setUniform3fv(geom.zenithColor);\r\n });\r\n });\r\n builder.frag.addUniform(\"u_skyColor\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_skyColor\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n const plan = params.target.plan;\r\n if (plan.backgroundMapOn && plan.isGlobeMode3D) {\r\n modulateColor(geom.skyColor, plan.globalViewTransition, scratch3Floats);\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else\r\n uniform.setUniform3fv(geom.skyColor);\r\n });\r\n });\r\n builder.frag.addUniform(\"u_groundColor\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_groundColor\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n const plan = params.target.plan;\r\n if (plan.backgroundMapOn) {\r\n let clr = geom.skyColor;\r\n if (-1 === geom.typeAndExponents[0]) // 2-color gradient\r\n clr = geom.zenithColor;\r\n if (plan.isGlobeMode3D) {\r\n modulateColor(clr, plan.globalViewTransition, scratch3Floats);\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else\r\n uniform.setUniform3fv(clr);\r\n } else {\r\n uniform.setUniform3fv(geom.groundColor);\r\n }\r\n });\r\n });\r\n builder.frag.addUniform(\"u_nadirColor\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_nadirColor\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n const plan = params.target.plan;\r\n if (plan.backgroundMapOn) {\r\n let clr = geom.skyColor;\r\n if (-1 === geom.typeAndExponents[0]) // 2-color gradient\r\n clr = geom.nadirColor;\r\n if (plan.isGlobeMode3D) {\r\n modulateColor(clr, plan.globalViewTransition, scratch3Floats);\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else\r\n uniform.setUniform3fv(clr);\r\n } else {\r\n uniform.setUniform3fv(geom.nadirColor);\r\n }\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nfunction addTextureUniforms(builder: ProgramBuilder): void {\r\n builder.frag.addUniform(\"s_skyTxtr\", VariableType.Sampler2D, (shader) => {\r\n shader.addGraphicUniform(\"s_skyTxtr\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n if (undefined !== geom.skyTexture)\r\n (geom.skyTexture as Texture).texture.bindSampler(uniform, TextureUnit.Zero);\r\n else\r\n System.instance.ensureSamplerBound(uniform, TextureUnit.FeatureSymbology);\r\n });\r\n });\r\n builder.frag.addUniform(\"u_zOffset\", VariableType.Float, (shader) => {\r\n shader.addGraphicUniform(\"u_zOffset\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform1f(geom.zOffset);\r\n });\r\n });\r\n builder.frag.addUniform(\"u_rotation\", VariableType.Float, (shader) => {\r\n shader.addGraphicUniform(\"u_rotation\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform1f(geom.rotation);\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function createSkySphereBuilder(isGradient: boolean, flags: TechniqueFlags): ProgramBuilder {\r\n const attrMap = AttributeMap.findAttributeMap(isGradient ? TechniqueId.SkySphereGradient : TechniqueId.SkySphereTexture, false);\r\n const builder = createViewportQuadBuilder(false, attrMap);\r\n const vert = builder.vert;\r\n const frag = builder.frag;\r\n\r\n vert.addFunction(computeEyeSpace);\r\n builder.addInlineComputedVarying(\"v_eyeSpace\", VariableType.Vec3, \"v_eyeSpace = computeEyeSpace(rawPosition);\");\r\n\r\n vert.addUniform(\"u_frustumPlanes\", VariableType.Vec4, (prg) => {\r\n prg.addGraphicUniform(\"u_frustumPlanes\", (uniform, params) => {\r\n uniform.setUniform4fv(params.target.uniforms.frustum.planes); // { top, bottom, left, right }\r\n });\r\n });\r\n vert.addUniform(\"u_frustum\", VariableType.Vec3, (prg) => {\r\n prg.addGraphicUniform(\"u_frustum\", (uniform, params) => {\r\n uniform.setUniform3fv(params.target.uniforms.frustum.frustum); // { near, far, type }\r\n });\r\n });\r\n\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n if (flags.enableAtmosphere) {\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSkySphereColorAtmosphere);\r\n addAtmosphericScatteringEffect(builder, true, true);\r\n return builder;\r\n }\r\n\r\n builder.vert.addUniform(\"u_worldEye\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_worldEye\", (uniform, params) => {\r\n const frustum = params.target.planFrustum;\r\n if (FrustumUniformType.Perspective === params.target.uniforms.frustum.type) {\r\n // compute eye point from frustum.\r\n const farLowerLeft = frustum.getCorner(Npc.LeftBottomRear);\r\n const nearLowerLeft = frustum.getCorner(Npc.LeftBottomFront);\r\n const scale = 1.0 / (1.0 - params.target.planFraction);\r\n const zVec = Vector3d.createStartEnd(farLowerLeft, nearLowerLeft, scratchVec3);\r\n const cameraPosition = fromSumOf(farLowerLeft, zVec, scale, scratchPoint3);\r\n scratch3Floats[0] = cameraPosition.x;\r\n scratch3Floats[1] = cameraPosition.y;\r\n scratch3Floats[2] = cameraPosition.z;\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else {\r\n const delta = Vector3d.createStartEnd(frustum.getCorner(Npc.LeftBottomRear), frustum.getCorner(Npc.LeftBottomFront), scratchVec3);\r\n const pseudoCameraHalfAngle = 22.5;\r\n const diagonal = frustum.getCorner(Npc.LeftBottomRear).distance(frustum.getCorner(Npc.RightTopRear));\r\n const focalLength = diagonal / (2 * Math.atan(pseudoCameraHalfAngle * Angle.radiansPerDegree));\r\n let zScale = focalLength / delta.magnitude();\r\n if (zScale < 1.000001)\r\n zScale = 1.000001; // prevent worldEye front being on or inside the frustum front plane\r\n const worldEye = Point3d.createAdd3Scaled(frustum.getCorner(Npc.LeftBottomRear), .5, frustum.getCorner(Npc.RightTopRear), .5, delta, zScale, scratchPoint3);\r\n scratch3Floats[0] = worldEye.x;\r\n scratch3Floats[1] = worldEye.y;\r\n scratch3Floats[2] = worldEye.z;\r\n uniform.setUniform3fv(scratch3Floats);\r\n }\r\n });\r\n });\r\n\r\n if (isGradient) {\r\n addGradientUniforms(builder);\r\n builder.addGlobal(\"horizonSize\", VariableType.Float, ShaderType.Both, \"0.0015\", true);\r\n builder.addFunctionComputedVarying(\"v_gradientValue\", VariableType.Vec4, \"computeGradientValue\", computeGradientValue);\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSkySphereColorGradient);\r\n } else {\r\n addTextureUniforms(builder);\r\n builder.addInlineComputedVarying(\"v_eyeToVert\", VariableType.Vec3, computeEyeToVert);\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSkySphereColorTexture);\r\n }\r\n\r\n return builder;\r\n}\r\n"]}
1
+ {"version":3,"file":"SkySphere.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/SkySphere.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { Angle, Point3d, Vector3d } from \"@itwin/core-geometry\";\r\nimport { Npc } from \"@itwin/core-common\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { SkySphereViewportQuadGeometry } from \"../CachedGeometry\";\r\nimport { fromSumOf, FrustumUniformType } from \"../FrustumUniforms\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, ShaderType, VariableType } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { Texture } from \"../Texture\";\r\nimport { assignFragColor } from \"./Fragment\";\r\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\r\nimport { addAtmosphericScatteringEffect } from \"./Atmosphere\";\r\nimport { TechniqueFlags } from \"../TechniqueFlags\";\r\n\r\nconst computeGradientValue = `\r\n // For the gradient sky it's good enough to calculate these in the vertex shader.\r\n vec3 eyeToVert = a_worldPos - u_worldEye;\r\n float radius = sqrt(eyeToVert.x * eyeToVert.x + eyeToVert.y * eyeToVert.y);\r\n float zValue = eyeToVert.z - radius * u_zOffset;\r\n float d = atan(zValue, radius);\r\n if (u_skyParams.x < 0.0) { // 2-color gradient\r\n d = 0.5 - d / 3.14159265359;\r\n return vec4(d, 0.0, 0.0, 0.0);\r\n }\r\n d = d / 1.570796326795;\r\n return vec4(d, 1.0 - (d - horizonSize) / (1.0 - horizonSize), 1.0 - (-d - horizonSize) / (1.0 - horizonSize), (d + horizonSize) / (horizonSize * 2.0));\r\n`;\r\n\r\nconst computeSkySphereColorGradient = `\r\n if (u_skyParams.x < 0.0) // 2-color\r\n return vec4(mix(u_zenithColor, u_nadirColor, v_gradientValue.x), 1.0);\r\n\r\n if (v_gradientValue.x > horizonSize) // above horizon\r\n return vec4(mix(u_zenithColor, u_skyColor, pow(v_gradientValue.y, u_skyParams.y)), 1.0);\r\n else if (v_gradientValue.x < -horizonSize) // below horizon\r\n return vec4(mix(u_nadirColor, u_groundColor, pow(v_gradientValue.z, u_skyParams.z)), 1.0);\r\n\r\n return vec4(mix(u_groundColor, u_skyColor, v_gradientValue.w), 1.0);\r\n`;\r\n\r\nconst computeSkySphereColorAtmosphere = `\r\n return vec4(0.0, 0.0, 0.0, 1.0);\r\n`;\r\n\r\nconst computeEyeToVert = \"v_eyeToVert = a_worldPos - u_worldEye;\";\r\n\r\nconst computeSkySphereColorTexture = `\r\n // For the texture we must calculate these per pixel. Alternatively we could use a finer mesh.\r\n float radius = sqrt(v_eyeToVert.x * v_eyeToVert.x + v_eyeToVert.y * v_eyeToVert.y);\r\n float zValue = v_eyeToVert.z - radius * u_zOffset;\r\n float u = 0.25 - (atan(v_eyeToVert.y, v_eyeToVert.x) + u_rotation) / 6.28318530718;\r\n float v = 0.5 - atan(zValue, radius) / 3.14159265359;\r\n if (u < 0.0)\r\n u += 1.0;\r\n if (v < 0.0)\r\n v += 1.0;\r\n return TEXTURE(s_skyTxtr, vec2(u, v));\r\n`;\r\n\r\n/**\r\n * Eye Space for the SkySphere is unique because the ViewportQuad is already aligned with the view.\r\n * For this reason, the modelView matrix is not useful in calculating eyeSpace.\r\n * Instead, we can calculate the eyeSpace coordinates via the frustum values directly.\r\n */\r\nconst computeEyeSpace = `\r\nvec3 computeEyeSpace(vec4 rawPos) {\r\n vec3 pos01 = rawPos.xyz * 0.5 + 0.5;\r\n\r\n float top = u_frustumPlanes.x;\r\n float bottom = u_frustumPlanes.y;\r\n float left = u_frustumPlanes.z;\r\n float right = u_frustumPlanes.w;\r\n\r\n return vec3(\r\n mix(left, right, pos01.x),\r\n mix(bottom, top, pos01.y),\r\n -u_frustum.x\r\n );\r\n}`;\r\n\r\nconst scratch3Floats = new Float32Array(3);\r\nconst scratchVec3 = new Vector3d();\r\nconst scratchPoint3 = new Point3d();\r\n\r\n/** @internal */\r\nfunction modulateColor(colorIn: Float32Array, t: number, colorOut: Float32Array): void {\r\n const b = 1.0 - t;\r\n colorOut[0] = colorIn[0] * b;\r\n colorOut[1] = colorIn[1] * b;\r\n colorOut[2] = colorIn[2] * b;\r\n}\r\n\r\n/** @internal */\r\nfunction addGradientUniforms(builder: ProgramBuilder): void {\r\n builder.vert.addUniform(\"u_skyParams\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_skyParams\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform3fv(geom.typeAndExponents);\r\n });\r\n });\r\n builder.vert.addUniform(\"u_zOffset\", VariableType.Float, (shader) => {\r\n shader.addGraphicUniform(\"u_zOffset\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform1f(geom.zOffset);\r\n });\r\n });\r\n\r\n builder.frag.addUniform(\"u_skyParams\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_skyParams\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform3fv(geom.typeAndExponents);\r\n });\r\n });\r\n builder.frag.addUniform(\"u_zenithColor\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_zenithColor\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n const plan = params.target.plan;\r\n if (plan.backgroundMapOn && plan.isGlobeMode3D) {\r\n modulateColor(geom.zenithColor, plan.globalViewTransition, scratch3Floats);\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else\r\n uniform.setUniform3fv(geom.zenithColor);\r\n });\r\n });\r\n builder.frag.addUniform(\"u_skyColor\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_skyColor\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n const plan = params.target.plan;\r\n if (plan.backgroundMapOn && plan.isGlobeMode3D) {\r\n modulateColor(geom.skyColor, plan.globalViewTransition, scratch3Floats);\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else\r\n uniform.setUniform3fv(geom.skyColor);\r\n });\r\n });\r\n builder.frag.addUniform(\"u_groundColor\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_groundColor\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n const plan = params.target.plan;\r\n if (plan.backgroundMapOn) {\r\n let clr = geom.skyColor;\r\n if (-1 === geom.typeAndExponents[0]) // 2-color gradient\r\n clr = geom.zenithColor;\r\n if (plan.isGlobeMode3D) {\r\n modulateColor(clr, plan.globalViewTransition, scratch3Floats);\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else\r\n uniform.setUniform3fv(clr);\r\n } else {\r\n uniform.setUniform3fv(geom.groundColor);\r\n }\r\n });\r\n });\r\n builder.frag.addUniform(\"u_nadirColor\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_nadirColor\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n const plan = params.target.plan;\r\n if (plan.backgroundMapOn) {\r\n let clr = geom.skyColor;\r\n if (-1 === geom.typeAndExponents[0]) // 2-color gradient\r\n clr = geom.nadirColor;\r\n if (plan.isGlobeMode3D) {\r\n modulateColor(clr, plan.globalViewTransition, scratch3Floats);\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else\r\n uniform.setUniform3fv(clr);\r\n } else {\r\n uniform.setUniform3fv(geom.nadirColor);\r\n }\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nfunction addTextureUniforms(builder: ProgramBuilder): void {\r\n builder.frag.addUniform(\"s_skyTxtr\", VariableType.Sampler2D, (shader) => {\r\n shader.addGraphicUniform(\"s_skyTxtr\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n if (undefined !== geom.skyTexture)\r\n (geom.skyTexture as Texture).texture.bindSampler(uniform, TextureUnit.Zero);\r\n else\r\n System.instance.ensureSamplerBound(uniform, TextureUnit.FeatureSymbology);\r\n });\r\n });\r\n builder.frag.addUniform(\"u_zOffset\", VariableType.Float, (shader) => {\r\n shader.addGraphicUniform(\"u_zOffset\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform1f(geom.zOffset);\r\n });\r\n });\r\n builder.frag.addUniform(\"u_rotation\", VariableType.Float, (shader) => {\r\n shader.addGraphicUniform(\"u_rotation\", (uniform, params) => {\r\n const geom = params.geometry as SkySphereViewportQuadGeometry;\r\n uniform.setUniform1f(geom.rotation);\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function createSkySphereBuilder(isGradient: boolean, flags: TechniqueFlags): ProgramBuilder {\r\n const attrMap = AttributeMap.findAttributeMap(isGradient ? TechniqueId.SkySphereGradient : TechniqueId.SkySphereTexture, false);\r\n const builder = createViewportQuadBuilder(false, attrMap);\r\n const vert = builder.vert;\r\n const frag = builder.frag;\r\n\r\n vert.addFunction(computeEyeSpace);\r\n builder.addInlineComputedVarying(\"v_eyeSpace\", VariableType.Vec3, \"v_eyeSpace = computeEyeSpace(rawPosition);\");\r\n\r\n vert.addUniform(\"u_frustumPlanes\", VariableType.Vec4, (prg) => {\r\n prg.addGraphicUniform(\"u_frustumPlanes\", (uniform, params) => {\r\n uniform.setUniform4fv(params.target.uniforms.frustum.planes); // { top, bottom, left, right }\r\n });\r\n });\r\n vert.addUniform(\"u_frustum\", VariableType.Vec3, (prg) => {\r\n prg.addGraphicUniform(\"u_frustum\", (uniform, params) => {\r\n uniform.setUniform3fv(params.target.uniforms.frustum.frustum); // { near, far, type }\r\n });\r\n });\r\n\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n\r\n if (flags.enableAtmosphere) {\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSkySphereColorAtmosphere);\r\n addAtmosphericScatteringEffect(builder, true, true);\r\n return builder;\r\n }\r\n\r\n builder.vert.addUniform(\"u_worldEye\", VariableType.Vec3, (shader) => {\r\n shader.addGraphicUniform(\"u_worldEye\", (uniform, params) => {\r\n const frustum = params.target.planFrustum;\r\n if (FrustumUniformType.Perspective === params.target.uniforms.frustum.type) {\r\n // compute eye point from frustum.\r\n const farLowerLeft = frustum.getCorner(Npc.LeftBottomRear);\r\n const nearLowerLeft = frustum.getCorner(Npc.LeftBottomFront);\r\n const scale = 1.0 / (1.0 - params.target.planFraction);\r\n const zVec = Vector3d.createStartEnd(farLowerLeft, nearLowerLeft, scratchVec3);\r\n const cameraPosition = fromSumOf(farLowerLeft, zVec, scale, scratchPoint3);\r\n scratch3Floats[0] = cameraPosition.x;\r\n scratch3Floats[1] = cameraPosition.y;\r\n scratch3Floats[2] = cameraPosition.z;\r\n uniform.setUniform3fv(scratch3Floats);\r\n } else {\r\n const delta = Vector3d.createStartEnd(frustum.getCorner(Npc.LeftBottomRear), frustum.getCorner(Npc.LeftBottomFront), scratchVec3);\r\n const pseudoCameraHalfAngle = 22.5;\r\n const diagonal = frustum.getCorner(Npc.LeftBottomRear).distance(frustum.getCorner(Npc.RightTopRear));\r\n const focalLength = diagonal / (2 * Math.atan(pseudoCameraHalfAngle * Angle.radiansPerDegree));\r\n let zScale = focalLength / delta.magnitude();\r\n if (zScale < 1.000001)\r\n zScale = 1.000001; // prevent worldEye front being on or inside the frustum front plane\r\n const worldEye = Point3d.createAdd3Scaled(frustum.getCorner(Npc.LeftBottomRear), .5, frustum.getCorner(Npc.RightTopRear), .5, delta, zScale, scratchPoint3);\r\n scratch3Floats[0] = worldEye.x;\r\n scratch3Floats[1] = worldEye.y;\r\n scratch3Floats[2] = worldEye.z;\r\n uniform.setUniform3fv(scratch3Floats);\r\n }\r\n });\r\n });\r\n\r\n if (isGradient) {\r\n addGradientUniforms(builder);\r\n builder.addGlobal(\"horizonSize\", VariableType.Float, ShaderType.Both, \"0.0015\", true);\r\n builder.addFunctionComputedVarying(\"v_gradientValue\", VariableType.Vec4, \"computeGradientValue\", computeGradientValue);\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSkySphereColorGradient);\r\n } else {\r\n addTextureUniforms(builder);\r\n builder.addInlineComputedVarying(\"v_eyeToVert\", VariableType.Vec3, computeEyeToVert);\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeSkySphereColorTexture);\r\n }\r\n\r\n return builder;\r\n}\r\n"]}
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.addSolarShadowMap = exports.addEvsmExponent = exports.warpDepth = void 0;
3
+ exports.warpDepth = void 0;
4
+ exports.addEvsmExponent = addEvsmExponent;
5
+ exports.addSolarShadowMap = addSolarShadowMap;
4
6
  /*---------------------------------------------------------------------------------------------
5
7
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
6
8
  * See LICENSE.md in the project root for license terms and full copyright notice.
@@ -82,7 +84,6 @@ function addEvsmExponent(frag) {
82
84
  });
83
85
  });
84
86
  }
85
- exports.addEvsmExponent = addEvsmExponent;
86
87
  /** @internal */
87
88
  function addSolarShadowMap(builder, toTerrain = false) {
88
89
  const frag = builder.frag;
@@ -126,5 +127,4 @@ function addSolarShadowMap(builder, toTerrain = false) {
126
127
  frag.addFunction(shadowMapEVSM);
127
128
  frag.set(14 /* FragmentShaderComponent.ApplySolarShadowMap */, toTerrain ? applySolarShadowMapTerrain : applySolarShadowMap);
128
129
  }
129
- exports.addSolarShadowMap = addSolarShadowMap;
130
130
  //# sourceMappingURL=SolarShadowMapping.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SolarShadowMapping.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/SolarShadowMapping.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { RenderType } from \"@itwin/webgl-compatibility\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderBuilder, FragmentShaderComponent, ProgramBuilder, VariableType } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { addInstancedRtcMatrix } from \"./Vertex\";\r\n\r\nconst computeShadowPos = `\r\n vec4 shadowProj = u_shadowProj * rawPosition;\r\n v_shadowPos = shadowProj.xyz/shadowProj.w;\r\n v_shadowPos.z = 1.0 - v_shadowPos.z;\r\n`;\r\nconst computeInstancedShadowPos = `\r\n vec4 shadowProj = u_shadowProj * g_instancedRtcMatrix * rawPosition;\r\n v_shadowPos = shadowProj.xyz/shadowProj.w;\r\n v_shadowPos.z = 1.0 - v_shadowPos.z;\r\n`;\r\n\r\n// for 32-bit float, max exponent should be 44.36, for 16-bit should be 5.545\r\nconst evsm32Exp = 42.0;\r\nconst evsm16Exp = 5.545;\r\n\r\nexport const warpDepth = `\r\n// Applies exponential warp to shadow map depth, input depth should be in [0, 1]\r\nvec2 warpDepth(float depth, float exponent) {\r\n depth = 2.0 * depth - 1.0; // Rescale depth into [-1, 1]\r\n float pos = exp( exponent * depth);\r\n float neg = -exp(-exponent * depth);\r\n return vec2(pos, neg);\r\n}\r\n`;\r\n\r\nconst chebyshevUpperBound = `\r\nfloat chebyshevUpperBound(vec2 moments, float mean, float minVariance) {\r\n float variance = moments.y - (moments.x * moments.x);\r\n variance = max(variance, minVariance);\r\n\r\n // Compute probabilistic upper bound\r\n float d = mean - moments.x;\r\n float pMax = variance / (variance + (d * d));\r\n\r\n return (mean <= moments.x ? 1.0 : pMax); // One-tailed Chebyshev\r\n}\r\n`;\r\n\r\nconst shadowMapEVSM = `\r\nfloat shadowMapEVSM(vec3 shadowPos) {\r\n vec2 warpedDepth = warpDepth(shadowPos.z, u_evsmExponent);\r\n vec4 occluder = TEXTURE(s_shadowSampler, shadowPos.xy/* * 0.5*/); // shadow texture is 1/2 size (both dirs)\r\n\r\n // Derivative of warping at depth\r\n vec2 depthScale = kVSMBias * 0.01 * u_evsmExponent * warpedDepth;\r\n vec2 minVariance = depthScale * depthScale;\r\n\r\n float posContrib = chebyshevUpperBound(occluder.xz, warpedDepth.x, minVariance.x);\r\n float negContrib = chebyshevUpperBound(occluder.yw, warpedDepth.y, minVariance.y);\r\n return min(posContrib, negContrib);\r\n}\r\n`;\r\n\r\nconst applySolarShadowMap = `\r\n if (v_shadowPos.x < 0.0 || v_shadowPos.x > 1.0 || v_shadowPos.y < 0.0 || v_shadowPos.y > 1.0 || v_shadowPos.z < 0.0 || v_shadowPos.z > 1.0)\r\n return baseColor;\r\n float visible = (u_surfaceFlags[kSurfaceBitIndex_HasNormals] && (dot(g_normal, u_sunDir) < 0.0)) ? 0.0 : shadowMapEVSM(v_shadowPos);\r\n return vec4(baseColor.rgb * mix(u_shadowParams.rgb, vec3(1.0), visible), baseColor.a);\r\n`;\r\n\r\nconst applySolarShadowMapTerrain = `\r\n if (v_shadowPos.x < 0.0 || v_shadowPos.x > 1.0 || v_shadowPos.y < 0.0 || v_shadowPos.y > 1.0 || v_shadowPos.z < 0.0 || v_shadowPos.z > 1.0)\r\n return baseColor;\r\n\r\n float visible = shadowMapEVSM(v_shadowPos);\r\n return vec4(baseColor.rgb * mix(u_shadowParams.rgb, vec3(1.0), visible), baseColor.a);\r\n`;\r\n\r\n/** @internal */\r\nexport function addEvsmExponent(frag: FragmentShaderBuilder): void {\r\n frag.addUniform(\"u_evsmExponent\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_evsmExponent\", (uniform) => {\r\n uniform.setUniform1f((RenderType.TextureFloat === System.instance.maxRenderType) ? evsm32Exp : evsm16Exp);\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function addSolarShadowMap(builder: ProgramBuilder, toTerrain = false) {\r\n const frag = builder.frag;\r\n const vert = builder.vert;\r\n\r\n frag.addUniform(\"s_shadowSampler\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_shadowSampler\", (uniform, params) => {\r\n const shadowMap = params.target.solarShadowMap;\r\n assert(undefined !== shadowMap.shadowMapTexture);\r\n shadowMap.shadowMapTexture.texture.bindSampler(uniform, TextureUnit.ShadowMap);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_shadowParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_shadowParams\", (uniform, params) => {\r\n params.target.uniforms.shadow.bindColorAndBias(uniform);\r\n });\r\n });\r\n\r\n if (!toTerrain) {\r\n frag.addUniform(\"u_sunDir\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_sunDir\", (uniform, params) => {\r\n params.target.uniforms.bindSunDirection(uniform);\r\n });\r\n });\r\n }\r\n\r\n vert.addUniform(\"u_shadowProj\", VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(\"u_shadowProj\", (uniform, params) => {\r\n params.target.uniforms.shadow.bindProjectionMatrix(uniform);\r\n });\r\n });\r\n\r\n addEvsmExponent(frag);\r\n\r\n if (vert.usesInstancedGeometry)\r\n addInstancedRtcMatrix(vert);\r\n builder.addInlineComputedVarying(\"v_shadowPos\", VariableType.Vec3, vert.usesInstancedGeometry ? computeInstancedShadowPos : computeShadowPos);\r\n /* This is the EVSM bias value, which makes tradeoffs in shadow quality. Normally it should be set to 0.1.\r\n Lower values can introduce shadows where they should not be, including shadow acne. Higher values can cause Peter\r\n Panning effect and light bleeding. Tested 0.01 and 1.0, woth more focus on 0.1 to 0.5 inclusive, chose 0.2 for a\r\n while (on 9/13/19) then after having shadow tiles match view tile resolution for ones in view, retested and went\r\n back to 0.1 (on 11/5/19). */\r\n frag.addGlobal(\"kVSMBias\", VariableType.Float, \"0.1\", true);\r\n frag.addFunction(warpDepth);\r\n frag.addFunction(chebyshevUpperBound);\r\n frag.addFunction(shadowMapEVSM);\r\n frag.set(FragmentShaderComponent.ApplySolarShadowMap, toTerrain ? applySolarShadowMapTerrain : applySolarShadowMap);\r\n}\r\n"]}
1
+ {"version":3,"file":"SolarShadowMapping.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/SolarShadowMapping.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { RenderType } from \"@itwin/webgl-compatibility\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderBuilder, FragmentShaderComponent, ProgramBuilder, VariableType } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { addInstancedRtcMatrix } from \"./Vertex\";\r\n\r\nconst computeShadowPos = `\r\n vec4 shadowProj = u_shadowProj * rawPosition;\r\n v_shadowPos = shadowProj.xyz/shadowProj.w;\r\n v_shadowPos.z = 1.0 - v_shadowPos.z;\r\n`;\r\nconst computeInstancedShadowPos = `\r\n vec4 shadowProj = u_shadowProj * g_instancedRtcMatrix * rawPosition;\r\n v_shadowPos = shadowProj.xyz/shadowProj.w;\r\n v_shadowPos.z = 1.0 - v_shadowPos.z;\r\n`;\r\n\r\n// for 32-bit float, max exponent should be 44.36, for 16-bit should be 5.545\r\nconst evsm32Exp = 42.0;\r\nconst evsm16Exp = 5.545;\r\n\r\nexport const warpDepth = `\r\n// Applies exponential warp to shadow map depth, input depth should be in [0, 1]\r\nvec2 warpDepth(float depth, float exponent) {\r\n depth = 2.0 * depth - 1.0; // Rescale depth into [-1, 1]\r\n float pos = exp( exponent * depth);\r\n float neg = -exp(-exponent * depth);\r\n return vec2(pos, neg);\r\n}\r\n`;\r\n\r\nconst chebyshevUpperBound = `\r\nfloat chebyshevUpperBound(vec2 moments, float mean, float minVariance) {\r\n float variance = moments.y - (moments.x * moments.x);\r\n variance = max(variance, minVariance);\r\n\r\n // Compute probabilistic upper bound\r\n float d = mean - moments.x;\r\n float pMax = variance / (variance + (d * d));\r\n\r\n return (mean <= moments.x ? 1.0 : pMax); // One-tailed Chebyshev\r\n}\r\n`;\r\n\r\nconst shadowMapEVSM = `\r\nfloat shadowMapEVSM(vec3 shadowPos) {\r\n vec2 warpedDepth = warpDepth(shadowPos.z, u_evsmExponent);\r\n vec4 occluder = TEXTURE(s_shadowSampler, shadowPos.xy/* * 0.5*/); // shadow texture is 1/2 size (both dirs)\r\n\r\n // Derivative of warping at depth\r\n vec2 depthScale = kVSMBias * 0.01 * u_evsmExponent * warpedDepth;\r\n vec2 minVariance = depthScale * depthScale;\r\n\r\n float posContrib = chebyshevUpperBound(occluder.xz, warpedDepth.x, minVariance.x);\r\n float negContrib = chebyshevUpperBound(occluder.yw, warpedDepth.y, minVariance.y);\r\n return min(posContrib, negContrib);\r\n}\r\n`;\r\n\r\nconst applySolarShadowMap = `\r\n if (v_shadowPos.x < 0.0 || v_shadowPos.x > 1.0 || v_shadowPos.y < 0.0 || v_shadowPos.y > 1.0 || v_shadowPos.z < 0.0 || v_shadowPos.z > 1.0)\r\n return baseColor;\r\n float visible = (u_surfaceFlags[kSurfaceBitIndex_HasNormals] && (dot(g_normal, u_sunDir) < 0.0)) ? 0.0 : shadowMapEVSM(v_shadowPos);\r\n return vec4(baseColor.rgb * mix(u_shadowParams.rgb, vec3(1.0), visible), baseColor.a);\r\n`;\r\n\r\nconst applySolarShadowMapTerrain = `\r\n if (v_shadowPos.x < 0.0 || v_shadowPos.x > 1.0 || v_shadowPos.y < 0.0 || v_shadowPos.y > 1.0 || v_shadowPos.z < 0.0 || v_shadowPos.z > 1.0)\r\n return baseColor;\r\n\r\n float visible = shadowMapEVSM(v_shadowPos);\r\n return vec4(baseColor.rgb * mix(u_shadowParams.rgb, vec3(1.0), visible), baseColor.a);\r\n`;\r\n\r\n/** @internal */\r\nexport function addEvsmExponent(frag: FragmentShaderBuilder): void {\r\n frag.addUniform(\"u_evsmExponent\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_evsmExponent\", (uniform) => {\r\n uniform.setUniform1f((RenderType.TextureFloat === System.instance.maxRenderType) ? evsm32Exp : evsm16Exp);\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function addSolarShadowMap(builder: ProgramBuilder, toTerrain = false) {\r\n const frag = builder.frag;\r\n const vert = builder.vert;\r\n\r\n frag.addUniform(\"s_shadowSampler\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_shadowSampler\", (uniform, params) => {\r\n const shadowMap = params.target.solarShadowMap;\r\n assert(undefined !== shadowMap.shadowMapTexture);\r\n shadowMap.shadowMapTexture.texture.bindSampler(uniform, TextureUnit.ShadowMap);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_shadowParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_shadowParams\", (uniform, params) => {\r\n params.target.uniforms.shadow.bindColorAndBias(uniform);\r\n });\r\n });\r\n\r\n if (!toTerrain) {\r\n frag.addUniform(\"u_sunDir\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_sunDir\", (uniform, params) => {\r\n params.target.uniforms.bindSunDirection(uniform);\r\n });\r\n });\r\n }\r\n\r\n vert.addUniform(\"u_shadowProj\", VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(\"u_shadowProj\", (uniform, params) => {\r\n params.target.uniforms.shadow.bindProjectionMatrix(uniform);\r\n });\r\n });\r\n\r\n addEvsmExponent(frag);\r\n\r\n if (vert.usesInstancedGeometry)\r\n addInstancedRtcMatrix(vert);\r\n builder.addInlineComputedVarying(\"v_shadowPos\", VariableType.Vec3, vert.usesInstancedGeometry ? computeInstancedShadowPos : computeShadowPos);\r\n /* This is the EVSM bias value, which makes tradeoffs in shadow quality. Normally it should be set to 0.1.\r\n Lower values can introduce shadows where they should not be, including shadow acne. Higher values can cause Peter\r\n Panning effect and light bleeding. Tested 0.01 and 1.0, woth more focus on 0.1 to 0.5 inclusive, chose 0.2 for a\r\n while (on 9/13/19) then after having shadow tiles match view tile resolution for ones in view, retested and went\r\n back to 0.1 (on 11/5/19). */\r\n frag.addGlobal(\"kVSMBias\", VariableType.Float, \"0.1\", true);\r\n frag.addFunction(warpDepth);\r\n frag.addFunction(chebyshevUpperBound);\r\n frag.addFunction(shadowMapEVSM);\r\n frag.set(FragmentShaderComponent.ApplySolarShadowMap, toTerrain ? applySolarShadowMapTerrain : applySolarShadowMap);\r\n}\r\n"]}
@@ -7,7 +7,12 @@
7
7
  * @module WebGL
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.addClassificationTranslucencyDiscard = exports.createSurfaceBuilder = exports.discardClassifiedByAlpha = exports.addTexture = exports.addSurfaceFlags = exports.octDecodeNormal = exports.createSurfaceHiliter = void 0;
10
+ exports.discardClassifiedByAlpha = exports.octDecodeNormal = void 0;
11
+ exports.createSurfaceHiliter = createSurfaceHiliter;
12
+ exports.addSurfaceFlags = addSurfaceFlags;
13
+ exports.addTexture = addTexture;
14
+ exports.createSurfaceBuilder = createSurfaceBuilder;
15
+ exports.addClassificationTranslucencyDiscard = addClassificationTranslucencyDiscard;
11
16
  const core_bentley_1 = require("@itwin/core-bentley");
12
17
  const AttributeMap_1 = require("../AttributeMap");
13
18
  const Material_1 = require("../Material");
@@ -267,7 +272,6 @@ function createSurfaceHiliter(instanced, classified, posType) {
267
272
  }
268
273
  return builder;
269
274
  }
270
- exports.createSurfaceHiliter = createSurfaceHiliter;
271
275
  const isSurfaceBitSet = `
272
276
  bool isSurfaceBitSet(uint flag) { return 0u != (surfaceFlags & flag); }
273
277
  `;
@@ -457,7 +461,6 @@ function addSurfaceFlags(builder, withFeatureOverrides, withFeatureColor) {
457
461
  });
458
462
  });
459
463
  }
460
- exports.addSurfaceFlags = addSurfaceFlags;
461
464
  function addNormal(builder, animated) {
462
465
  (0, Vertex_1.addNormalMatrix)(builder.vert);
463
466
  const quantized = "quantized" === builder.vert.positionType;
@@ -548,7 +551,6 @@ function addTexture(builder, animated, isThematic, isPointCloud, isHilite) {
548
551
  });
549
552
  }
550
553
  }
551
- exports.addTexture = addTexture;
552
554
  exports.discardClassifiedByAlpha = `
553
555
  if (u_no_classifier_discard)
554
556
  return false;
@@ -676,7 +678,6 @@ function createSurfaceBuilder(flags) {
676
678
  (0, Wiremesh_1.addWiremesh)(builder);
677
679
  return builder;
678
680
  }
679
- exports.createSurfaceBuilder = createSurfaceBuilder;
680
681
  function addClassificationTranslucencyDiscard(builder) {
681
682
  // 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.
682
683
  // Those shaders compute the transparency in the vertex shader and discard the vertex in one pass or the other.
@@ -692,5 +693,4 @@ function addClassificationTranslucencyDiscard(builder) {
692
693
  });
693
694
  builder.frag.set(5 /* FragmentShaderComponent.DiscardByAlpha */, exports.discardClassifiedByAlpha);
694
695
  }
695
- exports.addClassificationTranslucencyDiscard = addClassificationTranslucencyDiscard;
696
696
  //# sourceMappingURL=Surface.js.map