@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":"Monochrome.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Monochrome.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,oDAAoD;AAGpD,MAAM,yBAAyB,GAAG;;;CAGjC,CAAC;AAEF,MAAM,2BAA2B,GAAG;;;;;;;;;;CAUnC,CAAC;AAEF,SAAS,UAAU,CAAC,IAA2B;IAC7C,IAAI,CAAC,UAAU,CAAC,WAAW,6BAAqB,CAAC,IAAI,EAAE,EAAE;QACvD,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACtD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,gBAAgB;AAChB,SAAgB,kBAAkB,CAAC,IAA2B;IAC5D,UAAU,CAAC,IAAI,CAAC,CAAC;IACjB,IAAI,CAAC,GAAG,kDAA0C,yBAAyB,CAAC,CAAC;AAC/E,CAAC;AAHD,gDAGC;AAED,gBAAgB;AAChB,SAAgB,oBAAoB,CAAC,IAA2B;IAC9D,UAAU,CAAC,IAAI,CAAC,CAAC;IACjB,IAAI,CAAC,UAAU,CAAC,gBAAgB,8BAAsB,CAAC,IAAI,EAAE,EAAE;QAC7D,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3D,OAAO,CAAC,YAAY,CAAC,4BAAc,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,IAAI,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACzJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,kDAA0C,2BAA2B,CAAC,CAAC;AACjF,CAAC;AATD,oDASC","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 { MonochromeMode } from \"@itwin/core-common\";\r\nimport { FragmentShaderBuilder, FragmentShaderComponent, VariableType } from \"../ShaderBuilder\";\r\n\r\nconst applyUnlitMonochromeColor = `\r\n vec4 monoColor = vec4(u_monoRgb, baseColor.a);\r\n return u_shaderFlags[kShaderBit_Monochrome] ? monoColor : baseColor;\r\n`;\r\n\r\nconst applySurfaceMonochromeColor = `\r\n vec4 monoColor = vec4(u_monoRgb, baseColor.a);\r\n if (1.0 == u_mixMonoColor) {\r\n vec3 rgb = baseColor.rgb;\r\n rgb = vec3(dot(rgb, vec3(.222, .707, .071)));\r\n rgb *= u_monoRgb;\r\n monoColor.rgb = rgb;\r\n }\r\n\r\n return u_shaderFlags[kShaderBit_Monochrome] ? monoColor : baseColor;\r\n`;\r\n\r\nfunction addMonoRgb(frag: FragmentShaderBuilder): void {\r\n frag.addUniform(\"u_monoRgb\", VariableType.Vec3, (prog) => {\r\n prog.addProgramUniform(\"u_monoRgb\", (uniform, params) => {\r\n params.target.uniforms.style.bindMonochromeRgb(uniform);\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function addUnlitMonochrome(frag: FragmentShaderBuilder): void {\r\n addMonoRgb(frag);\r\n frag.set(FragmentShaderComponent.ApplyMonochrome, applyUnlitMonochromeColor);\r\n}\r\n\r\n/** @internal */\r\nexport function addSurfaceMonochrome(frag: FragmentShaderBuilder): void {\r\n addMonoRgb(frag);\r\n frag.addUniform(\"u_mixMonoColor\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_mixMonoColor\", (uniform, params) => {\r\n uniform.setUniform1f(MonochromeMode.Scaled === params.target.plan.monochromeMode && params.geometry.wantMixMonochromeColor(params.target) ? 1.0 : 0.0);\r\n });\r\n });\r\n\r\n frag.set(FragmentShaderComponent.ApplyMonochrome, applySurfaceMonochromeColor);\r\n}\r\n"]}
1
+ {"version":3,"file":"Monochrome.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Monochrome.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;AA+BH,gDAGC;AAGD,oDASC;AA5CD,oDAAoD;AAGpD,MAAM,yBAAyB,GAAG;;;CAGjC,CAAC;AAEF,MAAM,2BAA2B,GAAG;;;;;;;;;;CAUnC,CAAC;AAEF,SAAS,UAAU,CAAC,IAA2B;IAC7C,IAAI,CAAC,UAAU,CAAC,WAAW,6BAAqB,CAAC,IAAI,EAAE,EAAE;QACvD,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACtD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,gBAAgB;AAChB,SAAgB,kBAAkB,CAAC,IAA2B;IAC5D,UAAU,CAAC,IAAI,CAAC,CAAC;IACjB,IAAI,CAAC,GAAG,kDAA0C,yBAAyB,CAAC,CAAC;AAC/E,CAAC;AAED,gBAAgB;AAChB,SAAgB,oBAAoB,CAAC,IAA2B;IAC9D,UAAU,CAAC,IAAI,CAAC,CAAC;IACjB,IAAI,CAAC,UAAU,CAAC,gBAAgB,8BAAsB,CAAC,IAAI,EAAE,EAAE;QAC7D,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3D,OAAO,CAAC,YAAY,CAAC,4BAAc,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,IAAI,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACzJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,kDAA0C,2BAA2B,CAAC,CAAC;AACjF,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 { MonochromeMode } from \"@itwin/core-common\";\r\nimport { FragmentShaderBuilder, FragmentShaderComponent, VariableType } from \"../ShaderBuilder\";\r\n\r\nconst applyUnlitMonochromeColor = `\r\n vec4 monoColor = vec4(u_monoRgb, baseColor.a);\r\n return u_shaderFlags[kShaderBit_Monochrome] ? monoColor : baseColor;\r\n`;\r\n\r\nconst applySurfaceMonochromeColor = `\r\n vec4 monoColor = vec4(u_monoRgb, baseColor.a);\r\n if (1.0 == u_mixMonoColor) {\r\n vec3 rgb = baseColor.rgb;\r\n rgb = vec3(dot(rgb, vec3(.222, .707, .071)));\r\n rgb *= u_monoRgb;\r\n monoColor.rgb = rgb;\r\n }\r\n\r\n return u_shaderFlags[kShaderBit_Monochrome] ? monoColor : baseColor;\r\n`;\r\n\r\nfunction addMonoRgb(frag: FragmentShaderBuilder): void {\r\n frag.addUniform(\"u_monoRgb\", VariableType.Vec3, (prog) => {\r\n prog.addProgramUniform(\"u_monoRgb\", (uniform, params) => {\r\n params.target.uniforms.style.bindMonochromeRgb(uniform);\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function addUnlitMonochrome(frag: FragmentShaderBuilder): void {\r\n addMonoRgb(frag);\r\n frag.set(FragmentShaderComponent.ApplyMonochrome, applyUnlitMonochromeColor);\r\n}\r\n\r\n/** @internal */\r\nexport function addSurfaceMonochrome(frag: FragmentShaderBuilder): void {\r\n addMonoRgb(frag);\r\n frag.addUniform(\"u_mixMonoColor\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_mixMonoColor\", (uniform, params) => {\r\n uniform.setUniform1f(MonochromeMode.Scaled === params.target.plan.monochromeMode && params.geometry.wantMixMonochromeColor(params.target) ? 1.0 : 0.0);\r\n });\r\n });\r\n\r\n frag.set(FragmentShaderComponent.ApplyMonochrome, applySurfaceMonochromeColor);\r\n}\r\n"]}
@@ -4,7 +4,11 @@
4
4
  * See LICENSE.md in the project root for license terms and full copyright notice.
5
5
  *--------------------------------------------------------------------------------------------*/
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.addOverrideClassifierColor = exports.addHilitePlanarClassifier = exports.addFeaturePlanarClassifier = exports.addColorPlanarClassifier = exports.volClassOpaqueColor = void 0;
7
+ exports.volClassOpaqueColor = void 0;
8
+ exports.addColorPlanarClassifier = addColorPlanarClassifier;
9
+ exports.addFeaturePlanarClassifier = addFeaturePlanarClassifier;
10
+ exports.addHilitePlanarClassifier = addHilitePlanarClassifier;
11
+ exports.addOverrideClassifierColor = addOverrideClassifierColor;
8
12
  /** @packageDocumentation
9
13
  * @module WebGL
10
14
  */
@@ -277,7 +281,6 @@ function addColorPlanarClassifier(builder, translucent, isThematic) {
277
281
  (0, Common_1.addShaderFlags)(builder);
278
282
  frag.set(13 /* FragmentShaderComponent.ApplyPlanarClassifier */, (isThematic === 0 /* IsThematic.No */) ? applyPlanarClassificationColor : applyPlanarClassificationColorForThematic);
279
283
  }
280
- exports.addColorPlanarClassifier = addColorPlanarClassifier;
281
284
  /** @internal */
282
285
  function addFeaturePlanarClassifier(builder) {
283
286
  const frag = builder.frag;
@@ -297,7 +300,6 @@ function addFeaturePlanarClassifier(builder) {
297
300
  frag.set(18 /* FragmentShaderComponent.OverrideFeatureId */, overrideFeatureId);
298
301
  frag.addFunction(Common_1.addUInt32s);
299
302
  }
300
- exports.addFeaturePlanarClassifier = addFeaturePlanarClassifier;
301
303
  /** @internal */
302
304
  function addHilitePlanarClassifier(builder, supportTextures = true) {
303
305
  addPlanarClassifierCommon(builder);
@@ -311,7 +313,6 @@ function addHilitePlanarClassifier(builder, supportTextures = true) {
311
313
  });
312
314
  frag.set(1 /* FragmentShaderComponent.ComputeBaseColor */, supportTextures ? computeClassifiedSurfaceHiliteColor : computeClassifiedHiliteColor);
313
315
  }
314
- exports.addHilitePlanarClassifier = addHilitePlanarClassifier;
315
316
  // NonLocatable flag is put in upper bit of blue component when drawing the classification texture.
