@itwin/core-frontend 4.1.0-dev.35 → 4.1.0-dev.40

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 (851) hide show
  1. package/lib/cjs/AccuDraw.js.map +1 -1
  2. package/lib/cjs/AccuSnap.js.map +1 -1
  3. package/lib/cjs/ApproximateTerrainHeights.js.map +1 -1
  4. package/lib/cjs/ApproximateTerrainHeightsProps.js.map +1 -1
  5. package/lib/cjs/AuxCoordSys.js.map +1 -1
  6. package/lib/cjs/BackgroundMapGeometry.js.map +1 -1
  7. package/lib/cjs/BingLocation.js.map +1 -1
  8. package/lib/cjs/BriefcaseConnection.js.map +1 -1
  9. package/lib/cjs/BriefcaseTxns.js.map +1 -1
  10. package/lib/cjs/CategorySelectorState.js.map +1 -1
  11. package/lib/cjs/ChangeFlags.js.map +1 -1
  12. package/lib/cjs/CheckpointConnection.js.map +1 -1
  13. package/lib/cjs/CoordSystem.js.map +1 -1
  14. package/lib/cjs/DecorationsCache.js.map +1 -1
  15. package/lib/cjs/DevTools.js.map +1 -1
  16. package/lib/cjs/DisplayStyleState.js.map +1 -1
  17. package/lib/cjs/DrawingViewState.js +5 -5
  18. package/lib/cjs/DrawingViewState.js.map +1 -1
  19. package/lib/cjs/ElementLocateManager.js.map +1 -1
  20. package/lib/cjs/EmphasizeElements.js.map +1 -1
  21. package/lib/cjs/EntityState.js.map +1 -1
  22. package/lib/cjs/EnvironmentDecorations.js.map +1 -1
  23. package/lib/cjs/FeatureOverrideProvider.js.map +1 -1
  24. package/lib/cjs/FlashSettings.js.map +1 -1
  25. package/lib/cjs/FrontendHubAccess.js.map +1 -1
  26. package/lib/cjs/Frustum2d.js.map +1 -1
  27. package/lib/cjs/FrustumAnimator.js.map +1 -1
  28. package/lib/cjs/FuzzySearch.js.map +1 -1
  29. package/lib/cjs/GeoServices.js.map +1 -1
  30. package/lib/cjs/GlobeAnimator.js.map +1 -1
  31. package/lib/cjs/GraphicalEditingScope.js.map +1 -1
  32. package/lib/cjs/HitDetail.js.map +1 -1
  33. package/lib/cjs/IModelApp.js.map +1 -1
  34. package/lib/cjs/IModelConnection.js +23 -23
  35. package/lib/cjs/IModelConnection.js.map +1 -1
  36. package/lib/cjs/IModelRoutingContext.js.map +1 -1
  37. package/lib/cjs/IModeljs-css.js +133 -133
  38. package/lib/cjs/IModeljs-css.js.map +1 -1
  39. package/lib/cjs/IpcApp.js.map +1 -1
  40. package/lib/cjs/LinePlaneIntersect.js.map +1 -1
  41. package/lib/cjs/LocalhostIpcApp.js.map +1 -1
  42. package/lib/cjs/MarginPercent.js.map +1 -1
  43. package/lib/cjs/Marker.js.map +1 -1
  44. package/lib/cjs/ModelSelectorState.js.map +1 -1
  45. package/lib/cjs/NativeApp.js.map +1 -1
  46. package/lib/cjs/NativeAppLogger.js.map +1 -1
  47. package/lib/cjs/NoRenderApp.js.map +1 -1
  48. package/lib/cjs/NotificationManager.js.map +1 -1
  49. package/lib/cjs/PerModelCategoryVisibility.js.map +1 -1
  50. package/lib/cjs/PlanarClipMaskState.js.map +1 -1
  51. package/lib/cjs/RealityDataSource.js.map +1 -1
  52. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.js.map +1 -1
  53. package/lib/cjs/RealityDataSourceContextShareImpl.js.map +1 -1
  54. package/lib/cjs/RealityDataSourceTilesetUrlImpl.js.map +1 -1
  55. package/lib/cjs/SelectionSet.js.map +1 -1
  56. package/lib/cjs/SheetViewState.js.map +1 -1
  57. package/lib/cjs/SpatialViewState.js.map +1 -1
  58. package/lib/cjs/Sprites.js.map +1 -1
  59. package/lib/cjs/StandardView.js.map +1 -1
  60. package/lib/cjs/SubCategoriesCache.js.map +1 -1
  61. package/lib/cjs/TentativePoint.js.map +1 -1
  62. package/lib/cjs/Tiles.js.map +1 -1
  63. package/lib/cjs/UserPreferences.js.map +1 -1
  64. package/lib/cjs/ViewAnimation.js.map +1 -1
  65. package/lib/cjs/ViewContext.js.map +1 -1
  66. package/lib/cjs/ViewCreator2d.js.map +1 -1
  67. package/lib/cjs/ViewCreator3d.js.map +1 -1
  68. package/lib/cjs/ViewGlobalLocation.js.map +1 -1
  69. package/lib/cjs/ViewManager.js.map +1 -1
  70. package/lib/cjs/ViewPose.js.map +1 -1
  71. package/lib/cjs/ViewState.js.map +1 -1
  72. package/lib/cjs/ViewStatus.js.map +1 -1
  73. package/lib/cjs/ViewingSpace.js.map +1 -1
  74. package/lib/cjs/Viewport.js.map +1 -1
  75. package/lib/cjs/ViewportSync.js.map +1 -1
  76. package/lib/cjs/common/FrontendLoggerCategory.js.map +1 -1
  77. package/lib/cjs/common/ImageUtil.js.map +1 -1
  78. package/lib/cjs/common/ViewRect.js.map +1 -1
  79. package/lib/cjs/common/WorkerProxy.js.map +1 -1
  80. package/lib/cjs/common/gltf/GltfModel.js.map +1 -1
  81. package/lib/cjs/common/gltf/GltfParser.js.map +1 -1
  82. package/lib/cjs/common/gltf/GltfSchema.js.map +1 -1
  83. package/lib/cjs/common/imdl/CompactEdges.js.map +1 -1
  84. package/lib/cjs/common/imdl/ImdlModel.js.map +1 -1
  85. package/lib/cjs/common/imdl/ImdlSchema.js.map +1 -1
  86. package/lib/cjs/common/imdl/ParseImdlDocument.js.map +1 -1
  87. package/lib/cjs/common/render/AnimationNodeId.js.map +1 -1
  88. package/lib/cjs/common/render/MaterialParams.js.map +1 -1
  89. package/lib/cjs/common/render/TextureParams.js.map +1 -1
  90. package/lib/cjs/common/render/primitives/AuxChannelTable.js.map +1 -1
  91. package/lib/cjs/common/render/primitives/DisplayParams.js.map +1 -1
  92. package/lib/cjs/common/render/primitives/EdgeParams.js.map +1 -1
  93. package/lib/cjs/common/render/primitives/MeshParams.js.map +1 -1
  94. package/lib/cjs/common/render/primitives/MeshPrimitive.js.map +1 -1
  95. package/lib/cjs/common/render/primitives/PointStringParams.js.map +1 -1
  96. package/lib/cjs/common/render/primitives/PolylineParams.js.map +1 -1
  97. package/lib/cjs/common/render/primitives/SurfaceParams.js.map +1 -1
  98. package/lib/cjs/common/render/primitives/VertexIndices.js.map +1 -1
  99. package/lib/cjs/common/render/primitives/VertexTable.js.map +1 -1
  100. package/lib/cjs/common/render/primitives/VertexTableSplitter.js.map +1 -1
  101. package/lib/cjs/core-frontend.js.map +1 -1
  102. package/lib/cjs/extension/Extension.js.map +1 -1
  103. package/lib/cjs/extension/ExtensionAdmin.js.map +1 -1
  104. package/lib/cjs/extension/ExtensionHost.js.map +1 -1
  105. package/lib/cjs/extension/ExtensionRuntime.js.map +1 -1
  106. package/lib/cjs/extension/providers/ExtensionLoadScript.js.map +1 -1
  107. package/lib/cjs/extension/providers/LocalExtensionProvider.js.map +1 -1
  108. package/lib/cjs/extension/providers/RemoteExtensionProvider.js.map +1 -1
  109. package/lib/cjs/properties/AngleDescription.js.map +1 -1
  110. package/lib/cjs/properties/FormattedQuantityDescription.js.map +1 -1
  111. package/lib/cjs/properties/LengthDescription.js.map +1 -1
  112. package/lib/cjs/public/scripts/checkbrowser.js +24 -24
  113. package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
  114. package/lib/cjs/quantity-formatting/BasicUnitsProvider.js.map +1 -1
  115. package/lib/cjs/quantity-formatting/LocalUnitFormatProvider.js.map +1 -1
  116. package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
  117. package/lib/cjs/quantity-formatting/QuantityTypesEditorSpecs.js.map +1 -1
  118. package/lib/cjs/quantity-formatting/UnitsData.js.map +1 -1
  119. package/lib/cjs/render/CanvasDecoration.js.map +1 -1
  120. package/lib/cjs/render/CreateRenderMaterialArgs.js.map +1 -1
  121. package/lib/cjs/render/CreateTextureArgs.js.map +1 -1
  122. package/lib/cjs/render/Decorations.js.map +1 -1
  123. package/lib/cjs/render/FeatureSymbology.js.map +1 -1
  124. package/lib/cjs/render/FrameStats.js.map +1 -1
  125. package/lib/cjs/render/GraphicBranch.js.map +1 -1
  126. package/lib/cjs/render/GraphicBuilder.js.map +1 -1
  127. package/lib/cjs/render/GraphicPrimitive.js.map +1 -1
  128. package/lib/cjs/render/InstancedGraphicParams.js.map +1 -1
  129. package/lib/cjs/render/MockRender.js.map +1 -1
  130. package/lib/cjs/render/ParticleCollectionBuilder.js.map +1 -1
  131. package/lib/cjs/render/Pixel.js.map +1 -1
  132. package/lib/cjs/render/RealityMeshGraphicParams.js.map +1 -1
  133. package/lib/cjs/render/RealityMeshParams.js.map +1 -1
  134. package/lib/cjs/render/RenderClipVolume.js.map +1 -1
  135. package/lib/cjs/render/RenderGraphic.js.map +1 -1
  136. package/lib/cjs/render/RenderMemory.js.map +1 -1
  137. package/lib/cjs/render/RenderPlan.js.map +1 -1
  138. package/lib/cjs/render/RenderPlanarClassifier.js.map +1 -1
  139. package/lib/cjs/render/RenderSystem.js.map +1 -1
  140. package/lib/cjs/render/RenderTarget.js.map +1 -1
  141. package/lib/cjs/render/Scene.js.map +1 -1
  142. package/lib/cjs/render/ScreenSpaceEffectBuilder.js.map +1 -1
  143. package/lib/cjs/render/UpsampleRealityMeshParams.js.map +1 -1
  144. package/lib/cjs/render/VisibleFeature.js.map +1 -1
  145. package/lib/cjs/render/primitives/ColorMap.js.map +1 -1
  146. package/lib/cjs/render/primitives/EdgeParams.js.map +1 -1
  147. package/lib/cjs/render/primitives/PointCloudPrimitive.js.map +1 -1
  148. package/lib/cjs/render/primitives/PointStringParams.js.map +1 -1
  149. package/lib/cjs/render/primitives/Polyface.js.map +1 -1
  150. package/lib/cjs/render/primitives/PolylineParams.js.map +1 -1
  151. package/lib/cjs/render/primitives/Primitives.js.map +1 -1
  152. package/lib/cjs/render/primitives/Strokes.js.map +1 -1
  153. package/lib/cjs/render/primitives/VertexKey.js.map +1 -1
  154. package/lib/cjs/render/primitives/VertexTableBuilder.js.map +1 -1
  155. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  156. package/lib/cjs/render/primitives/geometry/GeometryList.js.map +1 -1
  157. package/lib/cjs/render/primitives/geometry/GeometryListBuilder.js.map +1 -1
  158. package/lib/cjs/render/primitives/geometry/GeometryPrimitives.js.map +1 -1
  159. package/lib/cjs/render/primitives/mesh/MeshBuilder.js.map +1 -1
  160. package/lib/cjs/render/primitives/mesh/MeshBuilderMap.js.map +1 -1
  161. package/lib/cjs/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  162. package/lib/cjs/render/webgl/AtmosphereUniforms.js.map +1 -1
  163. package/lib/cjs/render/webgl/AttributeBuffers.js.map +1 -1
  164. package/lib/cjs/render/webgl/AttributeMap.js.map +1 -1
  165. package/lib/cjs/render/webgl/BackgroundMapDrape.js.map +1 -1
  166. package/lib/cjs/render/webgl/BatchState.js.map +1 -1
  167. package/lib/cjs/render/webgl/BatchUniforms.js.map +1 -1
  168. package/lib/cjs/render/webgl/BranchStack.js.map +1 -1
  169. package/lib/cjs/render/webgl/BranchState.js.map +1 -1
  170. package/lib/cjs/render/webgl/BranchUniforms.js.map +1 -1
  171. package/lib/cjs/render/webgl/CachedGeometry.js.map +1 -1
  172. package/lib/cjs/render/webgl/ClipStack.js.map +1 -1
  173. package/lib/cjs/render/webgl/ClipVolume.js.map +1 -1
  174. package/lib/cjs/render/webgl/ClippingProgram.js.map +1 -1
  175. package/lib/cjs/render/webgl/ColorInfo.js.map +1 -1
  176. package/lib/cjs/render/webgl/Diagnostics.js.map +1 -1
  177. package/lib/cjs/render/webgl/Disposable.js.map +1 -1
  178. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  179. package/lib/cjs/render/webgl/EDL.js.map +1 -1
  180. package/lib/cjs/render/webgl/EdgeGeometry.js.map +1 -1
  181. package/lib/cjs/render/webgl/EdgeSettings.js.map +1 -1
  182. package/lib/cjs/render/webgl/FeatureOverrides.js.map +1 -1
  183. package/lib/cjs/render/webgl/FloatRGBA.js.map +1 -1
  184. package/lib/cjs/render/webgl/FrameBuffer.js.map +1 -1
  185. package/lib/cjs/render/webgl/FrustumUniforms.js.map +1 -1
  186. package/lib/cjs/render/webgl/GL.js.map +1 -1
  187. package/lib/cjs/render/webgl/GLTimer.js.map +1 -1
  188. package/lib/cjs/render/webgl/Graphic.js.map +1 -1
  189. package/lib/cjs/render/webgl/HiliteUniforms.js.map +1 -1
  190. package/lib/cjs/render/webgl/IModelFrameLifecycle.js.map +1 -1
  191. package/lib/cjs/render/webgl/IndexedEdgeGeometry.js.map +1 -1
  192. package/lib/cjs/render/webgl/InstancedGeometry.js.map +1 -1
  193. package/lib/cjs/render/webgl/Layer.js.map +1 -1
  194. package/lib/cjs/render/webgl/LayerCommands.js.map +1 -1
  195. package/lib/cjs/render/webgl/LightingUniforms.js.map +1 -1
  196. package/lib/cjs/render/webgl/LineCode.js.map +1 -1
  197. package/lib/cjs/render/webgl/Material.js.map +1 -1
  198. package/lib/cjs/render/webgl/Matrix.js.map +1 -1
  199. package/lib/cjs/render/webgl/Mesh.js.map +1 -1
  200. package/lib/cjs/render/webgl/MeshData.js.map +1 -1
  201. package/lib/cjs/render/webgl/MeshGeometry.js.map +1 -1
  202. package/lib/cjs/render/webgl/PerformanceMetrics.js.map +1 -1
  203. package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
  204. package/lib/cjs/render/webgl/PlanarGrid.js.map +1 -1
  205. package/lib/cjs/render/webgl/PlanarTextureProjection.js.map +1 -1
  206. package/lib/cjs/render/webgl/PointCloud.js.map +1 -1
  207. package/lib/cjs/render/webgl/PointString.js.map +1 -1
  208. package/lib/cjs/render/webgl/Polyline.js.map +1 -1
  209. package/lib/cjs/render/webgl/Primitive.js.map +1 -1
  210. package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
  211. package/lib/cjs/render/webgl/RealityModelUniforms.js.map +1 -1
  212. package/lib/cjs/render/webgl/RenderBuffer.js.map +1 -1
  213. package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
  214. package/lib/cjs/render/webgl/RenderFlags.js.map +1 -1
  215. package/lib/cjs/render/webgl/RenderState.js.map +1 -1
  216. package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
  217. package/lib/cjs/render/webgl/ScratchDrawParams.js.map +1 -1
  218. package/lib/cjs/render/webgl/ScreenSpaceEffect.js.map +1 -1
  219. package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
  220. package/lib/cjs/render/webgl/ShaderProgram.js.map +1 -1
  221. package/lib/cjs/render/webgl/ShadowUniforms.js.map +1 -1
  222. package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
  223. package/lib/cjs/render/webgl/StyleUniforms.js.map +1 -1
  224. package/lib/cjs/render/webgl/SurfaceGeometry.js.map +1 -1
  225. package/lib/cjs/render/webgl/Sync.js.map +1 -1
  226. package/lib/cjs/render/webgl/System.js.map +1 -1
  227. package/lib/cjs/render/webgl/Target.js.map +1 -1
  228. package/lib/cjs/render/webgl/TargetGraphics.js.map +1 -1
  229. package/lib/cjs/render/webgl/TargetUniforms.js.map +1 -1
  230. package/lib/cjs/render/webgl/Technique.js.map +1 -1
  231. package/lib/cjs/render/webgl/TechniqueFlags.js.map +1 -1
  232. package/lib/cjs/render/webgl/TechniqueId.js.map +1 -1
  233. package/lib/cjs/render/webgl/Texture.js.map +1 -1
  234. package/lib/cjs/render/webgl/TextureDrape.js.map +1 -1
  235. package/lib/cjs/render/webgl/ThematicSensors.js.map +1 -1
  236. package/lib/cjs/render/webgl/ThematicUniforms.js.map +1 -1
  237. package/lib/cjs/render/webgl/UniformHandle.js.map +1 -1
  238. package/lib/cjs/render/webgl/VertexLUT.js.map +1 -1
  239. package/lib/cjs/render/webgl/ViewRectUniforms.js.map +1 -1
  240. package/lib/cjs/render/webgl/VisibleTileFeatures.js.map +1 -1
  241. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js +154 -154
  242. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js.map +1 -1
  243. package/lib/cjs/render/webgl/glsl/Animation.js +83 -83
  244. package/lib/cjs/render/webgl/glsl/Animation.js.map +1 -1
  245. package/lib/cjs/render/webgl/glsl/Atmosphere.js +266 -266
  246. package/lib/cjs/render/webgl/glsl/Atmosphere.js.map +1 -1
  247. package/lib/cjs/render/webgl/glsl/Blur.js +37 -37
  248. package/lib/cjs/render/webgl/glsl/Blur.js.map +1 -1
  249. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.js +4 -4
  250. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
  251. package/lib/cjs/render/webgl/glsl/ClearTranslucent.js +3 -3
  252. package/lib/cjs/render/webgl/glsl/ClearTranslucent.js.map +1 -1
  253. package/lib/cjs/render/webgl/glsl/Clipping.js +60 -60
  254. package/lib/cjs/render/webgl/glsl/Clipping.js.map +1 -1
  255. package/lib/cjs/render/webgl/glsl/Color.js +12 -12
  256. package/lib/cjs/render/webgl/glsl/Color.js.map +1 -1
  257. package/lib/cjs/render/webgl/glsl/Combine3Textures.js +7 -7
  258. package/lib/cjs/render/webgl/glsl/Combine3Textures.js.map +1 -1
  259. package/lib/cjs/render/webgl/glsl/CombineTextures.js +5 -5
  260. package/lib/cjs/render/webgl/glsl/CombineTextures.js.map +1 -1
  261. package/lib/cjs/render/webgl/glsl/Common.js +16 -16
  262. package/lib/cjs/render/webgl/glsl/Common.js.map +1 -1
  263. package/lib/cjs/render/webgl/glsl/Composite.js +71 -71
  264. package/lib/cjs/render/webgl/glsl/Composite.js.map +1 -1
  265. package/lib/cjs/render/webgl/glsl/CopyColor.js +6 -6
  266. package/lib/cjs/render/webgl/glsl/CopyColor.js.map +1 -1
  267. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.js +3 -3
  268. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.js.map +1 -1
  269. package/lib/cjs/render/webgl/glsl/CopyStencil.js +4 -4
  270. package/lib/cjs/render/webgl/glsl/CopyStencil.js.map +1 -1
  271. package/lib/cjs/render/webgl/glsl/Decode.js +65 -65
  272. package/lib/cjs/render/webgl/glsl/Decode.js.map +1 -1
  273. package/lib/cjs/render/webgl/glsl/EDL.js +103 -103
  274. package/lib/cjs/render/webgl/glsl/EDL.js.map +1 -1
  275. package/lib/cjs/render/webgl/glsl/EVSMFromDepth.js +25 -25
  276. package/lib/cjs/render/webgl/glsl/EVSMFromDepth.js.map +1 -1
  277. package/lib/cjs/render/webgl/glsl/Edge.js +146 -146
  278. package/lib/cjs/render/webgl/glsl/Edge.js.map +1 -1
  279. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +232 -232
  280. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  281. package/lib/cjs/render/webgl/glsl/Fragment.js +41 -41
  282. package/lib/cjs/render/webgl/glsl/Fragment.js.map +1 -1
  283. package/lib/cjs/render/webgl/glsl/Instancing.js +21 -21
  284. package/lib/cjs/render/webgl/glsl/Instancing.js.map +1 -1
  285. package/lib/cjs/render/webgl/glsl/Lighting.js +92 -92
  286. package/lib/cjs/render/webgl/glsl/Lighting.js.map +1 -1
  287. package/lib/cjs/render/webgl/glsl/LogarithmicDepthBuffer.js.map +1 -1
  288. package/lib/cjs/render/webgl/glsl/LookupTable.js +19 -19
  289. package/lib/cjs/render/webgl/glsl/LookupTable.js.map +1 -1
  290. package/lib/cjs/render/webgl/glsl/Monochrome.js +13 -13
  291. package/lib/cjs/render/webgl/glsl/Monochrome.js.map +1 -1
  292. package/lib/cjs/render/webgl/glsl/PlanarClassification.js +188 -188
  293. package/lib/cjs/render/webgl/glsl/PlanarClassification.js.map +1 -1
  294. package/lib/cjs/render/webgl/glsl/PlanarGrid.js +22 -22
  295. package/lib/cjs/render/webgl/glsl/PlanarGrid.js.map +1 -1
  296. package/lib/cjs/render/webgl/glsl/PointCloud.js +28 -28
  297. package/lib/cjs/render/webgl/glsl/PointCloud.js.map +1 -1
  298. package/lib/cjs/render/webgl/glsl/PointString.js +9 -9
  299. package/lib/cjs/render/webgl/glsl/PointString.js.map +1 -1
  300. package/lib/cjs/render/webgl/glsl/Polyline.js +213 -213
  301. package/lib/cjs/render/webgl/glsl/Polyline.js.map +1 -1
  302. package/lib/cjs/render/webgl/glsl/RealityMesh.js +83 -83
  303. package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
  304. package/lib/cjs/render/webgl/glsl/RenderPass.js.map +1 -1
  305. package/lib/cjs/render/webgl/glsl/ScreenSpaceEffect.js +9 -9
  306. package/lib/cjs/render/webgl/glsl/ScreenSpaceEffect.js.map +1 -1
  307. package/lib/cjs/render/webgl/glsl/SkyBox.js.map +1 -1
  308. package/lib/cjs/render/webgl/glsl/SkySphere.js +49 -49
  309. package/lib/cjs/render/webgl/glsl/SkySphere.js.map +1 -1
  310. package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js +51 -51
  311. package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js.map +1 -1
  312. package/lib/cjs/render/webgl/glsl/Surface.js +239 -239
  313. package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
  314. package/lib/cjs/render/webgl/glsl/Thematic.js +134 -134
  315. package/lib/cjs/render/webgl/glsl/Thematic.js.map +1 -1
  316. package/lib/cjs/render/webgl/glsl/Translucency.js +19 -19
  317. package/lib/cjs/render/webgl/glsl/Translucency.js.map +1 -1
  318. package/lib/cjs/render/webgl/glsl/Vertex.js +73 -73
  319. package/lib/cjs/render/webgl/glsl/Vertex.js.map +1 -1
  320. package/lib/cjs/render/webgl/glsl/Viewport.js +38 -38
  321. package/lib/cjs/render/webgl/glsl/Viewport.js.map +1 -1
  322. package/lib/cjs/render/webgl/glsl/ViewportQuad.js.map +1 -1
  323. package/lib/cjs/render/webgl/glsl/Wiremesh.js +10 -10
  324. package/lib/cjs/render/webgl/glsl/Wiremesh.js.map +1 -1
  325. package/lib/cjs/render-primitives.js.map +1 -1
  326. package/lib/cjs/request/Request.js.map +1 -1
  327. package/lib/cjs/tile/B3dmReader.js.map +1 -1
  328. package/lib/cjs/tile/BatchedTileIdMap.js.map +1 -1
  329. package/lib/cjs/tile/CesiumAssetProvider.js.map +1 -1
  330. package/lib/cjs/tile/ClassifierTileTree.js.map +1 -1
  331. package/lib/cjs/tile/ContextShareProvider.js.map +1 -1
  332. package/lib/cjs/tile/DisclosedTileTreeSet.js.map +1 -1
  333. package/lib/cjs/tile/DynamicIModelTile.js.map +1 -1
  334. package/lib/cjs/tile/GltfReader.js.map +1 -1
  335. package/lib/cjs/tile/GraphicsCollector.js.map +1 -1
  336. package/lib/cjs/tile/I3dmReader.js.map +1 -1
  337. package/lib/cjs/tile/IModelTile.js.map +1 -1
  338. package/lib/cjs/tile/IModelTileRequestChannels.js.map +1 -1
  339. package/lib/cjs/tile/IModelTileTree.js.map +1 -1
  340. package/lib/cjs/tile/ImdlDecoder.js.map +1 -1
  341. package/lib/cjs/tile/ImdlGraphicsCreator.js.map +1 -1
  342. package/lib/cjs/tile/ImdlParser.js.map +1 -1
  343. package/lib/cjs/tile/ImdlReader.js.map +1 -1
  344. package/lib/cjs/tile/LRUTileList.js.map +1 -1
  345. package/lib/cjs/tile/OPCFormatInterpreter.js.map +1 -1
  346. package/lib/cjs/tile/PntsReader.js.map +1 -1
  347. package/lib/cjs/tile/RealityTile.js.map +1 -1
  348. package/lib/cjs/tile/RealityTileDrawArgs.js.map +1 -1
  349. package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
  350. package/lib/cjs/tile/RealityTileTree.js +1 -1
  351. package/lib/cjs/tile/RealityTileTree.js.map +1 -1
  352. package/lib/cjs/tile/ThreeDTileFormatInterpreter.js.map +1 -1
  353. package/lib/cjs/tile/Tile.js.map +1 -1
  354. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  355. package/lib/cjs/tile/TileContent.js.map +1 -1
  356. package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
  357. package/lib/cjs/tile/TileGeometryCollector.js.map +1 -1
  358. package/lib/cjs/tile/TileParams.js.map +1 -1
  359. package/lib/cjs/tile/TileRequest.js.map +1 -1
  360. package/lib/cjs/tile/TileRequestChannel.js.map +1 -1
  361. package/lib/cjs/tile/TileRequestChannels.js.map +1 -1
  362. package/lib/cjs/tile/TileStorage.js.map +1 -1
  363. package/lib/cjs/tile/TileTree.js.map +1 -1
  364. package/lib/cjs/tile/TileTreeOwner.js.map +1 -1
  365. package/lib/cjs/tile/TileTreeParams.js.map +1 -1
  366. package/lib/cjs/tile/TileTreeReference.js.map +1 -1
  367. package/lib/cjs/tile/TileTreeSupplier.js.map +1 -1
  368. package/lib/cjs/tile/TileUsageMarker.js.map +1 -1
  369. package/lib/cjs/tile/TileUser.js.map +1 -1
  370. package/lib/cjs/tile/TileUserSet.js.map +1 -1
  371. package/lib/cjs/tile/TiledGraphicsProvider.js.map +1 -1
  372. package/lib/cjs/tile/ViewFlagOverrides.js.map +1 -1
  373. package/lib/cjs/tile/internal.js.map +1 -1
  374. package/lib/cjs/tile/map/ArcGISTileMap.js.map +1 -1
  375. package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
  376. package/lib/cjs/tile/map/BingElevation.js.map +1 -1
  377. package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
  378. package/lib/cjs/tile/map/EllipsoidTerrainProvider.js.map +1 -1
  379. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
  380. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  381. package/lib/cjs/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js.map +1 -1
  382. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  383. package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js.map +1 -1
  384. package/lib/cjs/tile/map/ImageryProviders/TileUrlImageryProvider.js.map +1 -1
  385. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  386. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  387. package/lib/cjs/tile/map/MapCartoRectangle.js.map +1 -1
  388. package/lib/cjs/tile/map/MapFeatureInfo.js.map +1 -1
  389. package/lib/cjs/tile/map/MapLayerAuthentication.js.map +1 -1
  390. package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
  391. package/lib/cjs/tile/map/MapLayerImageryProvider.js +2 -2
  392. package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
  393. package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
  394. package/lib/cjs/tile/map/MapLayerTileTreeReference.js.map +1 -1
  395. package/lib/cjs/tile/map/MapTile.js.map +1 -1
  396. package/lib/cjs/tile/map/MapTileAvailability.js.map +1 -1
  397. package/lib/cjs/tile/map/MapTileLoader.js.map +1 -1
  398. package/lib/cjs/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  399. package/lib/cjs/tile/map/MapTilingScheme.js.map +1 -1
  400. package/lib/cjs/tile/map/QuadId.js.map +1 -1
  401. package/lib/cjs/tile/map/TerrainMeshProvider.js.map +1 -1
  402. package/lib/cjs/tile/map/TerrainProvider.js.map +1 -1
  403. package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
  404. package/lib/cjs/tile/map/WmsUtilities.js.map +1 -1
  405. package/lib/cjs/tile/map/WmtsCapabilities.js.map +1 -1
  406. package/lib/cjs/tools/AccuDrawTool.js.map +1 -1
  407. package/lib/cjs/tools/ClipViewTool.js.map +1 -1
  408. package/lib/cjs/tools/EditManipulator.js.map +1 -1
  409. package/lib/cjs/tools/ElementSetTool.js.map +1 -1
  410. package/lib/cjs/tools/EventController.js.map +1 -1
  411. package/lib/cjs/tools/IdleTool.js.map +1 -1
  412. package/lib/cjs/tools/MeasureTool.js.map +1 -1
  413. package/lib/cjs/tools/PrimitiveTool.js.map +1 -1
  414. package/lib/cjs/tools/SelectTool.js.map +1 -1
  415. package/lib/cjs/tools/ToolAdmin.js.map +1 -1
  416. package/lib/cjs/tools/ToolAssistance.js.map +1 -1
  417. package/lib/cjs/tools/ToolSettings.js.map +1 -1
  418. package/lib/cjs/tools/ViewTool.js.map +1 -1
  419. package/lib/cjs/webgl.js.map +1 -1
  420. package/lib/cjs/workers/ImdlParser/Worker.js.map +1 -1
  421. package/lib/cjs/workers/ImdlParser/webpack.config.js +40 -40
  422. package/lib/cjs/workers/RegisterWorker.js.map +1 -1
  423. package/lib/esm/AccuDraw.js.map +1 -1
  424. package/lib/esm/AccuSnap.js.map +1 -1
  425. package/lib/esm/ApproximateTerrainHeights.js.map +1 -1
  426. package/lib/esm/ApproximateTerrainHeightsProps.js.map +1 -1
  427. package/lib/esm/AuxCoordSys.js.map +1 -1
  428. package/lib/esm/BackgroundMapGeometry.js.map +1 -1
  429. package/lib/esm/BingLocation.js.map +1 -1
  430. package/lib/esm/BriefcaseConnection.js.map +1 -1
  431. package/lib/esm/BriefcaseTxns.js.map +1 -1
  432. package/lib/esm/CategorySelectorState.js.map +1 -1
  433. package/lib/esm/ChangeFlags.js.map +1 -1
  434. package/lib/esm/CheckpointConnection.js.map +1 -1
  435. package/lib/esm/CoordSystem.js.map +1 -1
  436. package/lib/esm/DecorationsCache.js.map +1 -1
  437. package/lib/esm/DevTools.js.map +1 -1
  438. package/lib/esm/DisplayStyleState.js.map +1 -1
  439. package/lib/esm/DrawingViewState.js +5 -5
  440. package/lib/esm/DrawingViewState.js.map +1 -1
  441. package/lib/esm/ElementLocateManager.js.map +1 -1
  442. package/lib/esm/EmphasizeElements.js.map +1 -1
  443. package/lib/esm/EntityState.js.map +1 -1
  444. package/lib/esm/EnvironmentDecorations.js.map +1 -1
  445. package/lib/esm/FeatureOverrideProvider.js.map +1 -1
  446. package/lib/esm/FlashSettings.js.map +1 -1
  447. package/lib/esm/FrontendHubAccess.js.map +1 -1
  448. package/lib/esm/Frustum2d.js.map +1 -1
  449. package/lib/esm/FrustumAnimator.js.map +1 -1
  450. package/lib/esm/FuzzySearch.js.map +1 -1
  451. package/lib/esm/GeoServices.js.map +1 -1
  452. package/lib/esm/GlobeAnimator.js.map +1 -1
  453. package/lib/esm/GraphicalEditingScope.js.map +1 -1
  454. package/lib/esm/HitDetail.js.map +1 -1
  455. package/lib/esm/IModelApp.js.map +1 -1
  456. package/lib/esm/IModelConnection.js +23 -23
  457. package/lib/esm/IModelConnection.js.map +1 -1
  458. package/lib/esm/IModelRoutingContext.js.map +1 -1
  459. package/lib/esm/IModeljs-css.js +133 -133
  460. package/lib/esm/IModeljs-css.js.map +1 -1
  461. package/lib/esm/IpcApp.js.map +1 -1
  462. package/lib/esm/LinePlaneIntersect.js.map +1 -1
  463. package/lib/esm/LocalhostIpcApp.js.map +1 -1
  464. package/lib/esm/MarginPercent.js.map +1 -1
  465. package/lib/esm/Marker.js.map +1 -1
  466. package/lib/esm/ModelSelectorState.js.map +1 -1
  467. package/lib/esm/NativeApp.js.map +1 -1
  468. package/lib/esm/NativeAppLogger.js.map +1 -1
  469. package/lib/esm/NoRenderApp.js.map +1 -1
  470. package/lib/esm/NotificationManager.js.map +1 -1
  471. package/lib/esm/PerModelCategoryVisibility.js.map +1 -1
  472. package/lib/esm/PlanarClipMaskState.js.map +1 -1
  473. package/lib/esm/RealityDataSource.js.map +1 -1
  474. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.js.map +1 -1
  475. package/lib/esm/RealityDataSourceContextShareImpl.js.map +1 -1
  476. package/lib/esm/RealityDataSourceTilesetUrlImpl.js.map +1 -1
  477. package/lib/esm/SelectionSet.js.map +1 -1
  478. package/lib/esm/SheetViewState.js.map +1 -1
  479. package/lib/esm/SpatialViewState.js.map +1 -1
  480. package/lib/esm/Sprites.js.map +1 -1
  481. package/lib/esm/StandardView.js.map +1 -1
  482. package/lib/esm/SubCategoriesCache.js.map +1 -1
  483. package/lib/esm/TentativePoint.js.map +1 -1
  484. package/lib/esm/Tiles.js.map +1 -1
  485. package/lib/esm/UserPreferences.js.map +1 -1
  486. package/lib/esm/ViewAnimation.js.map +1 -1
  487. package/lib/esm/ViewContext.js.map +1 -1
  488. package/lib/esm/ViewCreator2d.js.map +1 -1
  489. package/lib/esm/ViewCreator3d.js.map +1 -1
  490. package/lib/esm/ViewGlobalLocation.js.map +1 -1
  491. package/lib/esm/ViewManager.js.map +1 -1
  492. package/lib/esm/ViewPose.js.map +1 -1
  493. package/lib/esm/ViewState.js.map +1 -1
  494. package/lib/esm/ViewStatus.js.map +1 -1
  495. package/lib/esm/ViewingSpace.js.map +1 -1
  496. package/lib/esm/Viewport.js.map +1 -1
  497. package/lib/esm/ViewportSync.js.map +1 -1
  498. package/lib/esm/common/FrontendLoggerCategory.js.map +1 -1
  499. package/lib/esm/common/ImageUtil.js.map +1 -1
  500. package/lib/esm/common/ViewRect.js.map +1 -1
  501. package/lib/esm/common/WorkerProxy.js.map +1 -1
  502. package/lib/esm/common/gltf/GltfModel.js.map +1 -1
  503. package/lib/esm/common/gltf/GltfParser.js.map +1 -1
  504. package/lib/esm/common/gltf/GltfSchema.js.map +1 -1
  505. package/lib/esm/common/imdl/CompactEdges.js.map +1 -1
  506. package/lib/esm/common/imdl/ImdlModel.js.map +1 -1
  507. package/lib/esm/common/imdl/ImdlSchema.js.map +1 -1
  508. package/lib/esm/common/imdl/ParseImdlDocument.js.map +1 -1
  509. package/lib/esm/common/render/AnimationNodeId.js.map +1 -1
  510. package/lib/esm/common/render/MaterialParams.js.map +1 -1
  511. package/lib/esm/common/render/TextureParams.js.map +1 -1
  512. package/lib/esm/common/render/primitives/AuxChannelTable.js.map +1 -1
  513. package/lib/esm/common/render/primitives/DisplayParams.js.map +1 -1
  514. package/lib/esm/common/render/primitives/EdgeParams.js.map +1 -1
  515. package/lib/esm/common/render/primitives/MeshParams.js.map +1 -1
  516. package/lib/esm/common/render/primitives/MeshPrimitive.js.map +1 -1
  517. package/lib/esm/common/render/primitives/PointStringParams.js.map +1 -1
  518. package/lib/esm/common/render/primitives/PolylineParams.js.map +1 -1
  519. package/lib/esm/common/render/primitives/SurfaceParams.js.map +1 -1
  520. package/lib/esm/common/render/primitives/VertexIndices.js.map +1 -1
  521. package/lib/esm/common/render/primitives/VertexTable.js.map +1 -1
  522. package/lib/esm/common/render/primitives/VertexTableSplitter.js.map +1 -1
  523. package/lib/esm/core-frontend.js.map +1 -1
  524. package/lib/esm/extension/Extension.js.map +1 -1
  525. package/lib/esm/extension/ExtensionAdmin.js.map +1 -1
  526. package/lib/esm/extension/ExtensionHost.js.map +1 -1
  527. package/lib/esm/extension/ExtensionRuntime.js.map +1 -1
  528. package/lib/esm/extension/providers/ExtensionLoadScript.js.map +1 -1
  529. package/lib/esm/extension/providers/LocalExtensionProvider.js.map +1 -1
  530. package/lib/esm/extension/providers/RemoteExtensionProvider.js.map +1 -1
  531. package/lib/esm/properties/AngleDescription.js.map +1 -1
  532. package/lib/esm/properties/FormattedQuantityDescription.js.map +1 -1
  533. package/lib/esm/properties/LengthDescription.js.map +1 -1
  534. package/lib/esm/public/scripts/checkbrowser.js +24 -24
  535. package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
  536. package/lib/esm/quantity-formatting/BasicUnitsProvider.js.map +1 -1
  537. package/lib/esm/quantity-formatting/LocalUnitFormatProvider.js.map +1 -1
  538. package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
  539. package/lib/esm/quantity-formatting/QuantityTypesEditorSpecs.js.map +1 -1
  540. package/lib/esm/quantity-formatting/UnitsData.js.map +1 -1
  541. package/lib/esm/render/CanvasDecoration.js.map +1 -1
  542. package/lib/esm/render/CreateRenderMaterialArgs.js.map +1 -1
  543. package/lib/esm/render/CreateTextureArgs.js.map +1 -1
  544. package/lib/esm/render/Decorations.js.map +1 -1
  545. package/lib/esm/render/FeatureSymbology.js.map +1 -1
  546. package/lib/esm/render/FrameStats.js.map +1 -1
  547. package/lib/esm/render/GraphicBranch.js.map +1 -1
  548. package/lib/esm/render/GraphicBuilder.js.map +1 -1
  549. package/lib/esm/render/GraphicPrimitive.js.map +1 -1
  550. package/lib/esm/render/InstancedGraphicParams.js.map +1 -1
  551. package/lib/esm/render/MockRender.js.map +1 -1
  552. package/lib/esm/render/ParticleCollectionBuilder.js.map +1 -1
  553. package/lib/esm/render/Pixel.js.map +1 -1
  554. package/lib/esm/render/RealityMeshGraphicParams.js.map +1 -1
  555. package/lib/esm/render/RealityMeshParams.js.map +1 -1
  556. package/lib/esm/render/RenderClipVolume.js.map +1 -1
  557. package/lib/esm/render/RenderGraphic.js.map +1 -1
  558. package/lib/esm/render/RenderMemory.js.map +1 -1
  559. package/lib/esm/render/RenderPlan.js.map +1 -1
  560. package/lib/esm/render/RenderPlanarClassifier.js.map +1 -1
  561. package/lib/esm/render/RenderSystem.js.map +1 -1
  562. package/lib/esm/render/RenderTarget.js.map +1 -1
  563. package/lib/esm/render/Scene.js.map +1 -1
  564. package/lib/esm/render/ScreenSpaceEffectBuilder.js.map +1 -1
  565. package/lib/esm/render/UpsampleRealityMeshParams.js.map +1 -1
  566. package/lib/esm/render/VisibleFeature.js.map +1 -1
  567. package/lib/esm/render/primitives/ColorMap.js.map +1 -1
  568. package/lib/esm/render/primitives/EdgeParams.js.map +1 -1
  569. package/lib/esm/render/primitives/PointCloudPrimitive.js.map +1 -1
  570. package/lib/esm/render/primitives/PointStringParams.js.map +1 -1
  571. package/lib/esm/render/primitives/Polyface.js.map +1 -1
  572. package/lib/esm/render/primitives/PolylineParams.js.map +1 -1
  573. package/lib/esm/render/primitives/Primitives.js.map +1 -1
  574. package/lib/esm/render/primitives/Strokes.js.map +1 -1
  575. package/lib/esm/render/primitives/VertexKey.js.map +1 -1
  576. package/lib/esm/render/primitives/VertexTableBuilder.js.map +1 -1
  577. package/lib/esm/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  578. package/lib/esm/render/primitives/geometry/GeometryList.js.map +1 -1
  579. package/lib/esm/render/primitives/geometry/GeometryListBuilder.js.map +1 -1
  580. package/lib/esm/render/primitives/geometry/GeometryPrimitives.js.map +1 -1
  581. package/lib/esm/render/primitives/mesh/MeshBuilder.js.map +1 -1
  582. package/lib/esm/render/primitives/mesh/MeshBuilderMap.js.map +1 -1
  583. package/lib/esm/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  584. package/lib/esm/render/webgl/AtmosphereUniforms.js.map +1 -1
  585. package/lib/esm/render/webgl/AttributeBuffers.js.map +1 -1
  586. package/lib/esm/render/webgl/AttributeMap.js.map +1 -1
  587. package/lib/esm/render/webgl/BackgroundMapDrape.js.map +1 -1
  588. package/lib/esm/render/webgl/BatchState.js.map +1 -1
  589. package/lib/esm/render/webgl/BatchUniforms.js.map +1 -1
  590. package/lib/esm/render/webgl/BranchStack.js.map +1 -1
  591. package/lib/esm/render/webgl/BranchState.js.map +1 -1
  592. package/lib/esm/render/webgl/BranchUniforms.js.map +1 -1
  593. package/lib/esm/render/webgl/CachedGeometry.js.map +1 -1
  594. package/lib/esm/render/webgl/ClipStack.js.map +1 -1
  595. package/lib/esm/render/webgl/ClipVolume.js.map +1 -1
  596. package/lib/esm/render/webgl/ClippingProgram.js.map +1 -1
  597. package/lib/esm/render/webgl/ColorInfo.js.map +1 -1
  598. package/lib/esm/render/webgl/Diagnostics.js.map +1 -1
  599. package/lib/esm/render/webgl/Disposable.js.map +1 -1
  600. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  601. package/lib/esm/render/webgl/EDL.js.map +1 -1
  602. package/lib/esm/render/webgl/EdgeGeometry.js.map +1 -1
  603. package/lib/esm/render/webgl/EdgeSettings.js.map +1 -1
  604. package/lib/esm/render/webgl/FeatureOverrides.js.map +1 -1
  605. package/lib/esm/render/webgl/FloatRGBA.js.map +1 -1
  606. package/lib/esm/render/webgl/FrameBuffer.js.map +1 -1
  607. package/lib/esm/render/webgl/FrustumUniforms.js.map +1 -1
  608. package/lib/esm/render/webgl/GL.js.map +1 -1
  609. package/lib/esm/render/webgl/GLTimer.js.map +1 -1
  610. package/lib/esm/render/webgl/Graphic.js.map +1 -1
  611. package/lib/esm/render/webgl/HiliteUniforms.js.map +1 -1
  612. package/lib/esm/render/webgl/IModelFrameLifecycle.js.map +1 -1
  613. package/lib/esm/render/webgl/IndexedEdgeGeometry.js.map +1 -1
  614. package/lib/esm/render/webgl/InstancedGeometry.js.map +1 -1
  615. package/lib/esm/render/webgl/Layer.js.map +1 -1
  616. package/lib/esm/render/webgl/LayerCommands.js.map +1 -1
  617. package/lib/esm/render/webgl/LightingUniforms.js.map +1 -1
  618. package/lib/esm/render/webgl/LineCode.js.map +1 -1
  619. package/lib/esm/render/webgl/Material.js.map +1 -1
  620. package/lib/esm/render/webgl/Matrix.js.map +1 -1
  621. package/lib/esm/render/webgl/Mesh.js.map +1 -1
  622. package/lib/esm/render/webgl/MeshData.js.map +1 -1
  623. package/lib/esm/render/webgl/MeshGeometry.js.map +1 -1
  624. package/lib/esm/render/webgl/PerformanceMetrics.js.map +1 -1
  625. package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
  626. package/lib/esm/render/webgl/PlanarGrid.js.map +1 -1
  627. package/lib/esm/render/webgl/PlanarTextureProjection.js.map +1 -1
  628. package/lib/esm/render/webgl/PointCloud.js.map +1 -1
  629. package/lib/esm/render/webgl/PointString.js.map +1 -1
  630. package/lib/esm/render/webgl/Polyline.js.map +1 -1
  631. package/lib/esm/render/webgl/Primitive.js.map +1 -1
  632. package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
  633. package/lib/esm/render/webgl/RealityModelUniforms.js.map +1 -1
  634. package/lib/esm/render/webgl/RenderBuffer.js.map +1 -1
  635. package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
  636. package/lib/esm/render/webgl/RenderFlags.js.map +1 -1
  637. package/lib/esm/render/webgl/RenderState.js.map +1 -1
  638. package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
  639. package/lib/esm/render/webgl/ScratchDrawParams.js.map +1 -1
  640. package/lib/esm/render/webgl/ScreenSpaceEffect.js.map +1 -1
  641. package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
  642. package/lib/esm/render/webgl/ShaderProgram.js.map +1 -1
  643. package/lib/esm/render/webgl/ShadowUniforms.js.map +1 -1
  644. package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
  645. package/lib/esm/render/webgl/StyleUniforms.js.map +1 -1
  646. package/lib/esm/render/webgl/SurfaceGeometry.js.map +1 -1
  647. package/lib/esm/render/webgl/Sync.js.map +1 -1
  648. package/lib/esm/render/webgl/System.js.map +1 -1
  649. package/lib/esm/render/webgl/Target.js.map +1 -1
  650. package/lib/esm/render/webgl/TargetGraphics.js.map +1 -1
  651. package/lib/esm/render/webgl/TargetUniforms.js.map +1 -1
  652. package/lib/esm/render/webgl/Technique.js.map +1 -1
  653. package/lib/esm/render/webgl/TechniqueFlags.js.map +1 -1
  654. package/lib/esm/render/webgl/TechniqueId.js.map +1 -1
  655. package/lib/esm/render/webgl/Texture.js.map +1 -1
  656. package/lib/esm/render/webgl/TextureDrape.js.map +1 -1
  657. package/lib/esm/render/webgl/ThematicSensors.js.map +1 -1
  658. package/lib/esm/render/webgl/ThematicUniforms.js.map +1 -1
  659. package/lib/esm/render/webgl/UniformHandle.js.map +1 -1
  660. package/lib/esm/render/webgl/VertexLUT.js.map +1 -1
  661. package/lib/esm/render/webgl/ViewRectUniforms.js.map +1 -1
  662. package/lib/esm/render/webgl/VisibleTileFeatures.js.map +1 -1
  663. package/lib/esm/render/webgl/glsl/AmbientOcclusion.js +154 -154
  664. package/lib/esm/render/webgl/glsl/AmbientOcclusion.js.map +1 -1
  665. package/lib/esm/render/webgl/glsl/Animation.js +83 -83
  666. package/lib/esm/render/webgl/glsl/Animation.js.map +1 -1
  667. package/lib/esm/render/webgl/glsl/Atmosphere.js +266 -266
  668. package/lib/esm/render/webgl/glsl/Atmosphere.js.map +1 -1
  669. package/lib/esm/render/webgl/glsl/Blur.js +37 -37
  670. package/lib/esm/render/webgl/glsl/Blur.js.map +1 -1
  671. package/lib/esm/render/webgl/glsl/ClearPickAndColor.js +4 -4
  672. package/lib/esm/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
  673. package/lib/esm/render/webgl/glsl/ClearTranslucent.js +3 -3
  674. package/lib/esm/render/webgl/glsl/ClearTranslucent.js.map +1 -1
  675. package/lib/esm/render/webgl/glsl/Clipping.js +60 -60
  676. package/lib/esm/render/webgl/glsl/Clipping.js.map +1 -1
  677. package/lib/esm/render/webgl/glsl/Color.js +12 -12
  678. package/lib/esm/render/webgl/glsl/Color.js.map +1 -1
  679. package/lib/esm/render/webgl/glsl/Combine3Textures.js +7 -7
  680. package/lib/esm/render/webgl/glsl/Combine3Textures.js.map +1 -1
  681. package/lib/esm/render/webgl/glsl/CombineTextures.js +5 -5
  682. package/lib/esm/render/webgl/glsl/CombineTextures.js.map +1 -1
  683. package/lib/esm/render/webgl/glsl/Common.js +16 -16
  684. package/lib/esm/render/webgl/glsl/Common.js.map +1 -1
  685. package/lib/esm/render/webgl/glsl/Composite.js +71 -71
  686. package/lib/esm/render/webgl/glsl/Composite.js.map +1 -1
  687. package/lib/esm/render/webgl/glsl/CopyColor.js +6 -6
  688. package/lib/esm/render/webgl/glsl/CopyColor.js.map +1 -1
  689. package/lib/esm/render/webgl/glsl/CopyPickBuffers.js +3 -3
  690. package/lib/esm/render/webgl/glsl/CopyPickBuffers.js.map +1 -1
  691. package/lib/esm/render/webgl/glsl/CopyStencil.js +4 -4
  692. package/lib/esm/render/webgl/glsl/CopyStencil.js.map +1 -1
  693. package/lib/esm/render/webgl/glsl/Decode.js +65 -65
  694. package/lib/esm/render/webgl/glsl/Decode.js.map +1 -1
  695. package/lib/esm/render/webgl/glsl/EDL.js +103 -103
  696. package/lib/esm/render/webgl/glsl/EDL.js.map +1 -1
  697. package/lib/esm/render/webgl/glsl/EVSMFromDepth.js +25 -25
  698. package/lib/esm/render/webgl/glsl/EVSMFromDepth.js.map +1 -1
  699. package/lib/esm/render/webgl/glsl/Edge.js +146 -146
  700. package/lib/esm/render/webgl/glsl/Edge.js.map +1 -1
  701. package/lib/esm/render/webgl/glsl/FeatureSymbology.js +232 -232
  702. package/lib/esm/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  703. package/lib/esm/render/webgl/glsl/Fragment.js +41 -41
  704. package/lib/esm/render/webgl/glsl/Fragment.js.map +1 -1
  705. package/lib/esm/render/webgl/glsl/Instancing.js +21 -21
  706. package/lib/esm/render/webgl/glsl/Instancing.js.map +1 -1
  707. package/lib/esm/render/webgl/glsl/Lighting.js +92 -92
  708. package/lib/esm/render/webgl/glsl/Lighting.js.map +1 -1
  709. package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.js.map +1 -1
  710. package/lib/esm/render/webgl/glsl/LookupTable.js +19 -19
  711. package/lib/esm/render/webgl/glsl/LookupTable.js.map +1 -1
  712. package/lib/esm/render/webgl/glsl/Monochrome.js +13 -13
  713. package/lib/esm/render/webgl/glsl/Monochrome.js.map +1 -1
  714. package/lib/esm/render/webgl/glsl/PlanarClassification.js +188 -188
  715. package/lib/esm/render/webgl/glsl/PlanarClassification.js.map +1 -1
  716. package/lib/esm/render/webgl/glsl/PlanarGrid.js +22 -22
  717. package/lib/esm/render/webgl/glsl/PlanarGrid.js.map +1 -1
  718. package/lib/esm/render/webgl/glsl/PointCloud.js +28 -28
  719. package/lib/esm/render/webgl/glsl/PointCloud.js.map +1 -1
  720. package/lib/esm/render/webgl/glsl/PointString.js +9 -9
  721. package/lib/esm/render/webgl/glsl/PointString.js.map +1 -1
  722. package/lib/esm/render/webgl/glsl/Polyline.js +213 -213
  723. package/lib/esm/render/webgl/glsl/Polyline.js.map +1 -1
  724. package/lib/esm/render/webgl/glsl/RealityMesh.js +83 -83
  725. package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
  726. package/lib/esm/render/webgl/glsl/RenderPass.js.map +1 -1
  727. package/lib/esm/render/webgl/glsl/ScreenSpaceEffect.js +9 -9
  728. package/lib/esm/render/webgl/glsl/ScreenSpaceEffect.js.map +1 -1
  729. package/lib/esm/render/webgl/glsl/SkyBox.js.map +1 -1
  730. package/lib/esm/render/webgl/glsl/SkySphere.js +49 -49
  731. package/lib/esm/render/webgl/glsl/SkySphere.js.map +1 -1
  732. package/lib/esm/render/webgl/glsl/SolarShadowMapping.js +51 -51
  733. package/lib/esm/render/webgl/glsl/SolarShadowMapping.js.map +1 -1
  734. package/lib/esm/render/webgl/glsl/Surface.js +239 -239
  735. package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
  736. package/lib/esm/render/webgl/glsl/Thematic.js +134 -134
  737. package/lib/esm/render/webgl/glsl/Thematic.js.map +1 -1
  738. package/lib/esm/render/webgl/glsl/Translucency.js +19 -19
  739. package/lib/esm/render/webgl/glsl/Translucency.js.map +1 -1
  740. package/lib/esm/render/webgl/glsl/Vertex.js +73 -73
  741. package/lib/esm/render/webgl/glsl/Vertex.js.map +1 -1
  742. package/lib/esm/render/webgl/glsl/Viewport.js +38 -38
  743. package/lib/esm/render/webgl/glsl/Viewport.js.map +1 -1
  744. package/lib/esm/render/webgl/glsl/ViewportQuad.js.map +1 -1
  745. package/lib/esm/render/webgl/glsl/Wiremesh.js +10 -10
  746. package/lib/esm/render/webgl/glsl/Wiremesh.js.map +1 -1
  747. package/lib/esm/render-primitives.js.map +1 -1
  748. package/lib/esm/request/Request.js.map +1 -1
  749. package/lib/esm/tile/B3dmReader.js.map +1 -1
  750. package/lib/esm/tile/BatchedTileIdMap.js.map +1 -1
  751. package/lib/esm/tile/CesiumAssetProvider.js.map +1 -1
  752. package/lib/esm/tile/ClassifierTileTree.js.map +1 -1
  753. package/lib/esm/tile/ContextShareProvider.js.map +1 -1
  754. package/lib/esm/tile/DisclosedTileTreeSet.js.map +1 -1
  755. package/lib/esm/tile/DynamicIModelTile.js.map +1 -1
  756. package/lib/esm/tile/GltfReader.js.map +1 -1
  757. package/lib/esm/tile/GraphicsCollector.js.map +1 -1
  758. package/lib/esm/tile/I3dmReader.js.map +1 -1
  759. package/lib/esm/tile/IModelTile.js.map +1 -1
  760. package/lib/esm/tile/IModelTileRequestChannels.js.map +1 -1
  761. package/lib/esm/tile/IModelTileTree.js.map +1 -1
  762. package/lib/esm/tile/ImdlDecoder.js.map +1 -1
  763. package/lib/esm/tile/ImdlGraphicsCreator.js.map +1 -1
  764. package/lib/esm/tile/ImdlParser.js.map +1 -1
  765. package/lib/esm/tile/ImdlReader.js.map +1 -1
  766. package/lib/esm/tile/LRUTileList.js.map +1 -1
  767. package/lib/esm/tile/OPCFormatInterpreter.js.map +1 -1
  768. package/lib/esm/tile/PntsReader.js.map +1 -1
  769. package/lib/esm/tile/RealityTile.js.map +1 -1
  770. package/lib/esm/tile/RealityTileDrawArgs.js.map +1 -1
  771. package/lib/esm/tile/RealityTileLoader.js.map +1 -1
  772. package/lib/esm/tile/RealityTileTree.js +1 -1
  773. package/lib/esm/tile/RealityTileTree.js.map +1 -1
  774. package/lib/esm/tile/ThreeDTileFormatInterpreter.js.map +1 -1
  775. package/lib/esm/tile/Tile.js.map +1 -1
  776. package/lib/esm/tile/TileAdmin.js.map +1 -1
  777. package/lib/esm/tile/TileContent.js.map +1 -1
  778. package/lib/esm/tile/TileDrawArgs.js.map +1 -1
  779. package/lib/esm/tile/TileGeometryCollector.js.map +1 -1
  780. package/lib/esm/tile/TileParams.js.map +1 -1
  781. package/lib/esm/tile/TileRequest.js.map +1 -1
  782. package/lib/esm/tile/TileRequestChannel.js.map +1 -1
  783. package/lib/esm/tile/TileRequestChannels.js.map +1 -1
  784. package/lib/esm/tile/TileStorage.js.map +1 -1
  785. package/lib/esm/tile/TileTree.js.map +1 -1
  786. package/lib/esm/tile/TileTreeOwner.js.map +1 -1
  787. package/lib/esm/tile/TileTreeParams.js.map +1 -1
  788. package/lib/esm/tile/TileTreeReference.js.map +1 -1
  789. package/lib/esm/tile/TileTreeSupplier.js.map +1 -1
  790. package/lib/esm/tile/TileUsageMarker.js.map +1 -1
  791. package/lib/esm/tile/TileUser.js.map +1 -1
  792. package/lib/esm/tile/TileUserSet.js.map +1 -1
  793. package/lib/esm/tile/TiledGraphicsProvider.js.map +1 -1
  794. package/lib/esm/tile/ViewFlagOverrides.js.map +1 -1
  795. package/lib/esm/tile/internal.js.map +1 -1
  796. package/lib/esm/tile/map/ArcGISTileMap.js.map +1 -1
  797. package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
  798. package/lib/esm/tile/map/BingElevation.js.map +1 -1
  799. package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
  800. package/lib/esm/tile/map/EllipsoidTerrainProvider.js.map +1 -1
  801. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
  802. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  803. package/lib/esm/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js.map +1 -1
  804. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  805. package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js.map +1 -1
  806. package/lib/esm/tile/map/ImageryProviders/TileUrlImageryProvider.js.map +1 -1
  807. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  808. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  809. package/lib/esm/tile/map/MapCartoRectangle.js.map +1 -1
  810. package/lib/esm/tile/map/MapFeatureInfo.js.map +1 -1
  811. package/lib/esm/tile/map/MapLayerAuthentication.js.map +1 -1
  812. package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
  813. package/lib/esm/tile/map/MapLayerImageryProvider.js +2 -2
  814. package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
  815. package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
  816. package/lib/esm/tile/map/MapLayerTileTreeReference.js.map +1 -1
  817. package/lib/esm/tile/map/MapTile.js.map +1 -1
  818. package/lib/esm/tile/map/MapTileAvailability.js.map +1 -1
  819. package/lib/esm/tile/map/MapTileLoader.js.map +1 -1
  820. package/lib/esm/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  821. package/lib/esm/tile/map/MapTilingScheme.js.map +1 -1
  822. package/lib/esm/tile/map/QuadId.js.map +1 -1
  823. package/lib/esm/tile/map/TerrainMeshProvider.js.map +1 -1
  824. package/lib/esm/tile/map/TerrainProvider.js.map +1 -1
  825. package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
  826. package/lib/esm/tile/map/WmsUtilities.js.map +1 -1
  827. package/lib/esm/tile/map/WmtsCapabilities.js.map +1 -1
  828. package/lib/esm/tools/AccuDrawTool.js.map +1 -1
  829. package/lib/esm/tools/ClipViewTool.js.map +1 -1
  830. package/lib/esm/tools/EditManipulator.js.map +1 -1
  831. package/lib/esm/tools/ElementSetTool.js.map +1 -1
  832. package/lib/esm/tools/EventController.js.map +1 -1
  833. package/lib/esm/tools/IdleTool.js.map +1 -1
  834. package/lib/esm/tools/MeasureTool.js.map +1 -1
  835. package/lib/esm/tools/PrimitiveTool.js.map +1 -1
  836. package/lib/esm/tools/SelectTool.js.map +1 -1
  837. package/lib/esm/tools/ToolAdmin.js.map +1 -1
  838. package/lib/esm/tools/ToolAssistance.js.map +1 -1
  839. package/lib/esm/tools/ToolSettings.js.map +1 -1
  840. package/lib/esm/tools/ViewTool.js.map +1 -1
  841. package/lib/esm/webgl.js.map +1 -1
  842. package/lib/esm/workers/ImdlParser/Worker.js.map +1 -1
  843. package/lib/esm/workers/ImdlParser/webpack.config.js +40 -40
  844. package/lib/esm/workers/RegisterWorker.js.map +1 -1
  845. package/lib/public/assets/MapLayerSources.json +25 -25
  846. package/lib/public/images/cesium-ion.svg +92 -92
  847. package/lib/public/images/imodeljs-icon.svg +2 -2
  848. package/lib/public/locales/en/CoreTools.json +477 -477
  849. package/lib/public/locales/en/iModelJs.json +170 -170
  850. package/lib/public/scripts/checkbrowser.js +24 -24
  851. package/package.json +23 -22