316
317
  const encodeNonLocatableWithFeatures = `
317
318
  vec4 encodeNonLocatable(vec4 clr) {
@@ -389,5 +390,4 @@ function addOverrideClassifierColor(builder, isThematic) {
389
390
  else
390
391
  builder.frag.set(20 /* FragmentShaderComponent.OverrideColor */, haveOverrides ? overrideClassifierWithFeaturesForThematic : overrideClassifierForClipForThematic);
391
392
  }
392
- exports.addOverrideClassifierColor = addOverrideClassifierColor;
393
393
  //# sourceMappingURL=PlanarClassification.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlanarClassification.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/PlanarClassification.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\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { Matrix4d } from \"@itwin/core-geometry\";\r\nimport { SpatialClassifierInsideDisplay } from \"@itwin/core-common\";\r\nimport { Matrix4 } from \"../Matrix\";\r\nimport { PlanarClassifierContent } from \"../PlanarClassifier\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, ShaderBuilder, VariableType } from \"../ShaderBuilder\";\r\nimport { IsThematic } from \"../TechniqueFlags\";\r\nimport { Texture2DHandle } from \"../Texture\";\r\nimport { addShaderFlags, addUInt32s } from \"./Common\";\r\nimport { addClassifierFlash } from \"./FeatureSymbology\";\r\nimport { addWindowToTexCoords } from \"./Fragment\";\r\nimport { addInstancedRtcMatrix } from \"./Vertex\";\r\n\r\nexport const volClassOpaqueColor = `\r\nvec4 volClassColor(vec4 baseColor, float depth) {\r\n if (depth <= TEXTURE(s_pClassSampler, windowCoordsToTexCoords(gl_FragCoord.xy)).r)\r\n discard;\r\n return vec4(baseColor.rgb, 1.0);\r\n}\r\n`;\r\n\r\nconst volClassTranslucentColor = `\r\nvec4 volClassColor(vec4 baseColor, float depth) {\r\n return vec4(baseColor.rgb, depth); // This will never be called, so we use depth here to avoid a compile error\r\n}\r\n`;\r\n\r\nconst applyPlanarClassificationPrelude = `\r\nconst float dimScale = .7;\r\n\r\nvec2 classPos = v_pClassPos.xy / v_pClassPosW;\r\nbool isOutside = classPos.x < 0.0 || classPos.x > 1.0 || classPos.y < 0.0 || classPos.y > 1.0;\r\nif (u_pClassColorParams.x > kClassifierDisplay_Element) { // texture/terrain drape.\r\n if (u_pClassColorParams.x > kTextureDrape) {\r\n return volClassColor(baseColor, depth);\r\n }\r\n if (isOutside)\r\n discard;\r\n\r\n vec3 rgb = TEXTURE(s_pClassSampler, classPos.xy).rgb;\r\n return vec4(rgb, baseColor.a);\r\n}\r\nfloat imageCount = u_pClassColorParams.z;\r\n// If imageCount is less than zero - the mask sense is inverted - inside rather than outside. (masks only)\r\nbool doInvert = false;\r\nif (imageCount < 0.0) {\r\n imageCount = - imageCount;\r\n doInvert = true;\r\n}\r\n\r\nvec4 colorTexel = vec4(0);\r\nvec4 maskTexel = vec4(0);\r\nbool doMask = imageCount != kTextureContentClassifierOnly;\r\nbool doClassify = imageCount != kTextureContentMaskOnly;\r\n\r\nif (!isOutside) {\r\n if (imageCount == kTextureContentClassifierOnly) {\r\n colorTexel = TEXTURE(s_pClassSampler, vec2(classPos.x, classPos.y / imageCount));\r\n } else if (imageCount == kTextureContentMaskOnly) {\r\n maskTexel = TEXTURE(s_pClassSampler, vec2(classPos.x, classPos.y));\r\n } else if (imageCount == kTextureContentClassifierAndMask) {\r\n colorTexel = TEXTURE(s_pClassSampler, vec2(classPos.x, classPos.y / imageCount));\r\n maskTexel = TEXTURE(s_pClassSampler, vec2(classPos.x, (2.0 + classPos.y) / imageCount));\r\n }\r\n if (colorTexel.b >= 0.5) {\r\n if (u_shaderFlags[kShaderBit_IgnoreNonLocatable]) {\r\n discard;\r\n return vec4(0.0);\r\n }\r\n colorTexel.b = (colorTexel.b * 255.0 - 128.0) / 127.0;\r\n } else {\r\n colorTexel.b *= 255.0 / 127.0;\r\n }\r\n}\r\nif (doMask) {\r\n bool masked = !isOutside && (maskTexel.r + maskTexel.g + maskTexel.b + maskTexel.a) > 0.0;\r\n if (doInvert)\r\n masked = !masked;\r\n if (masked) {\r\n float maskTransparency = u_pClassColorParams.w < 0.0 ? (1.0 - maskTexel.a) : u_pClassColorParams.w;\r\n if (maskTransparency <= 0.0) {\r\n discard;\r\n return vec4(0);\r\n }\r\n\r\n baseColor.a = baseColor.a * maskTransparency;\r\n }\r\n\r\n if (!doClassify)\r\n return baseColor;\r\n }\r\n\r\n bool isClassified = !isOutside && (colorTexel.r + colorTexel.g + colorTexel.b + colorTexel.a > 0.0);\r\n float param = isClassified ? u_pClassColorParams.x : u_pClassColorParams.y;\r\n if (kClassifierDisplay_Off == param) {\r\n discard;\r\n return vec4(0);\r\n}\r\n`\r\n ;\r\n\r\n// Currently we discard if classifier is pure black (acts as clipping mask).\r\n// These could be more efficiently handled with masks.\r\nconst applyPlanarClassificationColor = applyPlanarClassificationPrelude + // eslint-disable-line prefer-template\r\n `\r\n float colorMix = u_pClassPointCloud ? .65 : .35;\r\n vec4 classColor;\r\n if (kClassifierDisplay_On == param)\r\n classColor = baseColor;\r\n else if (!isClassified || kClassifierDisplay_Dimmed == param)\r\n classColor = vec4(baseColor.rgb * dimScale, baseColor.a);\r\n else if (kClassifierDisplay_Hilite == param)\r\n classColor = vec4(mix(baseColor.rgb, u_hilite_settings[0], u_hilite_settings[2][0]), baseColor.a);\r\n else {\r\n if (colorTexel.b > colorTexel.a) {\r\n discard;\r\n return vec4(0.0);\r\n }\r\n\r\n // NB: colorTexel contains pre-multiplied alpha. We know it is greater than zero from above.\r\n float alpha = colorTexel.a * baseColor.a;\r\n vec3 rgb = colorTexel.rgb / colorTexel.a;\r\n rgb = mix(baseColor.rgb, rgb, colorMix);\r\n classColor = vec4(rgb, alpha);\r\n }\r\n\r\n if (kClassifierDisplay_Element != param && isClassified) {\r\n if (colorTexel.r > colorTexel.a && kClassifierDisplay_Hilite != param)\r\n classColor = vec4(mix(baseColor.rgb, u_hilite_settings[0], u_hilite_settings[2][0]), 1.0);\r\n\r\n if (colorTexel.g > colorTexel.a)\r\n classColor = applyClassifierFlash(classColor);\r\n }\r\n\r\n return classColor;\r\n`;\r\n\r\nconst applyPlanarClassificationColorForThematic = applyPlanarClassificationPrelude + // eslint-disable-line prefer-template\r\n `\r\n vec4 classColor = baseColor;\r\n\r\n if (kClassifierDisplay_Element == param) {\r\n if (colorTexel.b > colorTexel.a) {\r\n discard;\r\n return vec4(0.0);\r\n }\r\n\r\n // We stashed the element alpha in blue channel. Make sure to handle pre-multiplied alpha.\r\n baseColor.rgb = baseColor.rgb / baseColor.a;\r\n classColor = vec4(baseColor.rgb, colorTexel.b);\r\n classColor.rgb *= classColor.a;\r\n colorTexel.a = 0.5; // make conditions below potentially pass\r\n }\r\n\r\n if (isClassified) {\r\n if (colorTexel.r > colorTexel.a && kClassifierDisplay_Hilite != param)\r\n classColor = vec4(mix(baseColor.rgb, u_hilite_settings[0], u_hilite_settings[2][0]), 1.0);\r\n\r\n if (colorTexel.g > colorTexel.a)\r\n classColor = applyClassifierFlash(classColor);\r\n }\r\n\r\n return classColor;\r\n`;\r\n\r\nconst overrideFeatureId = `\r\n if (u_pClassColorParams.x != kClassifierDisplay_Element) return currentId;\r\n vec2 classPos = v_pClassPos / v_pClassPosW;\r\n vec4 featureTexel = TEXTURE(s_pClassSampler, vec2(classPos.x, (1.0 + classPos.y) / u_pClassColorParams.z));\r\n return (featureTexel == vec4(0)) ? currentId : addUInt32s(u_batchBase, featureTexel * 255.0) / 255.0;\r\n `;\r\n\r\nconst computeClassifiedHiliteColor = `\r\n vec2 classPos = v_pClassPos / v_pClassPosW;\r\n return TEXTURE(s_pClassHiliteSampler, classPos);\r\n`;\r\nconst computeClassifiedSurfaceHiliteColor = `\r\n if (isSurfaceBitSet(kSurfaceBit_HasTexture) && TEXTURE(s_texture, v_texCoord).a <= 0.15)\r\n return vec4(0.0);\r\n${computeClassifiedHiliteColor}`;\r\n\r\nconst computeClassifierPos = \"vec4 classProj = u_pClassProj * rawPosition; v_pClassPos = classProj.xy;\";\r\nconst computeInstancedClassifierPos = \"vec4 classProj = u_pClassProj * g_instancedRtcMatrix * rawPosition; v_pClassPos = classProj.xy;\";\r\nconst computeClassifierPosW = \"v_pClassPosW = classProj.w;\";\r\n\r\nconst scratchBytes = new Uint8Array(4);\r\nconst scratchBatchBaseId = new Uint32Array(scratchBytes.buffer);\r\nconst scratchBatchBaseComponents = [0, 0, 0, 0];\r\nconst scratchColorParams = new Float32Array(4); // Unclassified scale, classified base scale, classified classifier scale, content/image count... MaskOnly = 1, ClassifierOnly = 2, ClassifierAndMask = 3\r\nconst scratchModel = Matrix4d.createIdentity();\r\nconst scratchModelProjection = Matrix4d.createIdentity();\r\nconst scratchMatrix = new Matrix4();\r\n\r\nfunction addPlanarClassifierCommon(builder: ProgramBuilder) {\r\n const vert = builder.vert;\r\n vert.addUniform(\"u_pClassProj\", VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(\"u_pClassProj\", (uniform, params) => {\r\n const source = params.target.currentPlanarClassifierOrDrape!;\r\n assert(undefined !== source || undefined !== params.target.activeVolumeClassifierTexture);\r\n if (undefined !== params.target.currentPlanarClassifierOrDrape) {\r\n source.projectionMatrix.multiplyMatrixMatrix(Matrix4d.createTransform(params.target.currentTransform, scratchModel), scratchModelProjection);\r\n scratchMatrix.initFromMatrix4d(scratchModelProjection);\r\n } else\r\n scratchMatrix.initIdentity(); // needs to be identity for volume classifiers\r\n uniform.setMatrix4(scratchMatrix);\r\n });\r\n });\r\n\r\n if (vert.usesInstancedGeometry)\r\n addInstancedRtcMatrix(vert);\r\n\r\n builder.addInlineComputedVarying(\"v_pClassPos\", VariableType.Vec2, vert.usesInstancedGeometry ? computeInstancedClassifierPos : computeClassifierPos);\r\n builder.addInlineComputedVarying(\"v_pClassPosW\", VariableType.Float, computeClassifierPosW);\r\n\r\n addPlanarClassifierConstants(builder.frag);\r\n}\r\n\r\nfunction addPlanarClassifierConstants(builder: ShaderBuilder) {\r\n builder.addDefine(\"kClassifierDisplay_Off\", SpatialClassifierInsideDisplay.Off.toFixed(1));\r\n builder.addDefine(\"kClassifierDisplay_On\", SpatialClassifierInsideDisplay.On.toFixed(1));\r\n builder.addDefine(\"kClassifierDisplay_Dimmed\", SpatialClassifierInsideDisplay.Dimmed.toFixed(1));\r\n builder.addDefine(\"kClassifierDisplay_Hilite\", SpatialClassifierInsideDisplay.Hilite.toFixed(1));\r\n builder.addDefine(\"kClassifierDisplay_Element\", SpatialClassifierInsideDisplay.ElementColor.toFixed(1));\r\n const td = SpatialClassifierInsideDisplay.ElementColor + 1;\r\n builder.addDefine(\"kTextureDrape\", td.toFixed(1));\r\n builder.addDefine(\"kTextureContentClassifierOnly\", PlanarClassifierContent.ClassifierOnly.toFixed(1));\r\n builder.addDefine(\"kTextureContentMaskOnly\", PlanarClassifierContent.MaskOnly.toFixed(1));\r\n builder.addDefine(\"kTextureContentClassifierAndMask\", PlanarClassifierContent.ClassifierAndMask.toFixed(1));\r\n}\r\n\r\n/** @internal */\r\nexport function addColorPlanarClassifier(builder: ProgramBuilder, translucent: boolean, isThematic: IsThematic) {\r\n addPlanarClassifierCommon(builder);\r\n const frag = builder.frag;\r\n frag.addUniform(\"s_pClassSampler\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_pClassSampler\", (uniform, params) => {\r\n const source = params.target.currentPlanarClassifierOrDrape;\r\n const volClass = params.target.activeVolumeClassifierTexture;\r\n assert(undefined !== source || undefined !== volClass);\r\n if (source) {\r\n assert(undefined !== source.texture);\r\n source.texture.texture.bindSampler(uniform, TextureUnit.PlanarClassification);\r\n } else\r\n Texture2DHandle.bindSampler(uniform, volClass!, TextureUnit.PlanarClassification);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_pClassColorParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_pClassColorParams\", (uniform, params) => {\r\n const source = params.target.currentPlanarClassifierOrDrape;\r\n const volClass = params.target.activeVolumeClassifierTexture;\r\n assert(undefined !== source || undefined !== volClass);\r\n if (undefined !== source) {\r\n source.getParams(scratchColorParams);\r\n } else {\r\n scratchColorParams[0] = 6.0; // Volume classifier, by element color.\r\n scratchColorParams[1] = 0.5; // used for alpha value\r\n scratchColorParams[2] = 0.0; // Not used for volume.\r\n scratchColorParams[3] = 0.0; // Not used for volume.\r\n }\r\n uniform.setUniform4fv(scratchColorParams);\r\n });\r\n });\r\n\r\n if (isThematic === IsThematic.No) {\r\n frag.addUniform(\"u_pClassPointCloud\", VariableType.Boolean, (prog) => {\r\n prog.addGraphicUniform(\"u_pClassPointCloud\", (uniform, params) => {\r\n const classifier = params.target.currentPlanarClassifier;\r\n const isPointCloud = undefined !== classifier && classifier.isClassifyingPointCloud;\r\n uniform.setUniform1i(isPointCloud ? 1 : 0);\r\n });\r\n });\r\n }\r\n\r\n addClassifierFlash(frag);\r\n\r\n if (translucent)\r\n // We will never call the shaders for volume classifiers with translucency,\r\n // so use a different version of the function which does not use glFragCoord to reduce the varyings count\r\n frag.addFunction(volClassTranslucentColor);\r\n else {\r\n addWindowToTexCoords(frag);\r\n frag.addFunction(volClassOpaqueColor);\r\n }\r\n\r\n addShaderFlags(builder);\r\n\r\n frag.set(FragmentShaderComponent.ApplyPlanarClassifier, (isThematic === IsThematic.No) ? applyPlanarClassificationColor : applyPlanarClassificationColorForThematic);\r\n}\r\n\r\n/** @internal */\r\nexport function addFeaturePlanarClassifier(builder: ProgramBuilder) {\r\n const frag = builder.frag;\r\n frag.addUniform(\"u_batchBase\", VariableType.Vec4, (prog) => { // TBD. Instancing.\r\n prog.addGraphicUniform(\"u_batchBase\", (uniform, params) => {\r\n const classifier = params.target.currentPlanarClassifier;\r\n if (classifier !== undefined) {\r\n scratchBatchBaseId[0] = classifier.baseBatchId;\r\n scratchBatchBaseComponents[0] = scratchBytes[0];\r\n scratchBatchBaseComponents[1] = scratchBytes[1];\r\n scratchBatchBaseComponents[2] = scratchBytes[2];\r\n scratchBatchBaseComponents[3] = scratchBytes[3];\r\n }\r\n uniform.setUniform4fv(scratchBatchBaseComponents);\r\n });\r\n });\r\n frag.set(FragmentShaderComponent.OverrideFeatureId, overrideFeatureId);\r\n frag.addFunction(addUInt32s);\r\n}\r\n\r\n/** @internal */\r\nexport function addHilitePlanarClassifier(builder: ProgramBuilder, supportTextures = true) {\r\n addPlanarClassifierCommon(builder);\r\n const frag = builder.frag;\r\n frag.addUniform(\"s_pClassHiliteSampler\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_pClassHiliteSampler\", (uniform, params) => {\r\n const classifier = params.target.currentPlanarClassifier!;\r\n assert(undefined !== classifier && undefined !== classifier.hiliteTexture);\r\n classifier.hiliteTexture.texture.bindSampler(uniform, TextureUnit.PlanarClassificationHilite);\r\n });\r\n });\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, supportTextures ? computeClassifiedSurfaceHiliteColor : computeClassifiedHiliteColor);\r\n}\r\n\r\n// NonLocatable flag is put in upper bit of blue component when drawing the classification texture.\r\nconst encodeNonLocatableWithFeatures = `\r\nvec4 encodeNonLocatable(vec4 clr) {\r\n float encoded_b = (floor(clr.b * 127.0) + float(extractNthBit(floor(v_feature_emphasis + 0.5), kEmphBit_NonLocatable)) * 128.0) / 255.0;\r\n return vec4(clr.r, clr.g, encoded_b, clr.a);\r\n}\r\n`;\r\n\r\nconst encodeNonLocatable = `\r\nvec4 encodeNonLocatable(vec4 clr) {\r\n float encoded_b = floor(clr.b * 127.0) / 255.0;\r\n return vec4(clr.r, clr.g, encoded_b, clr.a);\r\n}\r\n`;\r\n\r\nconst overrideClassifierColorPrelude = `\r\n if (0.0 == u_planarClassifierInsideMode)\r\n return currentColor;\r\n\r\n if (0.0 == currentColor.a)\r\n return encodeNonLocatable(vec4(0.0, 0.0, 1.0, 0.5));\r\n`;\r\n\r\nconst overrideClassifierEmphasis = `\r\n if (kClassifierDisplay_Element != u_planarClassifierInsideMode) {\r\n float emph = floor(v_feature_emphasis + 0.5);\r\n if (0.0 != emph)\r\n return encodeNonLocatable(vec4(extractNthBit(emph, kEmphBit_Hilite), extractNthBit(emph, kEmphBit_Flash), 0.0, 0.5));\r\n }\r\n`;\r\n\r\nconst overrideClassifierColorPostlude = `\r\n return encodeNonLocatable(currentColor);\r\n`;\r\n\r\nconst overrideClassifierWithFeatures = overrideClassifierColorPrelude + overrideClassifierEmphasis + overrideClassifierColorPostlude;\r\nconst overrideClassifierForClip = overrideClassifierColorPrelude + overrideClassifierColorPostlude;\r\n\r\nconst overrideClassifierColorPreludeForThematic = `\r\n if (0.0 == u_planarClassifierInsideMode)\r\n return currentColor;\r\n\r\n if (0.0 == currentColor.a)\r\n return encodeNonLocatable(vec4(0.0, 0.0, 1.0, 0.5));\r\n\r\n bool isElem = kClassifierDisplay_Element == u_planarClassifierInsideMode;\r\n`;\r\n\r\nconst overrideClassifierEmphasisForThematic = `\r\n float emph = floor(v_feature_emphasis + 0.5);\r\n if (0.0 != emph)\r\n return encodeNonLocatable(vec4(extractNthBit(emph, kEmphBit_Hilite), extractNthBit(emph, kEmphBit_Flash), isElem ? currentColor.a : 0.0, isElem ? 1.0 : 0.5));\r\n else if (kClassifierDisplay_Element == u_planarClassifierInsideMode)\r\n return encodeNonLocatable(vec4(0.0, 0.0, currentColor.a, 1.0));\r\n`;\r\n\r\n// Thematic classifiers use alpha of 1 to blend; we just want thematic colors to largely win out except when selecting and flashing classifiers.\r\nconst overrideClassifierColorPostludeClipForThematic = `\r\n return encodeNonLocatable(isElem ? vec4(0.0, 0.0, 1.0, 1.0) : currentColor);\r\n`;\r\n\r\nconst overrideClassifierWithFeaturesForThematic = overrideClassifierColorPreludeForThematic + overrideClassifierEmphasisForThematic + overrideClassifierColorPostlude;\r\nconst overrideClassifierForClipForThematic = overrideClassifierColorPreludeForThematic + overrideClassifierColorPostludeClipForThematic;\r\n\r\n/** The classified geometry needs some information about the classifier geometry. The classified fragment shader outputs special values that do not represent valid RGB+A combinations when using\r\n * pre-multiplied alpha. The alpha channel will be 0.5, and the red, green, and/or blue channels will be 1.0:\r\n * - Red: hilited.\r\n * - Green: flashed.\r\n * - Blue: fully-transparent. Indicates clipping mask (discard the classified pixel).\r\n * @internal\r\n */\r\nexport function addOverrideClassifierColor(builder: ProgramBuilder, isThematic: IsThematic): void {\r\n addPlanarClassifierConstants(builder.frag);\r\n builder.frag.addUniform(\"u_planarClassifierInsideMode\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_planarClassifierInsideMode\", (uniform, params) => {\r\n const classifier = params.target.currentlyDrawingClassifier;\r\n const override = undefined !== classifier ? classifier.insideDisplay : 0;\r\n uniform.setUniform1f(override);\r\n });\r\n });\r\n\r\n const haveOverrides = undefined !== builder.frag.find(\"v_feature_emphasis\");\r\n builder.frag.addFunction(haveOverrides ? encodeNonLocatableWithFeatures : encodeNonLocatable);\r\n if (isThematic === IsThematic.No)\r\n builder.frag.set(FragmentShaderComponent.OverrideColor, haveOverrides ? overrideClassifierWithFeatures : overrideClassifierForClip);\r\n else\r\n builder.frag.set(FragmentShaderComponent.OverrideColor, haveOverrides ? overrideClassifierWithFeaturesForThematic : overrideClassifierForClipForThematic);\r\n}\r\n"]}
1
+ {"version":3,"file":"PlanarClassification.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/PlanarClassification.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\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { Matrix4d } from \"@itwin/core-geometry\";\r\nimport { SpatialClassifierInsideDisplay } from \"@itwin/core-common\";\r\nimport { Matrix4 } from \"../Matrix\";\r\nimport { PlanarClassifierContent } from \"../PlanarClassifier\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, ShaderBuilder, VariableType } from \"../ShaderBuilder\";\r\nimport { IsThematic } from \"../TechniqueFlags\";\r\nimport { Texture2DHandle } from \"../Texture\";\r\nimport { addShaderFlags, addUInt32s } from \"./Common\";\r\nimport { addClassifierFlash } from \"./FeatureSymbology\";\r\nimport { addWindowToTexCoords } from \"./Fragment\";\r\nimport { addInstancedRtcMatrix } from \"./Vertex\";\r\n\r\nexport const volClassOpaqueColor = `\r\nvec4 volClassColor(vec4 baseColor, float depth) {\r\n if (depth <= TEXTURE(s_pClassSampler, windowCoordsToTexCoords(gl_FragCoord.xy)).r)\r\n discard;\r\n return vec4(baseColor.rgb, 1.0);\r\n}\r\n`;\r\n\r\nconst volClassTranslucentColor = `\r\nvec4 volClassColor(vec4 baseColor, float depth) {\r\n return vec4(baseColor.rgb, depth); // This will never be called, so we use depth here to avoid a compile error\r\n}\r\n`;\r\n\r\nconst applyPlanarClassificationPrelude = `\r\nconst float dimScale = .7;\r\n\r\nvec2 classPos = v_pClassPos.xy / v_pClassPosW;\r\nbool isOutside = classPos.x < 0.0 || classPos.x > 1.0 || classPos.y < 0.0 || classPos.y > 1.0;\r\nif (u_pClassColorParams.x > kClassifierDisplay_Element) { // texture/terrain drape.\r\n if (u_pClassColorParams.x > kTextureDrape) {\r\n return volClassColor(baseColor, depth);\r\n }\r\n if (isOutside)\r\n discard;\r\n\r\n vec3 rgb = TEXTURE(s_pClassSampler, classPos.xy).rgb;\r\n return vec4(rgb, baseColor.a);\r\n}\r\nfloat imageCount = u_pClassColorParams.z;\r\n// If imageCount is less than zero - the mask sense is inverted - inside rather than outside. (masks only)\r\nbool doInvert = false;\r\nif (imageCount < 0.0) {\r\n imageCount = - imageCount;\r\n doInvert = true;\r\n}\r\n\r\nvec4 colorTexel = vec4(0);\r\nvec4 maskTexel = vec4(0);\r\nbool doMask = imageCount != kTextureContentClassifierOnly;\r\nbool doClassify = imageCount != kTextureContentMaskOnly;\r\n\r\nif (!isOutside) {\r\n if (imageCount == kTextureContentClassifierOnly) {\r\n colorTexel = TEXTURE(s_pClassSampler, vec2(classPos.x, classPos.y / imageCount));\r\n } else if (imageCount == kTextureContentMaskOnly) {\r\n maskTexel = TEXTURE(s_pClassSampler, vec2(classPos.x, classPos.y));\r\n } else if (imageCount == kTextureContentClassifierAndMask) {\r\n colorTexel = TEXTURE(s_pClassSampler, vec2(classPos.x, classPos.y / imageCount));\r\n maskTexel = TEXTURE(s_pClassSampler, vec2(classPos.x, (2.0 + classPos.y) / imageCount));\r\n }\r\n if (colorTexel.b >= 0.5) {\r\n if (u_shaderFlags[kShaderBit_IgnoreNonLocatable]) {\r\n discard;\r\n return vec4(0.0);\r\n }\r\n colorTexel.b = (colorTexel.b * 255.0 - 128.0) / 127.0;\r\n } else {\r\n colorTexel.b *= 255.0 / 127.0;\r\n }\r\n}\r\nif (doMask) {\r\n bool masked = !isOutside && (maskTexel.r + maskTexel.g + maskTexel.b + maskTexel.a) > 0.0;\r\n if (doInvert)\r\n masked = !masked;\r\n if (masked) {\r\n float maskTransparency = u_pClassColorParams.w < 0.0 ? (1.0 - maskTexel.a) : u_pClassColorParams.w;\r\n if (maskTransparency <= 0.0) {\r\n discard;\r\n return vec4(0);\r\n }\r\n\r\n baseColor.a = baseColor.a * maskTransparency;\r\n }\r\n\r\n if (!doClassify)\r\n return baseColor;\r\n }\r\n\r\n bool isClassified = !isOutside && (colorTexel.r + colorTexel.g + colorTexel.b + colorTexel.a > 0.0);\r\n float param = isClassified ? u_pClassColorParams.x : u_pClassColorParams.y;\r\n if (kClassifierDisplay_Off == param) {\r\n discard;\r\n return vec4(0);\r\n}\r\n`\r\n ;\r\n\r\n// Currently we discard if classifier is pure black (acts as clipping mask).\r\n// These could be more efficiently handled with masks.\r\nconst applyPlanarClassificationColor = applyPlanarClassificationPrelude + // eslint-disable-line prefer-template\r\n `\r\n float colorMix = u_pClassPointCloud ? .65 : .35;\r\n vec4 classColor;\r\n if (kClassifierDisplay_On == param)\r\n classColor = baseColor;\r\n else if (!isClassified || kClassifierDisplay_Dimmed == param)\r\n classColor = vec4(baseColor.rgb * dimScale, baseColor.a);\r\n else if (kClassifierDisplay_Hilite == param)\r\n classColor = vec4(mix(baseColor.rgb, u_hilite_settings[0], u_hilite_settings[2][0]), baseColor.a);\r\n else {\r\n if (colorTexel.b > colorTexel.a) {\r\n discard;\r\n return vec4(0.0);\r\n }\r\n\r\n // NB: colorTexel contains pre-multiplied alpha. We know it is greater than zero from above.\r\n float alpha = colorTexel.a * baseColor.a;\r\n vec3 rgb = colorTexel.rgb / colorTexel.a;\r\n rgb = mix(baseColor.rgb, rgb, colorMix);\r\n classColor = vec4(rgb, alpha);\r\n }\r\n\r\n if (kClassifierDisplay_Element != param && isClassified) {\r\n if (colorTexel.r > colorTexel.a && kClassifierDisplay_Hilite != param)\r\n classColor = vec4(mix(baseColor.rgb, u_hilite_settings[0], u_hilite_settings[2][0]), 1.0);\r\n\r\n if (colorTexel.g > colorTexel.a)\r\n classColor = applyClassifierFlash(classColor);\r\n }\r\n\r\n return classColor;\r\n`;\r\n\r\nconst applyPlanarClassificationColorForThematic = applyPlanarClassificationPrelude + // eslint-disable-line prefer-template\r\n `\r\n vec4 classColor = baseColor;\r\n\r\n if (kClassifierDisplay_Element == param) {\r\n if (colorTexel.b > colorTexel.a) {\r\n discard;\r\n return vec4(0.0);\r\n }\r\n\r\n // We stashed the element alpha in blue channel. Make sure to handle pre-multiplied alpha.\r\n baseColor.rgb = baseColor.rgb / baseColor.a;\r\n classColor = vec4(baseColor.rgb, colorTexel.b);\r\n classColor.rgb *= classColor.a;\r\n colorTexel.a = 0.5; // make conditions below potentially pass\r\n }\r\n\r\n if (isClassified) {\r\n if (colorTexel.r > colorTexel.a && kClassifierDisplay_Hilite != param)\r\n classColor = vec4(mix(baseColor.rgb, u_hilite_settings[0], u_hilite_settings[2][0]), 1.0);\r\n\r\n if (colorTexel.g > colorTexel.a)\r\n classColor = applyClassifierFlash(classColor);\r\n }\r\n\r\n return classColor;\r\n`;\r\n\r\nconst overrideFeatureId = `\r\n if (u_pClassColorParams.x != kClassifierDisplay_Element) return currentId;\r\n vec2 classPos = v_pClassPos / v_pClassPosW;\r\n vec4 featureTexel = TEXTURE(s_pClassSampler, vec2(classPos.x, (1.0 + classPos.y) / u_pClassColorParams.z));\r\n return (featureTexel == vec4(0)) ? currentId : addUInt32s(u_batchBase, featureTexel * 255.0) / 255.0;\r\n `;\r\n\r\nconst computeClassifiedHiliteColor = `\r\n vec2 classPos = v_pClassPos / v_pClassPosW;\r\n return TEXTURE(s_pClassHiliteSampler, classPos);\r\n`;\r\nconst computeClassifiedSurfaceHiliteColor = `\r\n if (isSurfaceBitSet(kSurfaceBit_HasTexture) && TEXTURE(s_texture, v_texCoord).a <= 0.15)\r\n return vec4(0.0);\r\n${computeClassifiedHiliteColor}`;\r\n\r\nconst computeClassifierPos = \"vec4 classProj = u_pClassProj * rawPosition; v_pClassPos = classProj.xy;\";\r\nconst computeInstancedClassifierPos = \"vec4 classProj = u_pClassProj * g_instancedRtcMatrix * rawPosition; v_pClassPos = classProj.xy;\";\r\nconst computeClassifierPosW = \"v_pClassPosW = classProj.w;\";\r\n\r\nconst scratchBytes = new Uint8Array(4);\r\nconst scratchBatchBaseId = new Uint32Array(scratchBytes.buffer);\r\nconst scratchBatchBaseComponents = [0, 0, 0, 0];\r\nconst scratchColorParams = new Float32Array(4); // Unclassified scale, classified base scale, classified classifier scale, content/image count... MaskOnly = 1, ClassifierOnly = 2, ClassifierAndMask = 3\r\nconst scratchModel = Matrix4d.createIdentity();\r\nconst scratchModelProjection = Matrix4d.createIdentity();\r\nconst scratchMatrix = new Matrix4();\r\n\r\nfunction addPlanarClassifierCommon(builder: ProgramBuilder) {\r\n const vert = builder.vert;\r\n vert.addUniform(\"u_pClassProj\", VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(\"u_pClassProj\", (uniform, params) => {\r\n const source = params.target.currentPlanarClassifierOrDrape!;\r\n assert(undefined !== source || undefined !== params.target.activeVolumeClassifierTexture);\r\n if (undefined !== params.target.currentPlanarClassifierOrDrape) {\r\n source.projectionMatrix.multiplyMatrixMatrix(Matrix4d.createTransform(params.target.currentTransform, scratchModel), scratchModelProjection);\r\n scratchMatrix.initFromMatrix4d(scratchModelProjection);\r\n } else\r\n scratchMatrix.initIdentity(); // needs to be identity for volume classifiers\r\n uniform.setMatrix4(scratchMatrix);\r\n });\r\n });\r\n\r\n if (vert.usesInstancedGeometry)\r\n addInstancedRtcMatrix(vert);\r\n\r\n builder.addInlineComputedVarying(\"v_pClassPos\", VariableType.Vec2, vert.usesInstancedGeometry ? computeInstancedClassifierPos : computeClassifierPos);\r\n builder.addInlineComputedVarying(\"v_pClassPosW\", VariableType.Float, computeClassifierPosW);\r\n\r\n addPlanarClassifierConstants(builder.frag);\r\n}\r\n\r\nfunction addPlanarClassifierConstants(builder: ShaderBuilder) {\r\n builder.addDefine(\"kClassifierDisplay_Off\", SpatialClassifierInsideDisplay.Off.toFixed(1));\r\n builder.addDefine(\"kClassifierDisplay_On\", SpatialClassifierInsideDisplay.On.toFixed(1));\r\n builder.addDefine(\"kClassifierDisplay_Dimmed\", SpatialClassifierInsideDisplay.Dimmed.toFixed(1));\r\n builder.addDefine(\"kClassifierDisplay_Hilite\", SpatialClassifierInsideDisplay.Hilite.toFixed(1));\r\n builder.addDefine(\"kClassifierDisplay_Element\", SpatialClassifierInsideDisplay.ElementColor.toFixed(1));\r\n const td = SpatialClassifierInsideDisplay.ElementColor + 1;\r\n builder.addDefine(\"kTextureDrape\", td.toFixed(1));\r\n builder.addDefine(\"kTextureContentClassifierOnly\", PlanarClassifierContent.ClassifierOnly.toFixed(1));\r\n builder.addDefine(\"kTextureContentMaskOnly\", PlanarClassifierContent.MaskOnly.toFixed(1));\r\n builder.addDefine(\"kTextureContentClassifierAndMask\", PlanarClassifierContent.ClassifierAndMask.toFixed(1));\r\n}\r\n\r\n/** @internal */\r\nexport function addColorPlanarClassifier(builder: ProgramBuilder, translucent: boolean, isThematic: IsThematic) {\r\n addPlanarClassifierCommon(builder);\r\n const frag = builder.frag;\r\n frag.addUniform(\"s_pClassSampler\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_pClassSampler\", (uniform, params) => {\r\n const source = params.target.currentPlanarClassifierOrDrape;\r\n const volClass = params.target.activeVolumeClassifierTexture;\r\n assert(undefined !== source || undefined !== volClass);\r\n if (source) {\r\n assert(undefined !== source.texture);\r\n source.texture.texture.bindSampler(uniform, TextureUnit.PlanarClassification);\r\n } else\r\n Texture2DHandle.bindSampler(uniform, volClass!, TextureUnit.PlanarClassification);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_pClassColorParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_pClassColorParams\", (uniform, params) => {\r\n const source = params.target.currentPlanarClassifierOrDrape;\r\n const volClass = params.target.activeVolumeClassifierTexture;\r\n assert(undefined !== source || undefined !== volClass);\r\n if (undefined !== source) {\r\n source.getParams(scratchColorParams);\r\n } else {\r\n scratchColorParams[0] = 6.0; // Volume classifier, by element color.\r\n scratchColorParams[1] = 0.5; // used for alpha value\r\n scratchColorParams[2] = 0.0; // Not used for volume.\r\n scratchColorParams[3] = 0.0; // Not used for volume.\r\n }\r\n uniform.setUniform4fv(scratchColorParams);\r\n });\r\n });\r\n\r\n if (isThematic === IsThematic.No) {\r\n frag.addUniform(\"u_pClassPointCloud\", VariableType.Boolean, (prog) => {\r\n prog.addGraphicUniform(\"u_pClassPointCloud\", (uniform, params) => {\r\n const classifier = params.target.currentPlanarClassifier;\r\n const isPointCloud = undefined !== classifier && classifier.isClassifyingPointCloud;\r\n uniform.setUniform1i(isPointCloud ? 1 : 0);\r\n });\r\n });\r\n }\r\n\r\n addClassifierFlash(frag);\r\n\r\n if (translucent)\r\n // We will never call the shaders for volume classifiers with translucency,\r\n // so use a different version of the function which does not use glFragCoord to reduce the varyings count\r\n frag.addFunction(volClassTranslucentColor);\r\n else {\r\n addWindowToTexCoords(frag);\r\n frag.addFunction(volClassOpaqueColor);\r\n }\r\n\r\n addShaderFlags(builder);\r\n\r\n frag.set(FragmentShaderComponent.ApplyPlanarClassifier, (isThematic === IsThematic.No) ? applyPlanarClassificationColor : applyPlanarClassificationColorForThematic);\r\n}\r\n\r\n/** @internal */\r\nexport function addFeaturePlanarClassifier(builder: ProgramBuilder) {\r\n const frag = builder.frag;\r\n frag.addUniform(\"u_batchBase\", VariableType.Vec4, (prog) => { // TBD. Instancing.\r\n prog.addGraphicUniform(\"u_batchBase\", (uniform, params) => {\r\n const classifier = params.target.currentPlanarClassifier;\r\n if (classifier !== undefined) {\r\n scratchBatchBaseId[0] = classifier.baseBatchId;\r\n scratchBatchBaseComponents[0] = scratchBytes[0];\r\n scratchBatchBaseComponents[1] = scratchBytes[1];\r\n scratchBatchBaseComponents[2] = scratchBytes[2];\r\n scratchBatchBaseComponents[3] = scratchBytes[3];\r\n }\r\n uniform.setUniform4fv(scratchBatchBaseComponents);\r\n });\r\n });\r\n frag.set(FragmentShaderComponent.OverrideFeatureId, overrideFeatureId);\r\n frag.addFunction(addUInt32s);\r\n}\r\n\r\n/** @internal */\r\nexport function addHilitePlanarClassifier(builder: ProgramBuilder, supportTextures = true) {\r\n addPlanarClassifierCommon(builder);\r\n const frag = builder.frag;\r\n frag.addUniform(\"s_pClassHiliteSampler\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_pClassHiliteSampler\", (uniform, params) => {\r\n const classifier = params.target.currentPlanarClassifier!;\r\n assert(undefined !== classifier && undefined !== classifier.hiliteTexture);\r\n classifier.hiliteTexture.texture.bindSampler(uniform, TextureUnit.PlanarClassificationHilite);\r\n });\r\n });\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, supportTextures ? computeClassifiedSurfaceHiliteColor : computeClassifiedHiliteColor);\r\n}\r\n\r\n// NonLocatable flag is put in upper bit of blue component when drawing the classification texture.\r\nconst encodeNonLocatableWithFeatures = `\r\nvec4 encodeNonLocatable(vec4 clr) {\r\n float encoded_b = (floor(clr.b * 127.0) + float(extractNthBit(floor(v_feature_emphasis + 0.5), kEmphBit_NonLocatable)) * 128.0) / 255.0;\r\n return vec4(clr.r, clr.g, encoded_b, clr.a);\r\n}\r\n`;\r\n\r\nconst encodeNonLocatable = `\r\nvec4 encodeNonLocatable(vec4 clr) {\r\n float encoded_b = floor(clr.b * 127.0) / 255.0;\r\n return vec4(clr.r, clr.g, encoded_b, clr.a);\r\n}\r\n`;\r\n\r\nconst overrideClassifierColorPrelude = `\r\n if (0.0 == u_planarClassifierInsideMode)\r\n return currentColor;\r\n\r\n if (0.0 == currentColor.a)\r\n return encodeNonLocatable(vec4(0.0, 0.0, 1.0, 0.5));\r\n`;\r\n\r\nconst overrideClassifierEmphasis = `\r\n if (kClassifierDisplay_Element != u_planarClassifierInsideMode) {\r\n float emph = floor(v_feature_emphasis + 0.5);\r\n if (0.0 != emph)\r\n return encodeNonLocatable(vec4(extractNthBit(emph, kEmphBit_Hilite), extractNthBit(emph, kEmphBit_Flash), 0.0, 0.5));\r\n }\r\n`;\r\n\r\nconst overrideClassifierColorPostlude = `\r\n return encodeNonLocatable(currentColor);\r\n`;\r\n\r\nconst overrideClassifierWithFeatures = overrideClassifierColorPrelude + overrideClassifierEmphasis + overrideClassifierColorPostlude;\r\nconst overrideClassifierForClip = overrideClassifierColorPrelude + overrideClassifierColorPostlude;\r\n\r\nconst overrideClassifierColorPreludeForThematic = `\r\n if (0.0 == u_planarClassifierInsideMode)\r\n return currentColor;\r\n\r\n if (0.0 == currentColor.a)\r\n return encodeNonLocatable(vec4(0.0, 0.0, 1.0, 0.5));\r\n\r\n bool isElem = kClassifierDisplay_Element == u_planarClassifierInsideMode;\r\n`;\r\n\r\nconst overrideClassifierEmphasisForThematic = `\r\n float emph = floor(v_feature_emphasis + 0.5);\r\n if (0.0 != emph)\r\n return encodeNonLocatable(vec4(extractNthBit(emph, kEmphBit_Hilite), extractNthBit(emph, kEmphBit_Flash), isElem ? currentColor.a : 0.0, isElem ? 1.0 : 0.5));\r\n else if (kClassifierDisplay_Element == u_planarClassifierInsideMode)\r\n return encodeNonLocatable(vec4(0.0, 0.0, currentColor.a, 1.0));\r\n`;\r\n\r\n// Thematic classifiers use alpha of 1 to blend; we just want thematic colors to largely win out except when selecting and flashing classifiers.\r\nconst overrideClassifierColorPostludeClipForThematic = `\r\n return encodeNonLocatable(isElem ? vec4(0.0, 0.0, 1.0, 1.0) : currentColor);\r\n`;\r\n\r\nconst overrideClassifierWithFeaturesForThematic = overrideClassifierColorPreludeForThematic + overrideClassifierEmphasisForThematic + overrideClassifierColorPostlude;\r\nconst overrideClassifierForClipForThematic = overrideClassifierColorPreludeForThematic + overrideClassifierColorPostludeClipForThematic;\r\n\r\n/** The classified geometry needs some information about the classifier geometry. The classified fragment shader outputs special values that do not represent valid RGB+A combinations when using\r\n * pre-multiplied alpha. The alpha channel will be 0.5, and the red, green, and/or blue channels will be 1.0:\r\n * - Red: hilited.\r\n * - Green: flashed.\r\n * - Blue: fully-transparent. Indicates clipping mask (discard the classified pixel).\r\n * @internal\r\n */\r\nexport function addOverrideClassifierColor(builder: ProgramBuilder, isThematic: IsThematic): void {\r\n addPlanarClassifierConstants(builder.frag);\r\n builder.frag.addUniform(\"u_planarClassifierInsideMode\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_planarClassifierInsideMode\", (uniform, params) => {\r\n const classifier = params.target.currentlyDrawingClassifier;\r\n const override = undefined !== classifier ? classifier.insideDisplay : 0;\r\n uniform.setUniform1f(override);\r\n });\r\n });\r\n\r\n const haveOverrides = undefined !== builder.frag.find(\"v_feature_emphasis\");\r\n builder.frag.addFunction(haveOverrides ? encodeNonLocatableWithFeatures : encodeNonLocatable);\r\n if (isThematic === IsThematic.No)\r\n builder.frag.set(FragmentShaderComponent.OverrideColor, haveOverrides ? overrideClassifierWithFeatures : overrideClassifierForClip);\r\n else\r\n builder.frag.set(FragmentShaderComponent.OverrideColor, haveOverrides ? overrideClassifierWithFeaturesForThematic : overrideClassifierForClipForThematic);\r\n}\r\n"]}
@@ -7,6 +7,7 @@
7
7
  * @module WebGL
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.default = createPlanarGridProgram;
10
11
  const RenderSystem_1 = require("../../RenderSystem");
11
12
  const AttributeMap_1 = require("../AttributeMap");
12
13
  const ShaderBuilder_1 = require("../ShaderBuilder");
@@ -84,5 +85,4 @@ function createPlanarGridProgram(context) {
84
85
  });
85
86
  return builder.buildProgram(context);
86
87
  }
87
- exports.default = createPlanarGridProgram;
88
88
  //# sourceMappingURL=PlanarGrid.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlanarGrid.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/PlanarGrid.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 { PlanarGridTransparency } from \"../../RenderSystem\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { System } from \"../System\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { addShaderFlags } from \"./Common\";\r\nimport { unquantize2d } from \"./Decode\";\r\nimport { addLogDepth } from \"./LogarithmicDepthBuffer\";\r\nimport { addTranslucency } from \"./Translucency\";\r\nimport { addModelViewProjectionMatrix } from \"./Vertex\";\r\n\r\nconst computePosition = \"gl_PointSize = 1.0; return MAT_MVP * rawPos;\";\r\nconst computeTexCoord = \"return unquantize2d(a_uvParam, u_qTexCoordParams);\";\r\n\r\nconst computeBaseColor = `\r\n // u_gridProps - x = gridsPerRef, y - planeAlpha, z = line alpha, w = ref alpha.\r\n vec4 color = vec4(u_gridColor, u_gridProps.y);\r\n float refsPerGrid = u_gridProps.x;\r\n if (0.0 == refsPerGrid || !drawGridLine(color, 1.0 / refsPerGrid, u_gridProps.w - color.a))\r\n drawGridLine(color, 1.0, u_gridProps.z - color.a);\r\n\r\n return color;\r\n`;\r\n\r\nconst drawGridLine = `\r\n bool drawGridLine(inout vec4 color, float mult, float alphaScale) {\r\n vec2 scaledTexCoord = v_texCoord * mult;\r\n vec2 deriv = mult * screenSpaceDeriv(v_texCoord);\r\n if (deriv.x != 0.0 && deriv.y != 0.0) {\r\n vec2 grid = abs(fract(mult * v_texCoord - 0.5) - 0.5) / deriv;\r\n float line = min(grid.x, grid.y);\r\n if (line < 1.0) {\r\n color.a += alphaScale * (1.0 - min(line, 1.0)) / max(1.0, length(deriv));\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n`;\r\n\r\nconst fwidth2d = `\\nvec2 screenSpaceDeriv(vec2 screenXY) { return fwidth(screenXY); }\\n`;\r\n\r\nconst defaultTransparency = new PlanarGridTransparency();\r\n/** @internal */\r\nexport default function createPlanarGridProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.PlanarGrid, false));\r\n const vert = builder.vert;\r\n const frag = builder.frag;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n addShaderFlags(builder);\r\n\r\n addTranslucency(builder);\r\n frag.addFunction(fwidth2d);\r\n\r\n if (System.instance.supportsLogZBuffer)\r\n addLogDepth(builder);\r\n\r\n frag.addFunction(drawGridLine);\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColor);\r\n\r\n vert.headerComment = `//!V! PlanarGrid`;\r\n frag.headerComment = `//!F! PlanarGrid`;\r\n\r\n vert.addFunction(unquantize2d);\r\n builder.addFunctionComputedVarying(\"v_texCoord\", VariableType.Vec2, \"computeTexCoord\", computeTexCoord);\r\n vert.addUniform(\"u_qTexCoordParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_qTexCoordParams\", (uniform, params) => {\r\n const planarGrid = params.geometry.asPlanarGrid!;\r\n uniform.setUniform4fv(planarGrid.uvParams.params);\r\n });\r\n });\r\n frag.addUniform(\"u_gridColor\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_gridColor\", (uniform, params) => {\r\n const planarGrid = params.geometry.asPlanarGrid!;\r\n const color = planarGrid.props.color.colors;\r\n uniform.setUniform3fv([color.r / 255, color.g / 255, color.b / 255]);\r\n });\r\n });\r\n frag.addUniform(\"u_gridProps\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_gridProps\", (uniform, params) => {\r\n const planarGridProps = params.geometry.asPlanarGrid!.props;\r\n const transparency = planarGridProps.transparency ? planarGridProps.transparency : defaultTransparency;\r\n uniform.setUniform4fv([planarGridProps.gridsPerRef, 1.0 - transparency.planeTransparency, 1.0 - transparency.lineTransparency, 1.0 - transparency.refTransparency]);\r\n });\r\n });\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n"]}