@@ -1 +1 @@
1
- {"version":3,"file":"TargetUniforms.js","sourceRoot":"","sources":["../../../../src/render/webgl/TargetUniforms.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 { Matrix4d, Vector3d } from \"@itwin/core-geometry\";\r\nimport { RenderPlan } from \"../RenderPlan\";\r\nimport { BatchUniforms } from \"./BatchUniforms\";\r\nimport { BranchUniforms } from \"./BranchUniforms\";\r\nimport { FrustumUniforms, FrustumUniformType } from \"./FrustumUniforms\";\r\nimport { UniformHandle } from \"./UniformHandle\";\r\nimport { HiliteUniforms } from \"./HiliteUniforms\";\r\nimport { LightingUniforms } from \"./LightingUniforms\";\r\nimport { Matrix4 } from \"./Matrix\";\r\nimport { ShadowUniforms } from \"./ShadowUniforms\";\r\nimport { StyleUniforms } from \"./StyleUniforms\";\r\nimport { desync, sync, SyncObserver, SyncToken } from \"./Sync\";\r\nimport { Target } from \"./Target\";\r\nimport { ThematicUniforms } from \"./ThematicUniforms\";\r\nimport { ViewRectUniforms } from \"./ViewRectUniforms\";\r\nimport { RealityModelUniforms } from \"./RealityModelUniforms\";\r\nimport { AtmosphereUniforms } from \"./AtmosphereUniforms\";\r\n\r\nclass PixelWidthFactor {\r\n /** The pixel width factor depends on both the frustum and the view rect. It also depends on the frustum scale associated with the current Branch. */\r\n private readonly _rectSync: SyncObserver = {};\r\n private readonly _frustumSync: SyncObserver = {};\r\n private readonly _branchSync: SyncObserver = {};\r\n private _factor = 0;\r\n public syncKey = 0;\r\n\r\n public bind(uniform: UniformHandle, uniforms: TargetUniforms): void {\r\n if (!sync(uniforms.frustum, this._frustumSync) || !sync(uniforms.viewRect, this._rectSync) || !sync(uniforms.branch, this._branchSync))\r\n this.compute(uniforms.frustum, uniforms.viewRect.width, uniforms.viewRect.height, uniforms.branch.top.frustumScale);\r\n\r\n if (!sync(this, uniform))\r\n uniform.setUniform1f(this._factor);\r\n }\r\n\r\n private compute(frustumUniforms: FrustumUniforms, width: number, height: number, scale: { x: number, y: number }): void {\r\n desync(this);\r\n\r\n const frustumPlanes = frustumUniforms.planes;\r\n const top = frustumPlanes[0];\r\n const bottom = frustumPlanes[1];\r\n const left = frustumPlanes[2];\r\n const right = frustumPlanes[3];\r\n\r\n let halfPixelWidth: number;\r\n let halfPixelHeight: number;\r\n\r\n const frustum = frustumUniforms.frustum;\r\n\r\n if (FrustumUniformType.Perspective === frustumUniforms.type) {\r\n const inverseNear = 1.0 / frustum[0];\r\n const tanTheta = top * inverseNear;\r\n halfPixelHeight = scale.x * tanTheta / height;\r\n halfPixelWidth = scale.y * tanTheta / width;\r\n } else {\r\n halfPixelWidth = scale.x * 0.5 * (right - left) / width;\r\n halfPixelHeight = scale.y * 0.5 * (top - bottom) / height;\r\n }\r\n\r\n this._factor = Math.sqrt(halfPixelWidth * halfPixelWidth + halfPixelHeight * halfPixelHeight);\r\n }\r\n}\r\n\r\n// Direction in view space used if solar shadows are disabled and LightSettings.useSolarLighting is false.\r\nconst defaultSunDirectionView = new Vector3d(0.272166, 0.680414, 0.680414);\r\n\r\nclass SunDirection {\r\n // Sun direction is passed to shader in view coords so depends upon frustum.\r\n public syncToken?: SyncToken;\r\n public syncKey = 0;\r\n private _haveWorldDir = false;\r\n private readonly _worldDir = Vector3d.unitZ();\r\n private readonly _viewDir = defaultSunDirectionView.clone();\r\n private readonly _viewDir32 = new Float32Array(3);\r\n private _updated = true;\r\n\r\n public update(sunDir: Vector3d | undefined): void {\r\n const haveWorldDir = undefined !== sunDir;\r\n if (haveWorldDir !== this._haveWorldDir || (sunDir && !sunDir.isExactEqual(this._worldDir))) {\r\n this._updated = true;\r\n desync(this);\r\n\r\n this._haveWorldDir = haveWorldDir;\r\n if (sunDir) {\r\n sunDir.clone(this._worldDir);\r\n this._worldDir.normalizeInPlace();\r\n }\r\n }\r\n }\r\n\r\n public bind(uniform: UniformHandle, uniforms: TargetUniforms): void {\r\n if (!sync(uniforms.frustum, this) || this._updated) {\r\n if (this._haveWorldDir) {\r\n uniforms.frustum.viewMatrix.multiplyVector(this._worldDir, this._viewDir);\r\n this._viewDir.negate(this._viewDir);\r\n } else {\r\n defaultSunDirectionView.clone(this._viewDir);\r\n }\r\n\r\n this._viewDir.normalizeInPlace();\r\n this._viewDir32[0] = this._viewDir.x;\r\n this._viewDir32[1] = this._viewDir.y;\r\n this._viewDir32[2] = this._viewDir.z;\r\n\r\n desync(this);\r\n this._updated = false;\r\n }\r\n\r\n if (!sync(this, uniform))\r\n uniform.setUniform3fv(this._viewDir32);\r\n }\r\n}\r\n\r\n/** Holds state for commonly-used uniforms to avoid unnecessary recomputation, owned by a Target.\r\n * DO NOT directly modify exposed members of the objects exposed by this class. Use their APIs.\r\n * e.g., code like `target.uniforms.frustum.projectionMatrix.setFrom(someOtherMatrix)` or `target.uniforms.branch.top.setViewFlags(blah)` will cause bugs.\r\n * @internal\r\n */\r\nexport class TargetUniforms {\r\n public readonly frustum: FrustumUniforms;\r\n public readonly viewRect = new ViewRectUniforms();\r\n public readonly hilite = new HiliteUniforms();\r\n public readonly style = new StyleUniforms();\r\n public readonly lights = new LightingUniforms();\r\n public readonly thematic = new ThematicUniforms();\r\n public readonly branch: BranchUniforms;\r\n public readonly batch: BatchUniforms;\r\n public readonly shadow: ShadowUniforms;\r\n public readonly realityModel = new RealityModelUniforms();\r\n public readonly atmosphere = new AtmosphereUniforms();\r\n private readonly _pixelWidthFactor = new PixelWidthFactor();\r\n private readonly _sunDirection = new SunDirection();\r\n\r\n public constructor(target: Target) {\r\n this.frustum = new FrustumUniforms();\r\n this.branch = new BranchUniforms(target);\r\n this.batch = new BatchUniforms(target, this.branch.createBatchState());\r\n this.shadow = new ShadowUniforms(target);\r\n }\r\n\r\n public getProjectionMatrix(forViewCoords: boolean): Matrix4d {\r\n return forViewCoords ? this.viewRect.projectionMatrix : this.frustum.projectionMatrix;\r\n }\r\n\r\n public getProjectionMatrix32(forViewCoords: boolean): Matrix4 {\r\n return forViewCoords ? this.viewRect.projectionMatrix32 : this.frustum.projectionMatrix32;\r\n }\r\n\r\n public bindProjectionMatrix(uniform: UniformHandle, forViewCoords: boolean): void {\r\n if (forViewCoords)\r\n this.viewRect.bindProjectionMatrix(uniform);\r\n else\r\n this.frustum.bindProjectionMatrix(uniform);\r\n }\r\n\r\n public bindPixelWidthFactor(uniform: UniformHandle): void {\r\n this._pixelWidthFactor.bind(uniform, this);\r\n }\r\n\r\n public bindSunDirection(uniform: UniformHandle): void {\r\n this._sunDirection.bind(uniform, this);\r\n }\r\n\r\n public updateRenderPlan(plan: RenderPlan): void {\r\n this.style.update(plan);\r\n this.hilite.update(plan.hiliteSettings, plan.emphasisSettings);\r\n\r\n let sunDir;\r\n if (plan.lights) {\r\n this.lights.update(plan.lights);\r\n\r\n const useSunDir = plan.viewFlags.shadows || plan.lights.solar.alwaysEnabled;\r\n if (useSunDir)\r\n sunDir = plan.lights.solar.direction;\r\n }\r\n\r\n this._sunDirection.update(sunDir);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"TargetUniforms.js","sourceRoot":"","sources":["../../../../src/render/webgl/TargetUniforms.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module WebGL\n */\n\nimport { Matrix4d, Vector3d } from \"@itwin/core-geometry\";\nimport { RenderPlan } from \"../RenderPlan\";\nimport { BatchUniforms } from \"./BatchUniforms\";\nimport { BranchUniforms } from \"./BranchUniforms\";\nimport { FrustumUniforms, FrustumUniformType } from \"./FrustumUniforms\";\nimport { UniformHandle } from \"./UniformHandle\";\nimport { HiliteUniforms } from \"./HiliteUniforms\";\nimport { LightingUniforms } from \"./LightingUniforms\";\nimport { Matrix4 } from \"./Matrix\";\nimport { ShadowUniforms } from \"./ShadowUniforms\";\nimport { StyleUniforms } from \"./StyleUniforms\";\nimport { desync, sync, SyncObserver, SyncToken } from \"./Sync\";\nimport { Target } from \"./Target\";\nimport { ThematicUniforms } from \"./ThematicUniforms\";\nimport { ViewRectUniforms } from \"./ViewRectUniforms\";\nimport { RealityModelUniforms } from \"./RealityModelUniforms\";\nimport { AtmosphereUniforms } from \"./AtmosphereUniforms\";\n\nclass PixelWidthFactor {\n /** The pixel width factor depends on both the frustum and the view rect. It also depends on the frustum scale associated with the current Branch. */\n private readonly _rectSync: SyncObserver = {};\n private readonly _frustumSync: SyncObserver = {};\n private readonly _branchSync: SyncObserver = {};\n private _factor = 0;\n public syncKey = 0;\n\n public bind(uniform: UniformHandle, uniforms: TargetUniforms): void {\n if (!sync(uniforms.frustum, this._frustumSync) || !sync(uniforms.viewRect, this._rectSync) || !sync(uniforms.branch, this._branchSync))\n this.compute(uniforms.frustum, uniforms.viewRect.width, uniforms.viewRect.height, uniforms.branch.top.frustumScale);\n\n if (!sync(this, uniform))\n uniform.setUniform1f(this._factor);\n }\n\n private compute(frustumUniforms: FrustumUniforms, width: number, height: number, scale: { x: number, y: number }): void {\n desync(this);\n\n const frustumPlanes = frustumUniforms.planes;\n const top = frustumPlanes[0];\n const bottom = frustumPlanes[1];\n const left = frustumPlanes[2];\n const right = frustumPlanes[3];\n\n let halfPixelWidth: number;\n let halfPixelHeight: number;\n\n const frustum = frustumUniforms.frustum;\n\n if (FrustumUniformType.Perspective === frustumUniforms.type) {\n const inverseNear = 1.0 / frustum[0];\n const tanTheta = top * inverseNear;\n halfPixelHeight = scale.x * tanTheta / height;\n halfPixelWidth = scale.y * tanTheta / width;\n } else {\n halfPixelWidth = scale.x * 0.5 * (right - left) / width;\n halfPixelHeight = scale.y * 0.5 * (top - bottom) / height;\n }\n\n this._factor = Math.sqrt(halfPixelWidth * halfPixelWidth + halfPixelHeight * halfPixelHeight);\n }\n}\n\n// Direction in view space used if solar shadows are disabled and LightSettings.useSolarLighting is false.\nconst defaultSunDirectionView = new Vector3d(0.272166, 0.680414, 0.680414);\n\nclass SunDirection {\n // Sun direction is passed to shader in view coords so depends upon frustum.\n public syncToken?: SyncToken;\n public syncKey = 0;\n private _haveWorldDir = false;\n private readonly _worldDir = Vector3d.unitZ();\n private readonly _viewDir = defaultSunDirectionView.clone();\n private readonly _viewDir32 = new Float32Array(3);\n private _updated = true;\n\n public update(sunDir: Vector3d | undefined): void {\n const haveWorldDir = undefined !== sunDir;\n if (haveWorldDir !== this._haveWorldDir || (sunDir && !sunDir.isExactEqual(this._worldDir))) {\n this._updated = true;\n desync(this);\n\n this._haveWorldDir = haveWorldDir;\n if (sunDir) {\n sunDir.clone(this._worldDir);\n this._worldDir.normalizeInPlace();\n }\n }\n }\n\n public bind(uniform: UniformHandle, uniforms: TargetUniforms): void {\n if (!sync(uniforms.frustum, this) || this._updated) {\n if (this._haveWorldDir) {\n uniforms.frustum.viewMatrix.multiplyVector(this._worldDir, this._viewDir);\n this._viewDir.negate(this._viewDir);\n } else {\n defaultSunDirectionView.clone(this._viewDir);\n }\n\n this._viewDir.normalizeInPlace();\n this._viewDir32[0] = this._viewDir.x;\n this._viewDir32[1] = this._viewDir.y;\n this._viewDir32[2] = this._viewDir.z;\n\n desync(this);\n this._updated = false;\n }\n\n if (!sync(this, uniform))\n uniform.setUniform3fv(this._viewDir32);\n }\n}\n\n/** Holds state for commonly-used uniforms to avoid unnecessary recomputation, owned by a Target.\n * DO NOT directly modify exposed members of the objects exposed by this class. Use their APIs.\n * e.g., code like `target.uniforms.frustum.projectionMatrix.setFrom(someOtherMatrix)` or `target.uniforms.branch.top.setViewFlags(blah)` will cause bugs.\n * @internal\n */\nexport class TargetUniforms {\n public readonly frustum: FrustumUniforms;\n public readonly viewRect = new ViewRectUniforms();\n public readonly hilite = new HiliteUniforms();\n public readonly style = new StyleUniforms();\n public readonly lights = new LightingUniforms();\n public readonly thematic = new ThematicUniforms();\n public readonly branch: BranchUniforms;\n public readonly batch: BatchUniforms;\n public readonly shadow: ShadowUniforms;\n public readonly realityModel = new RealityModelUniforms();\n public readonly atmosphere = new AtmosphereUniforms();\n private readonly _pixelWidthFactor = new PixelWidthFactor();\n private readonly _sunDirection = new SunDirection();\n\n public constructor(target: Target) {\n this.frustum = new FrustumUniforms();\n this.branch = new BranchUniforms(target);\n this.batch = new BatchUniforms(target, this.branch.createBatchState());\n this.shadow = new ShadowUniforms(target);\n }\n\n public getProjectionMatrix(forViewCoords: boolean): Matrix4d {\n return forViewCoords ? this.viewRect.projectionMatrix : this.frustum.projectionMatrix;\n }\n\n public getProjectionMatrix32(forViewCoords: boolean): Matrix4 {\n return forViewCoords ? this.viewRect.projectionMatrix32 : this.frustum.projectionMatrix32;\n }\n\n public bindProjectionMatrix(uniform: UniformHandle, forViewCoords: boolean): void {\n if (forViewCoords)\n this.viewRect.bindProjectionMatrix(uniform);\n else\n this.frustum.bindProjectionMatrix(uniform);\n }\n\n public bindPixelWidthFactor(uniform: UniformHandle): void {\n this._pixelWidthFactor.bind(uniform, this);\n }\n\n public bindSunDirection(uniform: UniformHandle): void {\n this._sunDirection.bind(uniform, this);\n }\n\n public updateRenderPlan(plan: RenderPlan): void {\n this.style.update(plan);\n this.hilite.update(plan.hiliteSettings, plan.emphasisSettings);\n\n let sunDir;\n if (plan.lights) {\n this.lights.update(plan.lights);\n\n const useSunDir = plan.viewFlags.shadows || plan.lights.solar.alwaysEnabled;\n if (useSunDir)\n sunDir = plan.lights.solar.direction;\n }\n\n this._sunDirection.update(sunDir);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Technique.js","sourceRoot":"","sources":["../../../../src/render/webgl/Technique.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, dispose, using } from \"@itwin/core-bentley\";\r\nimport { BlurType } from \"./CachedGeometry\";\r\nimport { ClippingProgram, createClippingProgram } from \"./ClippingProgram\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { DrawCommands, DrawParams } from \"./DrawCommand\";\r\nimport { createAmbientOcclusionProgram } from \"./glsl/AmbientOcclusion\";\r\nimport { createBlurProgram } from \"./glsl/Blur\";\r\nimport { createEDLCalcBasicProgram, createEDLCalcFullProgram, createEDLFilterProgram, createEDLMixProgram } from \"./glsl/EDL\";\r\nimport { createClearPickAndColorProgram } from \"./glsl/ClearPickAndColor\";\r\nimport { createClearTranslucentProgram } from \"./glsl/ClearTranslucent\";\r\nimport { createCombine3TexturesProgram } from \"./glsl/Combine3Textures\";\r\nimport { createCombineTexturesProgram } from \"./glsl/CombineTextures\";\r\nimport { addEyeSpace, addFrustum, addShaderFlags } from \"./glsl/Common\";\r\nimport { createCompositeProgram } from \"./glsl/Composite\";\r\nimport { createCopyColorProgram } from \"./glsl/CopyColor\";\r\nimport { createCopyPickBuffersProgram } from \"./glsl/CopyPickBuffers\";\r\nimport {\r\n createVolClassBlendProgram, createVolClassColorUsingStencilProgram, createVolClassCopyZProgram, createVolClassSetBlendProgram,\r\n} from \"./glsl/CopyStencil\";\r\nimport { createEdgeBuilder, EdgeBuilderType } from \"./glsl/Edge\";\r\nimport { createEVSMProgram } from \"./glsl/EVSMFromDepth\";\r\nimport { addFeatureId, addFeatureSymbology, addRenderOrder, addUniformFeatureSymbology, FeatureSymbologyOptions, mixFeatureColor } from \"./glsl/FeatureSymbology\";\r\nimport { addFragColorWithPreMultipliedAlpha, addPickBufferOutputs } from \"./glsl/Fragment\";\r\nimport { addLogDepth } from \"./glsl/LogarithmicDepthBuffer\";\r\nimport { addUnlitMonochrome } from \"./glsl/Monochrome\";\r\nimport createPlanarGridProgram from \"./glsl/PlanarGrid\";\r\nimport { createPointCloudBuilder, createPointCloudHiliter } from \"./glsl/PointCloud\";\r\nimport { createPointStringBuilder, createPointStringHiliter } from \"./glsl/PointString\";\r\nimport { createPolylineBuilder, createPolylineHiliter } from \"./glsl/Polyline\";\r\nimport {\r\n addColorOverrideMix, createClassifierRealityMeshHiliter, createRealityMeshBuilder, createRealityMeshHiliter,\r\n} from \"./glsl/RealityMesh\";\r\nimport { createSkyBoxProgram } from \"./glsl/SkyBox\";\r\nimport { createSkySphereBuilder } from \"./glsl/SkySphere\";\r\nimport { createSurfaceBuilder, createSurfaceHiliter } from \"./glsl/Surface\";\r\nimport { addTranslucency } from \"./glsl/Translucency\";\r\nimport { addModelViewMatrix } from \"./glsl/Vertex\";\r\nimport { RenderPass } from \"./RenderFlags\";\r\nimport { ProgramBuilder, VertexShaderComponent } from \"./ShaderBuilder\";\r\nimport { CompileStatus, ShaderProgram, ShaderProgramExecutor } from \"./ShaderProgram\";\r\nimport { System } from \"./System\";\r\nimport { Target } from \"./Target\";\r\nimport {\r\n EnableAtmosphere,\r\n FeatureMode, IsAnimated, IsClassified, IsEdgeTestNeeded, IsInstanced, IsShadowable, IsThematic, IsWiremesh, PositionType, TechniqueFlags,\r\n} from \"./TechniqueFlags\";\r\nimport { computeCompositeTechniqueId, TechniqueId } from \"./TechniqueId\";\r\n\r\n/** Defines a rendering technique implemented using one or more shader programs.\r\n * @internal\r\n */\r\nexport interface Technique extends WebGLDisposable {\r\n getShader(flags: TechniqueFlags): ShaderProgram;\r\n getShaderByIndex(index: number): ShaderProgram;\r\n getShaderCount(): number;\r\n\r\n // Chiefly for tests - compiles all shader programs - more generally programs are compiled on demand.\r\n compileShaders(): boolean;\r\n}\r\n\r\n/** A rendering technique implemented using a single shader program, typically for some specialized purpose.\r\n * @internal\r\n */\r\nexport class SingularTechnique implements Technique {\r\n public readonly program: ShaderProgram;\r\n\r\n // Note: Technique assumes ownership of a program\r\n public constructor(program: ShaderProgram) { this.program = program; }\r\n\r\n public getShader(_flags: TechniqueFlags) { return this.program; }\r\n public getShaderByIndex(_index: number) { return this.program; }\r\n public getShaderCount() { return 1; }\r\n public compileShaders(): boolean { return this.program.compile() === CompileStatus.Success; }\r\n\r\n public get isDisposed(): boolean { return this.program.isDisposed; }\r\n\r\n public dispose(): void {\r\n dispose(this.program);\r\n }\r\n}\r\n\r\nfunction numFeatureVariants(numBaseShaders: number) {\r\n return numBaseShaders * 3;\r\n}\r\n\r\nconst numHiliteVariants = 2; // instanced and non-instanced.\r\nconst featureModes = [FeatureMode.None, FeatureMode.Pick, FeatureMode.Overrides];\r\nconst scratchTechniqueFlags = new TechniqueFlags();\r\nconst scratchHiliteFlags = new TechniqueFlags();\r\n\r\ntype CreateHiliter = (instanced: IsInstanced, classified: IsClassified, posType: PositionType) => ProgramBuilder;\r\n\r\n/** A rendering technique implemented using multiple shader programs, selected based on TechniqueFlags.\r\n * @internal\r\n */\r\nexport abstract class VariedTechnique implements Technique {\r\n private readonly _basicPrograms: ShaderProgram[] = [];\r\n private readonly _clippingPrograms: ClippingProgram[] = [];\r\n\r\n /** TechniqueFlags identifying shader programs for which the fragment shader writes depth but does not contain any discards.\r\n * Buggy Intel HD 620/630 drivers incorrectly apply early-Z optimization in this case; we must insert a never-executed\r\n * conditional discard to prevent that.\r\n */\r\n protected _earlyZFlags: TechniqueFlags[] = [];\r\n\r\n public compileShaders(): boolean {\r\n let allCompiled = true;\r\n for (const program of this._basicPrograms) {\r\n if (program.compile() !== CompileStatus.Success)\r\n allCompiled = false;\r\n }\r\n\r\n for (const clipper of this._clippingPrograms)\r\n if (!clipper.compile())\r\n allCompiled = false;\r\n\r\n return allCompiled;\r\n }\r\n\r\n protected finishConstruction(): void {\r\n this._earlyZFlags.length = 0;\r\n\r\n // Confirm no empty entries in our array.\r\n let emptyShaderIndex = -1;\r\n assert(-1 === (emptyShaderIndex = this._basicPrograms.findIndex((prog) => undefined === prog)), `Shader index ${emptyShaderIndex} is undefined in ${this.constructor.name}`);\r\n }\r\n\r\n private _isDisposed = false;\r\n public get isDisposed(): boolean { return this._isDisposed; }\r\n\r\n public dispose(): void {\r\n if (this._isDisposed)\r\n return;\r\n\r\n for (const program of this._basicPrograms) {\r\n assert(undefined !== program);\r\n dispose(program);\r\n }\r\n\r\n this._basicPrograms.length = 0;\r\n for (const clipShaderObj of this._clippingPrograms) {\r\n assert(undefined !== clipShaderObj);\r\n clipShaderObj.dispose();\r\n }\r\n\r\n this._clippingPrograms.length = 0;\r\n this._isDisposed = true;\r\n }\r\n\r\n protected constructor(numPrograms: number) {\r\n this._basicPrograms.length = numPrograms;\r\n }\r\n\r\n protected abstract computeShaderIndex(flags: TechniqueFlags): number;\r\n protected abstract get _debugDescription(): string;\r\n\r\n protected addShader(builder: ProgramBuilder, flags: TechniqueFlags, gl: WebGL2RenderingContext): void {\r\n const descr = `${this._debugDescription}: ${flags.buildDescription()}`;\r\n builder.setDebugDescription(descr);\r\n\r\n if (System.instance.supportsLogZBuffer) {\r\n addLogDepth(builder);\r\n\r\n assert(!builder.frag.requiresEarlyZWorkaround);\r\n if (System.instance.fragDepthDoesNotDisableEarlyZ)\r\n builder.frag.requiresEarlyZWorkaround = -1 !== this._earlyZFlags.findIndex((x) => x.equals(flags));\r\n }\r\n\r\n const index = this.getShaderIndex(flags);\r\n this.addProgram(builder, index, gl);\r\n\r\n assert(!builder.frag.requiresEarlyZWorkaround);\r\n }\r\n\r\n private addProgram(builder: ProgramBuilder, index: number, gl: WebGL2RenderingContext): void {\r\n assert(this._basicPrograms[index] === undefined);\r\n this._basicPrograms[index] = builder.buildProgram(gl);\r\n assert(this._basicPrograms[index] !== undefined);\r\n\r\n // Clipping programs always include a discard, so never require workaround.\r\n builder.frag.requiresEarlyZWorkaround = false;\r\n\r\n assert(this._clippingPrograms[index] === undefined);\r\n this._clippingPrograms[index] = createClippingProgram(builder);\r\n assert(this._clippingPrograms[index] !== undefined);\r\n }\r\n\r\n protected addHiliteShader(gl: WebGL2RenderingContext, instanced: IsInstanced, classified: IsClassified, posType: PositionType, create: CreateHiliter): void {\r\n const builder = create(instanced, classified, posType);\r\n scratchHiliteFlags.initForHilite(0, instanced, classified, posType);\r\n this.addShader(builder, scratchHiliteFlags, gl);\r\n }\r\n\r\n protected addTranslucentShader(builder: ProgramBuilder, flags: TechniqueFlags, gl: WebGL2RenderingContext): void {\r\n flags.isTranslucent = true;\r\n addTranslucency(builder);\r\n this.addShader(builder, flags, gl);\r\n }\r\n\r\n protected addFeatureId(builder: ProgramBuilder, feat: FeatureMode) {\r\n const frag = builder.frag;\r\n if (FeatureMode.None === feat) {\r\n addFragColorWithPreMultipliedAlpha(frag);\r\n } else {\r\n const vert = builder.vert;\r\n addFrustum(builder);\r\n addEyeSpace(builder);\r\n addModelViewMatrix(vert);\r\n addRenderOrder(frag);\r\n addFeatureId(builder, false);\r\n addPickBufferOutputs(frag);\r\n }\r\n }\r\n\r\n private getShaderIndex(flags: TechniqueFlags) {\r\n assert(!flags.isHilite || (!flags.isTranslucent && (flags.isClassified === IsClassified.Yes || flags.hasFeatures)), \"invalid technique flags\");\r\n const index = this.computeShaderIndex(flags);\r\n assert(index < this._basicPrograms.length, \"shader index out of bounds\");\r\n return index;\r\n }\r\n\r\n public getShader(flags: TechniqueFlags): ShaderProgram {\r\n const index = this.getShaderIndex(flags);\r\n let program: ShaderProgram | undefined;\r\n\r\n if (flags.hasClip) {\r\n const entry = this._clippingPrograms[index];\r\n assert(undefined !== entry);\r\n program = entry.getProgram(flags.numClipPlanes);\r\n }\r\n\r\n if (program === undefined)\r\n program = this._basicPrograms[index];\r\n\r\n return program;\r\n }\r\n\r\n // NB: Will ignore clipping shaders.\r\n public getShaderByIndex(index: number): ShaderProgram {\r\n return this._basicPrograms[index];\r\n }\r\n\r\n // NB: Will ignore clipping shaders.\r\n public getShaderCount(): number {\r\n return this._basicPrograms.length;\r\n }\r\n\r\n /** For tests. */\r\n public forEachProgram(func: (program: ShaderProgram) => void): void {\r\n for (const basic of this._basicPrograms)\r\n func(basic);\r\n\r\n for (const clip of this._clippingPrograms) {\r\n const prog = clip.getProgram(1);\r\n assert(undefined !== prog);\r\n func(prog);\r\n }\r\n }\r\n}\r\n\r\nconst positionTypes: PositionType[] = [\"quantized\", \"unquantized\"];\r\n\r\nclass SurfaceTechnique extends VariedTechnique {\r\n private static readonly _kOpaque = 0;\r\n private static readonly _kTranslucent = 1;\r\n private static readonly _kInstanced = 2;\r\n private static readonly _kAnimated = 4;\r\n private static readonly _kWiremesh = 8;\r\n private static readonly _kShadowable = 16;\r\n private static readonly _kThematic = 32;\r\n private static readonly _kFeature = 48;\r\n\r\n private static readonly _kEdgeTestNeeded = SurfaceTechnique._kFeature * 3; // only when hasFeatures\r\n private static readonly _kHilite = SurfaceTechnique._kEdgeTestNeeded + SurfaceTechnique._kFeature * 2;\r\n\r\n // Classifiers are never animated or instanced. They do support shadows, thematic display, and translucency.\r\n // There are 3 base variations - 1 per feature mode - each with translucent/shadowed/thematic variants; plus 1 for hilite.\r\n private static readonly _kClassified = SurfaceTechnique._kHilite + numHiliteVariants;\r\n\r\n // 3 base classified variations - 1 per feature mode.\r\n // Plus thematic variant of each and shadowable variant of each = 9\r\n // Plus translucent variant of each of those = 18\r\n // Plus 1 hilite shader = 19\r\n private static readonly _kUnquantized = SurfaceTechnique._kClassified + 19;\r\n\r\n public constructor(gl: WebGL2RenderingContext) {\r\n super(SurfaceTechnique._kUnquantized * 2);\r\n\r\n this._earlyZFlags = [\r\n TechniqueFlags.fromDescription(\"Opaque-Hilite-Overrides\"),\r\n TechniqueFlags.fromDescription(\"Opaque-Instanced-Hilite-Overrides\"),\r\n TechniqueFlags.fromDescription(\"Opaque-Hilite-Classified\"),\r\n TechniqueFlags.fromDescription(\"Unquantized-Opaque-Hilite-Overrides\"),\r\n TechniqueFlags.fromDescription(\"Unquantized-Opaque-Instanced-Hilite-Overrides\"),\r\n TechniqueFlags.fromDescription(\"Unquantized-Opaque-Hilite-Classified\"),\r\n ];\r\n\r\n const flags = scratchTechniqueFlags;\r\n for (const posType of positionTypes) {\r\n for (let instanced = IsInstanced.No; instanced <= IsInstanced.Yes; instanced++) {\r\n this.addHiliteShader(gl, instanced, IsClassified.No, posType, createSurfaceHiliter);\r\n for (let iAnimate = IsAnimated.No; iAnimate <= IsAnimated.Yes; iAnimate++) {\r\n for (let shadowable = IsShadowable.No; shadowable <= IsShadowable.Yes; shadowable++) {\r\n for (let wiremesh = IsWiremesh.No; wiremesh <= IsWiremesh.Yes; wiremesh++) {\r\n for (let thematic = IsThematic.No; thematic <= IsThematic.Yes; thematic++) {\r\n for (let edgeTestNeeded = IsEdgeTestNeeded.No; edgeTestNeeded <= IsEdgeTestNeeded.Yes; edgeTestNeeded++) {\r\n for (const featureMode of featureModes) {\r\n for (let iTranslucent = 0; iTranslucent <= 1; iTranslucent++) {\r\n if (FeatureMode.None !== featureMode || IsEdgeTestNeeded.No === edgeTestNeeded) {\r\n if (IsThematic.Yes === thematic && IsShadowable.Yes === shadowable)\r\n continue; // currently this combination is disallowed.\r\n\r\n flags.reset(featureMode, instanced, shadowable, thematic, posType);\r\n flags.isAnimated = iAnimate;\r\n flags.isEdgeTestNeeded = edgeTestNeeded;\r\n flags.isTranslucent = 1 === iTranslucent;\r\n flags.isWiremesh = wiremesh;\r\n\r\n const builder = createSurfaceBuilder(flags);\r\n this.addShader(builder, flags, gl);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.addHiliteShader(gl, IsInstanced.No, IsClassified.Yes, \"quantized\", createSurfaceHiliter);\r\n this.addHiliteShader(gl, IsInstanced.No, IsClassified.Yes, \"unquantized\", createSurfaceHiliter);\r\n\r\n for (const posType of positionTypes) {\r\n for (let translucent = 0; translucent < 2; translucent++) {\r\n for (let shadowable = IsShadowable.No; shadowable <= IsShadowable.Yes; shadowable++) {\r\n for (let thematic = IsThematic.No; thematic <= IsThematic.Yes; thematic++) {\r\n for (const featureMode of featureModes) {\r\n if (IsThematic.Yes === thematic && IsShadowable.Yes === shadowable)\r\n continue; // currently this combination is disallowed.\r\n\r\n flags.reset(featureMode, IsInstanced.No, shadowable, thematic, posType);\r\n flags.isClassified = IsClassified.Yes;\r\n flags.isTranslucent = (0 !== translucent);\r\n\r\n const builder = createSurfaceBuilder(flags);\r\n if (flags.isTranslucent)\r\n addTranslucency(builder);\r\n\r\n this.addShader(builder, flags, gl);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.finishConstruction();\r\n }\r\n\r\n protected get _debugDescription() { return \"Surface\"; }\r\n\r\n public computeShaderIndex(flags: TechniqueFlags): number {\r\n assert(!(flags.isThematic && flags.isShadowable));\r\n\r\n const idxOffset = flags.positionType === \"unquantized\" ? SurfaceTechnique._kUnquantized : 0;\r\n if (flags.isClassified) {\r\n assert(!flags.isAnimated);\r\n assert(!flags.isInstanced);\r\n assert(!flags.isEdgeTestNeeded);\r\n\r\n // First classified shader is for hilite\r\n if (flags.isHilite)\r\n return SurfaceTechnique._kClassified + idxOffset;\r\n\r\n // The rest are organized in 3 groups of 6 - one group per feature mode.\r\n // Each group contains opaque, translucent, opaque+thematic, translucent+thematic, opaque+shadowable, and translucent+shadowable variants.\r\n let baseIndex = SurfaceTechnique._kClassified + 1;\r\n if (flags.isTranslucent)\r\n baseIndex += 1;\r\n if (flags.isShadowable)\r\n baseIndex += 2;\r\n if (flags.isThematic)\r\n baseIndex += 4;\r\n\r\n const featureOffset = 6 * flags.featureMode;\r\n return baseIndex + featureOffset + idxOffset;\r\n } else if (flags.isHilite) {\r\n assert(flags.hasFeatures);\r\n return SurfaceTechnique._kHilite + flags.isInstanced + idxOffset;\r\n }\r\n\r\n assert(flags.hasFeatures || flags.isEdgeTestNeeded === IsEdgeTestNeeded.No);\r\n let index = flags.isTranslucent ? SurfaceTechnique._kTranslucent : SurfaceTechnique._kOpaque;\r\n index += SurfaceTechnique._kInstanced * flags.isInstanced;\r\n index += SurfaceTechnique._kAnimated * flags.isAnimated;\r\n index += SurfaceTechnique._kShadowable * flags.isShadowable;\r\n index += SurfaceTechnique._kThematic * flags.isThematic;\r\n index += SurfaceTechnique._kWiremesh * flags.isWiremesh;\r\n\r\n if (flags.isEdgeTestNeeded)\r\n index += SurfaceTechnique._kEdgeTestNeeded + (flags.featureMode - 1) * SurfaceTechnique._kFeature;\r\n else\r\n index += SurfaceTechnique._kFeature * flags.featureMode;\r\n\r\n return index + idxOffset;\r\n }\r\n}\r\n\r\nclass PolylineTechnique extends VariedTechnique {\r\n private static readonly _kOpaque = 0;\r\n private static readonly _kTranslucent = 1;\r\n private static readonly _kInstanced = 2;\r\n private static readonly _kFeature = 4;\r\n private static readonly _kHilite = numFeatureVariants(PolylineTechnique._kFeature);\r\n private static readonly _kUnquantized = PolylineTechnique._kHilite + numHiliteVariants;\r\n\r\n public constructor(gl: WebGL2RenderingContext) {\r\n super(PolylineTechnique._kUnquantized * 2);\r\n\r\n this._earlyZFlags = [\r\n TechniqueFlags.fromDescription(\"Opaque-Hilite-Overrides\"),\r\n TechniqueFlags.fromDescription(\"Opaque-Instanced-Hilite-Overrides\"),\r\n TechniqueFlags.fromDescription(\"Unquantized-Opaque-Hilite-Overrides\"),\r\n TechniqueFlags.fromDescription(\"Unquantized-Opaque-Instanced-Hilite-Overrides\"),\r\n ];\r\n\r\n const flags = scratchTechniqueFlags;\r\n for (const posType of positionTypes) {\r\n for (let instanced = IsInstanced.No; instanced <= IsInstanced.Yes; instanced++) {\r\n this.addHiliteShader(gl, instanced, IsClassified.No, posType, (inst, _class, pos) => createPolylineHiliter(inst, pos));\r\n for (const featureMode of featureModes) {\r\n flags.reset(featureMode, instanced, IsShadowable.No, IsThematic.No, posType);\r\n const builder = createPolylineBuilder(instanced, posType);\r\n addUnlitMonochrome(builder.frag);\r\n\r\n // The translucent shaders do not need the element IDs.\r\n const builderTrans = createPolylineBuilder(instanced, posType);\r\n addUnlitMonochrome(builderTrans.frag);\r\n if (FeatureMode.Overrides === featureMode) {\r\n addFeatureSymbology(builderTrans, featureMode, FeatureSymbologyOptions.Linear);\r\n addFeatureSymbology(builder, featureMode, FeatureSymbologyOptions.Linear);\r\n this.addTranslucentShader(builderTrans, flags, gl);\r\n } else {\r\n this.addTranslucentShader(builderTrans, flags, gl);\r\n addFeatureSymbology(builder, featureMode, FeatureSymbologyOptions.None);\r\n }\r\n\r\n this.addFeatureId(builder, featureMode);\r\n flags.reset(featureMode, instanced, IsShadowable.No, IsThematic.No, posType);\r\n this.addShader(builder, flags, gl);\r\n }\r\n }\r\n }\r\n\r\n this.finishConstruction();\r\n }\r\n\r\n protected get _debugDescription() { return \"Polyline\"; }\r\n\r\n public computeShaderIndex(flags: TechniqueFlags): number {\r\n const idxOffset = flags.positionType === \"unquantized\" ? PolylineTechnique._kUnquantized : 0;\r\n if (flags.isHilite) {\r\n assert(flags.hasFeatures);\r\n return PolylineTechnique._kHilite + flags.isInstanced + idxOffset;\r\n }\r\n\r\n let index = flags.isTranslucent ? PolylineTechnique._kTranslucent : PolylineTechnique._kOpaque;\r\n index += PolylineTechnique._kFeature * flags.featureMode;\r\n index += PolylineTechnique._kInstanced * flags.isInstanced;\r\n return index + idxOffset;\r\n }\r\n}\r\n\r\nclass EdgeTechnique extends VariedTechnique {\r\n private static readonly _kOpaque = 0;\r\n private static readonly _kTranslucent = 1;\r\n private static readonly _kAnimated = 2;\r\n private static readonly _kInstanced = 4;\r\n private static readonly _kFeature = 8;\r\n private static readonly _kUnquantized = numFeatureVariants(EdgeTechnique._kFeature);\r\n private readonly _type: EdgeBuilderType;\r\n\r\n public constructor(gl: WebGL2RenderingContext, type: EdgeBuilderType) {\r\n super(EdgeTechnique._kUnquantized * 2);\r\n this._type = type;\r\n\r\n const flags = scratchTechniqueFlags;\r\n for (const posType of positionTypes) {\r\n for (let instanced = IsInstanced.No; instanced <= IsInstanced.Yes; instanced++) {\r\n for (let iAnimate = IsAnimated.No; iAnimate <= IsAnimated.Yes; iAnimate++) {\r\n for (const featureMode of featureModes) {\r\n flags.reset(featureMode, instanced, IsShadowable.No, IsThematic.No, posType);\r\n flags.isAnimated = iAnimate;\r\n const builder = createEdgeBuilder(type, flags.isInstanced, flags.isAnimated, posType);\r\n addUnlitMonochrome(builder.frag);\r\n\r\n // The translucent shaders do not need the element IDs.\r\n const builderTrans = createEdgeBuilder(type, flags.isInstanced, flags.isAnimated, posType);\r\n addUnlitMonochrome(builderTrans.frag);\r\n if (FeatureMode.Overrides === featureMode) {\r\n addFeatureSymbology(builderTrans, featureMode, FeatureSymbologyOptions.Linear);\r\n addFeatureSymbology(builder, featureMode, FeatureSymbologyOptions.Linear);\r\n this.addTranslucentShader(builderTrans, flags, gl);\r\n } else {\r\n this.addTranslucentShader(builderTrans, flags, gl);\r\n addFeatureSymbology(builder, featureMode, FeatureSymbologyOptions.None);\r\n }\r\n\r\n this.addFeatureId(builder, featureMode);\r\n flags.reset(featureMode, instanced, IsShadowable.No, IsThematic.No, posType);\r\n flags.isAnimated = iAnimate;\r\n this.addShader(builder, flags, gl);\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.finishConstruction();\r\n }\r\n\r\n protected get _debugDescription() { return this._type; }\r\n\r\n public computeShaderIndex(flags: TechniqueFlags): number {\r\n let index = flags.isTranslucent ? EdgeTechnique._kTranslucent : EdgeTechnique._kOpaque;\r\n index += EdgeTechnique._kFeature * flags.featureMode;\r\n if (flags.isAnimated)\r\n index += EdgeTechnique._kAnimated;\r\n\r\n if (flags.isInstanced)\r\n index += EdgeTechnique._kInstanced;\r\n\r\n if (\"unquantized\" === flags.positionType)\r\n index += EdgeTechnique._kUnquantized;\r\n\r\n return index;\r\n }\r\n}\r\n\r\nclass PointStringTechnique extends VariedTechnique {\r\n private static readonly _kOpaque = 0;\r\n private static readonly _kTranslucent = 1;\r\n private static readonly _kInstanced = 2;\r\n private static readonly _kFeature = 4;\r\n private static readonly _kHilite = numFeatureVariants(PointStringTechnique._kFeature);\r\n private static readonly _kUnquantized = PointStringTechnique._kHilite + numHiliteVariants;\r\n\r\n public constructor(gl: WebGL2RenderingContext) {\r\n super(PointStringTechnique._kUnquantized * 2);\r\n\r\n const flags = scratchTechniqueFlags;\r\n for (const posType of positionTypes) {\r\n for (let instanced = IsInstanced.No; instanced <= IsInstanced.Yes; instanced++) {\r\n this.addHiliteShader(gl, instanced, IsClassified.No, posType, (inst, _class, pos) => createPointStringHiliter(inst, pos));\r\n for (const featureMode of featureModes) {\r\n flags.reset(featureMode, instanced, IsShadowable.No, IsThematic.No, posType);\r\n const builder = createPointStringBuilder(instanced, posType);\r\n addUnlitMonochrome(builder.frag);\r\n\r\n // The translucent shaders do not need the element IDs.\r\n const builderTrans = createPointStringBuilder(instanced, posType);\r\n addUnlitMonochrome(builderTrans.frag);\r\n if (FeatureMode.Overrides === featureMode) {\r\n addFeatureSymbology(builderTrans, featureMode, FeatureSymbologyOptions.Point);\r\n addFeatureSymbology(builder, featureMode, FeatureSymbologyOptions.Point);\r\n this.addTranslucentShader(builderTrans, flags, gl);\r\n } else {\r\n this.addTranslucentShader(builderTrans, flags, gl);\r\n addFeatureSymbology(builder, featureMode, FeatureSymbologyOptions.None);\r\n }\r\n\r\n this.addFeatureId(builder, featureMode);\r\n flags.reset(featureMode, instanced, IsShadowable.No, IsThematic.No, posType);\r\n this.addShader(builder, flags, gl);\r\n }\r\n }\r\n }\r\n\r\n this.finishConstruction();\r\n }\r\n\r\n protected get _debugDescription() { return \"PointString\"; }\r\n\r\n public computeShaderIndex(flags: TechniqueFlags): number {\r\n const idxOffset = \"quantized\" === flags.positionType ? 0 : PointStringTechnique._kUnquantized;\r\n if (flags.isHilite) {\r\n assert(flags.hasFeatures);\r\n return PointStringTechnique._kHilite + flags.isInstanced + idxOffset;\r\n }\r\n\r\n let index = flags.isTranslucent ? PointStringTechnique._kTranslucent : PointStringTechnique._kOpaque;\r\n index += PointStringTechnique._kFeature * flags.featureMode;\r\n index += PointStringTechnique._kInstanced * flags.isInstanced;\r\n return index + idxOffset;\r\n }\r\n}\r\n\r\nclass PointCloudTechnique extends VariedTechnique {\r\n private static readonly _kHilite = 8;\r\n\r\n public constructor(gl: WebGL2RenderingContext) {\r\n super(PointCloudTechnique._kHilite + 2);\r\n\r\n for (let iClassified = IsClassified.No; iClassified <= IsClassified.Yes; iClassified++) {\r\n this.addHiliteShader(gl, IsInstanced.No, iClassified, \"quantized\", (_inst, classified) => createPointCloudHiliter(classified));\r\n const flags = scratchTechniqueFlags;\r\n for (let thematic = IsThematic.No; thematic <= IsThematic.Yes; thematic++) {\r\n const pointCloudFeatureModes = [FeatureMode.None, FeatureMode.Overrides];\r\n for (const featureMode of pointCloudFeatureModes) {\r\n flags.reset(featureMode, IsInstanced.No, IsShadowable.No, thematic, \"quantized\");\r\n flags.isClassified = iClassified;\r\n const builder = createPointCloudBuilder(flags.isClassified, featureMode, thematic);\r\n if (FeatureMode.Overrides === featureMode) {\r\n addUniformFeatureSymbology(builder, true);\r\n addColorOverrideMix(builder.vert);\r\n builder.vert.set(VertexShaderComponent.ApplyFeatureColor, mixFeatureColor);\r\n }\r\n\r\n this.addFeatureId(builder, featureMode);\r\n this.addShader(builder, flags, gl);\r\n }\r\n }\r\n }\r\n\r\n this.finishConstruction();\r\n }\r\n\r\n protected get _debugDescription() { return \"PointCloud\"; }\r\n\r\n public computeShaderIndex(flags: TechniqueFlags): number {\r\n assert(flags.positionType === \"quantized\", \"Unquantized point cloud positions not currently supported\");\r\n if (flags.isHilite)\r\n return PointCloudTechnique._kHilite + flags.isClassified;\r\n else {\r\n let ndx = 0;\r\n if (flags.isClassified)\r\n ndx++;\r\n if (flags.featureMode !== FeatureMode.None)\r\n ndx += 2;\r\n if (flags.isThematic)\r\n ndx += 4;\r\n return ndx;\r\n }\r\n }\r\n}\r\n\r\nclass RealityMeshTechnique extends VariedTechnique {\r\n private static readonly _numVariants = 194;\r\n\r\n public constructor(gl: WebGL2RenderingContext) {\r\n super(RealityMeshTechnique._numVariants);\r\n this._earlyZFlags = [\r\n TechniqueFlags.fromDescription(\"Opaque-Hilite-Overrides\"),\r\n TechniqueFlags.fromDescription(\"Opaque-Hilite-Classified\"),\r\n ];\r\n\r\n this.addHiliteShader(gl, IsInstanced.No, IsClassified.No, \"quantized\", createRealityMeshHiliter);\r\n this.addHiliteShader(gl, IsInstanced.No, IsClassified.Yes, \"quantized\", createClassifierRealityMeshHiliter);\r\n for (let iClassified = IsClassified.No; iClassified <= IsClassified.Yes; iClassified++) {\r\n for (let iTranslucent = 0; iTranslucent <= 1; iTranslucent++) {\r\n for (let shadowable = IsShadowable.No; shadowable <= IsShadowable.Yes; shadowable++) {\r\n for (let thematic = IsThematic.No; thematic <= IsThematic.Yes; thematic++) {\r\n for (let wiremesh = IsWiremesh.No; wiremesh <= IsWiremesh.Yes; wiremesh++) {\r\n for (let enableAtmosphere = EnableAtmosphere.No; enableAtmosphere <= EnableAtmosphere.Yes; enableAtmosphere++) {\r\n const flags = scratchTechniqueFlags;\r\n for (const featureMode of featureModes) {\r\n flags.reset(featureMode, IsInstanced.No, shadowable, thematic, \"quantized\");\r\n flags.isClassified = iClassified;\r\n flags.isWiremesh = wiremesh;\r\n flags.isTranslucent = 1 === iTranslucent;\r\n flags.enableAtmosphere = enableAtmosphere;\r\n const builder = createRealityMeshBuilder(flags);\r\n\r\n if (flags.isTranslucent) {\r\n addShaderFlags(builder);\r\n addTranslucency(builder);\r\n } else\r\n this.addFeatureId(builder, featureMode);\r\n\r\n this.addShader(builder, flags, gl);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.finishConstruction();\r\n }\r\n\r\n protected get _debugDescription() { return \"RealityMesh\"; }\r\n\r\n public computeShaderIndex(flags: TechniqueFlags): number {\r\n assert(\"quantized\" === flags.positionType, \"Unquantized reality mesh positions not currently supported.\");\r\n\r\n if (flags.isHilite)\r\n return flags.isClassified ? 1 : 0;\r\n let ndx = 2;\r\n if (flags.isClassified)\r\n ndx++;\r\n if (flags.isShadowable)\r\n ndx += 2;\r\n if (flags.isTranslucent)\r\n ndx += 4;\r\n ndx += 8 * flags.featureMode;\r\n if (flags.isThematic)\r\n ndx += 24;\r\n if (flags.isWiremesh)\r\n ndx += 48;\r\n if (flags.enableAtmosphere)\r\n ndx += 96;\r\n return ndx;\r\n }\r\n}\r\n\r\n/**\r\n * More generalized version of VariedTechnique, without assuming usage of clipping, logDepth, eyeSpace, etc.\r\n * Similar to SingularTechnique in its simplicity, but with support for multiple shader programs per technique.\r\n */\r\nabstract class MultipleTechnique implements Technique {\r\n private readonly _programs: ShaderProgram[] = [];\r\n\r\n private _isDisposed = false;\r\n public get isDisposed(): boolean { return this._isDisposed; }\r\n\r\n public constructor(numPrograms: number) {\r\n this._programs.length = numPrograms;\r\n }\r\n\r\n protected abstract computeShaderIndex(flags: TechniqueFlags): number;\r\n\r\n private getShaderIndex(flags: TechniqueFlags) {\r\n assert(!flags.isHilite || (!flags.isTranslucent && (flags.isClassified === IsClassified.Yes || flags.hasFeatures)), \"invalid technique flags\");\r\n const index = this.computeShaderIndex(flags);\r\n assert(index < this._programs.length, \"shader index out of bounds\");\r\n return index;\r\n }\r\n\r\n public getShader(flags: TechniqueFlags): ShaderProgram {\r\n const index = this.getShaderIndex(flags);\r\n let program: ShaderProgram | undefined;\r\n\r\n if (program === undefined)\r\n program = this._programs[index];\r\n\r\n return program;\r\n }\r\n\r\n public getShaderByIndex(index: number): ShaderProgram {\r\n return this._programs[index];\r\n }\r\n\r\n public getShaderCount() {\r\n return this._programs.length;\r\n }\r\n\r\n public compileShaders(): boolean {\r\n let allCompiled = true;\r\n for (const program of this._programs) {\r\n if (program.compile() !== CompileStatus.Success)\r\n allCompiled = false;\r\n }\r\n\r\n return allCompiled;\r\n }\r\n\r\n public dispose(): void {\r\n if (this._isDisposed)\r\n return;\r\n\r\n for (const program of this._programs) {\r\n assert(undefined !== program);\r\n dispose(program);\r\n }\r\n this._programs.length = 0;\r\n this._isDisposed = true;\r\n }\r\n\r\n protected abstract get _debugDescription(): string;\r\n\r\n protected addShader(builder: ProgramBuilder, flags: TechniqueFlags, gl: WebGL2RenderingContext): void {\r\n const descr = `${this._debugDescription}: ${flags.buildDescription()}`;\r\n builder.setDebugDescription(descr);\r\n\r\n const index = this.getShaderIndex(flags);\r\n this.addProgram(builder, index, gl);\r\n\r\n assert(!builder.frag.requiresEarlyZWorkaround);\r\n }\r\n\r\n private addProgram(builder: ProgramBuilder, index: number, gl: WebGL2RenderingContext): void {\r\n assert(this._programs[index] === undefined);\r\n this._programs[index] = builder.buildProgram(gl);\r\n assert(this._programs[index] !== undefined);\r\n }\r\n\r\n protected finishConstruction(): void {\r\n // Confirm no empty entries in our array.\r\n let emptyShaderIndex = -1;\r\n assert(-1 === (emptyShaderIndex = this._programs.findIndex((prog) => undefined === prog)), `Shader index ${emptyShaderIndex} is undefined in ${this.constructor.name}`);\r\n }\r\n}\r\n\r\nclass SkySphereTechnique extends MultipleTechnique {\r\n private static readonly _numVariants = 2; // one binary flag (2 ** 1)\r\n private readonly _isGradient: boolean;\r\n\r\n public constructor(gl: WebGL2RenderingContext, isGradient: boolean) {\r\n super(SkySphereTechnique._numVariants);\r\n this._isGradient = isGradient;\r\n\r\n for (let enableAtmosphere = EnableAtmosphere.No; enableAtmosphere <= EnableAtmosphere.Yes; enableAtmosphere++) {\r\n const tempFlags = scratchTechniqueFlags;\r\n\r\n tempFlags.reset(FeatureMode.None, IsInstanced.No, IsShadowable.No, IsThematic.No, \"quantized\");\r\n tempFlags.enableAtmosphere = enableAtmosphere;\r\n const builder = createSkySphereBuilder(isGradient, tempFlags);\r\n\r\n this.addShader(builder, tempFlags, gl);\r\n }\r\n\r\n this.finishConstruction();\r\n }\r\n\r\n protected get _debugDescription() { return `SkySphere-${this._isGradient ? \"Gradient\" : \"Texture\"}`; }\r\n\r\n public computeShaderIndex(flags: TechniqueFlags): number {\r\n let index = 0;\r\n if (flags.enableAtmosphere)\r\n index += 1 << 0;\r\n\r\n return index;\r\n }\r\n}\r\n\r\ninterface PrioritizedShaderVariation {\r\n featureMode: FeatureMode;\r\n isInstanced: IsInstanced;\r\n isShadowable: IsShadowable;\r\n isEdgeTestedNeeded: IsEdgeTestNeeded;\r\n isTranslucent: boolean;\r\n}\r\n\r\ninterface PrioritizedTechniqueOrShader {\r\n techniqueId: TechniqueId;\r\n specificShader?: PrioritizedShaderVariation; // if defined, only compile this specific shader variation for the technique; otherwise, compile all uncompiled shader variations for the technique\r\n}\r\n\r\nconst techniquesByPriority: PrioritizedTechniqueOrShader[] = [\r\n // Compile these specific shader variations first because they seem most likely to be used immediately upon opening a file.\r\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.None, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.No, isTranslucent: false } },\r\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.Pick, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.No, isTranslucent: false } },\r\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.Pick, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.Yes, isTranslucent: false } },\r\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.Overrides, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.No, isTranslucent: false } },\r\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.Overrides, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.Yes, isTranslucent: false } },\r\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.None, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.No, isTranslucent: true } },\r\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.Pick, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.No, isTranslucent: true } },\r\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.Pick, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.Yes, isTranslucent: true } },\r\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.Overrides, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.No, isTranslucent: true } },\r\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.Overrides, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.Yes, isTranslucent: true } },\r\n\r\n // Next, compile all shaders in specific techniques.\r\n // Do surfaces first because (1) they are the most commonly used and (2) they take longer to compile.\r\n { techniqueId: TechniqueId.Surface },\r\n { techniqueId: TechniqueId.Edge },\r\n { techniqueId: TechniqueId.SilhouetteEdge },\r\n { techniqueId: TechniqueId.Polyline },\r\n { techniqueId: TechniqueId.PointString },\r\n { techniqueId: TechniqueId.PointCloud },\r\n { techniqueId: TechniqueId.RealityMesh },\r\n\r\n // The following techniques take a trivial amount of time to compile - do them last\r\n { techniqueId: TechniqueId.OITClearTranslucent },\r\n { techniqueId: TechniqueId.CopyPickBuffers },\r\n { techniqueId: TechniqueId.CopyColor },\r\n { techniqueId: TechniqueId.CopyColorNoAlpha },\r\n { techniqueId: TechniqueId.ClearPickAndColor },\r\n { techniqueId: TechniqueId.CompositeTranslucent },\r\n { techniqueId: TechniqueId.CompositeHilite },\r\n { techniqueId: TechniqueId.CompositeHiliteAndTranslucent },\r\n { techniqueId: TechniqueId.CompositeOcclusion },\r\n { techniqueId: TechniqueId.CompositeTranslucentAndOcclusion },\r\n { techniqueId: TechniqueId.CompositeHiliteAndOcclusion },\r\n { techniqueId: TechniqueId.CompositeAll },\r\n { techniqueId: TechniqueId.VolClassColorUsingStencil },\r\n { techniqueId: TechniqueId.EVSMFromDepth },\r\n { techniqueId: TechniqueId.SkyBox },\r\n { techniqueId: TechniqueId.SkySphereGradient },\r\n { techniqueId: TechniqueId.SkySphereTexture },\r\n { techniqueId: TechniqueId.AmbientOcclusion },\r\n { techniqueId: TechniqueId.Blur },\r\n { techniqueId: TechniqueId.BlurTestOrder },\r\n { techniqueId: TechniqueId.CombineTextures },\r\n { techniqueId: TechniqueId.VolClassCopyZ },\r\n { techniqueId: TechniqueId.VolClassSetBlend },\r\n { techniqueId: TechniqueId.VolClassBlend },\r\n { techniqueId: TechniqueId.Combine3Textures },\r\n { techniqueId: TechniqueId.PlanarGrid },\r\n { techniqueId: TechniqueId.EDLCalcBasic },\r\n { techniqueId: TechniqueId.EDLCalcFull },\r\n { techniqueId: TechniqueId.EDLFilter },\r\n { techniqueId: TechniqueId.EDLMix },\r\n];\r\nconst numTechniquesByPriority = techniquesByPriority.length;\r\n\r\n/** A collection of rendering techniques accessed by ID.\r\n * @internal\r\n */\r\nexport class Techniques implements WebGLDisposable {\r\n private readonly _list = new Array<Technique>(); // indexed by TechniqueId, which may exceed TechniqueId.NumBuiltIn for dynamic techniques.\r\n private readonly _dynamicTechniqueIds = new Array<string>(); // technique ID = (index in this array) + TechniqueId.NumBuiltIn\r\n private _techniqueByPriorityIndex = 0;\r\n private _shaderIndex = 0;\r\n\r\n public static create(gl: WebGL2RenderingContext): Techniques {\r\n const techs = new Techniques();\r\n techs.initializeBuiltIns(gl);\r\n return techs;\r\n }\r\n\r\n public getTechnique(id: TechniqueId): Technique {\r\n assert(id < this._list.length, \"technique index out of bounds\");\r\n return this._list[id];\r\n }\r\n\r\n public get numTechniques(): number {\r\n return this._list.length;\r\n }\r\n\r\n public addDynamicTechnique(technique: Technique, name: string): TechniqueId {\r\n const id = this.getDynamicTechniqueId(name);\r\n if (undefined !== id)\r\n return id;\r\n\r\n this._dynamicTechniqueIds.push(name);\r\n this._list.push(technique);\r\n return TechniqueId.NumBuiltIn + this._dynamicTechniqueIds.length - 1;\r\n }\r\n\r\n public getDynamicTechniqueId(name: string): TechniqueId | undefined {\r\n const index = this._dynamicTechniqueIds.indexOf(name);\r\n return -1 !== index ? index + TechniqueId.NumBuiltIn + index : undefined;\r\n }\r\n\r\n /** Execute each command in the list */\r\n public execute(target: Target, commands: DrawCommands, renderPass: RenderPass) {\r\n assert(RenderPass.None !== renderPass, \"invalid render pass\");\r\n\r\n using(new ShaderProgramExecutor(target, renderPass), (executor: ShaderProgramExecutor) => {\r\n for (const command of commands)\r\n command.execute(executor);\r\n });\r\n System.instance.frameBufferStack.markTargetsDirty();\r\n }\r\n\r\n /** Execute the commands for a single given classification primitive (the first 3 commands should be a push, the primitive, then a pop) */\r\n public executeForIndexedClassifier(target: Target, cmdsByIndex: DrawCommands, renderPass: RenderPass) {\r\n // ###TODO: Disable shadows. Probably in the ClassifierTileTree's ViewFlagOverrides.\r\n this.execute(target, cmdsByIndex, renderPass);\r\n }\r\n\r\n /** Draw a single primitive. Usually used for special-purpose rendering techniques. */\r\n public draw(params: DrawParams): void {\r\n const tech = this.getTechnique(params.geometry.techniqueId);\r\n const program = tech.getShader(TechniqueFlags.defaults);\r\n using(new ShaderProgramExecutor(params.target, params.renderPass, program), (executor: ShaderProgramExecutor) => {\r\n assert(executor.isValid);\r\n if (executor.isValid) {\r\n executor.draw(params);\r\n }\r\n });\r\n System.instance.frameBufferStack.markTargetsDirty();\r\n }\r\n\r\n public get isDisposed(): boolean { return 0 === this._list.length; }\r\n\r\n public dispose(): void {\r\n for (const tech of this._list)\r\n dispose(tech);\r\n this._list.length = 0;\r\n }\r\n\r\n // Chiefly for tests - compiles all shader programs - more generally programs are compiled on demand.\r\n public compileShaders(): boolean {\r\n let allCompiled = true;\r\n\r\n for (const tech of this._list) {\r\n if (!tech.compileShaders())\r\n allCompiled = false;\r\n }\r\n\r\n return allCompiled;\r\n }\r\n\r\n /** Compile shader of next highest priority. Called when possible during an idle situation before any viewports exist. */\r\n public idleCompileNextShader(): boolean {\r\n let compileStatus = CompileStatus.Success;\r\n let wasPreviouslyCompiled = false;\r\n\r\n do {\r\n if (this._techniqueByPriorityIndex >= numTechniquesByPriority)\r\n return false;\r\n\r\n let shader: ShaderProgram;\r\n let numShaders = 0;\r\n\r\n const pTech = techniquesByPriority[this._techniqueByPriorityIndex];\r\n const tech = this._list[pTech.techniqueId];\r\n\r\n if (pTech.specificShader !== undefined) { // if this entry consists of a specific shader, just compile that\r\n const flags = scratchTechniqueFlags;\r\n flags.reset(pTech.specificShader.featureMode, pTech.specificShader.isInstanced, pTech.specificShader.isShadowable, IsThematic.No, \"quantized\");\r\n flags.isEdgeTestNeeded = pTech.specificShader.isEdgeTestedNeeded;\r\n flags.isTranslucent = pTech.specificShader.isTranslucent;\r\n shader = tech.getShader(flags);\r\n } else { // if this entry only contains a techniqueId, then compile all uncompiled shaders for that technique\r\n shader = tech.getShaderByIndex(this._shaderIndex);\r\n this._shaderIndex++;\r\n numShaders = tech.getShaderCount();\r\n }\r\n\r\n if (shader.isCompiled)\r\n wasPreviouslyCompiled = true;\r\n else {\r\n compileStatus = shader.compile();\r\n wasPreviouslyCompiled = false;\r\n }\r\n\r\n if (this._shaderIndex >= numShaders) {\r\n this._techniqueByPriorityIndex++;\r\n this._shaderIndex = 0;\r\n }\r\n } while (wasPreviouslyCompiled);\r\n\r\n return compileStatus === CompileStatus.Success;\r\n }\r\n\r\n /** For tests. */\r\n public forEachVariedProgram(func: (program: ShaderProgram) => void): void {\r\n for (const technique of this._list)\r\n if (technique instanceof VariedTechnique)\r\n technique.forEachProgram(func);\r\n }\r\n\r\n private constructor() { }\r\n\r\n private initializeBuiltIns(gl: WebGL2RenderingContext): void {\r\n this._list[TechniqueId.OITClearTranslucent] = new SingularTechnique(createClearTranslucentProgram(gl));\r\n this._list[TechniqueId.ClearPickAndColor] = new SingularTechnique(createClearPickAndColorProgram(gl));\r\n this._list[TechniqueId.CopyColor] = new SingularTechnique(createCopyColorProgram(gl));\r\n this._list[TechniqueId.CopyColorNoAlpha] = new SingularTechnique(createCopyColorProgram(gl, false));\r\n this._list[TechniqueId.CopyPickBuffers] = new SingularTechnique(createCopyPickBuffersProgram(gl));\r\n this._list[TechniqueId.EVSMFromDepth] = new SingularTechnique(createEVSMProgram(gl));\r\n this._list[TechniqueId.SkyBox] = new SingularTechnique(createSkyBoxProgram(gl));\r\n this._list[TechniqueId.SkySphereGradient] = new SkySphereTechnique(gl, true);\r\n this._list[TechniqueId.SkySphereTexture] = new SkySphereTechnique(gl, false);\r\n this._list[TechniqueId.AmbientOcclusion] = new SingularTechnique(createAmbientOcclusionProgram(gl));\r\n this._list[TechniqueId.Blur] = new SingularTechnique(createBlurProgram(gl, BlurType.NoTest));\r\n this._list[TechniqueId.BlurTestOrder] = new SingularTechnique(createBlurProgram(gl, BlurType.TestOrder));\r\n this._list[TechniqueId.CombineTextures] = new SingularTechnique(createCombineTexturesProgram(gl));\r\n this._list[TechniqueId.Combine3Textures] = new SingularTechnique(createCombine3TexturesProgram(gl));\r\n this._list[TechniqueId.Surface] = new SurfaceTechnique(gl);\r\n this._list[TechniqueId.Edge] = new EdgeTechnique(gl, \"SegmentEdge\");\r\n this._list[TechniqueId.SilhouetteEdge] = new EdgeTechnique(gl, \"Silhouette\");\r\n this._list[TechniqueId.Polyline] = new PolylineTechnique(gl);\r\n this._list[TechniqueId.PointString] = new PointStringTechnique(gl);\r\n this._list[TechniqueId.PointCloud] = new PointCloudTechnique(gl);\r\n this._list[TechniqueId.RealityMesh] = new RealityMeshTechnique(gl);\r\n this._list[TechniqueId.PlanarGrid] = new SingularTechnique(createPlanarGridProgram(gl));\r\n this._list[TechniqueId.EDLCalcBasic] = new SingularTechnique(createEDLCalcBasicProgram(gl));\r\n this._list[TechniqueId.EDLCalcFull] = new SingularTechnique(createEDLCalcFullProgram(gl));\r\n this._list[TechniqueId.EDLFilter] = new SingularTechnique(createEDLFilterProgram(gl));\r\n this._list[TechniqueId.EDLMix] = new SingularTechnique(createEDLMixProgram(gl));\r\n\r\n this._list[TechniqueId.IndexedEdge] = new EdgeTechnique(gl, \"IndexedEdge\");\r\n\r\n this._list[TechniqueId.VolClassCopyZ] = new SingularTechnique(createVolClassCopyZProgram(gl));\r\n this._list[TechniqueId.VolClassSetBlend] = new SingularTechnique(createVolClassSetBlendProgram(gl));\r\n this._list[TechniqueId.VolClassBlend] = new SingularTechnique(createVolClassBlendProgram(gl));\r\n this._list[TechniqueId.VolClassColorUsingStencil] = new SingularTechnique(createVolClassColorUsingStencilProgram(gl));\r\n\r\n for (let compositeFlags = 1; compositeFlags <= 7; compositeFlags++) {\r\n const techId = computeCompositeTechniqueId(compositeFlags);\r\n this._list[techId] = new SingularTechnique(createCompositeProgram(compositeFlags, gl));\r\n }\r\n\r\n assert(this._list.length === TechniqueId.NumBuiltIn, \"unexpected number of built-in techniques\");\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"Technique.js","sourceRoot":"","sources":["../../../../src/render/webgl/Technique.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module WebGL\n */\n\nimport { assert, dispose, using } from \"@itwin/core-bentley\";\nimport { BlurType } from \"./CachedGeometry\";\nimport { ClippingProgram, createClippingProgram } from \"./ClippingProgram\";\nimport { WebGLDisposable } from \"./Disposable\";\nimport { DrawCommands, DrawParams } from \"./DrawCommand\";\nimport { createAmbientOcclusionProgram } from \"./glsl/AmbientOcclusion\";\nimport { createBlurProgram } from \"./glsl/Blur\";\nimport { createEDLCalcBasicProgram, createEDLCalcFullProgram, createEDLFilterProgram, createEDLMixProgram } from \"./glsl/EDL\";\nimport { createClearPickAndColorProgram } from \"./glsl/ClearPickAndColor\";\nimport { createClearTranslucentProgram } from \"./glsl/ClearTranslucent\";\nimport { createCombine3TexturesProgram } from \"./glsl/Combine3Textures\";\nimport { createCombineTexturesProgram } from \"./glsl/CombineTextures\";\nimport { addEyeSpace, addFrustum, addShaderFlags } from \"./glsl/Common\";\nimport { createCompositeProgram } from \"./glsl/Composite\";\nimport { createCopyColorProgram } from \"./glsl/CopyColor\";\nimport { createCopyPickBuffersProgram } from \"./glsl/CopyPickBuffers\";\nimport {\n createVolClassBlendProgram, createVolClassColorUsingStencilProgram, createVolClassCopyZProgram, createVolClassSetBlendProgram,\n} from \"./glsl/CopyStencil\";\nimport { createEdgeBuilder, EdgeBuilderType } from \"./glsl/Edge\";\nimport { createEVSMProgram } from \"./glsl/EVSMFromDepth\";\nimport { addFeatureId, addFeatureSymbology, addRenderOrder, addUniformFeatureSymbology, FeatureSymbologyOptions, mixFeatureColor } from \"./glsl/FeatureSymbology\";\nimport { addFragColorWithPreMultipliedAlpha, addPickBufferOutputs } from \"./glsl/Fragment\";\nimport { addLogDepth } from \"./glsl/LogarithmicDepthBuffer\";\nimport { addUnlitMonochrome } from \"./glsl/Monochrome\";\nimport createPlanarGridProgram from \"./glsl/PlanarGrid\";\nimport { createPointCloudBuilder, createPointCloudHiliter } from \"./glsl/PointCloud\";\nimport { createPointStringBuilder, createPointStringHiliter } from \"./glsl/PointString\";\nimport { createPolylineBuilder, createPolylineHiliter } from \"./glsl/Polyline\";\nimport {\n addColorOverrideMix, createClassifierRealityMeshHiliter, createRealityMeshBuilder, createRealityMeshHiliter,\n} from \"./glsl/RealityMesh\";\nimport { createSkyBoxProgram } from \"./glsl/SkyBox\";\nimport { createSkySphereBuilder } from \"./glsl/SkySphere\";\nimport { createSurfaceBuilder, createSurfaceHiliter } from \"./glsl/Surface\";\nimport { addTranslucency } from \"./glsl/Translucency\";\nimport { addModelViewMatrix } from \"./glsl/Vertex\";\nimport { RenderPass } from \"./RenderFlags\";\nimport { ProgramBuilder, VertexShaderComponent } from \"./ShaderBuilder\";\nimport { CompileStatus, ShaderProgram, ShaderProgramExecutor } from \"./ShaderProgram\";\nimport { System } from \"./System\";\nimport { Target } from \"./Target\";\nimport {\n EnableAtmosphere,\n FeatureMode, IsAnimated, IsClassified, IsEdgeTestNeeded, IsInstanced, IsShadowable, IsThematic, IsWiremesh, PositionType, TechniqueFlags,\n} from \"./TechniqueFlags\";\nimport { computeCompositeTechniqueId, TechniqueId } from \"./TechniqueId\";\n\n/** Defines a rendering technique implemented using one or more shader programs.\n * @internal\n */\nexport interface Technique extends WebGLDisposable {\n getShader(flags: TechniqueFlags): ShaderProgram;\n getShaderByIndex(index: number): ShaderProgram;\n getShaderCount(): number;\n\n // Chiefly for tests - compiles all shader programs - more generally programs are compiled on demand.\n compileShaders(): boolean;\n}\n\n/** A rendering technique implemented using a single shader program, typically for some specialized purpose.\n * @internal\n */\nexport class SingularTechnique implements Technique {\n public readonly program: ShaderProgram;\n\n // Note: Technique assumes ownership of a program\n public constructor(program: ShaderProgram) { this.program = program; }\n\n public getShader(_flags: TechniqueFlags) { return this.program; }\n public getShaderByIndex(_index: number) { return this.program; }\n public getShaderCount() { return 1; }\n public compileShaders(): boolean { return this.program.compile() === CompileStatus.Success; }\n\n public get isDisposed(): boolean { return this.program.isDisposed; }\n\n public dispose(): void {\n dispose(this.program);\n }\n}\n\nfunction numFeatureVariants(numBaseShaders: number) {\n return numBaseShaders * 3;\n}\n\nconst numHiliteVariants = 2; // instanced and non-instanced.\nconst featureModes = [FeatureMode.None, FeatureMode.Pick, FeatureMode.Overrides];\nconst scratchTechniqueFlags = new TechniqueFlags();\nconst scratchHiliteFlags = new TechniqueFlags();\n\ntype CreateHiliter = (instanced: IsInstanced, classified: IsClassified, posType: PositionType) => ProgramBuilder;\n\n/** A rendering technique implemented using multiple shader programs, selected based on TechniqueFlags.\n * @internal\n */\nexport abstract class VariedTechnique implements Technique {\n private readonly _basicPrograms: ShaderProgram[] = [];\n private readonly _clippingPrograms: ClippingProgram[] = [];\n\n /** TechniqueFlags identifying shader programs for which the fragment shader writes depth but does not contain any discards.\n * Buggy Intel HD 620/630 drivers incorrectly apply early-Z optimization in this case; we must insert a never-executed\n * conditional discard to prevent that.\n */\n protected _earlyZFlags: TechniqueFlags[] = [];\n\n public compileShaders(): boolean {\n let allCompiled = true;\n for (const program of this._basicPrograms) {\n if (program.compile() !== CompileStatus.Success)\n allCompiled = false;\n }\n\n for (const clipper of this._clippingPrograms)\n if (!clipper.compile())\n allCompiled = false;\n\n return allCompiled;\n }\n\n protected finishConstruction(): void {\n this._earlyZFlags.length = 0;\n\n // Confirm no empty entries in our array.\n let emptyShaderIndex = -1;\n assert(-1 === (emptyShaderIndex = this._basicPrograms.findIndex((prog) => undefined === prog)), `Shader index ${emptyShaderIndex} is undefined in ${this.constructor.name}`);\n }\n\n private _isDisposed = false;\n public get isDisposed(): boolean { return this._isDisposed; }\n\n public dispose(): void {\n if (this._isDisposed)\n return;\n\n for (const program of this._basicPrograms) {\n assert(undefined !== program);\n dispose(program);\n }\n\n this._basicPrograms.length = 0;\n for (const clipShaderObj of this._clippingPrograms) {\n assert(undefined !== clipShaderObj);\n clipShaderObj.dispose();\n }\n\n this._clippingPrograms.length = 0;\n this._isDisposed = true;\n }\n\n protected constructor(numPrograms: number) {\n this._basicPrograms.length = numPrograms;\n }\n\n protected abstract computeShaderIndex(flags: TechniqueFlags): number;\n protected abstract get _debugDescription(): string;\n\n protected addShader(builder: ProgramBuilder, flags: TechniqueFlags, gl: WebGL2RenderingContext): void {\n const descr = `${this._debugDescription}: ${flags.buildDescription()}`;\n builder.setDebugDescription(descr);\n\n if (System.instance.supportsLogZBuffer) {\n addLogDepth(builder);\n\n assert(!builder.frag.requiresEarlyZWorkaround);\n if (System.instance.fragDepthDoesNotDisableEarlyZ)\n builder.frag.requiresEarlyZWorkaround = -1 !== this._earlyZFlags.findIndex((x) => x.equals(flags));\n }\n\n const index = this.getShaderIndex(flags);\n this.addProgram(builder, index, gl);\n\n assert(!builder.frag.requiresEarlyZWorkaround);\n }\n\n private addProgram(builder: ProgramBuilder, index: number, gl: WebGL2RenderingContext): void {\n assert(this._basicPrograms[index] === undefined);\n this._basicPrograms[index] = builder.buildProgram(gl);\n assert(this._basicPrograms[index] !== undefined);\n\n // Clipping programs always include a discard, so never require workaround.\n builder.frag.requiresEarlyZWorkaround = false;\n\n assert(this._clippingPrograms[index] === undefined);\n this._clippingPrograms[index] = createClippingProgram(builder);\n assert(this._clippingPrograms[index] !== undefined);\n }\n\n protected addHiliteShader(gl: WebGL2RenderingContext, instanced: IsInstanced, classified: IsClassified, posType: PositionType, create: CreateHiliter): void {\n const builder = create(instanced, classified, posType);\n scratchHiliteFlags.initForHilite(0, instanced, classified, posType);\n this.addShader(builder, scratchHiliteFlags, gl);\n }\n\n protected addTranslucentShader(builder: ProgramBuilder, flags: TechniqueFlags, gl: WebGL2RenderingContext): void {\n flags.isTranslucent = true;\n addTranslucency(builder);\n this.addShader(builder, flags, gl);\n }\n\n protected addFeatureId(builder: ProgramBuilder, feat: FeatureMode) {\n const frag = builder.frag;\n if (FeatureMode.None === feat) {\n addFragColorWithPreMultipliedAlpha(frag);\n } else {\n const vert = builder.vert;\n addFrustum(builder);\n addEyeSpace(builder);\n addModelViewMatrix(vert);\n addRenderOrder(frag);\n addFeatureId(builder, false);\n addPickBufferOutputs(frag);\n }\n }\n\n private getShaderIndex(flags: TechniqueFlags) {\n assert(!flags.isHilite || (!flags.isTranslucent && (flags.isClassified === IsClassified.Yes || flags.hasFeatures)), \"invalid technique flags\");\n const index = this.computeShaderIndex(flags);\n assert(index < this._basicPrograms.length, \"shader index out of bounds\");\n return index;\n }\n\n public getShader(flags: TechniqueFlags): ShaderProgram {\n const index = this.getShaderIndex(flags);\n let program: ShaderProgram | undefined;\n\n if (flags.hasClip) {\n const entry = this._clippingPrograms[index];\n assert(undefined !== entry);\n program = entry.getProgram(flags.numClipPlanes);\n }\n\n if (program === undefined)\n program = this._basicPrograms[index];\n\n return program;\n }\n\n // NB: Will ignore clipping shaders.\n public getShaderByIndex(index: number): ShaderProgram {\n return this._basicPrograms[index];\n }\n\n // NB: Will ignore clipping shaders.\n public getShaderCount(): number {\n return this._basicPrograms.length;\n }\n\n /** For tests. */\n public forEachProgram(func: (program: ShaderProgram) => void): void {\n for (const basic of this._basicPrograms)\n func(basic);\n\n for (const clip of this._clippingPrograms) {\n const prog = clip.getProgram(1);\n assert(undefined !== prog);\n func(prog);\n }\n }\n}\n\nconst positionTypes: PositionType[] = [\"quantized\", \"unquantized\"];\n\nclass SurfaceTechnique extends VariedTechnique {\n private static readonly _kOpaque = 0;\n private static readonly _kTranslucent = 1;\n private static readonly _kInstanced = 2;\n private static readonly _kAnimated = 4;\n private static readonly _kWiremesh = 8;\n private static readonly _kShadowable = 16;\n private static readonly _kThematic = 32;\n private static readonly _kFeature = 48;\n\n private static readonly _kEdgeTestNeeded = SurfaceTechnique._kFeature * 3; // only when hasFeatures\n private static readonly _kHilite = SurfaceTechnique._kEdgeTestNeeded + SurfaceTechnique._kFeature * 2;\n\n // Classifiers are never animated or instanced. They do support shadows, thematic display, and translucency.\n // There are 3 base variations - 1 per feature mode - each with translucent/shadowed/thematic variants; plus 1 for hilite.\n private static readonly _kClassified = SurfaceTechnique._kHilite + numHiliteVariants;\n\n // 3 base classified variations - 1 per feature mode.\n // Plus thematic variant of each and shadowable variant of each = 9\n // Plus translucent variant of each of those = 18\n // Plus 1 hilite shader = 19\n private static readonly _kUnquantized = SurfaceTechnique._kClassified + 19;\n\n public constructor(gl: WebGL2RenderingContext) {\n super(SurfaceTechnique._kUnquantized * 2);\n\n this._earlyZFlags = [\n TechniqueFlags.fromDescription(\"Opaque-Hilite-Overrides\"),\n TechniqueFlags.fromDescription(\"Opaque-Instanced-Hilite-Overrides\"),\n TechniqueFlags.fromDescription(\"Opaque-Hilite-Classified\"),\n TechniqueFlags.fromDescription(\"Unquantized-Opaque-Hilite-Overrides\"),\n TechniqueFlags.fromDescription(\"Unquantized-Opaque-Instanced-Hilite-Overrides\"),\n TechniqueFlags.fromDescription(\"Unquantized-Opaque-Hilite-Classified\"),\n ];\n\n const flags = scratchTechniqueFlags;\n for (const posType of positionTypes) {\n for (let instanced = IsInstanced.No; instanced <= IsInstanced.Yes; instanced++) {\n this.addHiliteShader(gl, instanced, IsClassified.No, posType, createSurfaceHiliter);\n for (let iAnimate = IsAnimated.No; iAnimate <= IsAnimated.Yes; iAnimate++) {\n for (let shadowable = IsShadowable.No; shadowable <= IsShadowable.Yes; shadowable++) {\n for (let wiremesh = IsWiremesh.No; wiremesh <= IsWiremesh.Yes; wiremesh++) {\n for (let thematic = IsThematic.No; thematic <= IsThematic.Yes; thematic++) {\n for (let edgeTestNeeded = IsEdgeTestNeeded.No; edgeTestNeeded <= IsEdgeTestNeeded.Yes; edgeTestNeeded++) {\n for (const featureMode of featureModes) {\n for (let iTranslucent = 0; iTranslucent <= 1; iTranslucent++) {\n if (FeatureMode.None !== featureMode || IsEdgeTestNeeded.No === edgeTestNeeded) {\n if (IsThematic.Yes === thematic && IsShadowable.Yes === shadowable)\n continue; // currently this combination is disallowed.\n\n flags.reset(featureMode, instanced, shadowable, thematic, posType);\n flags.isAnimated = iAnimate;\n flags.isEdgeTestNeeded = edgeTestNeeded;\n flags.isTranslucent = 1 === iTranslucent;\n flags.isWiremesh = wiremesh;\n\n const builder = createSurfaceBuilder(flags);\n this.addShader(builder, flags, gl);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n\n this.addHiliteShader(gl, IsInstanced.No, IsClassified.Yes, \"quantized\", createSurfaceHiliter);\n this.addHiliteShader(gl, IsInstanced.No, IsClassified.Yes, \"unquantized\", createSurfaceHiliter);\n\n for (const posType of positionTypes) {\n for (let translucent = 0; translucent < 2; translucent++) {\n for (let shadowable = IsShadowable.No; shadowable <= IsShadowable.Yes; shadowable++) {\n for (let thematic = IsThematic.No; thematic <= IsThematic.Yes; thematic++) {\n for (const featureMode of featureModes) {\n if (IsThematic.Yes === thematic && IsShadowable.Yes === shadowable)\n continue; // currently this combination is disallowed.\n\n flags.reset(featureMode, IsInstanced.No, shadowable, thematic, posType);\n flags.isClassified = IsClassified.Yes;\n flags.isTranslucent = (0 !== translucent);\n\n const builder = createSurfaceBuilder(flags);\n if (flags.isTranslucent)\n addTranslucency(builder);\n\n this.addShader(builder, flags, gl);\n }\n }\n }\n }\n }\n\n this.finishConstruction();\n }\n\n protected get _debugDescription() { return \"Surface\"; }\n\n public computeShaderIndex(flags: TechniqueFlags): number {\n assert(!(flags.isThematic && flags.isShadowable));\n\n const idxOffset = flags.positionType === \"unquantized\" ? SurfaceTechnique._kUnquantized : 0;\n if (flags.isClassified) {\n assert(!flags.isAnimated);\n assert(!flags.isInstanced);\n assert(!flags.isEdgeTestNeeded);\n\n // First classified shader is for hilite\n if (flags.isHilite)\n return SurfaceTechnique._kClassified + idxOffset;\n\n // The rest are organized in 3 groups of 6 - one group per feature mode.\n // Each group contains opaque, translucent, opaque+thematic, translucent+thematic, opaque+shadowable, and translucent+shadowable variants.\n let baseIndex = SurfaceTechnique._kClassified + 1;\n if (flags.isTranslucent)\n baseIndex += 1;\n if (flags.isShadowable)\n baseIndex += 2;\n if (flags.isThematic)\n baseIndex += 4;\n\n const featureOffset = 6 * flags.featureMode;\n return baseIndex + featureOffset + idxOffset;\n } else if (flags.isHilite) {\n assert(flags.hasFeatures);\n return SurfaceTechnique._kHilite + flags.isInstanced + idxOffset;\n }\n\n assert(flags.hasFeatures || flags.isEdgeTestNeeded === IsEdgeTestNeeded.No);\n let index = flags.isTranslucent ? SurfaceTechnique._kTranslucent : SurfaceTechnique._kOpaque;\n index += SurfaceTechnique._kInstanced * flags.isInstanced;\n index += SurfaceTechnique._kAnimated * flags.isAnimated;\n index += SurfaceTechnique._kShadowable * flags.isShadowable;\n index += SurfaceTechnique._kThematic * flags.isThematic;\n index += SurfaceTechnique._kWiremesh * flags.isWiremesh;\n\n if (flags.isEdgeTestNeeded)\n index += SurfaceTechnique._kEdgeTestNeeded + (flags.featureMode - 1) * SurfaceTechnique._kFeature;\n else\n index += SurfaceTechnique._kFeature * flags.featureMode;\n\n return index + idxOffset;\n }\n}\n\nclass PolylineTechnique extends VariedTechnique {\n private static readonly _kOpaque = 0;\n private static readonly _kTranslucent = 1;\n private static readonly _kInstanced = 2;\n private static readonly _kFeature = 4;\n private static readonly _kHilite = numFeatureVariants(PolylineTechnique._kFeature);\n private static readonly _kUnquantized = PolylineTechnique._kHilite + numHiliteVariants;\n\n public constructor(gl: WebGL2RenderingContext) {\n super(PolylineTechnique._kUnquantized * 2);\n\n this._earlyZFlags = [\n TechniqueFlags.fromDescription(\"Opaque-Hilite-Overrides\"),\n TechniqueFlags.fromDescription(\"Opaque-Instanced-Hilite-Overrides\"),\n TechniqueFlags.fromDescription(\"Unquantized-Opaque-Hilite-Overrides\"),\n TechniqueFlags.fromDescription(\"Unquantized-Opaque-Instanced-Hilite-Overrides\"),\n ];\n\n const flags = scratchTechniqueFlags;\n for (const posType of positionTypes) {\n for (let instanced = IsInstanced.No; instanced <= IsInstanced.Yes; instanced++) {\n this.addHiliteShader(gl, instanced, IsClassified.No, posType, (inst, _class, pos) => createPolylineHiliter(inst, pos));\n for (const featureMode of featureModes) {\n flags.reset(featureMode, instanced, IsShadowable.No, IsThematic.No, posType);\n const builder = createPolylineBuilder(instanced, posType);\n addUnlitMonochrome(builder.frag);\n\n // The translucent shaders do not need the element IDs.\n const builderTrans = createPolylineBuilder(instanced, posType);\n addUnlitMonochrome(builderTrans.frag);\n if (FeatureMode.Overrides === featureMode) {\n addFeatureSymbology(builderTrans, featureMode, FeatureSymbologyOptions.Linear);\n addFeatureSymbology(builder, featureMode, FeatureSymbologyOptions.Linear);\n this.addTranslucentShader(builderTrans, flags, gl);\n } else {\n this.addTranslucentShader(builderTrans, flags, gl);\n addFeatureSymbology(builder, featureMode, FeatureSymbologyOptions.None);\n }\n\n this.addFeatureId(builder, featureMode);\n flags.reset(featureMode, instanced, IsShadowable.No, IsThematic.No, posType);\n this.addShader(builder, flags, gl);\n }\n }\n }\n\n this.finishConstruction();\n }\n\n protected get _debugDescription() { return \"Polyline\"; }\n\n public computeShaderIndex(flags: TechniqueFlags): number {\n const idxOffset = flags.positionType === \"unquantized\" ? PolylineTechnique._kUnquantized : 0;\n if (flags.isHilite) {\n assert(flags.hasFeatures);\n return PolylineTechnique._kHilite + flags.isInstanced + idxOffset;\n }\n\n let index = flags.isTranslucent ? PolylineTechnique._kTranslucent : PolylineTechnique._kOpaque;\n index += PolylineTechnique._kFeature * flags.featureMode;\n index += PolylineTechnique._kInstanced * flags.isInstanced;\n return index + idxOffset;\n }\n}\n\nclass EdgeTechnique extends VariedTechnique {\n private static readonly _kOpaque = 0;\n private static readonly _kTranslucent = 1;\n private static readonly _kAnimated = 2;\n private static readonly _kInstanced = 4;\n private static readonly _kFeature = 8;\n private static readonly _kUnquantized = numFeatureVariants(EdgeTechnique._kFeature);\n private readonly _type: EdgeBuilderType;\n\n public constructor(gl: WebGL2RenderingContext, type: EdgeBuilderType) {\n super(EdgeTechnique._kUnquantized * 2);\n this._type = type;\n\n const flags = scratchTechniqueFlags;\n for (const posType of positionTypes) {\n for (let instanced = IsInstanced.No; instanced <= IsInstanced.Yes; instanced++) {\n for (let iAnimate = IsAnimated.No; iAnimate <= IsAnimated.Yes; iAnimate++) {\n for (const featureMode of featureModes) {\n flags.reset(featureMode, instanced, IsShadowable.No, IsThematic.No, posType);\n flags.isAnimated = iAnimate;\n const builder = createEdgeBuilder(type, flags.isInstanced, flags.isAnimated, posType);\n addUnlitMonochrome(builder.frag);\n\n // The translucent shaders do not need the element IDs.\n const builderTrans = createEdgeBuilder(type, flags.isInstanced, flags.isAnimated, posType);\n addUnlitMonochrome(builderTrans.frag);\n if (FeatureMode.Overrides === featureMode) {\n addFeatureSymbology(builderTrans, featureMode, FeatureSymbologyOptions.Linear);\n addFeatureSymbology(builder, featureMode, FeatureSymbologyOptions.Linear);\n this.addTranslucentShader(builderTrans, flags, gl);\n } else {\n this.addTranslucentShader(builderTrans, flags, gl);\n addFeatureSymbology(builder, featureMode, FeatureSymbologyOptions.None);\n }\n\n this.addFeatureId(builder, featureMode);\n flags.reset(featureMode, instanced, IsShadowable.No, IsThematic.No, posType);\n flags.isAnimated = iAnimate;\n this.addShader(builder, flags, gl);\n }\n }\n }\n }\n\n this.finishConstruction();\n }\n\n protected get _debugDescription() { return this._type; }\n\n public computeShaderIndex(flags: TechniqueFlags): number {\n let index = flags.isTranslucent ? EdgeTechnique._kTranslucent : EdgeTechnique._kOpaque;\n index += EdgeTechnique._kFeature * flags.featureMode;\n if (flags.isAnimated)\n index += EdgeTechnique._kAnimated;\n\n if (flags.isInstanced)\n index += EdgeTechnique._kInstanced;\n\n if (\"unquantized\" === flags.positionType)\n index += EdgeTechnique._kUnquantized;\n\n return index;\n }\n}\n\nclass PointStringTechnique extends VariedTechnique {\n private static readonly _kOpaque = 0;\n private static readonly _kTranslucent = 1;\n private static readonly _kInstanced = 2;\n private static readonly _kFeature = 4;\n private static readonly _kHilite = numFeatureVariants(PointStringTechnique._kFeature);\n private static readonly _kUnquantized = PointStringTechnique._kHilite + numHiliteVariants;\n\n public constructor(gl: WebGL2RenderingContext) {\n super(PointStringTechnique._kUnquantized * 2);\n\n const flags = scratchTechniqueFlags;\n for (const posType of positionTypes) {\n for (let instanced = IsInstanced.No; instanced <= IsInstanced.Yes; instanced++) {\n this.addHiliteShader(gl, instanced, IsClassified.No, posType, (inst, _class, pos) => createPointStringHiliter(inst, pos));\n for (const featureMode of featureModes) {\n flags.reset(featureMode, instanced, IsShadowable.No, IsThematic.No, posType);\n const builder = createPointStringBuilder(instanced, posType);\n addUnlitMonochrome(builder.frag);\n\n // The translucent shaders do not need the element IDs.\n const builderTrans = createPointStringBuilder(instanced, posType);\n addUnlitMonochrome(builderTrans.frag);\n if (FeatureMode.Overrides === featureMode) {\n addFeatureSymbology(builderTrans, featureMode, FeatureSymbologyOptions.Point);\n addFeatureSymbology(builder, featureMode, FeatureSymbologyOptions.Point);\n this.addTranslucentShader(builderTrans, flags, gl);\n } else {\n this.addTranslucentShader(builderTrans, flags, gl);\n addFeatureSymbology(builder, featureMode, FeatureSymbologyOptions.None);\n }\n\n this.addFeatureId(builder, featureMode);\n flags.reset(featureMode, instanced, IsShadowable.No, IsThematic.No, posType);\n this.addShader(builder, flags, gl);\n }\n }\n }\n\n this.finishConstruction();\n }\n\n protected get _debugDescription() { return \"PointString\"; }\n\n public computeShaderIndex(flags: TechniqueFlags): number {\n const idxOffset = \"quantized\" === flags.positionType ? 0 : PointStringTechnique._kUnquantized;\n if (flags.isHilite) {\n assert(flags.hasFeatures);\n return PointStringTechnique._kHilite + flags.isInstanced + idxOffset;\n }\n\n let index = flags.isTranslucent ? PointStringTechnique._kTranslucent : PointStringTechnique._kOpaque;\n index += PointStringTechnique._kFeature * flags.featureMode;\n index += PointStringTechnique._kInstanced * flags.isInstanced;\n return index + idxOffset;\n }\n}\n\nclass PointCloudTechnique extends VariedTechnique {\n private static readonly _kHilite = 8;\n\n public constructor(gl: WebGL2RenderingContext) {\n super(PointCloudTechnique._kHilite + 2);\n\n for (let iClassified = IsClassified.No; iClassified <= IsClassified.Yes; iClassified++) {\n this.addHiliteShader(gl, IsInstanced.No, iClassified, \"quantized\", (_inst, classified) => createPointCloudHiliter(classified));\n const flags = scratchTechniqueFlags;\n for (let thematic = IsThematic.No; thematic <= IsThematic.Yes; thematic++) {\n const pointCloudFeatureModes = [FeatureMode.None, FeatureMode.Overrides];\n for (const featureMode of pointCloudFeatureModes) {\n flags.reset(featureMode, IsInstanced.No, IsShadowable.No, thematic, \"quantized\");\n flags.isClassified = iClassified;\n const builder = createPointCloudBuilder(flags.isClassified, featureMode, thematic);\n if (FeatureMode.Overrides === featureMode) {\n addUniformFeatureSymbology(builder, true);\n addColorOverrideMix(builder.vert);\n builder.vert.set(VertexShaderComponent.ApplyFeatureColor, mixFeatureColor);\n }\n\n this.addFeatureId(builder, featureMode);\n this.addShader(builder, flags, gl);\n }\n }\n }\n\n this.finishConstruction();\n }\n\n protected get _debugDescription() { return \"PointCloud\"; }\n\n public computeShaderIndex(flags: TechniqueFlags): number {\n assert(flags.positionType === \"quantized\", \"Unquantized point cloud positions not currently supported\");\n if (flags.isHilite)\n return PointCloudTechnique._kHilite + flags.isClassified;\n else {\n let ndx = 0;\n if (flags.isClassified)\n ndx++;\n if (flags.featureMode !== FeatureMode.None)\n ndx += 2;\n if (flags.isThematic)\n ndx += 4;\n return ndx;\n }\n }\n}\n\nclass RealityMeshTechnique extends VariedTechnique {\n private static readonly _numVariants = 194;\n\n public constructor(gl: WebGL2RenderingContext) {\n super(RealityMeshTechnique._numVariants);\n this._earlyZFlags = [\n TechniqueFlags.fromDescription(\"Opaque-Hilite-Overrides\"),\n TechniqueFlags.fromDescription(\"Opaque-Hilite-Classified\"),\n ];\n\n this.addHiliteShader(gl, IsInstanced.No, IsClassified.No, \"quantized\", createRealityMeshHiliter);\n this.addHiliteShader(gl, IsInstanced.No, IsClassified.Yes, \"quantized\", createClassifierRealityMeshHiliter);\n for (let iClassified = IsClassified.No; iClassified <= IsClassified.Yes; iClassified++) {\n for (let iTranslucent = 0; iTranslucent <= 1; iTranslucent++) {\n for (let shadowable = IsShadowable.No; shadowable <= IsShadowable.Yes; shadowable++) {\n for (let thematic = IsThematic.No; thematic <= IsThematic.Yes; thematic++) {\n for (let wiremesh = IsWiremesh.No; wiremesh <= IsWiremesh.Yes; wiremesh++) {\n for (let enableAtmosphere = EnableAtmosphere.No; enableAtmosphere <= EnableAtmosphere.Yes; enableAtmosphere++) {\n const flags = scratchTechniqueFlags;\n for (const featureMode of featureModes) {\n flags.reset(featureMode, IsInstanced.No, shadowable, thematic, \"quantized\");\n flags.isClassified = iClassified;\n flags.isWiremesh = wiremesh;\n flags.isTranslucent = 1 === iTranslucent;\n flags.enableAtmosphere = enableAtmosphere;\n const builder = createRealityMeshBuilder(flags);\n\n if (flags.isTranslucent) {\n addShaderFlags(builder);\n addTranslucency(builder);\n } else\n this.addFeatureId(builder, featureMode);\n\n this.addShader(builder, flags, gl);\n }\n }\n }\n }\n }\n }\n }\n\n this.finishConstruction();\n }\n\n protected get _debugDescription() { return \"RealityMesh\"; }\n\n public computeShaderIndex(flags: TechniqueFlags): number {\n assert(\"quantized\" === flags.positionType, \"Unquantized reality mesh positions not currently supported.\");\n\n if (flags.isHilite)\n return flags.isClassified ? 1 : 0;\n let ndx = 2;\n if (flags.isClassified)\n ndx++;\n if (flags.isShadowable)\n ndx += 2;\n if (flags.isTranslucent)\n ndx += 4;\n ndx += 8 * flags.featureMode;\n if (flags.isThematic)\n ndx += 24;\n if (flags.isWiremesh)\n ndx += 48;\n if (flags.enableAtmosphere)\n ndx += 96;\n return ndx;\n }\n}\n\n/**\n * More generalized version of VariedTechnique, without assuming usage of clipping, logDepth, eyeSpace, etc.\n * Similar to SingularTechnique in its simplicity, but with support for multiple shader programs per technique.\n */\nabstract class MultipleTechnique implements Technique {\n private readonly _programs: ShaderProgram[] = [];\n\n private _isDisposed = false;\n public get isDisposed(): boolean { return this._isDisposed; }\n\n public constructor(numPrograms: number) {\n this._programs.length = numPrograms;\n }\n\n protected abstract computeShaderIndex(flags: TechniqueFlags): number;\n\n private getShaderIndex(flags: TechniqueFlags) {\n assert(!flags.isHilite || (!flags.isTranslucent && (flags.isClassified === IsClassified.Yes || flags.hasFeatures)), \"invalid technique flags\");\n const index = this.computeShaderIndex(flags);\n assert(index < this._programs.length, \"shader index out of bounds\");\n return index;\n }\n\n public getShader(flags: TechniqueFlags): ShaderProgram {\n const index = this.getShaderIndex(flags);\n let program: ShaderProgram | undefined;\n\n if (program === undefined)\n program = this._programs[index];\n\n return program;\n }\n\n public getShaderByIndex(index: number): ShaderProgram {\n return this._programs[index];\n }\n\n public getShaderCount() {\n return this._programs.length;\n }\n\n public compileShaders(): boolean {\n let allCompiled = true;\n for (const program of this._programs) {\n if (program.compile() !== CompileStatus.Success)\n allCompiled = false;\n }\n\n return allCompiled;\n }\n\n public dispose(): void {\n if (this._isDisposed)\n return;\n\n for (const program of this._programs) {\n assert(undefined !== program);\n dispose(program);\n }\n this._programs.length = 0;\n this._isDisposed = true;\n }\n\n protected abstract get _debugDescription(): string;\n\n protected addShader(builder: ProgramBuilder, flags: TechniqueFlags, gl: WebGL2RenderingContext): void {\n const descr = `${this._debugDescription}: ${flags.buildDescription()}`;\n builder.setDebugDescription(descr);\n\n const index = this.getShaderIndex(flags);\n this.addProgram(builder, index, gl);\n\n assert(!builder.frag.requiresEarlyZWorkaround);\n }\n\n private addProgram(builder: ProgramBuilder, index: number, gl: WebGL2RenderingContext): void {\n assert(this._programs[index] === undefined);\n this._programs[index] = builder.buildProgram(gl);\n assert(this._programs[index] !== undefined);\n }\n\n protected finishConstruction(): void {\n // Confirm no empty entries in our array.\n let emptyShaderIndex = -1;\n assert(-1 === (emptyShaderIndex = this._programs.findIndex((prog) => undefined === prog)), `Shader index ${emptyShaderIndex} is undefined in ${this.constructor.name}`);\n }\n}\n\nclass SkySphereTechnique extends MultipleTechnique {\n private static readonly _numVariants = 2; // one binary flag (2 ** 1)\n private readonly _isGradient: boolean;\n\n public constructor(gl: WebGL2RenderingContext, isGradient: boolean) {\n super(SkySphereTechnique._numVariants);\n this._isGradient = isGradient;\n\n for (let enableAtmosphere = EnableAtmosphere.No; enableAtmosphere <= EnableAtmosphere.Yes; enableAtmosphere++) {\n const tempFlags = scratchTechniqueFlags;\n\n tempFlags.reset(FeatureMode.None, IsInstanced.No, IsShadowable.No, IsThematic.No, \"quantized\");\n tempFlags.enableAtmosphere = enableAtmosphere;\n const builder = createSkySphereBuilder(isGradient, tempFlags);\n\n this.addShader(builder, tempFlags, gl);\n }\n\n this.finishConstruction();\n }\n\n protected get _debugDescription() { return `SkySphere-${this._isGradient ? \"Gradient\" : \"Texture\"}`; }\n\n public computeShaderIndex(flags: TechniqueFlags): number {\n let index = 0;\n if (flags.enableAtmosphere)\n index += 1 << 0;\n\n return index;\n }\n}\n\ninterface PrioritizedShaderVariation {\n featureMode: FeatureMode;\n isInstanced: IsInstanced;\n isShadowable: IsShadowable;\n isEdgeTestedNeeded: IsEdgeTestNeeded;\n isTranslucent: boolean;\n}\n\ninterface PrioritizedTechniqueOrShader {\n techniqueId: TechniqueId;\n specificShader?: PrioritizedShaderVariation; // if defined, only compile this specific shader variation for the technique; otherwise, compile all uncompiled shader variations for the technique\n}\n\nconst techniquesByPriority: PrioritizedTechniqueOrShader[] = [\n // Compile these specific shader variations first because they seem most likely to be used immediately upon opening a file.\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.None, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.No, isTranslucent: false } },\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.Pick, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.No, isTranslucent: false } },\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.Pick, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.Yes, isTranslucent: false } },\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.Overrides, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.No, isTranslucent: false } },\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.Overrides, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.Yes, isTranslucent: false } },\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.None, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.No, isTranslucent: true } },\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.Pick, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.No, isTranslucent: true } },\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.Pick, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.Yes, isTranslucent: true } },\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.Overrides, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.No, isTranslucent: true } },\n { techniqueId: TechniqueId.Surface, specificShader: { featureMode: FeatureMode.Overrides, isInstanced: IsInstanced.No, isShadowable: IsShadowable.No, isEdgeTestedNeeded: IsEdgeTestNeeded.Yes, isTranslucent: true } },\n\n // Next, compile all shaders in specific techniques.\n // Do surfaces first because (1) they are the most commonly used and (2) they take longer to compile.\n { techniqueId: TechniqueId.Surface },\n { techniqueId: TechniqueId.Edge },\n { techniqueId: TechniqueId.SilhouetteEdge },\n { techniqueId: TechniqueId.Polyline },\n { techniqueId: TechniqueId.PointString },\n { techniqueId: TechniqueId.PointCloud },\n { techniqueId: TechniqueId.RealityMesh },\n\n // The following techniques take a trivial amount of time to compile - do them last\n { techniqueId: TechniqueId.OITClearTranslucent },\n { techniqueId: TechniqueId.CopyPickBuffers },\n { techniqueId: TechniqueId.CopyColor },\n { techniqueId: TechniqueId.CopyColorNoAlpha },\n { techniqueId: TechniqueId.ClearPickAndColor },\n { techniqueId: TechniqueId.CompositeTranslucent },\n { techniqueId: TechniqueId.CompositeHilite },\n { techniqueId: TechniqueId.CompositeHiliteAndTranslucent },\n { techniqueId: TechniqueId.CompositeOcclusion },\n { techniqueId: TechniqueId.CompositeTranslucentAndOcclusion },\n { techniqueId: TechniqueId.CompositeHiliteAndOcclusion },\n { techniqueId: TechniqueId.CompositeAll },\n { techniqueId: TechniqueId.VolClassColorUsingStencil },\n { techniqueId: TechniqueId.EVSMFromDepth },\n { techniqueId: TechniqueId.SkyBox },\n { techniqueId: TechniqueId.SkySphereGradient },\n { techniqueId: TechniqueId.SkySphereTexture },\n { techniqueId: TechniqueId.AmbientOcclusion },\n { techniqueId: TechniqueId.Blur },\n { techniqueId: TechniqueId.BlurTestOrder },\n { techniqueId: TechniqueId.CombineTextures },\n { techniqueId: TechniqueId.VolClassCopyZ },\n { techniqueId: TechniqueId.VolClassSetBlend },\n { techniqueId: TechniqueId.VolClassBlend },\n { techniqueId: TechniqueId.Combine3Textures },\n { techniqueId: TechniqueId.PlanarGrid },\n { techniqueId: TechniqueId.EDLCalcBasic },\n { techniqueId: TechniqueId.EDLCalcFull },\n { techniqueId: TechniqueId.EDLFilter },\n { techniqueId: TechniqueId.EDLMix },\n];\nconst numTechniquesByPriority = techniquesByPriority.length;\n\n/** A collection of rendering techniques accessed by ID.\n * @internal\n */\nexport class Techniques implements WebGLDisposable {\n private readonly _list = new Array<Technique>(); // indexed by TechniqueId, which may exceed TechniqueId.NumBuiltIn for dynamic techniques.\n private readonly _dynamicTechniqueIds = new Array<string>(); // technique ID = (index in this array) + TechniqueId.NumBuiltIn\n private _techniqueByPriorityIndex = 0;\n private _shaderIndex = 0;\n\n public static create(gl: WebGL2RenderingContext): Techniques {\n const techs = new Techniques();\n techs.initializeBuiltIns(gl);\n return techs;\n }\n\n public getTechnique(id: TechniqueId): Technique {\n assert(id < this._list.length, \"technique index out of bounds\");\n return this._list[id];\n }\n\n public get numTechniques(): number {\n return this._list.length;\n }\n\n public addDynamicTechnique(technique: Technique, name: string): TechniqueId {\n const id = this.getDynamicTechniqueId(name);\n if (undefined !== id)\n return id;\n\n this._dynamicTechniqueIds.push(name);\n this._list.push(technique);\n return TechniqueId.NumBuiltIn + this._dynamicTechniqueIds.length - 1;\n }\n\n public getDynamicTechniqueId(name: string): TechniqueId | undefined {\n const index = this._dynamicTechniqueIds.indexOf(name);\n return -1 !== index ? index + TechniqueId.NumBuiltIn + index : undefined;\n }\n\n /** Execute each command in the list */\n public execute(target: Target, commands: DrawCommands, renderPass: RenderPass) {\n assert(RenderPass.None !== renderPass, \"invalid render pass\");\n\n using(new ShaderProgramExecutor(target, renderPass), (executor: ShaderProgramExecutor) => {\n for (const command of commands)\n command.execute(executor);\n });\n System.instance.frameBufferStack.markTargetsDirty();\n }\n\n /** Execute the commands for a single given classification primitive (the first 3 commands should be a push, the primitive, then a pop) */\n public executeForIndexedClassifier(target: Target, cmdsByIndex: DrawCommands, renderPass: RenderPass) {\n // ###TODO: Disable shadows. Probably in the ClassifierTileTree's ViewFlagOverrides.\n this.execute(target, cmdsByIndex, renderPass);\n }\n\n /** Draw a single primitive. Usually used for special-purpose rendering techniques. */\n public draw(params: DrawParams): void {\n const tech = this.getTechnique(params.geometry.techniqueId);\n const program = tech.getShader(TechniqueFlags.defaults);\n using(new ShaderProgramExecutor(params.target, params.renderPass, program), (executor: ShaderProgramExecutor) => {\n assert(executor.isValid);\n if (executor.isValid) {\n executor.draw(params);\n }\n });\n System.instance.frameBufferStack.markTargetsDirty();\n }\n\n public get isDisposed(): boolean { return 0 === this._list.length; }\n\n public dispose(): void {\n for (const tech of this._list)\n dispose(tech);\n this._list.length = 0;\n }\n\n // Chiefly for tests - compiles all shader programs - more generally programs are compiled on demand.\n public compileShaders(): boolean {\n let allCompiled = true;\n\n for (const tech of this._list) {\n if (!tech.compileShaders())\n allCompiled = false;\n }\n\n return allCompiled;\n }\n\n /** Compile shader of next highest priority. Called when possible during an idle situation before any viewports exist. */\n public idleCompileNextShader(): boolean {\n let compileStatus = CompileStatus.Success;\n let wasPreviouslyCompiled = false;\n\n do {\n if (this._techniqueByPriorityIndex >= numTechniquesByPriority)\n return false;\n\n let shader: ShaderProgram;\n let numShaders = 0;\n\n const pTech = techniquesByPriority[this._techniqueByPriorityIndex];\n const tech = this._list[pTech.techniqueId];\n\n if (pTech.specificShader !== undefined) { // if this entry consists of a specific shader, just compile that\n const flags = scratchTechniqueFlags;\n flags.reset(pTech.specificShader.featureMode, pTech.specificShader.isInstanced, pTech.specificShader.isShadowable, IsThematic.No, \"quantized\");\n flags.isEdgeTestNeeded = pTech.specificShader.isEdgeTestedNeeded;\n flags.isTranslucent = pTech.specificShader.isTranslucent;\n shader = tech.getShader(flags);\n } else { // if this entry only contains a techniqueId, then compile all uncompiled shaders for that technique\n shader = tech.getShaderByIndex(this._shaderIndex);\n this._shaderIndex++;\n numShaders = tech.getShaderCount();\n }\n\n if (shader.isCompiled)\n wasPreviouslyCompiled = true;\n else {\n compileStatus = shader.compile();\n wasPreviouslyCompiled = false;\n }\n\n if (this._shaderIndex >= numShaders) {\n this._techniqueByPriorityIndex++;\n this._shaderIndex = 0;\n }\n } while (wasPreviouslyCompiled);\n\n return compileStatus === CompileStatus.Success;\n }\n\n /** For tests. */\n public forEachVariedProgram(func: (program: ShaderProgram) => void): void {\n for (const technique of this._list)\n if (technique instanceof VariedTechnique)\n technique.forEachProgram(func);\n }\n\n private constructor() { }\n\n private initializeBuiltIns(gl: WebGL2RenderingContext): void {\n this._list[TechniqueId.OITClearTranslucent] = new SingularTechnique(createClearTranslucentProgram(gl));\n this._list[TechniqueId.ClearPickAndColor] = new SingularTechnique(createClearPickAndColorProgram(gl));\n this._list[TechniqueId.CopyColor] = new SingularTechnique(createCopyColorProgram(gl));\n this._list[TechniqueId.CopyColorNoAlpha] = new SingularTechnique(createCopyColorProgram(gl, false));\n this._list[TechniqueId.CopyPickBuffers] = new SingularTechnique(createCopyPickBuffersProgram(gl));\n this._list[TechniqueId.EVSMFromDepth] = new SingularTechnique(createEVSMProgram(gl));\n this._list[TechniqueId.SkyBox] = new SingularTechnique(createSkyBoxProgram(gl));\n this._list[TechniqueId.SkySphereGradient] = new SkySphereTechnique(gl, true);\n this._list[TechniqueId.SkySphereTexture] = new SkySphereTechnique(gl, false);\n this._list[TechniqueId.AmbientOcclusion] = new SingularTechnique(createAmbientOcclusionProgram(gl));\n this._list[TechniqueId.Blur] = new SingularTechnique(createBlurProgram(gl, BlurType.NoTest));\n this._list[TechniqueId.BlurTestOrder] = new SingularTechnique(createBlurProgram(gl, BlurType.TestOrder));\n this._list[TechniqueId.CombineTextures] = new SingularTechnique(createCombineTexturesProgram(gl));\n this._list[TechniqueId.Combine3Textures] = new SingularTechnique(createCombine3TexturesProgram(gl));\n this._list[TechniqueId.Surface] = new SurfaceTechnique(gl);\n this._list[TechniqueId.Edge] = new EdgeTechnique(gl, \"SegmentEdge\");\n this._list[TechniqueId.SilhouetteEdge] = new EdgeTechnique(gl, \"Silhouette\");\n this._list[TechniqueId.Polyline] = new PolylineTechnique(gl);\n this._list[TechniqueId.PointString] = new PointStringTechnique(gl);\n this._list[TechniqueId.PointCloud] = new PointCloudTechnique(gl);\n this._list[TechniqueId.RealityMesh] = new RealityMeshTechnique(gl);\n this._list[TechniqueId.PlanarGrid] = new SingularTechnique(createPlanarGridProgram(gl));\n this._list[TechniqueId.EDLCalcBasic] = new SingularTechnique(createEDLCalcBasicProgram(gl));\n this._list[TechniqueId.EDLCalcFull] = new SingularTechnique(createEDLCalcFullProgram(gl));\n this._list[TechniqueId.EDLFilter] = new SingularTechnique(createEDLFilterProgram(gl));\n this._list[TechniqueId.EDLMix] = new SingularTechnique(createEDLMixProgram(gl));\n\n this._list[TechniqueId.IndexedEdge] = new EdgeTechnique(gl, \"IndexedEdge\");\n\n this._list[TechniqueId.VolClassCopyZ] = new SingularTechnique(createVolClassCopyZProgram(gl));\n this._list[TechniqueId.VolClassSetBlend] = new SingularTechnique(createVolClassSetBlendProgram(gl));\n this._list[TechniqueId.VolClassBlend] = new SingularTechnique(createVolClassBlendProgram(gl));\n this._list[TechniqueId.VolClassColorUsingStencil] = new SingularTechnique(createVolClassColorUsingStencilProgram(gl));\n\n for (let compositeFlags = 1; compositeFlags <= 7; compositeFlags++) {\n const techId = computeCompositeTechniqueId(compositeFlags);\n this._list[techId] = new SingularTechnique(createCompositeProgram(compositeFlags, gl));\n }\n\n assert(this._list.length === TechniqueId.NumBuiltIn, \"unexpected number of built-in techniques\");\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"TechniqueFlags.js","sourceRoot":"","sources":["../../../../src/render/webgl/TechniqueFlags.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AA0ChD;;GAEG;AACH,MAAa,cAAc;IAezB,YAAmB,cAAuB,KAAK;QAdxC,kBAAa,GAAG,CAAC,CAAC;QAClB,gBAAW,4BAAoB;QAE/B,qBAAgB,+BAAyC;QACzD,eAAU,yBAA6B;QACvC,gBAAW,0BAA+B;QAC1C,iBAAY,2BAAiC;QAC7C,iBAAY,2BAAiC;QAC7C,eAAU,yBAA6B;QACvC,eAAU,yBAA6B;QACvC,iBAAY,GAAiB,WAAW,CAAC;QACzC,qBAAgB,+BAAyC;QACxD,cAAS,GAAG,KAAK,CAAC;QAGxB,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC;IACnC,CAAC;IAED,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,IAAW,sBAAsB;QAC/B,OAAO,WAAW,KAAK,IAAI,CAAC,YAAY,CAAC;IAC3C,CAAC;IAEM,IAAI,CAAC,MAAc,EAAE,IAAgB,EAAE,SAAsB,EAAE,gCAAoC,EAAE,UAAU,0BAAkB,EAAE,UAAU,0BAAkB,EAAE,QAAQ,wBAAgB,EAAE,QAAQ,wBAAgB,EAAE,UAAwB,WAAW,EAAE,gBAAgB,8BAAsB;QACrS,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;QACnD,MAAM,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;QAE5B,IAAI,+BAAsB,IAAI,IAAI,6CAAoC,IAAI,IAAI,mDAA0C,IAAI,EAAE;YAC5H,MAAM,YAAY,GAAG,CAAC,UAAU,6BAAqB,IAAI,mDAA0C,IAAI,CAAC,CAAC,CAAC,0BAAkB,CAAC,wBAAgB,CAAC;YAC9I,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;SACrE;aAAM;YACL,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,aAAa,GAAG,mCAA2B,IAAI,CAAC;YACrD,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;YACnC,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;YAC3B,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;YAC7B,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC;YAC/B,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC;YAC/B,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;YAC3B,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;YAC3B,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;YACzC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC;YAErD,gLAAgL;YAChL,6DAA6D;YAC7D,iHAAiH;YACjH,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,6BAAqB,CAAC,6BAAqB,CAAC,CAAC,CAAC,4BAAoB,CAAC;YAClI,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,mBAAmB,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,sBAAsB,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBAC1H,QAAQ,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE;oBAC1C,KAAK,UAAU,CAAC,SAAS;wBACvB,+DAA+D;wBAC/D,IAAI,CAAC,gBAAgB,8BAAsB,CAAC;wBAC5C,MAAM;oBACR,KAAK,UAAU,CAAC,WAAW;wBACzB,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,oBAAoB,IAAI,IAAI,6CAAoC,EAAE;4BACrH,mEAAmE;4BACnE,oGAAoG;4BACpG,IAAI,CAAC,gBAAgB,8BAAsB,CAAC;yBAC7C;wBACD,MAAM;oBACR;wBACE,8DAA8D;wBAC9D,MAAM;iBACT;aACF;SACF;IACH,CAAC;IAEM,KAAK,CAAC,IAAiB,EAAE,kCAAuC,EAAE,UAAwB,EAAE,QAAoB,EAAE,OAAqB;QAC5I,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,gBAAgB,8BAAsB,CAAC;QAC5C,IAAI,CAAC,UAAU,wBAAgB,CAAC;QAChC,IAAI,CAAC,YAAY,0BAAkB,CAAC;QACpC,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;QAC3B,IAAI,CAAC,UAAU,wBAAgB,CAAC;QAChC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;QAC5B,IAAI,CAAC,gBAAgB,8BAAsB,CAAC;QAC5C,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,IAAW,WAAW,KAAK,OAAO,6BAAqB,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAEnE,WAAW,CAAC,QAAiB,IAAI,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,CAAC,wBAAgB,CAAC,sBAAc,CAAC,CAAC,CAAC;IAC/F,YAAY,CAAC,SAAkB,IAAI,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC,yBAAiB,CAAC,uBAAe,CAAC,CAAC,CAAC;IACrG,aAAa,CAAC,UAAmB;QACtC,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,CAAC,0BAAkB,CAAC,wBAAgB,CAAC;IACtE,CAAC;IAED,IAAW,QAAQ,KAAK,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACzC,aAAa,CAAC,aAAqB,EAAE,SAAsB,EAAE,UAAwB,EAAE,OAAqB;QACjH,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,CAAC,0BAAkB,CAAC,8BAAsB,CAAC;QACzE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,gBAAgB,8BAAsB,CAAC;QAC5C,IAAI,CAAC,UAAU,wBAAgB,CAAC;QAChC,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC;QAC/B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;IAC9B,CAAC;IAEM,MAAM,CAAC,KAAqB;QACjC,OAAO,IAAI,CAAC,aAAa,KAAK,KAAK,CAAC,aAAa;eAC5C,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW;eACtC,IAAI,CAAC,aAAa,KAAK,KAAK,CAAC,aAAa;eAC1C,IAAI,CAAC,gBAAgB,KAAK,KAAK,CAAC,gBAAgB;eAChD,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU;eACpC,IAAI,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW;eACtC,IAAI,CAAC,YAAY,KAAK,KAAK,CAAC,YAAY;eACxC,IAAI,CAAC,YAAY,KAAK,KAAK,CAAC,YAAY;eACxC,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU;eACpC,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU;eACpC,IAAI,CAAC,YAAY,KAAK,KAAK,CAAC,YAAY;eACxC,IAAI,CAAC,gBAAgB,KAAK,KAAK,CAAC,gBAAgB;eAChD,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,CAAC;IACxC,CAAC;IAEM,gBAAgB;QACrB,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC9D,IAAI,IAAI,CAAC,WAAW;YAClB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC1B,IAAI,IAAI,CAAC,gBAAgB;YACvB,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC/B,IAAI,IAAI,CAAC,UAAU;YACjB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzB,IAAI,IAAI,CAAC,QAAQ;YACf,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,IAAI,IAAI,CAAC,YAAY;YACnB,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3B,IAAI,IAAI,CAAC,OAAO;YACd,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,IAAI,IAAI,CAAC,YAAY;YACnB,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3B,IAAI,IAAI,CAAC,UAAU;YACjB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzB,IAAI,IAAI,CAAC,WAAW;YAClB,KAAK,CAAC,IAAI,CAAC,6BAAqB,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QAC3E,IAAI,IAAI,CAAC,UAAU;YACjB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzB,IAAI,IAAI,CAAC,YAAY,KAAK,aAAa;YACrC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,gBAAgB;YACvB,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAEjC,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAEM,MAAM,CAAC,eAAe,CAAC,WAAmB;QAC/C,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,QAAQ,IAAI,EAAE;gBACZ,KAAK,aAAa;oBAChB,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;oBAC3B,MAAM;gBACR,KAAK,WAAW;oBACd,KAAK,CAAC,WAAW,0BAAkB,CAAC;oBACpC,MAAM;gBACR,KAAK,gBAAgB;oBACnB,KAAK,CAAC,gBAAgB,+BAAuB,CAAC;oBAC9C,MAAM;gBACR,KAAK,UAAU;oBACb,KAAK,CAAC,UAAU,yBAAiB,CAAC;oBAClC,MAAM;gBACR,KAAK,QAAQ;oBACX,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;oBACvB,MAAM;gBACR,KAAK,YAAY;oBACf,KAAK,CAAC,YAAY,2BAAmB,CAAC;oBACtC,MAAM;gBACR,KAAK,MAAM;oBACT,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC;oBACxB,MAAM;gBACR,KAAK,YAAY;oBACf,KAAK,CAAC,YAAY,2BAAmB,CAAC;oBACtC,MAAM;gBACR,KAAK,UAAU;oBACb,KAAK,CAAC,UAAU,yBAAiB,CAAC;oBAClC,MAAM;gBACR,KAAK,UAAU;oBACb,KAAK,CAAC,UAAU,yBAAiB,CAAC;oBAClC,MAAM;gBACR,KAAK,aAAa;oBAChB,KAAK,CAAC,YAAY,GAAG,aAAa,CAAC;oBACnC,MAAM;gBACR,KAAK,kBAAkB;oBACrB,KAAK,CAAC,gBAAgB,+BAAuB,CAAC;oBAC9C,MAAM;gBACR,KAAK,MAAM;oBACT,KAAK,CAAC,WAAW,2BAAmB,CAAC;oBACrC,MAAM;gBACR,KAAK,WAAW;oBACd,KAAK,CAAC,WAAW,gCAAwB,CAAC;oBAC1C,MAAM;aACT;SACF;QAED,OAAO,KAAK,CAAC;IACf,CAAC;;AAEsB,uBAAQ,GAAG,IAAI,cAAc,EAAE,AAAvB,CAAwB;SAjN5C,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 { RenderMode } from \"@itwin/core-common\";\r\nimport { RenderPass } from \"./RenderFlags\";\r\nimport { Target } from \"./Target\";\r\n\r\n/* eslint-disable no-restricted-syntax */\r\n\r\n/** Specifies how a TechniqueFlags handles feature table/overrides.\r\n * @internal\r\n */\r\nexport const enum FeatureMode {\r\n None, // no features\r\n Pick, // feature table only\r\n Overrides, // feature table with symbology overrides\r\n}\r\n\r\n/** @internal */\r\nexport const enum IsInstanced { No, Yes }\r\n\r\n/** @internal */\r\nexport const enum IsAnimated { No, Yes }\r\n\r\n/** @internal */\r\nexport const enum IsClassified { No, Yes }\r\n\r\n/** @internal */\r\nexport const enum IsEdgeTestNeeded { No, Yes }\r\n\r\n/** @internal */\r\nexport const enum IsShadowable { No, Yes }\r\n\r\n/** @internal */\r\nexport const enum IsThematic { No, Yes }\r\n\r\n/** @internal */\r\nexport const enum IsWiremesh { No, Yes }\r\n\r\n/** @internal */\r\nexport type PositionType = \"quantized\" | \"unquantized\";\r\n\r\n/** @internal */\r\nexport const enum EnableAtmosphere { No, Yes }\r\n\r\n/** Flags used to control which shader program is used by a rendering Technique.\r\n * @internal\r\n */\r\nexport class TechniqueFlags {\r\n public numClipPlanes = 0;\r\n public featureMode = FeatureMode.None;\r\n public isTranslucent: boolean;\r\n public isEdgeTestNeeded: IsEdgeTestNeeded = IsEdgeTestNeeded.No;\r\n public isAnimated: IsAnimated = IsAnimated.No;\r\n public isInstanced: IsInstanced = IsInstanced.No;\r\n public isClassified: IsClassified = IsClassified.No;\r\n public isShadowable: IsShadowable = IsShadowable.No;\r\n public isThematic: IsThematic = IsThematic.No;\r\n public isWiremesh: IsWiremesh = IsWiremesh.No;\r\n public positionType: PositionType = \"quantized\";\r\n public enableAtmosphere: EnableAtmosphere = EnableAtmosphere.No;\r\n private _isHilite = false;\r\n\r\n public constructor(translucent: boolean = false) {\r\n this.isTranslucent = translucent;\r\n }\r\n\r\n public get hasClip(): boolean {\r\n return this.numClipPlanes > 0;\r\n }\r\n\r\n public get usesQuantizedPositions(): boolean {\r\n return \"quantized\" === this.positionType;\r\n }\r\n\r\n public init(target: Target, pass: RenderPass, instanced: IsInstanced, animated: IsAnimated = IsAnimated.No, classified = IsClassified.No, shadowable = IsShadowable.No, thematic = IsThematic.No, wiremesh = IsWiremesh.No, posType: PositionType = \"quantized\", enableAtmosphere = EnableAtmosphere.No): void {\r\n const clipStack = target.uniforms.branch.clipStack;\r\n const numClipPlanes = clipStack.hasClip ? clipStack.textureHeight : 0;\r\n this.positionType = posType;\r\n\r\n if (RenderPass.Hilite === pass || RenderPass.HiliteClassification === pass || RenderPass.HilitePlanarClassification === pass) {\r\n const isClassified = (classified === IsClassified.Yes && RenderPass.HilitePlanarClassification === pass) ? IsClassified.Yes : IsClassified.No;\r\n this.initForHilite(numClipPlanes, instanced, isClassified, posType);\r\n } else {\r\n this._isHilite = false;\r\n this.isTranslucent = RenderPass.Translucent === pass;\r\n this.numClipPlanes = numClipPlanes;\r\n this.isAnimated = animated;\r\n this.isInstanced = instanced;\r\n this.isClassified = classified;\r\n this.isShadowable = shadowable;\r\n this.isThematic = thematic;\r\n this.isWiremesh = wiremesh;\r\n this.enableAtmosphere = enableAtmosphere;\r\n this.featureMode = target.uniforms.batch.featureMode;\r\n\r\n // Determine if we should use the shaders which support discarding surfaces in favor of their edges (and discarding non-planar surfaces in favor of coincident planar surfaces).\r\n // These are only useful if the geometry defines feature Ids.\r\n // In 3d, if we're only displaying surfaces or edges, not both, don't bother, unless forceSurfaceDiscard is true.\r\n this.isEdgeTestNeeded = this.hasFeatures ? (this.isClassified ? IsEdgeTestNeeded.No : IsEdgeTestNeeded.Yes) : IsEdgeTestNeeded.No;\r\n if (!target.currentViewFlags.forceSurfaceDiscard && target.is3d && !target.isReadPixelsInProgress && this.isEdgeTestNeeded) {\r\n switch (target.currentViewFlags.renderMode) {\r\n case RenderMode.Wireframe:\r\n // We're only displaying edges (ignoring filled planar regions)\r\n this.isEdgeTestNeeded = IsEdgeTestNeeded.No;\r\n break;\r\n case RenderMode.SmoothShade:\r\n if (!target.currentViewFlags.visibleEdges && !target.wantAmbientOcclusion && pass !== RenderPass.PlanarClassification) {\r\n // We're only displaying surfaces (ignoring filled planar regions).\r\n // NB: Filled text (blanking region) is handled by adjusting the depth in the surface vertex shader.\r\n this.isEdgeTestNeeded = IsEdgeTestNeeded.No;\r\n }\r\n break;\r\n default:\r\n // SolidFill and HiddenLine always display edges and surfaces.\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n public reset(mode: FeatureMode, instanced: IsInstanced = IsInstanced.No, shadowable: IsShadowable, thematic: IsThematic, posType: PositionType) {\r\n this._isHilite = false;\r\n this.featureMode = mode;\r\n this.isTranslucent = false;\r\n this.isEdgeTestNeeded = IsEdgeTestNeeded.No;\r\n this.isAnimated = IsAnimated.No;\r\n this.isClassified = IsClassified.No;\r\n this.isInstanced = instanced;\r\n this.isShadowable = shadowable;\r\n this.isThematic = thematic;\r\n this.isWiremesh = IsWiremesh.No;\r\n this.positionType = posType;\r\n this.enableAtmosphere = EnableAtmosphere.No;\r\n this.numClipPlanes = 0;\r\n }\r\n\r\n public get hasFeatures() { return FeatureMode.None !== this.featureMode; }\r\n\r\n public setAnimated(animated: boolean) { this.isAnimated = animated ? IsAnimated.Yes : IsAnimated.No; }\r\n public setInstanced(instanced: boolean) { this.isInstanced = instanced ? IsInstanced.Yes : IsInstanced.No; }\r\n public setClassified(classified: boolean) {\r\n this.isClassified = classified ? IsClassified.Yes : IsClassified.No;\r\n }\r\n\r\n public get isHilite() { return this._isHilite; }\r\n public initForHilite(numClipPlanes: number, instanced: IsInstanced, classified: IsClassified, posType: PositionType) {\r\n this.featureMode = classified ? FeatureMode.None : FeatureMode.Overrides;\r\n this._isHilite = true;\r\n this.isTranslucent = false;\r\n this.isEdgeTestNeeded = IsEdgeTestNeeded.No;\r\n this.isAnimated = IsAnimated.No;\r\n this.isInstanced = instanced;\r\n this.isClassified = classified;\r\n this.numClipPlanes = numClipPlanes;\r\n this.positionType = posType;\r\n }\r\n\r\n public equals(other: TechniqueFlags): boolean {\r\n return this.numClipPlanes === other.numClipPlanes\r\n && this.featureMode === other.featureMode\r\n && this.isTranslucent === other.isTranslucent\r\n && this.isEdgeTestNeeded === other.isEdgeTestNeeded\r\n && this.isAnimated === other.isAnimated\r\n && this.isInstanced === other.isInstanced\r\n && this.isClassified === other.isClassified\r\n && this.isShadowable === other.isShadowable\r\n && this.isThematic === other.isThematic\r\n && this.isWiremesh === other.isWiremesh\r\n && this.positionType === other.positionType\r\n && this.enableAtmosphere === other.enableAtmosphere\r\n && this.isHilite === other.isHilite;\r\n }\r\n\r\n public buildDescription(): string {\r\n const parts = [this.isTranslucent ? \"Translucent\" : \"Opaque\"];\r\n if (this.isInstanced)\r\n parts.push(\"Instanced\");\r\n if (this.isEdgeTestNeeded)\r\n parts.push(\"EdgeTestNeeded\");\r\n if (this.isAnimated)\r\n parts.push(\"Animated\");\r\n if (this.isHilite)\r\n parts.push(\"Hilite\");\r\n if (this.isClassified)\r\n parts.push(\"Classified\");\r\n if (this.hasClip)\r\n parts.push(\"Clip\");\r\n if (this.isShadowable)\r\n parts.push(\"Shadowable\");\r\n if (this.isThematic)\r\n parts.push(\"Thematic\");\r\n if (this.hasFeatures)\r\n parts.push(FeatureMode.Pick === this.featureMode ? \"Pick\" : \"Overrides\");\r\n if (this.isWiremesh)\r\n parts.push(\"Wiremesh\");\r\n if (this.positionType === \"unquantized\")\r\n parts.push(\"Unquantized\");\r\n if (this.enableAtmosphere)\r\n parts.push(\"EnableAtmosphere\");\r\n\r\n return parts.join(\"-\");\r\n }\r\n\r\n public static fromDescription(description: string): TechniqueFlags {\r\n const flags = new TechniqueFlags(false);\r\n const parts = description.split(\"-\");\r\n for (const part of parts) {\r\n switch (part) {\r\n case \"Translucent\":\r\n flags.isTranslucent = true;\r\n break;\r\n case \"Instanced\":\r\n flags.isInstanced = IsInstanced.Yes;\r\n break;\r\n case \"EdgeTestNeeded\":\r\n flags.isEdgeTestNeeded = IsEdgeTestNeeded.Yes;\r\n break;\r\n case \"Animated\":\r\n flags.isAnimated = IsAnimated.Yes;\r\n break;\r\n case \"Hilite\":\r\n flags._isHilite = true;\r\n break;\r\n case \"Classified\":\r\n flags.isClassified = IsClassified.Yes;\r\n break;\r\n case \"Clip\":\r\n flags.numClipPlanes = 1;\r\n break;\r\n case \"Shadowable\":\r\n flags.isShadowable = IsShadowable.Yes;\r\n break;\r\n case \"Thematic\":\r\n flags.isThematic = IsThematic.Yes;\r\n break;\r\n case \"Wiremesh\":\r\n flags.isWiremesh = IsWiremesh.Yes;\r\n break;\r\n case \"Unquantized\":\r\n flags.positionType = \"unquantized\";\r\n break;\r\n case \"EnableAtmosphere\":\r\n flags.enableAtmosphere = EnableAtmosphere.Yes;\r\n break;\r\n case \"Pick\":\r\n flags.featureMode = FeatureMode.Pick;\r\n break;\r\n case \"Overrides\":\r\n flags.featureMode = FeatureMode.Overrides;\r\n break;\r\n }\r\n }\r\n\r\n return flags;\r\n }\r\n\r\n public static readonly defaults = new TechniqueFlags();\r\n}\r\n"]}
1
+ {"version":3,"file":"TechniqueFlags.js","sourceRoot":"","sources":["../../../../src/render/webgl/TechniqueFlags.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module WebGL\n */\n\nimport { RenderMode } from \"@itwin/core-common\";\nimport { RenderPass } from \"./RenderFlags\";\nimport { Target } from \"./Target\";\n\n/* eslint-disable no-restricted-syntax */\n\n/** Specifies how a TechniqueFlags handles feature table/overrides.\n * @internal\n */\nexport const enum FeatureMode {\n None, // no features\n Pick, // feature table only\n Overrides, // feature table with symbology overrides\n}\n\n/** @internal */\nexport const enum IsInstanced { No, Yes }\n\n/** @internal */\nexport const enum IsAnimated { No, Yes }\n\n/** @internal */\nexport const enum IsClassified { No, Yes }\n\n/** @internal */\nexport const enum IsEdgeTestNeeded { No, Yes }\n\n/** @internal */\nexport const enum IsShadowable { No, Yes }\n\n/** @internal */\nexport const enum IsThematic { No, Yes }\n\n/** @internal */\nexport const enum IsWiremesh { No, Yes }\n\n/** @internal */\nexport type PositionType = \"quantized\" | \"unquantized\";\n\n/** @internal */\nexport const enum EnableAtmosphere { No, Yes }\n\n/** Flags used to control which shader program is used by a rendering Technique.\n * @internal\n */\nexport class TechniqueFlags {\n public numClipPlanes = 0;\n public featureMode = FeatureMode.None;\n public isTranslucent: boolean;\n public isEdgeTestNeeded: IsEdgeTestNeeded = IsEdgeTestNeeded.No;\n public isAnimated: IsAnimated = IsAnimated.No;\n public isInstanced: IsInstanced = IsInstanced.No;\n public isClassified: IsClassified = IsClassified.No;\n public isShadowable: IsShadowable = IsShadowable.No;\n public isThematic: IsThematic = IsThematic.No;\n public isWiremesh: IsWiremesh = IsWiremesh.No;\n public positionType: PositionType = \"quantized\";\n public enableAtmosphere: EnableAtmosphere = EnableAtmosphere.No;\n private _isHilite = false;\n\n public constructor(translucent: boolean = false) {\n this.isTranslucent = translucent;\n }\n\n public get hasClip(): boolean {\n return this.numClipPlanes > 0;\n }\n\n public get usesQuantizedPositions(): boolean {\n return \"quantized\" === this.positionType;\n }\n\n public init(target: Target, pass: RenderPass, instanced: IsInstanced, animated: IsAnimated = IsAnimated.No, classified = IsClassified.No, shadowable = IsShadowable.No, thematic = IsThematic.No, wiremesh = IsWiremesh.No, posType: PositionType = \"quantized\", enableAtmosphere = EnableAtmosphere.No): void {\n const clipStack = target.uniforms.branch.clipStack;\n const numClipPlanes = clipStack.hasClip ? clipStack.textureHeight : 0;\n this.positionType = posType;\n\n if (RenderPass.Hilite === pass || RenderPass.HiliteClassification === pass || RenderPass.HilitePlanarClassification === pass) {\n const isClassified = (classified === IsClassified.Yes && RenderPass.HilitePlanarClassification === pass) ? IsClassified.Yes : IsClassified.No;\n this.initForHilite(numClipPlanes, instanced, isClassified, posType);\n } else {\n this._isHilite = false;\n this.isTranslucent = RenderPass.Translucent === pass;\n this.numClipPlanes = numClipPlanes;\n this.isAnimated = animated;\n this.isInstanced = instanced;\n this.isClassified = classified;\n this.isShadowable = shadowable;\n this.isThematic = thematic;\n this.isWiremesh = wiremesh;\n this.enableAtmosphere = enableAtmosphere;\n this.featureMode = target.uniforms.batch.featureMode;\n\n // Determine if we should use the shaders which support discarding surfaces in favor of their edges (and discarding non-planar surfaces in favor of coincident planar surfaces).\n // These are only useful if the geometry defines feature Ids.\n // In 3d, if we're only displaying surfaces or edges, not both, don't bother, unless forceSurfaceDiscard is true.\n this.isEdgeTestNeeded = this.hasFeatures ? (this.isClassified ? IsEdgeTestNeeded.No : IsEdgeTestNeeded.Yes) : IsEdgeTestNeeded.No;\n if (!target.currentViewFlags.forceSurfaceDiscard && target.is3d && !target.isReadPixelsInProgress && this.isEdgeTestNeeded) {\n switch (target.currentViewFlags.renderMode) {\n case RenderMode.Wireframe:\n // We're only displaying edges (ignoring filled planar regions)\n this.isEdgeTestNeeded = IsEdgeTestNeeded.No;\n break;\n case RenderMode.SmoothShade:\n if (!target.currentViewFlags.visibleEdges && !target.wantAmbientOcclusion && pass !== RenderPass.PlanarClassification) {\n // We're only displaying surfaces (ignoring filled planar regions).\n // NB: Filled text (blanking region) is handled by adjusting the depth in the surface vertex shader.\n this.isEdgeTestNeeded = IsEdgeTestNeeded.No;\n }\n break;\n default:\n // SolidFill and HiddenLine always display edges and surfaces.\n break;\n }\n }\n }\n }\n\n public reset(mode: FeatureMode, instanced: IsInstanced = IsInstanced.No, shadowable: IsShadowable, thematic: IsThematic, posType: PositionType) {\n this._isHilite = false;\n this.featureMode = mode;\n this.isTranslucent = false;\n this.isEdgeTestNeeded = IsEdgeTestNeeded.No;\n this.isAnimated = IsAnimated.No;\n this.isClassified = IsClassified.No;\n this.isInstanced = instanced;\n this.isShadowable = shadowable;\n this.isThematic = thematic;\n this.isWiremesh = IsWiremesh.No;\n this.positionType = posType;\n this.enableAtmosphere = EnableAtmosphere.No;\n this.numClipPlanes = 0;\n }\n\n public get hasFeatures() { return FeatureMode.None !== this.featureMode; }\n\n public setAnimated(animated: boolean) { this.isAnimated = animated ? IsAnimated.Yes : IsAnimated.No; }\n public setInstanced(instanced: boolean) { this.isInstanced = instanced ? IsInstanced.Yes : IsInstanced.No; }\n public setClassified(classified: boolean) {\n this.isClassified = classified ? IsClassified.Yes : IsClassified.No;\n }\n\n public get isHilite() { return this._isHilite; }\n public initForHilite(numClipPlanes: number, instanced: IsInstanced, classified: IsClassified, posType: PositionType) {\n this.featureMode = classified ? FeatureMode.None : FeatureMode.Overrides;\n this._isHilite = true;\n this.isTranslucent = false;\n this.isEdgeTestNeeded = IsEdgeTestNeeded.No;\n this.isAnimated = IsAnimated.No;\n this.isInstanced = instanced;\n this.isClassified = classified;\n this.numClipPlanes = numClipPlanes;\n this.positionType = posType;\n }\n\n public equals(other: TechniqueFlags): boolean {\n return this.numClipPlanes === other.numClipPlanes\n && this.featureMode === other.featureMode\n && this.isTranslucent === other.isTranslucent\n && this.isEdgeTestNeeded === other.isEdgeTestNeeded\n && this.isAnimated === other.isAnimated\n && this.isInstanced === other.isInstanced\n && this.isClassified === other.isClassified\n && this.isShadowable === other.isShadowable\n && this.isThematic === other.isThematic\n && this.isWiremesh === other.isWiremesh\n && this.positionType === other.positionType\n && this.enableAtmosphere === other.enableAtmosphere\n && this.isHilite === other.isHilite;\n }\n\n public buildDescription(): string {\n const parts = [this.isTranslucent ? \"Translucent\" : \"Opaque\"];\n if (this.isInstanced)\n parts.push(\"Instanced\");\n if (this.isEdgeTestNeeded)\n parts.push(\"EdgeTestNeeded\");\n if (this.isAnimated)\n parts.push(\"Animated\");\n if (this.isHilite)\n parts.push(\"Hilite\");\n if (this.isClassified)\n parts.push(\"Classified\");\n if (this.hasClip)\n parts.push(\"Clip\");\n if (this.isShadowable)\n parts.push(\"Shadowable\");\n if (this.isThematic)\n parts.push(\"Thematic\");\n if (this.hasFeatures)\n parts.push(FeatureMode.Pick === this.featureMode ? \"Pick\" : \"Overrides\");\n if (this.isWiremesh)\n parts.push(\"Wiremesh\");\n if (this.positionType === \"unquantized\")\n parts.push(\"Unquantized\");\n if (this.enableAtmosphere)\n parts.push(\"EnableAtmosphere\");\n\n return parts.join(\"-\");\n }\n\n public static fromDescription(description: string): TechniqueFlags {\n const flags = new TechniqueFlags(false);\n const parts = description.split(\"-\");\n for (const part of parts) {\n switch (part) {\n case \"Translucent\":\n flags.isTranslucent = true;\n break;\n case \"Instanced\":\n flags.isInstanced = IsInstanced.Yes;\n break;\n case \"EdgeTestNeeded\":\n flags.isEdgeTestNeeded = IsEdgeTestNeeded.Yes;\n break;\n case \"Animated\":\n flags.isAnimated = IsAnimated.Yes;\n break;\n case \"Hilite\":\n flags._isHilite = true;\n break;\n case \"Classified\":\n flags.isClassified = IsClassified.Yes;\n break;\n case \"Clip\":\n flags.numClipPlanes = 1;\n break;\n case \"Shadowable\":\n flags.isShadowable = IsShadowable.Yes;\n break;\n case \"Thematic\":\n flags.isThematic = IsThematic.Yes;\n break;\n case \"Wiremesh\":\n flags.isWiremesh = IsWiremesh.Yes;\n break;\n case \"Unquantized\":\n flags.positionType = \"unquantized\";\n break;\n case \"EnableAtmosphere\":\n flags.enableAtmosphere = EnableAtmosphere.Yes;\n break;\n case \"Pick\":\n flags.featureMode = FeatureMode.Pick;\n break;\n case \"Overrides\":\n flags.featureMode = FeatureMode.Overrides;\n break;\n }\n }\n\n return flags;\n }\n\n public static readonly defaults = new TechniqueFlags();\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"TechniqueId.js","sourceRoot":"","sources":["../../../../src/render/webgl/TechniqueId.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAwD7C,MAAM,qBAAqB,GAAG;;;;;;;;uCAQF,4DAA4D;CACvF,CAAC;AAEF,gBAAgB;AAChB,MAAM,UAAU,2BAA2B,CAAC,KAAqB;IAC/D,MAAM,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC;IACjC,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC;AACtC,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 { assert } from \"@itwin/core-bentley\";\r\nimport { CompositeFlags } from \"./RenderFlags\";\r\n\r\n/* eslint-disable no-restricted-syntax */\r\n\r\n/** Technique enumeration\r\n * @internal\r\n */\r\nexport const enum TechniqueId {\r\n // Techniques with many different variations\r\n Invalid = -1,\r\n Surface,\r\n Polyline,\r\n PointCloud,\r\n PointString,\r\n Edge,\r\n SilhouetteEdge,\r\n IndexedEdge,\r\n RealityMesh,\r\n PlanarGrid,\r\n\r\n // Techniques with a single associated shader that operates on the entire image\r\n CompositeHilite,\r\n CompositeTranslucent,\r\n CompositeHiliteAndTranslucent,\r\n CompositeOcclusion,\r\n CompositeTranslucentAndOcclusion,\r\n CompositeHiliteAndOcclusion,\r\n CompositeAll,\r\n OITClearTranslucent,\r\n CopyPickBuffers,\r\n CopyColor,\r\n CopyColorNoAlpha,\r\n VolClassColorUsingStencil,\r\n ClearPickAndColor,\r\n EVSMFromDepth,\r\n SkyBox,\r\n SkySphereGradient,\r\n SkySphereTexture,\r\n AmbientOcclusion,\r\n Blur,\r\n BlurTestOrder,\r\n CombineTextures,\r\n Combine3Textures,\r\n VolClassCopyZ,\r\n VolClassSetBlend,\r\n VolClassBlend,\r\n EDLCalcBasic,\r\n EDLCalcFull,\r\n EDLFilter,\r\n EDLMix,\r\n\r\n NumBuiltIn,\r\n COUNT = NumBuiltIn,\r\n}\r\n\r\nconst compositeTechniqueIds = [\r\n TechniqueId.Invalid, // None = 0\r\n TechniqueId.CompositeTranslucent, // Translucent == 1 << 0\r\n TechniqueId.CompositeHilite, // Hilite == 1 << 1 == 2\r\n TechniqueId.CompositeHiliteAndTranslucent, // Hilite | Translucent == 1 | 2 == 3\r\n TechniqueId.CompositeOcclusion, // AmbientOcclusion == 1 << 2 == 4\r\n TechniqueId.CompositeTranslucentAndOcclusion, // Translucent | AmbientOcclusion == 1 | 4 == 5\r\n TechniqueId.CompositeHiliteAndOcclusion, // Hilite | AmbientOcclusion == 2 | 4 == 6\r\n TechniqueId.CompositeAll, // Translucent | Hilite | AmbientOcclusion == 1 | 2 | 4 == 7\r\n];\r\n\r\n/** @internal */\r\nexport function computeCompositeTechniqueId(flags: CompositeFlags): TechniqueId {\r\n assert(flags >= 0 && flags <= 7);\r\n return compositeTechniqueIds[flags];\r\n}\r\n"]}
1
+ {"version":3,"file":"TechniqueId.js","sourceRoot":"","sources":["../../../../src/render/webgl/TechniqueId.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAwD7C,MAAM,qBAAqB,GAAG;;;;;;;;uCAQF,4DAA4D;CACvF,CAAC;AAEF,gBAAgB;AAChB,MAAM,UAAU,2BAA2B,CAAC,KAAqB;IAC/D,MAAM,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC;IACjC,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC;AACtC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module WebGL\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { CompositeFlags } from \"./RenderFlags\";\n\n/* eslint-disable no-restricted-syntax */\n\n/** Technique enumeration\n * @internal\n */\nexport const enum TechniqueId {\n // Techniques with many different variations\n Invalid = -1,\n Surface,\n Polyline,\n PointCloud,\n PointString,\n Edge,\n SilhouetteEdge,\n IndexedEdge,\n RealityMesh,\n PlanarGrid,\n\n // Techniques with a single associated shader that operates on the entire image\n CompositeHilite,\n CompositeTranslucent,\n CompositeHiliteAndTranslucent,\n CompositeOcclusion,\n CompositeTranslucentAndOcclusion,\n CompositeHiliteAndOcclusion,\n CompositeAll,\n OITClearTranslucent,\n CopyPickBuffers,\n CopyColor,\n CopyColorNoAlpha,\n VolClassColorUsingStencil,\n ClearPickAndColor,\n EVSMFromDepth,\n SkyBox,\n SkySphereGradient,\n SkySphereTexture,\n AmbientOcclusion,\n Blur,\n BlurTestOrder,\n CombineTextures,\n Combine3Textures,\n VolClassCopyZ,\n VolClassSetBlend,\n VolClassBlend,\n EDLCalcBasic,\n EDLCalcFull,\n EDLFilter,\n EDLMix,\n\n NumBuiltIn,\n COUNT = NumBuiltIn,\n}\n\nconst compositeTechniqueIds = [\n TechniqueId.Invalid, // None = 0\n TechniqueId.CompositeTranslucent, // Translucent == 1 << 0\n TechniqueId.CompositeHilite, // Hilite == 1 << 1 == 2\n TechniqueId.CompositeHiliteAndTranslucent, // Hilite | Translucent == 1 | 2 == 3\n TechniqueId.CompositeOcclusion, // AmbientOcclusion == 1 << 2 == 4\n TechniqueId.CompositeTranslucentAndOcclusion, // Translucent | AmbientOcclusion == 1 | 4 == 5\n TechniqueId.CompositeHiliteAndOcclusion, // Hilite | AmbientOcclusion == 2 | 4 == 6\n TechniqueId.CompositeAll, // Translucent | Hilite | AmbientOcclusion == 1 | 2 | 4 == 7\n];\n\n/** @internal */\nexport function computeCompositeTechniqueId(flags: CompositeFlags): TechniqueId {\n assert(flags >= 0 && flags <= 7);\n return compositeTechniqueIds[flags];\n}\n"]}