1
+ {"version":3,"file":"PlanarGrid.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/PlanarGrid.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 { PlanarGridTransparency } from \"../../RenderSystem\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { System } from \"../System\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { addShaderFlags } from \"./Common\";\r\nimport { unquantize2d } from \"./Decode\";\r\nimport { addLogDepth } from \"./LogarithmicDepthBuffer\";\r\nimport { addTranslucency } from \"./Translucency\";\r\nimport { addModelViewProjectionMatrix } from \"./Vertex\";\r\n\r\nconst computePosition = \"gl_PointSize = 1.0; return MAT_MVP * rawPos;\";\r\nconst computeTexCoord = \"return unquantize2d(a_uvParam, u_qTexCoordParams);\";\r\n\r\nconst computeBaseColor = `\r\n // u_gridProps - x = gridsPerRef, y - planeAlpha, z = line alpha, w = ref alpha.\r\n vec4 color = vec4(u_gridColor, u_gridProps.y);\r\n float refsPerGrid = u_gridProps.x;\r\n if (0.0 == refsPerGrid || !drawGridLine(color, 1.0 / refsPerGrid, u_gridProps.w - color.a))\r\n drawGridLine(color, 1.0, u_gridProps.z - color.a);\r\n\r\n return color;\r\n`;\r\n\r\nconst drawGridLine = `\r\n bool drawGridLine(inout vec4 color, float mult, float alphaScale) {\r\n vec2 scaledTexCoord = v_texCoord * mult;\r\n vec2 deriv = mult * screenSpaceDeriv(v_texCoord);\r\n if (deriv.x != 0.0 && deriv.y != 0.0) {\r\n vec2 grid = abs(fract(mult * v_texCoord - 0.5) - 0.5) / deriv;\r\n float line = min(grid.x, grid.y);\r\n if (line < 1.0) {\r\n color.a += alphaScale * (1.0 - min(line, 1.0)) / max(1.0, length(deriv));\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n`;\r\n\r\nconst fwidth2d = `\\nvec2 screenSpaceDeriv(vec2 screenXY) { return fwidth(screenXY); }\\n`;\r\n\r\nconst defaultTransparency = new PlanarGridTransparency();\r\n/** @internal */\r\nexport default function createPlanarGridProgram(context: WebGL2RenderingContext): ShaderProgram {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.PlanarGrid, false));\r\n const vert = builder.vert;\r\n const frag = builder.frag;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n addShaderFlags(builder);\r\n\r\n addTranslucency(builder);\r\n frag.addFunction(fwidth2d);\r\n\r\n if (System.instance.supportsLogZBuffer)\r\n addLogDepth(builder);\r\n\r\n frag.addFunction(drawGridLine);\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColor);\r\n\r\n vert.headerComment = `//!V! PlanarGrid`;\r\n frag.headerComment = `//!F! PlanarGrid`;\r\n\r\n vert.addFunction(unquantize2d);\r\n builder.addFunctionComputedVarying(\"v_texCoord\", VariableType.Vec2, \"computeTexCoord\", computeTexCoord);\r\n vert.addUniform(\"u_qTexCoordParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_qTexCoordParams\", (uniform, params) => {\r\n const planarGrid = params.geometry.asPlanarGrid!;\r\n uniform.setUniform4fv(planarGrid.uvParams.params);\r\n });\r\n });\r\n frag.addUniform(\"u_gridColor\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_gridColor\", (uniform, params) => {\r\n const planarGrid = params.geometry.asPlanarGrid!;\r\n const color = planarGrid.props.color.colors;\r\n uniform.setUniform3fv([color.r / 255, color.g / 255, color.b / 255]);\r\n });\r\n });\r\n frag.addUniform(\"u_gridProps\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_gridProps\", (uniform, params) => {\r\n const planarGridProps = params.geometry.asPlanarGrid!.props;\r\n const transparency = planarGridProps.transparency ? planarGridProps.transparency : defaultTransparency;\r\n uniform.setUniform4fv([planarGridProps.gridsPerRef, 1.0 - transparency.planeTransparency, 1.0 - transparency.lineTransparency, 1.0 - transparency.refTransparency]);\r\n });\r\n });\r\n\r\n return builder.buildProgram(context);\r\n}\r\n\r\n"]}
@@ -7,7 +7,8 @@
7
7
  * @module WebGL
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.createPointCloudHiliter = exports.createPointCloudBuilder = void 0;
10
+ exports.createPointCloudBuilder = createPointCloudBuilder;
11
+ exports.createPointCloudHiliter = createPointCloudHiliter;
11
12
  const core_bentley_1 = require("@itwin/core-bentley");
12
13
  const AttributeMap_1 = require("../AttributeMap");
13
14
  const ShaderBuilder_1 = require("../ShaderBuilder");
@@ -96,7 +97,6 @@ function createPointCloudBuilder(classified, featureMode, thematic) {
96
97
  }
97
98
  return builder;
98
99
  }
99
- exports.createPointCloudBuilder = createPointCloudBuilder;
100
100
  /** @internal */
101
101
  function createPointCloudHiliter(classified) {
102
102
  const builder = createBuilder();
@@ -109,5 +109,4 @@ function createPointCloudHiliter(classified) {
109
109
  }
110
110
  return builder;
111
111
  }
112
- exports.createPointCloudHiliter = createPointCloudHiliter;
113
112
  //# sourceMappingURL=PointCloud.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PointCloud.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/PointCloud.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 { AttributeMap } from \"../AttributeMap\";\r\nimport { FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { FeatureMode, IsAnimated, IsClassified, IsThematic } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { addUniformHiliter } from \"./FeatureSymbology\";\r\nimport { addColorPlanarClassifier, addFeaturePlanarClassifier, addHilitePlanarClassifier } from \"./PlanarClassification\";\r\nimport { addModelViewProjectionMatrix } from \"./Vertex\";\r\nimport { addViewportTransformation } from \"./Viewport\";\r\nimport { addThematicDisplay } from \"./Thematic\";\r\nimport { addTexture } from \"./Surface\";\r\nimport { assignFragColor } from \"./Fragment\";\r\n\r\n// Revert components if color format is BGR instead of RGB.\r\nconst computeColor = `\r\n return u_pointCloud.y == 1.0 ? vec4(a_color.b, a_color.g, a_color.r, 1.0) : vec4(a_color, 1.0);\r\n`;\r\n\r\nconst computeBaseColor = \"return v_color;\";\r\n\r\n// Round the point unless drawing square points.\r\nconst roundPointDiscard = `\r\n if (u_pointCloudSettings.w == 1.0)\r\n return false;\r\n\r\n vec2 pointXY = (2.0 * gl_PointCoord - 1.0);\r\n return dot(pointXY, pointXY) > 1.0;\r\n`;\r\n\r\nconst checkForClassifiedDiscard = \"return baseColor.a == 0.0;\";\r\n\r\nconst computePosition = `\r\n gl_PointSize = 1.0;\r\n vec4 pos = MAT_MVP * rawPos;\r\n if (u_pointCloudSettings.x > 0.0) {\r\n // Size is specified in pixels.\r\n gl_PointSize = u_pointCloudSettings.x;\r\n return pos;\r\n }\r\n\r\n // Point size is in meters (voxel size).\r\n if (pos.w <= 0.0) {\r\n // Cannot perform perspective divide below.\r\n return pos;\r\n }\r\n\r\n // Convert voxel size in meters into pixel size, then compute pixel size, taking perspective into account.\r\n mat4 toView = u_viewportTransformation * MAT_MVP;\r\n float scale = length(toView[0].xyz);\r\n gl_PointSize = -u_pointCloudSettings.x * clamp(u_pointCloud.x * scale / pos.w, u_pointCloudSettings.y, u_pointCloudSettings.z);\r\n return pos;\r\n`;\r\n\r\nfunction createBuilder(): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.PointCloud, false));\r\n const vert = builder.vert;\r\n addViewportTransformation(vert);\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n\r\n builder.frag.set(FragmentShaderComponent.CheckForEarlyDiscard, roundPointDiscard);\r\n\r\n // Uniforms based on the PointCloudDisplaySettings.\r\n builder.addUniform(\"u_pointCloudSettings\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_pointCloudSettings\", (uniform, params) => {\r\n params.target.uniforms.realityModel.pointCloud.bind(uniform);\r\n });\r\n });\r\n\r\n // Uniforms based on the PointCloudGeometry.\r\n builder.vert.addUniform(\"u_pointCloud\", VariableType.Vec2, (prog) => {\r\n prog.addGraphicUniform(\"u_pointCloud\", (uniform, params) => {\r\n assert(params.geometry.asPointCloud !== undefined);\r\n scratchPointCloud[0] = params.geometry.asPointCloud.voxelSize;\r\n scratchPointCloud[1] = params.geometry.asPointCloud.colorIsBgr ? 1 : 0;\r\n uniform.setUniform2fv(scratchPointCloud);\r\n });\r\n });\r\n\r\n return builder;\r\n}\r\n\r\nconst scratchPointCloud = new Float32Array([0, 0]);\r\n\r\n/** @internal */\r\nexport function createPointCloudBuilder(classified: IsClassified, featureMode: FeatureMode, thematic: IsThematic): ProgramBuilder {\r\n const builder = createBuilder();\r\n\r\n builder.addVarying(\"v_color\", VariableType.Vec4);\r\n builder.vert.set(VertexShaderComponent.ComputeBaseColor, computeColor);\r\n\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColor);\r\n if (classified) {\r\n addColorPlanarClassifier(builder, false, thematic);\r\n builder.frag.set(FragmentShaderComponent.CheckForDiscard, checkForClassifiedDiscard);\r\n\r\n if (FeatureMode.None !== featureMode)\r\n addFeaturePlanarClassifier(builder);\r\n }\r\n\r\n if (IsThematic.Yes === thematic) {\r\n addThematicDisplay(builder, true);\r\n addTexture(builder, IsAnimated.No, IsThematic.Yes, true, false);\r\n }\r\n\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createPointCloudHiliter(classified: IsClassified): ProgramBuilder {\r\n const builder = createBuilder();\r\n if (classified) {\r\n addHilitePlanarClassifier(builder, false);\r\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n } else {\r\n addUniformHiliter(builder);\r\n }\r\n\r\n return builder;\r\n}\r\n"]}
1
+ {"version":3,"file":"PointCloud.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/PointCloud.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 { AttributeMap } from \"../AttributeMap\";\r\nimport { FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { FeatureMode, IsAnimated, IsClassified, IsThematic } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { addUniformHiliter } from \"./FeatureSymbology\";\r\nimport { addColorPlanarClassifier, addFeaturePlanarClassifier, addHilitePlanarClassifier } from \"./PlanarClassification\";\r\nimport { addModelViewProjectionMatrix } from \"./Vertex\";\r\nimport { addViewportTransformation } from \"./Viewport\";\r\nimport { addThematicDisplay } from \"./Thematic\";\r\nimport { addTexture } from \"./Surface\";\r\nimport { assignFragColor } from \"./Fragment\";\r\n\r\n// Revert components if color format is BGR instead of RGB.\r\nconst computeColor = `\r\n return u_pointCloud.y == 1.0 ? vec4(a_color.b, a_color.g, a_color.r, 1.0) : vec4(a_color, 1.0);\r\n`;\r\n\r\nconst computeBaseColor = \"return v_color;\";\r\n\r\n// Round the point unless drawing square points.\r\nconst roundPointDiscard = `\r\n if (u_pointCloudSettings.w == 1.0)\r\n return false;\r\n\r\n vec2 pointXY = (2.0 * gl_PointCoord - 1.0);\r\n return dot(pointXY, pointXY) > 1.0;\r\n`;\r\n\r\nconst checkForClassifiedDiscard = \"return baseColor.a == 0.0;\";\r\n\r\nconst computePosition = `\r\n gl_PointSize = 1.0;\r\n vec4 pos = MAT_MVP * rawPos;\r\n if (u_pointCloudSettings.x > 0.0) {\r\n // Size is specified in pixels.\r\n gl_PointSize = u_pointCloudSettings.x;\r\n return pos;\r\n }\r\n\r\n // Point size is in meters (voxel size).\r\n if (pos.w <= 0.0) {\r\n // Cannot perform perspective divide below.\r\n return pos;\r\n }\r\n\r\n // Convert voxel size in meters into pixel size, then compute pixel size, taking perspective into account.\r\n mat4 toView = u_viewportTransformation * MAT_MVP;\r\n float scale = length(toView[0].xyz);\r\n gl_PointSize = -u_pointCloudSettings.x * clamp(u_pointCloud.x * scale / pos.w, u_pointCloudSettings.y, u_pointCloudSettings.z);\r\n return pos;\r\n`;\r\n\r\nfunction createBuilder(): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.PointCloud, false));\r\n const vert = builder.vert;\r\n addViewportTransformation(vert);\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n\r\n builder.frag.set(FragmentShaderComponent.CheckForEarlyDiscard, roundPointDiscard);\r\n\r\n // Uniforms based on the PointCloudDisplaySettings.\r\n builder.addUniform(\"u_pointCloudSettings\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_pointCloudSettings\", (uniform, params) => {\r\n params.target.uniforms.realityModel.pointCloud.bind(uniform);\r\n });\r\n });\r\n\r\n // Uniforms based on the PointCloudGeometry.\r\n builder.vert.addUniform(\"u_pointCloud\", VariableType.Vec2, (prog) => {\r\n prog.addGraphicUniform(\"u_pointCloud\", (uniform, params) => {\r\n assert(params.geometry.asPointCloud !== undefined);\r\n scratchPointCloud[0] = params.geometry.asPointCloud.voxelSize;\r\n scratchPointCloud[1] = params.geometry.asPointCloud.colorIsBgr ? 1 : 0;\r\n uniform.setUniform2fv(scratchPointCloud);\r\n });\r\n });\r\n\r\n return builder;\r\n}\r\n\r\nconst scratchPointCloud = new Float32Array([0, 0]);\r\n\r\n/** @internal */\r\nexport function createPointCloudBuilder(classified: IsClassified, featureMode: FeatureMode, thematic: IsThematic): ProgramBuilder {\r\n const builder = createBuilder();\r\n\r\n builder.addVarying(\"v_color\", VariableType.Vec4);\r\n builder.vert.set(VertexShaderComponent.ComputeBaseColor, computeColor);\r\n\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeBaseColor);\r\n if (classified) {\r\n addColorPlanarClassifier(builder, false, thematic);\r\n builder.frag.set(FragmentShaderComponent.CheckForDiscard, checkForClassifiedDiscard);\r\n\r\n if (FeatureMode.None !== featureMode)\r\n addFeaturePlanarClassifier(builder);\r\n }\r\n\r\n if (IsThematic.Yes === thematic) {\r\n addThematicDisplay(builder, true);\r\n addTexture(builder, IsAnimated.No, IsThematic.Yes, true, false);\r\n }\r\n\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createPointCloudHiliter(classified: IsClassified): ProgramBuilder {\r\n const builder = createBuilder();\r\n if (classified) {\r\n addHilitePlanarClassifier(builder, false);\r\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n } else {\r\n addUniformHiliter(builder);\r\n }\r\n\r\n return builder;\r\n}\r\n"]}
@@ -7,7 +7,8 @@
7
7
  * @module WebGL
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.createPointStringBuilder = exports.createPointStringHiliter = void 0;
10
+ exports.createPointStringHiliter = createPointStringHiliter;
11
+ exports.createPointStringBuilder = createPointStringBuilder;
11
12
  const AttributeMap_1 = require("../AttributeMap");
12
13
  const ShaderBuilder_1 = require("../ShaderBuilder");
13
14
  const Color_1 = require("./Color");
@@ -48,7 +49,6 @@ function createPointStringHiliter(instanced, posType) {
48
49
  (0, FeatureSymbology_1.addHiliter)(builder, true);
49
50
  return builder;
50
51
  }
51
- exports.createPointStringHiliter = createPointStringHiliter;
52
52
  /** @internal */
53
53
  function createPointStringBuilder(instanced, posType) {
54
54
  const builder = createBase(instanced, posType);
@@ -57,5 +57,4 @@ function createPointStringBuilder(instanced, posType) {
57
57
  (0, Fragment_1.addWhiteOnWhiteReversal)(builder.frag);
58
58
  return builder;
59
59
  }
60
- exports.createPointStringBuilder = createPointStringBuilder;
61
60
  //# sourceMappingURL=PointString.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PointString.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/PointString.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,kDAA+C;AAC/C,oDAAgH;AAGhH,mCAAmC;AACnC,qCAA0C;AAC1C,yDAAgD;AAChD,yCAAqD;AACrD,qCAAuE;AAEvE,MAAM,eAAe,GAAG;;;;;CAKvB,CAAC;AAEF,uFAAuF;AACvF,4GAA4G;AAC5G,2EAA2E;AAC3E,6BAA6B;AAC7B,MAAM,YAAY,GAAG;;;;CAIpB,CAAC;AAEF,MAAM,mBAAmB,GAAG,oDAAoD,CAAC;AAEjF,SAAS,UAAU,CAAC,SAAsB,EAAE,YAA0B;IACpE,MAAM,OAAO,GAAG,2BAAY,CAAC,gBAAgB,kCAA0B,4BAAoB,SAAS,CAAC,CAAC;IAEtG,MAAM,OAAO,GAAG,IAAI,8BAAc,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,4BAAoB,SAAS,EAAE,CAAC,CAAC;IACxG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,IAAI,CAAC,GAAG,iDAAwC,eAAe,CAAC,CAAC;IACjE,IAAA,qCAA4B,EAAC,IAAI,CAAC,CAAC;IAEnC,IAAA,sBAAa,EAAC,IAAI,CAAC,CAAC;IACpB,OAAO,CAAC,wBAAwB,CAAC,gBAAgB,8BAAsB,mBAAmB,CAAC,CAAC;IAC5F,OAAO,CAAC,IAAI,CAAC,GAAG,uDAA+C,YAAY,CAAC,CAAC;IAE7E,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gBAAgB;AAChB,SAAgB,wBAAwB,CAAC,SAAsB,EAAE,OAAqB;IACpF,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC/C,IAAA,6BAAU,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC1B,OAAO,OAAO,CAAC;AACjB,CAAC;AAJD,4DAIC;AAED,gBAAgB;AAChB,SAAgB,wBAAwB,CAAC,SAAsB,EAAE,OAAqB;IACpF,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC/C,IAAA,uBAAc,EAAC,OAAO,CAAC,CAAC;IACxB,IAAA,gBAAQ,EAAC,OAAO,CAAC,CAAC;IAClB,IAAA,kCAAuB,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,OAAO,OAAO,CAAC;AACjB,CAAC;AAND,4DAMC","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 { FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { IsInstanced, PositionType } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { addColor } from \"./Color\";\r\nimport { addShaderFlags } from \"./Common\";\r\nimport { addHiliter } from \"./FeatureSymbology\";\r\nimport { addWhiteOnWhiteReversal } from \"./Fragment\";\r\nimport { addLineWeight, addModelViewProjectionMatrix } from \"./Vertex\";\r\n\r\nconst computePosition = `\r\n float lineWeight = computeLineWeight();\r\n lineWeight += 0.5 * float(lineWeight > 4.0); // fudge factor for rounding fat points...\r\n gl_PointSize = lineWeight;\r\n return MAT_MVP * rawPos;\r\n`;\r\n\r\n// gl_PointSize specifies coordinates of this fragment within the point in range [0,1].\r\n// This should be the most precise of the many approaches we've tried, but it still yields some asymmetry...\r\n// Discarding if it meets radius precisely seems to reduce that slightly...\r\n// ###TODO try point sprites?\r\nconst roundCorners = `\r\n const vec2 center = vec2(0.5, 0.5);\r\n vec2 vt = gl_PointCoord - center;\r\n return dot(vt, vt) * v_roundCorners >= 0.25; // meets or exceeds radius of circle\r\n`;\r\n\r\nconst computeRoundCorners = \" v_roundCorners = gl_PointSize > 4.0 ? 1.0 : 0.0;\";\r\n\r\nfunction createBase(instanced: IsInstanced, positionType: PositionType): ProgramBuilder {\r\n const attrMap = AttributeMap.findAttributeMap(TechniqueId.PointString, IsInstanced.Yes === instanced);\r\n\r\n const builder = new ProgramBuilder(attrMap, { positionType, instanced: IsInstanced.Yes === instanced });\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n\r\n addLineWeight(vert);\r\n builder.addInlineComputedVarying(\"v_roundCorners\", VariableType.Float, computeRoundCorners);\r\n builder.frag.set(FragmentShaderComponent.CheckForEarlyDiscard, roundCorners);\r\n\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createPointStringHiliter(instanced: IsInstanced, posType: PositionType): ProgramBuilder {\r\n const builder = createBase(instanced, posType);\r\n addHiliter(builder, true);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createPointStringBuilder(instanced: IsInstanced, posType: PositionType): ProgramBuilder {\r\n const builder = createBase(instanced, posType);\r\n addShaderFlags(builder);\r\n addColor(builder);\r\n addWhiteOnWhiteReversal(builder.frag);\r\n return builder;\r\n}\r\n"]}
1
+ {"version":3,"file":"PointString.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/PointString.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;AA+CH,4DAIC;AAGD,4DAMC;AA1DD,kDAA+C;AAC/C,oDAAgH;AAGhH,mCAAmC;AACnC,qCAA0C;AAC1C,yDAAgD;AAChD,yCAAqD;AACrD,qCAAuE;AAEvE,MAAM,eAAe,GAAG;;;;;CAKvB,CAAC;AAEF,uFAAuF;AACvF,4GAA4G;AAC5G,2EAA2E;AAC3E,6BAA6B;AAC7B,MAAM,YAAY,GAAG;;;;CAIpB,CAAC;AAEF,MAAM,mBAAmB,GAAG,oDAAoD,CAAC;AAEjF,SAAS,UAAU,CAAC,SAAsB,EAAE,YAA0B;IACpE,MAAM,OAAO,GAAG,2BAAY,CAAC,gBAAgB,kCAA0B,4BAAoB,SAAS,CAAC,CAAC;IAEtG,MAAM,OAAO,GAAG,IAAI,8BAAc,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,4BAAoB,SAAS,EAAE,CAAC,CAAC;IACxG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,IAAI,CAAC,GAAG,iDAAwC,eAAe,CAAC,CAAC;IACjE,IAAA,qCAA4B,EAAC,IAAI,CAAC,CAAC;IAEnC,IAAA,sBAAa,EAAC,IAAI,CAAC,CAAC;IACpB,OAAO,CAAC,wBAAwB,CAAC,gBAAgB,8BAAsB,mBAAmB,CAAC,CAAC;IAC5F,OAAO,CAAC,IAAI,CAAC,GAAG,uDAA+C,YAAY,CAAC,CAAC;IAE7E,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gBAAgB;AAChB,SAAgB,wBAAwB,CAAC,SAAsB,EAAE,OAAqB;IACpF,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC/C,IAAA,6BAAU,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC1B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gBAAgB;AAChB,SAAgB,wBAAwB,CAAC,SAAsB,EAAE,OAAqB;IACpF,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC/C,IAAA,uBAAc,EAAC,OAAO,CAAC,CAAC;IACxB,IAAA,gBAAQ,EAAC,OAAO,CAAC,CAAC;IAClB,IAAA,kCAAuB,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,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 { AttributeMap } from \"../AttributeMap\";\r\nimport { FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { IsInstanced, PositionType } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { addColor } from \"./Color\";\r\nimport { addShaderFlags } from \"./Common\";\r\nimport { addHiliter } from \"./FeatureSymbology\";\r\nimport { addWhiteOnWhiteReversal } from \"./Fragment\";\r\nimport { addLineWeight, addModelViewProjectionMatrix } from \"./Vertex\";\r\n\r\nconst computePosition = `\r\n float lineWeight = computeLineWeight();\r\n lineWeight += 0.5 * float(lineWeight > 4.0); // fudge factor for rounding fat points...\r\n gl_PointSize = lineWeight;\r\n return MAT_MVP * rawPos;\r\n`;\r\n\r\n// gl_PointSize specifies coordinates of this fragment within the point in range [0,1].\r\n// This should be the most precise of the many approaches we've tried, but it still yields some asymmetry...\r\n// Discarding if it meets radius precisely seems to reduce that slightly...\r\n// ###TODO try point sprites?\r\nconst roundCorners = `\r\n const vec2 center = vec2(0.5, 0.5);\r\n vec2 vt = gl_PointCoord - center;\r\n return dot(vt, vt) * v_roundCorners >= 0.25; // meets or exceeds radius of circle\r\n`;\r\n\r\nconst computeRoundCorners = \" v_roundCorners = gl_PointSize > 4.0 ? 1.0 : 0.0;\";\r\n\r\nfunction createBase(instanced: IsInstanced, positionType: PositionType): ProgramBuilder {\r\n const attrMap = AttributeMap.findAttributeMap(TechniqueId.PointString, IsInstanced.Yes === instanced);\r\n\r\n const builder = new ProgramBuilder(attrMap, { positionType, instanced: IsInstanced.Yes === instanced });\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n\r\n addLineWeight(vert);\r\n builder.addInlineComputedVarying(\"v_roundCorners\", VariableType.Float, computeRoundCorners);\r\n builder.frag.set(FragmentShaderComponent.CheckForEarlyDiscard, roundCorners);\r\n\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createPointStringHiliter(instanced: IsInstanced, posType: PositionType): ProgramBuilder {\r\n const builder = createBase(instanced, posType);\r\n addHiliter(builder, true);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createPointStringBuilder(instanced: IsInstanced, posType: PositionType): ProgramBuilder {\r\n const builder = createBase(instanced, posType);\r\n addShaderFlags(builder);\r\n addColor(builder);\r\n addWhiteOnWhiteReversal(builder.frag);\r\n return builder;\r\n}\r\n"]}
@@ -7,7 +7,12 @@
7
7
  * @module WebGL
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.createPolylineHiliter = exports.createPolylineBuilder = exports.addLineCode = exports.addLineCodeTexture = exports.addAdjustWidth = exports.adjustWidth = void 0;
10
+ exports.adjustWidth = void 0;
11
+ exports.addAdjustWidth = addAdjustWidth;
12
+ exports.addLineCodeTexture = addLineCodeTexture;
13
+ exports.addLineCode = addLineCode;
14
+ exports.createPolylineBuilder = createPolylineBuilder;
15
+ exports.createPolylineHiliter = createPolylineHiliter;
11
16
  const core_bentley_1 = require("@itwin/core-bentley");
12
17
  const AttributeMap_1 = require("../AttributeMap");
13
18
  const RenderFlags_1 = require("../RenderFlags");
@@ -135,7 +140,6 @@ function addAdjustWidth(vert) {
135
140
  });
136
141
  vert.addFunction(exports.adjustWidth);
137
142
  }
138
- exports.addAdjustWidth = addAdjustWidth;
139
143
  /** @internal */
140
144
  function addLineCodeTexture(frag) {
141
145
  frag.addUniform("u_lineCodeTexture", 8 /* VariableType.Sampler2D */, (prog) => {
@@ -147,7 +151,6 @@ function addLineCodeTexture(frag) {
147
151
  });
148
152
  });
149
153
  }
150
- exports.addLineCodeTexture = addLineCodeTexture;
151
154
  /** @internal */
152
155
  function addLineCode(prog, args) {
153
156
  const vert = prog.vert;
@@ -161,7 +164,6 @@ function addLineCode(prog, args) {
161
164
  frag.set(4 /* FragmentShaderComponent.CheckForDiscard */, checkForDiscard);
162
165
  frag.addGlobal("discardByLineCode", 0 /* VariableType.Boolean */, "false");
163
166
  }
164
- exports.addLineCode = addLineCode;
165
167
  function polylineAddLineCode(prog) {
166
168
  addLineCode(prog, lineCodeArgs);
167
169
  (0, Vertex_1.addModelViewMatrix)(prog.vert);
@@ -318,7 +320,6 @@ function createPolylineBuilder(isInstanced, positionType) {
318
320
  (0, Fragment_1.addWhiteOnWhiteReversal)(builder.frag);
319
321
  return builder;
320
322
  }
321
- exports.createPolylineBuilder = createPolylineBuilder;
322
323
  /** @internal */
323
324
  function createPolylineHiliter(isInstanced, positionType) {
324
325
  const instanced = 1 /* IsInstanced.Yes */ === isInstanced;
@@ -329,5 +330,4 @@ function createPolylineHiliter(isInstanced, positionType) {
329
330
  (0, FeatureSymbology_1.addHiliter)(builder, true);
330
331
  return builder;
331
332
  }
332
- exports.createPolylineHiliter = createPolylineHiliter;
333
333
  //# sourceMappingURL=Polyline.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Polyline.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Polyline.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 { AttributeMap } from \"../AttributeMap\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport {\r\n FragmentShaderBuilder, FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderBuilder, VertexShaderComponent,\r\n} from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { IsInstanced, PositionType } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { addColor } from \"./Color\";\r\nimport { addEdgeContrast } from \"./Edge\";\r\nimport { addFrustum, addShaderFlags } from \"./Common\";\r\nimport { unquantize2d } from \"./Decode\";\r\nimport { addHiliter } from \"./FeatureSymbology\";\r\nimport { addWhiteOnWhiteReversal } from \"./Fragment\";\r\nimport {\r\n addLineCode as addLineCodeUniform, addLineWeight, addModelViewMatrix, addProjectionMatrix, addSamplePosition,\r\n} from \"./Vertex\";\r\nimport { addModelToWindowCoordinates, addViewport } from \"./Viewport\";\r\n\r\nconst checkForDiscard = \"return discardByLineCode;\";\r\n\r\nconst applyLineCode = `\r\n if (v_texc.x >= 0.0) { // v_texc = (-1,-1) for solid lines - don't bother with any of this\r\n vec4 texColor = TEXTURE(u_lineCodeTexture, v_texc);\r\n discardByLineCode = (0.0 == texColor.r);\r\n }\r\n\r\n if (v_lnInfo.w > 0.5) { // line needs pixel trimming\r\n // calculate pixel distance from pixel center to expected line center, opposite dir from major\r\n vec2 dxy = gl_FragCoord.xy - v_lnInfo.xy;\r\n if (v_lnInfo.w < 1.5) // not x-major\r\n dxy = dxy.yx;\r\n\r\n float dist = v_lnInfo.z * dxy.x - dxy.y;\r\n float distA = abs(dist);\r\n if (distA > 0.5 || (distA == 0.5 && dist < 0.0))\r\n discardByLineCode = true; // borrow this flag to force discard\r\n }\r\n\r\n return baseColor;\r\n`;\r\n\r\nconst computeTextureCoord = `\r\nvec2 computeLineCodeTextureCoords(vec2 windowDir, vec4 projPos, float adjust) {\r\n vec2 texc;\r\n float lineCode = computeLineCode();\r\n if (0.0 == lineCode) {\r\n // Solid line - tell frag shader not to bother.\r\n texc = vec2(-1.0, -1.0);\r\n } else {\r\n const float imagesPerPixel = 1.0/32.0;\r\n const float textureCoordinateBase = 8192.0; // Temp workardound for clipping problem in perspective views (negative values don't seem to interpolate correctly).\r\n\r\n if (abs(windowDir.x) > abs(windowDir.y))\r\n texc.x = textureCoordinateBase + imagesPerPixel * (projPos.x + adjust * windowDir.x);\r\n else\r\n texc.x = textureCoordinateBase + imagesPerPixel * (projPos.y + adjust * windowDir.y);\r\n\r\n const float numLineCodes = 16.0; // NB: Actually only 10, but texture is 16px tall because it needs to be a power of 2.\r\n const float rowsPerCode = 1.0;\r\n const float numRows = numLineCodes*rowsPerCode;\r\n const float centerY = 0.5/numRows;\r\n const float stepY = rowsPerCode/numRows;\r\n texc.y = stepY * lineCode + centerY;\r\n }\r\n\r\n return texc;\r\n}\r\n`;\r\n\r\n/** @internal */\r\nexport const adjustWidth = `\r\nvoid adjustWidth(inout float width, vec2 d2, vec2 org) {\r\n if (u_aaSamples > 1) {\r\n if (width < 5.0)\r\n width += (5.0 - width) * 0.125;\r\n return;\r\n }\r\n\r\n // calculate slope based width adjustment for non-AA lines, widths 1 to 4\r\n vec2 d2A = abs(d2);\r\n const float s_myFltEpsilon = 0.0001; // limit test resolution to 4 digits in case 24 bit (s16e7) is used in hardware\r\n if (d2A.y > s_myFltEpsilon && width < 4.5) {\r\n float len = length(d2A);\r\n float tan = d2A.x / d2A.y;\r\n\r\n if (width < 1.5) { // width 1\r\n if (tan <= 1.0)\r\n width = d2A.y;\r\n else\r\n width = d2A.x;\r\n // width 1 requires additional adjustment plus trimming in frag shader using v_lnInfo\r\n width *= 1.01;\r\n v_lnInfo.xy = org;\r\n v_lnInfo.w = 1.0; // set flag to do trimming\r\n // set slope in v_lnInfo.z\r\n if (d2A.x - d2A.y > s_myFltEpsilon) {\r\n v_lnInfo.z = d2.y / d2.x;\r\n v_lnInfo.w += 2.0; // add in x-major flag\r\n } else\r\n v_lnInfo.z = d2.x / d2.y;\r\n\r\n } else if (width < 2.5) { // width 2\r\n if (tan <= 0.5)\r\n width = 2.0 * d2A.y;\r\n else\r\n width = (d2A.y + 2.0 * d2A.x);\r\n\r\n } else if (width < 3.5) { // width 3\r\n if (tan <= 1.0)\r\n width = (3.0 * d2A.y + d2A.x);\r\n else\r\n width = (d2A.y + 3.0 * d2A.x);\r\n\r\n } else { // if (width < 4.5) // width 4\r\n if (tan <= 0.5)\r\n width = (4.0 * d2A.y + d2A.x);\r\n else if (tan <= 2.0)\r\n width = (3.0 * d2A.y + 3.0 * d2A.x);\r\n else\r\n width = (d2A.y + 4.0 * d2A.x);\r\n }\r\n width /= len;\r\n }\r\n}\r\n`;\r\n\r\n/** @internal */\r\nexport function addAdjustWidth(vert: VertexShaderBuilder) {\r\n vert.addUniform(\"u_aaSamples\", VariableType.Int, (prog) => {\r\n prog.addGraphicUniform(\"u_aaSamples\", (attr, params) => {\r\n const numSamples = System.instance.frameBufferStack.currentFbMultisampled ? params.target.compositor.antialiasSamples : 1;\r\n attr.setUniform1i(numSamples);\r\n });\r\n });\r\n vert.addFunction(adjustWidth);\r\n}\r\n\r\n/** @internal */\r\nexport function addLineCodeTexture(frag: FragmentShaderBuilder) {\r\n frag.addUniform(\"u_lineCodeTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addProgramUniform(\"u_lineCodeTexture\", (uniform) => {\r\n const lct = System.instance.lineCodeTexture;\r\n assert(undefined !== lct);\r\n if (undefined !== lct)\r\n lct.bindSampler(uniform, TextureUnit.LineCode);\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function addLineCode(prog: ProgramBuilder, args: string) {\r\n const vert = prog.vert;\r\n const frag = prog.frag;\r\n\r\n addLineCodeUniform(vert);\r\n\r\n const funcCall: string = `computeLineCodeTextureCoords(${args})`;\r\n\r\n prog.addFunctionComputedVaryingWithArgs(\"v_texc\", VariableType.Vec2, funcCall, computeTextureCoord);\r\n\r\n addFrustum(prog);\r\n addLineCodeTexture(prog.frag);\r\n\r\n frag.set(FragmentShaderComponent.FinalizeBaseColor, applyLineCode);\r\n frag.set(FragmentShaderComponent.CheckForDiscard, checkForDiscard);\r\n frag.addGlobal(\"discardByLineCode\", VariableType.Boolean, \"false\");\r\n}\r\n\r\nfunction polylineAddLineCode(prog: ProgramBuilder) {\r\n addLineCode(prog, lineCodeArgs);\r\n addModelViewMatrix(prog.vert);\r\n}\r\n\r\nfunction addCommon(prog: ProgramBuilder) {\r\n const vert = prog.vert;\r\n addModelToWindowCoordinates(vert); // adds u_mvp, u_viewportTransformation\r\n addProjectionMatrix(vert);\r\n addModelViewMatrix(vert);\r\n addViewport(vert);\r\n\r\n vert.addGlobal(\"g_windowPos\", VariableType.Vec4);\r\n vert.addGlobal(\"g_prevPos\", VariableType.Vec4);\r\n vert.addGlobal(\"g_nextPos\", VariableType.Vec4);\r\n vert.addGlobal(\"g_windowDir\", VariableType.Vec2);\r\n vert.addInitializer(decodeAdjacentPositions);\r\n\r\n vert.addFunction(unquantize2d);\r\n\r\n addLineWeight(vert);\r\n\r\n vert.addGlobal(\"miterAdjust\", VariableType.Float, \"0.0\");\r\n prog.addVarying(\"v_eyeSpace\", VariableType.Vec3);\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n prog.addVarying(\"v_lnInfo\", VariableType.Vec4);\r\n addAdjustWidth(vert);\r\n\r\n addSamplePosition(vert);\r\n vert.addFunction(decodePosition);\r\n}\r\n\r\nconst decodePosition = `\r\nvec4 decodePosition(vec3 baseIndex) {\r\n float index = decodeUInt24(baseIndex);\r\n return samplePosition(index);\r\n}\r\n`;\r\n\r\nconst decodeAdjacentPositions = `\r\n g_prevPos = decodePosition(a_prevIndex);\r\n g_nextPos = decodePosition(a_nextIndex);\r\n`;\r\n\r\nconst computePosition = `\r\n const float kNone = 0.0,\r\n kSquare = 1.0*3.0,\r\n kMiter = 2.0*3.0,\r\n kMiterInsideOnly = 3.0*3.0,\r\n kJointBase = 4.0*3.0,\r\n kNegatePerp = 8.0*3.0,\r\n kNegateAlong = 16.0*3.0,\r\n kNoneAdjWt = 32.0*3.0;\r\n\r\n v_lnInfo = vec4(0.0, 0.0, 0.0, 0.0); // init and set flag to false\r\n\r\n vec4 next = g_nextPos;\r\n vec4 pos;\r\n g_windowPos = modelToWindowCoordinates(rawPos, next, pos, v_eyeSpace);\r\n if (g_windowPos.w == 0.0)\r\n return g_windowPos;\r\n\r\n float param = a_param;\r\n float weight = computeLineWeight();\r\n float scale = 1.0, directionScale = 1.0;\r\n\r\n if (param >= kNoneAdjWt)\r\n param -= kNoneAdjWt;\r\n\r\n if (param >= kNegateAlong) {\r\n directionScale = -directionScale;\r\n param -= kNegateAlong;\r\n }\r\n\r\n if (param >= kNegatePerp) {\r\n scale = -1.0;\r\n param -= kNegatePerp;\r\n }\r\n\r\n vec4 otherPos;\r\n vec3 otherMvPos;\r\n vec4 projNext = modelToWindowCoordinates(next, rawPos, otherPos, otherMvPos);\r\n g_windowDir = projNext.xy - g_windowPos.xy;\r\n\r\n if (param < kJointBase) {\r\n vec2 dir = (directionScale > 0.0) ? g_windowDir : -g_windowDir;\r\n vec2 pos = (directionScale > 0.0) ? g_windowPos.xy : projNext.xy;\r\n adjustWidth(weight, dir, pos);\r\n }\r\n\r\n if (kNone != param) {\r\n vec2 delta = vec2(0.0);\r\n vec4 prev = g_prevPos;\r\n vec4 projPrev = modelToWindowCoordinates(prev, rawPos, otherPos, otherMvPos);\r\n vec2 prevDir = g_windowPos.xy - projPrev.xy;\r\n float thisLength = sqrt(g_windowDir.x * g_windowDir.x + g_windowDir.y * g_windowDir.y);\r\n const float s_minNormalizeLength = 1.0E-5; // avoid normalizing zero length vectors.\r\n float dist = weight / 2.0;\r\n\r\n if (thisLength > s_minNormalizeLength) {\r\n g_windowDir /= thisLength;\r\n\r\n float prevLength = sqrt(prevDir.x * prevDir.x + prevDir.y * prevDir.y);\r\n\r\n if (prevLength > s_minNormalizeLength) {\r\n prevDir /= prevLength;\r\n const float s_minParallelDot= -.9999, s_maxParallelDot = .9999;\r\n float prevNextDot = dot(prevDir, g_windowDir);\r\n\r\n if (prevNextDot < s_minParallelDot || prevNextDot > s_maxParallelDot) // No miter if parallel or antiparallel.\r\n param = kSquare;\r\n } else\r\n param = kSquare;\r\n } else {\r\n g_windowDir = -normalize(prevDir);\r\n param = kSquare;\r\n }\r\n\r\n vec2 perp = scale * vec2(-g_windowDir.y, g_windowDir.x);\r\n\r\n if (param == kSquare) {\r\n delta = perp;\r\n } else {\r\n vec2 bisector = normalize(prevDir - g_windowDir);\r\n float dotP = dot (bisector, perp);\r\n\r\n if (dotP != 0.0) { // Should never occur - but avoid divide by zero.\r\n const float maxMiter = 3.0;\r\n float miterDistance = 1.0/dotP;\r\n\r\n if (param == kMiter) { // Straight miter.\r\n delta = (abs(miterDistance) > maxMiter) ? perp : bisector * miterDistance;\r\n\r\n } else if (param == kMiterInsideOnly) { // Miter at inside, square at outside (to make room for joint).\r\n delta = (dotP > 0.0 || abs(miterDistance) > maxMiter) ? perp : bisector * miterDistance;\r\n\r\n } else {\r\n const float jointTriangleCount = 3.0;\r\n float ratio = (param - kJointBase) / jointTriangleCount; // 3 triangles per half-joint as defined in Graphics.cpp\r\n delta = normalize((1.0 - ratio) * bisector + (dotP < 0.0 ? -ratio : ratio) * perp); // Miter/Straight combination.\r\n }\r\n }\r\n }\r\n\r\n miterAdjust = dot(g_windowDir, delta) * dist; // Not actually used for hilite shader but meh.\r\n pos.x += dist * delta.x * 2.0 * pos.w / u_viewport.x;\r\n pos.y += dist * delta.y * 2.0 * pos.w / u_viewport.y;\r\n }\r\n\r\n return pos;\r\n`;\r\n\r\nconst lineCodeArgs = \"g_windowDir, g_windowPos, miterAdjust\";\r\n\r\n/** @internal */\r\nexport function createPolylineBuilder(isInstanced: IsInstanced, positionType: PositionType): ProgramBuilder {\r\n const instanced = IsInstanced.Yes === isInstanced;\r\n const attrMap = AttributeMap.findAttributeMap(TechniqueId.Polyline, instanced);\r\n const builder = new ProgramBuilder(attrMap, { positionType, instanced });\r\n\r\n addShaderFlags(builder);\r\n\r\n addCommon(builder);\r\n\r\n polylineAddLineCode(builder);\r\n\r\n addColor(builder);\r\n addEdgeContrast(builder.vert);\r\n addWhiteOnWhiteReversal(builder.frag);\r\n\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createPolylineHiliter(isInstanced: IsInstanced, positionType: PositionType): ProgramBuilder {\r\n const instanced = IsInstanced.Yes === isInstanced;\r\n const attrMap = AttributeMap.findAttributeMap(TechniqueId.Polyline, instanced);\r\n const builder = new ProgramBuilder(attrMap, { positionType, instanced });\r\n\r\n addCommon(builder);\r\n addFrustum(builder);\r\n addHiliter(builder, true);\r\n return builder;\r\n}\r\n"]}
1
+ {"version":3,"file":"Polyline.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Polyline.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 { AttributeMap } from \"../AttributeMap\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport {\r\n FragmentShaderBuilder, FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderBuilder, VertexShaderComponent,\r\n} from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { IsInstanced, PositionType } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { addColor } from \"./Color\";\r\nimport { addEdgeContrast } from \"./Edge\";\r\nimport { addFrustum, addShaderFlags } from \"./Common\";\r\nimport { unquantize2d } from \"./Decode\";\r\nimport { addHiliter } from \"./FeatureSymbology\";\r\nimport { addWhiteOnWhiteReversal } from \"./Fragment\";\r\nimport {\r\n addLineCode as addLineCodeUniform, addLineWeight, addModelViewMatrix, addProjectionMatrix, addSamplePosition,\r\n} from \"./Vertex\";\r\nimport { addModelToWindowCoordinates, addViewport } from \"./Viewport\";\r\n\r\nconst checkForDiscard = \"return discardByLineCode;\";\r\n\r\nconst applyLineCode = `\r\n if (v_texc.x >= 0.0) { // v_texc = (-1,-1) for solid lines - don't bother with any of this\r\n vec4 texColor = TEXTURE(u_lineCodeTexture, v_texc);\r\n discardByLineCode = (0.0 == texColor.r);\r\n }\r\n\r\n if (v_lnInfo.w > 0.5) { // line needs pixel trimming\r\n // calculate pixel distance from pixel center to expected line center, opposite dir from major\r\n vec2 dxy = gl_FragCoord.xy - v_lnInfo.xy;\r\n if (v_lnInfo.w < 1.5) // not x-major\r\n dxy = dxy.yx;\r\n\r\n float dist = v_lnInfo.z * dxy.x - dxy.y;\r\n float distA = abs(dist);\r\n if (distA > 0.5 || (distA == 0.5 && dist < 0.0))\r\n discardByLineCode = true; // borrow this flag to force discard\r\n }\r\n\r\n return baseColor;\r\n`;\r\n\r\nconst computeTextureCoord = `\r\nvec2 computeLineCodeTextureCoords(vec2 windowDir, vec4 projPos, float adjust) {\r\n vec2 texc;\r\n float lineCode = computeLineCode();\r\n if (0.0 == lineCode) {\r\n // Solid line - tell frag shader not to bother.\r\n texc = vec2(-1.0, -1.0);\r\n } else {\r\n const float imagesPerPixel = 1.0/32.0;\r\n const float textureCoordinateBase = 8192.0; // Temp workardound for clipping problem in perspective views (negative values don't seem to interpolate correctly).\r\n\r\n if (abs(windowDir.x) > abs(windowDir.y))\r\n texc.x = textureCoordinateBase + imagesPerPixel * (projPos.x + adjust * windowDir.x);\r\n else\r\n texc.x = textureCoordinateBase + imagesPerPixel * (projPos.y + adjust * windowDir.y);\r\n\r\n const float numLineCodes = 16.0; // NB: Actually only 10, but texture is 16px tall because it needs to be a power of 2.\r\n const float rowsPerCode = 1.0;\r\n const float numRows = numLineCodes*rowsPerCode;\r\n const float centerY = 0.5/numRows;\r\n const float stepY = rowsPerCode/numRows;\r\n texc.y = stepY * lineCode + centerY;\r\n }\r\n\r\n return texc;\r\n}\r\n`;\r\n\r\n/** @internal */\r\nexport const adjustWidth = `\r\nvoid adjustWidth(inout float width, vec2 d2, vec2 org) {\r\n if (u_aaSamples > 1) {\r\n if (width < 5.0)\r\n width += (5.0 - width) * 0.125;\r\n return;\r\n }\r\n\r\n // calculate slope based width adjustment for non-AA lines, widths 1 to 4\r\n vec2 d2A = abs(d2);\r\n const float s_myFltEpsilon = 0.0001; // limit test resolution to 4 digits in case 24 bit (s16e7) is used in hardware\r\n if (d2A.y > s_myFltEpsilon && width < 4.5) {\r\n float len = length(d2A);\r\n float tan = d2A.x / d2A.y;\r\n\r\n if (width < 1.5) { // width 1\r\n if (tan <= 1.0)\r\n width = d2A.y;\r\n else\r\n width = d2A.x;\r\n // width 1 requires additional adjustment plus trimming in frag shader using v_lnInfo\r\n width *= 1.01;\r\n v_lnInfo.xy = org;\r\n v_lnInfo.w = 1.0; // set flag to do trimming\r\n // set slope in v_lnInfo.z\r\n if (d2A.x - d2A.y > s_myFltEpsilon) {\r\n v_lnInfo.z = d2.y / d2.x;\r\n v_lnInfo.w += 2.0; // add in x-major flag\r\n } else\r\n v_lnInfo.z = d2.x / d2.y;\r\n\r\n } else if (width < 2.5) { // width 2\r\n if (tan <= 0.5)\r\n width = 2.0 * d2A.y;\r\n else\r\n width = (d2A.y + 2.0 * d2A.x);\r\n\r\n } else if (width < 3.5) { // width 3\r\n if (tan <= 1.0)\r\n width = (3.0 * d2A.y + d2A.x);\r\n else\r\n width = (d2A.y + 3.0 * d2A.x);\r\n\r\n } else { // if (width < 4.5) // width 4\r\n if (tan <= 0.5)\r\n width = (4.0 * d2A.y + d2A.x);\r\n else if (tan <= 2.0)\r\n width = (3.0 * d2A.y + 3.0 * d2A.x);\r\n else\r\n width = (d2A.y + 4.0 * d2A.x);\r\n }\r\n width /= len;\r\n }\r\n}\r\n`;\r\n\r\n/** @internal */\r\nexport function addAdjustWidth(vert: VertexShaderBuilder) {\r\n vert.addUniform(\"u_aaSamples\", VariableType.Int, (prog) => {\r\n prog.addGraphicUniform(\"u_aaSamples\", (attr, params) => {\r\n const numSamples = System.instance.frameBufferStack.currentFbMultisampled ? params.target.compositor.antialiasSamples : 1;\r\n attr.setUniform1i(numSamples);\r\n });\r\n });\r\n vert.addFunction(adjustWidth);\r\n}\r\n\r\n/** @internal */\r\nexport function addLineCodeTexture(frag: FragmentShaderBuilder) {\r\n frag.addUniform(\"u_lineCodeTexture\", VariableType.Sampler2D, (prog) => {\r\n prog.addProgramUniform(\"u_lineCodeTexture\", (uniform) => {\r\n const lct = System.instance.lineCodeTexture;\r\n assert(undefined !== lct);\r\n if (undefined !== lct)\r\n lct.bindSampler(uniform, TextureUnit.LineCode);\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function addLineCode(prog: ProgramBuilder, args: string) {\r\n const vert = prog.vert;\r\n const frag = prog.frag;\r\n\r\n addLineCodeUniform(vert);\r\n\r\n const funcCall: string = `computeLineCodeTextureCoords(${args})`;\r\n\r\n prog.addFunctionComputedVaryingWithArgs(\"v_texc\", VariableType.Vec2, funcCall, computeTextureCoord);\r\n\r\n addFrustum(prog);\r\n addLineCodeTexture(prog.frag);\r\n\r\n frag.set(FragmentShaderComponent.FinalizeBaseColor, applyLineCode);\r\n frag.set(FragmentShaderComponent.CheckForDiscard, checkForDiscard);\r\n frag.addGlobal(\"discardByLineCode\", VariableType.Boolean, \"false\");\r\n}\r\n\r\nfunction polylineAddLineCode(prog: ProgramBuilder) {\r\n addLineCode(prog, lineCodeArgs);\r\n addModelViewMatrix(prog.vert);\r\n}\r\n\r\nfunction addCommon(prog: ProgramBuilder) {\r\n const vert = prog.vert;\r\n addModelToWindowCoordinates(vert); // adds u_mvp, u_viewportTransformation\r\n addProjectionMatrix(vert);\r\n addModelViewMatrix(vert);\r\n addViewport(vert);\r\n\r\n vert.addGlobal(\"g_windowPos\", VariableType.Vec4);\r\n vert.addGlobal(\"g_prevPos\", VariableType.Vec4);\r\n vert.addGlobal(\"g_nextPos\", VariableType.Vec4);\r\n vert.addGlobal(\"g_windowDir\", VariableType.Vec2);\r\n vert.addInitializer(decodeAdjacentPositions);\r\n\r\n vert.addFunction(unquantize2d);\r\n\r\n addLineWeight(vert);\r\n\r\n vert.addGlobal(\"miterAdjust\", VariableType.Float, \"0.0\");\r\n prog.addVarying(\"v_eyeSpace\", VariableType.Vec3);\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n prog.addVarying(\"v_lnInfo\", VariableType.Vec4);\r\n addAdjustWidth(vert);\r\n\r\n addSamplePosition(vert);\r\n vert.addFunction(decodePosition);\r\n}\r\n\r\nconst decodePosition = `\r\nvec4 decodePosition(vec3 baseIndex) {\r\n float index = decodeUInt24(baseIndex);\r\n return samplePosition(index);\r\n}\r\n`;\r\n\r\nconst decodeAdjacentPositions = `\r\n g_prevPos = decodePosition(a_prevIndex);\r\n g_nextPos = decodePosition(a_nextIndex);\r\n`;\r\n\r\nconst computePosition = `\r\n const float kNone = 0.0,\r\n kSquare = 1.0*3.0,\r\n kMiter = 2.0*3.0,\r\n kMiterInsideOnly = 3.0*3.0,\r\n kJointBase = 4.0*3.0,\r\n kNegatePerp = 8.0*3.0,\r\n kNegateAlong = 16.0*3.0,\r\n kNoneAdjWt = 32.0*3.0;\r\n\r\n v_lnInfo = vec4(0.0, 0.0, 0.0, 0.0); // init and set flag to false\r\n\r\n vec4 next = g_nextPos;\r\n vec4 pos;\r\n g_windowPos = modelToWindowCoordinates(rawPos, next, pos, v_eyeSpace);\r\n if (g_windowPos.w == 0.0)\r\n return g_windowPos;\r\n\r\n float param = a_param;\r\n float weight = computeLineWeight();\r\n float scale = 1.0, directionScale = 1.0;\r\n\r\n if (param >= kNoneAdjWt)\r\n param -= kNoneAdjWt;\r\n\r\n if (param >= kNegateAlong) {\r\n directionScale = -directionScale;\r\n param -= kNegateAlong;\r\n }\r\n\r\n if (param >= kNegatePerp) {\r\n scale = -1.0;\r\n param -= kNegatePerp;\r\n }\r\n\r\n vec4 otherPos;\r\n vec3 otherMvPos;\r\n vec4 projNext = modelToWindowCoordinates(next, rawPos, otherPos, otherMvPos);\r\n g_windowDir = projNext.xy - g_windowPos.xy;\r\n\r\n if (param < kJointBase) {\r\n vec2 dir = (directionScale > 0.0) ? g_windowDir : -g_windowDir;\r\n vec2 pos = (directionScale > 0.0) ? g_windowPos.xy : projNext.xy;\r\n adjustWidth(weight, dir, pos);\r\n }\r\n\r\n if (kNone != param) {\r\n vec2 delta = vec2(0.0);\r\n vec4 prev = g_prevPos;\r\n vec4 projPrev = modelToWindowCoordinates(prev, rawPos, otherPos, otherMvPos);\r\n vec2 prevDir = g_windowPos.xy - projPrev.xy;\r\n float thisLength = sqrt(g_windowDir.x * g_windowDir.x + g_windowDir.y * g_windowDir.y);\r\n const float s_minNormalizeLength = 1.0E-5; // avoid normalizing zero length vectors.\r\n float dist = weight / 2.0;\r\n\r\n if (thisLength > s_minNormalizeLength) {\r\n g_windowDir /= thisLength;\r\n\r\n float prevLength = sqrt(prevDir.x * prevDir.x + prevDir.y * prevDir.y);\r\n\r\n if (prevLength > s_minNormalizeLength) {\r\n prevDir /= prevLength;\r\n const float s_minParallelDot= -.9999, s_maxParallelDot = .9999;\r\n float prevNextDot = dot(prevDir, g_windowDir);\r\n\r\n if (prevNextDot < s_minParallelDot || prevNextDot > s_maxParallelDot) // No miter if parallel or antiparallel.\r\n param = kSquare;\r\n } else\r\n param = kSquare;\r\n } else {\r\n g_windowDir = -normalize(prevDir);\r\n param = kSquare;\r\n }\r\n\r\n vec2 perp = scale * vec2(-g_windowDir.y, g_windowDir.x);\r\n\r\n if (param == kSquare) {\r\n delta = perp;\r\n } else {\r\n vec2 bisector = normalize(prevDir - g_windowDir);\r\n float dotP = dot (bisector, perp);\r\n\r\n if (dotP != 0.0) { // Should never occur - but avoid divide by zero.\r\n const float maxMiter = 3.0;\r\n float miterDistance = 1.0/dotP;\r\n\r\n if (param == kMiter) { // Straight miter.\r\n delta = (abs(miterDistance) > maxMiter) ? perp : bisector * miterDistance;\r\n\r\n } else if (param == kMiterInsideOnly) { // Miter at inside, square at outside (to make room for joint).\r\n delta = (dotP > 0.0 || abs(miterDistance) > maxMiter) ? perp : bisector * miterDistance;\r\n\r\n } else {\r\n const float jointTriangleCount = 3.0;\r\n float ratio = (param - kJointBase) / jointTriangleCount; // 3 triangles per half-joint as defined in Graphics.cpp\r\n delta = normalize((1.0 - ratio) * bisector + (dotP < 0.0 ? -ratio : ratio) * perp); // Miter/Straight combination.\r\n }\r\n }\r\n }\r\n\r\n miterAdjust = dot(g_windowDir, delta) * dist; // Not actually used for hilite shader but meh.\r\n pos.x += dist * delta.x * 2.0 * pos.w / u_viewport.x;\r\n pos.y += dist * delta.y * 2.0 * pos.w / u_viewport.y;\r\n }\r\n\r\n return pos;\r\n`;\r\n\r\nconst lineCodeArgs = \"g_windowDir, g_windowPos, miterAdjust\";\r\n\r\n/** @internal */\r\nexport function createPolylineBuilder(isInstanced: IsInstanced, positionType: PositionType): ProgramBuilder {\r\n const instanced = IsInstanced.Yes === isInstanced;\r\n const attrMap = AttributeMap.findAttributeMap(TechniqueId.Polyline, instanced);\r\n const builder = new ProgramBuilder(attrMap, { positionType, instanced });\r\n\r\n addShaderFlags(builder);\r\n\r\n addCommon(builder);\r\n\r\n polylineAddLineCode(builder);\r\n\r\n addColor(builder);\r\n addEdgeContrast(builder.vert);\r\n addWhiteOnWhiteReversal(builder.frag);\r\n\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createPolylineHiliter(isInstanced: IsInstanced, positionType: PositionType): ProgramBuilder {\r\n const instanced = IsInstanced.Yes === isInstanced;\r\n const attrMap = AttributeMap.findAttributeMap(TechniqueId.Polyline, instanced);\r\n const builder = new ProgramBuilder(attrMap, { positionType, instanced });\r\n\r\n addCommon(builder);\r\n addFrustum(builder);\r\n addHiliter(builder, true);\r\n return builder;\r\n}\r\n"]}
@@ -7,7 +7,11 @@
7
7
  * @module WebGL
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.createRealityMeshBuilder = exports.createRealityMeshHiliter = exports.createClassifierRealityMeshHiliter = exports.addColorOverrideMix = exports.finalizeNormal = void 0;
10
+ exports.finalizeNormal = void 0;
11
+ exports.addColorOverrideMix = addColorOverrideMix;
12
+ exports.createClassifierRealityMeshHiliter = createClassifierRealityMeshHiliter;
13
+ exports.createRealityMeshHiliter = createRealityMeshHiliter;
14
+ exports.createRealityMeshBuilder = createRealityMeshBuilder;
11
15
  const core_bentley_1 = require("@itwin/core-bentley");
12
16
  const core_common_1 = require("@itwin/core-common");
13
17
  const core_geometry_1 = require("@itwin/core-geometry");
@@ -245,7 +249,6 @@ function addColorOverrideMix(frag) {
245
249
  });
246
250
  });
247
251
  }
248
- exports.addColorOverrideMix = addColorOverrideMix;
249
252
  function createRealityMeshHiliterBuilder() {
250
253
  const builder = new ShaderBuilder_1.ProgramBuilder(AttributeMap_1.AttributeMap.findAttributeMap(7 /* TechniqueId.RealityMesh */, false));
251
254
  const vert = builder.vert;
@@ -260,14 +263,12 @@ function createClassifierRealityMeshHiliter() {
260
263
  (0, PlanarClassification_1.addHilitePlanarClassifier)(builder, false);
261
264
  return builder;
262
265
  }
263
- exports.createClassifierRealityMeshHiliter = createClassifierRealityMeshHiliter;
264
266
  /** @internal */
265
267
  function createRealityMeshHiliter() {
266
268
  const builder = createRealityMeshHiliterBuilder();
267
269
  (0, FeatureSymbology_1.addHiliter)(builder, false);
268
270
  return builder;
269
271
  }
270
- exports.createRealityMeshHiliter = createRealityMeshHiliter;
271
272
  /** @internal */
272
273
  function createRealityMeshBuilder(flags) {
273
274
  const builder = new ShaderBuilder_1.ProgramBuilder(AttributeMap_1.AttributeMap.findAttributeMap(7 /* TechniqueId.RealityMesh */, false));
@@ -331,5 +332,4 @@ function createRealityMeshBuilder(flags) {
331
332
  (0, Atmosphere_1.addAtmosphericScatteringEffect)(builder, false, false);
332
333
  return builder;
333
334
  }
334
- exports.createRealityMeshBuilder = createRealityMeshBuilder;
335
335
  //# sourceMappingURL=RealityMesh.js.map