@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":"Texture.js","sourceRoot":"","sources":["../../../../src/render/webgl/Texture.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, BeEvent, dispose, Id64String } from \"@itwin/core-bentley\";\r\nimport {\r\n ImageBuffer, ImageBufferFormat, ImageSource, ImageSourceFormat, isPowerOfTwo, nextHighestPowerOfTwo, RenderTexture, TextureData, TextureTransparency,\r\n} from \"@itwin/core-common\";\r\nimport { getImageSourceMimeType, imageBufferToPngDataUrl, imageElementFromImageSource, openImageDataUrlInNewWindow } from \"../../common/ImageUtil\";\r\nimport { IModelConnection } from \"../../IModelConnection\";\r\nimport { IModelApp } from \"../../IModelApp\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { GL } from \"./GL\";\r\nimport { UniformHandle } from \"./UniformHandle\";\r\nimport { OvrFlags, TextureUnit } from \"./RenderFlags\";\r\nimport { System } from \"./System\";\r\nimport { TextureOwnership } from \"../CreateTextureArgs\";\r\n\r\n/** @internal */\r\nexport type Texture2DData = Uint8Array | Float32Array;\r\n\r\nfunction computeBytesUsed(width: number, height: number, format: GL.Texture.Format, dataType: GL.Texture.DataType): number {\r\n const bytesPerComponent = GL.Texture.DataType.UnsignedByte === dataType ? 1 : 4;\r\n let componentsPerPixel = 1;\r\n switch (format) {\r\n case GL.Texture.Format.Rgb:\r\n componentsPerPixel = 3;\r\n break;\r\n case GL.Texture.Format.Rgba:\r\n componentsPerPixel = 4;\r\n break;\r\n }\r\n\r\n return width * height * componentsPerPixel * bytesPerComponent;\r\n}\r\n\r\n/** Associate texture data with a WebGLTexture from a canvas, image, OR a bitmap. */\r\nfunction loadTexture2DImageData(handle: TextureHandle, params: Texture2DCreateParams, bytes?: Texture2DData, source?: TexImageSource): void {\r\n handle.bytesUsed = undefined !== bytes ? bytes.byteLength : computeBytesUsed(params.width, params.height, params.format, params.dataType);\r\n\r\n const tex = handle.getHandle()!;\r\n const gl = System.instance.context;\r\n\r\n // Use tightly packed data\r\n gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);\r\n\r\n // Bind the texture object; make sure we do not interfere with other active textures\r\n System.instance.activateTexture2d(TextureUnit.Zero, tex);\r\n\r\n // Figure out the internal format. For all but WebGL2 float/half-float datatypes it is just same as format.\r\n // TODO: probably need to just support internal format types in Texture2DCreateParams.\r\n let internalFormat = params.format;\r\n const context2 = System.instance.context;\r\n if (GL.Texture.Format.Rgba === params.format) {\r\n if (GL.Texture.DataType.Float === params.dataType)\r\n internalFormat = context2.RGBA32F;\r\n else if (context2.HALF_FLOAT === params.dataType)\r\n internalFormat = context2.RGBA16F;\r\n } else if (GL.Texture.Format.DepthStencil === params.format)\r\n internalFormat = context2.DEPTH24_STENCIL8;\r\n\r\n // send the texture data\r\n if (undefined !== source) {\r\n gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat, params.format, params.dataType, source);\r\n } else {\r\n const pixelData = undefined !== bytes ? bytes : null;\r\n gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat, params.width, params.height, 0, params.format, params.dataType, pixelData);\r\n }\r\n\r\n if (params.useMipMaps) {\r\n gl.generateMipmap(gl.TEXTURE_2D);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\r\n } else {\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, params.interpolate ? gl.LINEAR : gl.NEAREST);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, params.interpolate ? gl.LINEAR : gl.NEAREST);\r\n }\r\n if (params.anisotropicFilter) {\r\n System.instance.setMaxAnisotropy(params.anisotropicFilter);\r\n }\r\n\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, params.wrapMode);\r\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, params.wrapMode);\r\n\r\n System.instance.bindTexture2d(TextureUnit.Zero, undefined);\r\n}\r\n\r\nfunction loadTextureFromBytes(handle: TextureHandle, params: Texture2DCreateParams, bytes?: Texture2DData): void {\r\n loadTexture2DImageData(handle, params, bytes);\r\n}\r\n\r\n/** Associate cube texture data with a WebGLTexture from an image. */\r\nfunction loadTextureCubeImageData(handle: TextureHandle, params: TextureCubeCreateParams, images: TexImageSource[]): void {\r\n handle.bytesUsed = computeBytesUsed(params.dim * 6, params.dim, params.format, params.dataType);\r\n\r\n const tex = handle.getHandle()!;\r\n const gl = System.instance.context;\r\n\r\n // Use tightly packed data\r\n gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);\r\n\r\n // Bind the texture object; make sure we do not interfere with other active textures\r\n System.instance.activateTextureCubeMap(TextureUnit.Zero, tex);\r\n\r\n const cubeTargets: number[] = [GL.Texture.Target.CubeMapPositiveX, GL.Texture.Target.CubeMapNegativeX, GL.Texture.Target.CubeMapPositiveY, GL.Texture.Target.CubeMapNegativeY, GL.Texture.Target.CubeMapPositiveZ, GL.Texture.Target.CubeMapNegativeZ];\r\n\r\n for (let i = 0; i < 6; i++) {\r\n gl.texImage2D(cubeTargets[i], 0, params.format, params.format, params.dataType, images[i]);\r\n }\r\n\r\n gl.texParameteri(GL.Texture.Target.CubeMap, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\r\n gl.texParameteri(GL.Texture.Target.CubeMap, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\r\n gl.texParameteri(GL.Texture.Target.CubeMap, gl.TEXTURE_WRAP_S, params.wrapMode);\r\n gl.texParameteri(GL.Texture.Target.CubeMap, gl.TEXTURE_WRAP_T, params.wrapMode);\r\n // gl.texParameteri(GL.Texture.Target.CubeMap, gl.TEXTURE_WRAP_R, params.wrapMode); // Unavailable in GLES2\r\n\r\n System.instance.bindTextureCubeMap(TextureUnit.Zero, undefined);\r\n}\r\n\r\ntype TextureFlag = true | undefined;\r\ntype TextureAnisotropicFilter = number | undefined;\r\ntype Load2DImageData = (handle: TextureHandle, params: Texture2DCreateParams) => void;\r\ntype LoadCubeImageData = (handle: TextureHandle, params: TextureCubeCreateParams) => void;\r\n\r\ninterface TextureImageProperties {\r\n wrapMode: GL.Texture.WrapMode;\r\n useMipMaps: TextureFlag;\r\n interpolate: TextureFlag;\r\n format: GL.Texture.Format;\r\n anisotropicFilter: TextureAnisotropicFilter;\r\n}\r\n\r\n/** @internal */\r\nexport interface TextureParams {\r\n type: RenderTexture.Type;\r\n ownership?: TextureOwnership;\r\n transparency: TextureTransparency;\r\n handle: TextureHandle;\r\n}\r\n\r\n/** Wrapper class for a WebGL texture handle and parameters specific to an individual texture.\r\n * @internal\r\n */\r\nexport class Texture extends RenderTexture implements WebGLDisposable {\r\n public readonly texture: TextureHandle;\r\n public readonly ownership?: TextureOwnership;\r\n public transparency: TextureTransparency;\r\n\r\n public get bytesUsed(): number { return this.texture.bytesUsed; }\r\n public get hasOwner(): boolean { return undefined !== this.ownership; }\r\n public get key(): string | undefined {\r\n return typeof this.ownership !== \"string\" && typeof this.ownership?.key === \"string\" ? this.ownership.key : undefined;\r\n }\r\n\r\n public constructor(params: TextureParams) {\r\n super(params.type);\r\n this.ownership = params.ownership;\r\n this.texture = params.handle;\r\n this.transparency = params.handle.format === GL.Texture.Format.Rgba ? params.transparency : TextureTransparency.Opaque;\r\n }\r\n\r\n public get isDisposed(): boolean { return this.texture.isDisposed; }\r\n\r\n /** Free this object in the WebGL wrapper. */\r\n public dispose() {\r\n dispose(this.texture);\r\n }\r\n}\r\n\r\nfunction getDataType(data: Texture2DData): GL.Texture.DataType {\r\n return data instanceof Float32Array ? GL.Texture.DataType.Float : GL.Texture.DataType.UnsignedByte;\r\n}\r\n\r\n/** Parameters used internally to define how to create a texture for use with WebGL. */\r\nclass Texture2DCreateParams {\r\n private constructor(\r\n public width: number,\r\n public height: number,\r\n public format: GL.Texture.Format,\r\n public dataType: GL.Texture.DataType,\r\n public wrapMode: GL.Texture.WrapMode,\r\n public loadImageData: Load2DImageData,\r\n public useMipMaps?: TextureFlag,\r\n public interpolate?: TextureFlag,\r\n public anisotropicFilter?: TextureAnisotropicFilter,\r\n public dataBytes?: Uint8Array) { }\r\n\r\n public static createForData(width: number, height: number, data: Texture2DData, preserveData = false, wrapMode = GL.Texture.WrapMode.ClampToEdge, format = GL.Texture.Format.Rgba) {\r\n const bytes = (preserveData && data instanceof Uint8Array) ? data : undefined;\r\n return new Texture2DCreateParams(width, height, format, getDataType(data), wrapMode,\r\n (tex: TextureHandle, params: Texture2DCreateParams) => loadTextureFromBytes(tex, params, data), undefined, undefined, undefined, bytes);\r\n }\r\n\r\n public static createForImageBuffer(image: ImageBuffer, type: RenderTexture.Type) {\r\n const props = this.getImageProperties(type);\r\n if (ImageBufferFormat.Rgb === image.format)\r\n props.format = GL.Texture.Format.Rgb;\r\n\r\n return new Texture2DCreateParams(image.width, image.height, props.format, GL.Texture.DataType.UnsignedByte, props.wrapMode,\r\n (tex: TextureHandle, params: Texture2DCreateParams) => loadTextureFromBytes(tex, params, image.data), props.useMipMaps, props.interpolate);\r\n }\r\n\r\n public static createForAttachment(width: number, height: number, format: GL.Texture.Format, dataType: GL.Texture.DataType) {\r\n return new Texture2DCreateParams(width, height, format, dataType, GL.Texture.WrapMode.ClampToEdge,\r\n (tex: TextureHandle, params: Texture2DCreateParams) => loadTextureFromBytes(tex, params), undefined, undefined);\r\n }\r\n\r\n public static createForImage(image: HTMLImageElement, type: RenderTexture.Type) {\r\n const props = this.getImageProperties(type);\r\n\r\n let targetWidth = image.naturalWidth;\r\n let targetHeight = image.naturalHeight;\r\n\r\n if (RenderTexture.Type.Glyph === type) {\r\n targetWidth = nextHighestPowerOfTwo(targetWidth);\r\n targetHeight = nextHighestPowerOfTwo(targetHeight);\r\n } else if (!System.instance.supportsNonPowerOf2Textures && (!isPowerOfTwo(targetWidth) || !isPowerOfTwo(targetHeight))) {\r\n if (GL.Texture.WrapMode.ClampToEdge === props.wrapMode) {\r\n // NPOT are supported but not mipmaps\r\n // Probably on poor hardware so I choose to disable mipmaps for lower memory usage over quality. If quality is required we need to resize the image to a pow of 2.\r\n // Above comment is not necessarily true - WebGL doesn't support NPOT mipmapping, only supporting base NPOT caps\r\n props.useMipMaps = undefined;\r\n } else if (GL.Texture.WrapMode.Repeat === props.wrapMode) {\r\n targetWidth = nextHighestPowerOfTwo(targetWidth);\r\n targetHeight = nextHighestPowerOfTwo(targetHeight);\r\n }\r\n }\r\n\r\n // Cap texture dimensions to system WebGL capabilities\r\n const maxTexSize = System.instance.maxTextureSize;\r\n targetWidth = Math.min(targetWidth, maxTexSize);\r\n targetHeight = Math.min(targetHeight, maxTexSize);\r\n\r\n let element: TexImageSource = image;\r\n if (targetWidth !== image.naturalWidth || targetHeight !== image.naturalHeight) {\r\n // Resize so dimensions are powers-of-two\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = targetWidth;\r\n canvas.height = targetHeight;\r\n\r\n const context = canvas.getContext(\"2d\")!;\r\n context.drawImage(image, 0, 0, canvas.width, canvas.height);\r\n\r\n element = canvas;\r\n }\r\n\r\n return new Texture2DCreateParams(targetWidth, targetHeight, props.format, GL.Texture.DataType.UnsignedByte, props.wrapMode,\r\n (tex: TextureHandle, params: Texture2DCreateParams) => loadTexture2DImageData(tex, params, undefined, element), props.useMipMaps, props.interpolate, props.anisotropicFilter);\r\n }\r\n\r\n public static createForImageBitmap(image: ImageBitmap, type: RenderTexture.Type) {\r\n const props = this.getImageProperties(type);\r\n\r\n let targetWidth = image.width;\r\n let targetHeight = image.height;\r\n\r\n if (RenderTexture.Type.Glyph === type) {\r\n targetWidth = nextHighestPowerOfTwo(targetWidth);\r\n targetHeight = nextHighestPowerOfTwo(targetHeight);\r\n } else if (!System.instance.supportsNonPowerOf2Textures && (!isPowerOfTwo(targetWidth) || !isPowerOfTwo(targetHeight))) {\r\n if (GL.Texture.WrapMode.ClampToEdge === props.wrapMode) {\r\n // NPOT are supported but not mipmaps\r\n // Probably on poor hardware so I choose to disable mipmaps for lower memory usage over quality. If quality is required we need to resize the image to a pow of 2.\r\n // Above comment is not necessarily true - WebGL doesn't support NPOT mipmapping, only supporting base NPOT caps\r\n props.useMipMaps = undefined;\r\n } else if (GL.Texture.WrapMode.Repeat === props.wrapMode) {\r\n targetWidth = nextHighestPowerOfTwo(targetWidth);\r\n targetHeight = nextHighestPowerOfTwo(targetHeight);\r\n }\r\n }\r\n\r\n // If we have to resize, use a canvas\r\n let source: TexImageSource = image;\r\n if (image.width !== targetWidth || image.height !== targetHeight) {\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = targetWidth;\r\n canvas.height = targetHeight;\r\n const context = canvas.getContext(\"2d\")!;\r\n context.drawImage(image, 0, 0, canvas.width, canvas.height);\r\n\r\n source = canvas;\r\n }\r\n\r\n return new Texture2DCreateParams(targetWidth, targetHeight, props.format, GL.Texture.DataType.UnsignedByte, props.wrapMode,\r\n (tex: TextureHandle, params: Texture2DCreateParams) => loadTexture2DImageData(tex, params, undefined, source), props.useMipMaps, props.interpolate, props.anisotropicFilter);\r\n }\r\n\r\n private static getImageProperties(type: RenderTexture.Type): TextureImageProperties {\r\n const isSky = RenderTexture.Type.SkyBox === type;\r\n const isTile = RenderTexture.Type.TileSection === type;\r\n const isThematic = RenderTexture.Type.ThematicGradient === type;\r\n const isFilteredTile = RenderTexture.Type.FilteredTileSection === type;\r\n const maxAnisotropicFilterLevel = 16;\r\n\r\n const wrapMode = RenderTexture.Type.Normal === type ? GL.Texture.WrapMode.Repeat : GL.Texture.WrapMode.ClampToEdge;\r\n const useMipMaps: TextureFlag = (!isSky && !isTile && !isFilteredTile && !isThematic) ? true : undefined;\r\n const interpolate: TextureFlag = isThematic ? undefined : true;\r\n const anisotropicFilter = isFilteredTile ? maxAnisotropicFilterLevel : undefined;\r\n\r\n // Always use RGBA. RGB is much slower and almost certainly does not actually save any GPU memory.\r\n const format = GL.Texture.Format.Rgba;\r\n\r\n return { format, wrapMode, useMipMaps, interpolate, anisotropicFilter };\r\n }\r\n\r\n public static readonly placeholderParams = new Texture2DCreateParams(1, 1, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte, GL.Texture.WrapMode.ClampToEdge,\r\n (_tex: TextureHandle, _params: Texture2DCreateParams) => undefined);\r\n}\r\n\r\nclass TextureCubeCreateParams {\r\n private constructor(\r\n public dim: number,\r\n public format: GL.Texture.Format,\r\n public dataType: GL.Texture.DataType,\r\n public wrapMode: GL.Texture.WrapMode,\r\n public loadImageData: LoadCubeImageData) { }\r\n\r\n public static createForCubeImages(posX: HTMLImageElement, negX: HTMLImageElement, posY: HTMLImageElement, negY: HTMLImageElement, posZ: HTMLImageElement, negZ: HTMLImageElement): TextureCubeCreateParams | undefined {\r\n const targetDim = posX.naturalWidth;\r\n\r\n if (posX.naturalHeight !== targetDim) // Cube texture dimensions must match (width must equal height)\r\n return undefined;\r\n\r\n const images: HTMLImageElement[] = [posX, negX, posY, negY, posZ, negZ];\r\n\r\n for (let i = 1; i < images.length; i++) { // Dimensions of all six sides must match each other\r\n if (images[i].naturalWidth !== targetDim || images[i].naturalHeight !== targetDim)\r\n return undefined;\r\n }\r\n\r\n return new TextureCubeCreateParams(targetDim, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte, GL.Texture.WrapMode.ClampToEdge,\r\n (tex: TextureHandle, params: TextureCubeCreateParams) => loadTextureCubeImageData(tex, params, images));\r\n }\r\n}\r\n\r\n/** Wraps a WebGLTextureHandle\r\n * @internal\r\n */\r\nexport abstract class TextureHandle implements WebGLDisposable {\r\n protected _glTexture?: WebGLTexture;\r\n protected _bytesUsed = 0;\r\n\r\n public abstract get width(): number;\r\n public abstract get height(): number;\r\n public abstract get format(): GL.Texture.Format;\r\n public abstract get dataType(): GL.Texture.DataType;\r\n public abstract get dataBytes(): Uint8Array | undefined;\r\n public get bytesUsed(): number { return this._bytesUsed; }\r\n public set bytesUsed(bytesUsed: number) {\r\n // assert(0 === this.bytesUsed);\r\n this._bytesUsed = bytesUsed;\r\n }\r\n\r\n /** Get the WebGLTexture for this TextureHandle. */\r\n public getHandle(): WebGLTexture | undefined { return this._glTexture; }\r\n\r\n /** Bind texture handle (if available) associated with an instantiation of this class to specified texture unit. */\r\n public abstract bind(_texUnit: TextureUnit): boolean;\r\n\r\n /** Bind this texture to a uniform sampler. */\r\n public abstract bindSampler(_uniform: UniformHandle, _unit: TextureUnit): void;\r\n\r\n public get isDisposed(): boolean { return this._glTexture === undefined; }\r\n\r\n public dispose() {\r\n if (!this.isDisposed) {\r\n System.instance.disposeTexture(this._glTexture!);\r\n this._glTexture = undefined;\r\n this.bytesUsed = 0;\r\n }\r\n }\r\n\r\n /** Create a 2D texture for use as a color attachment for rendering */\r\n public static createForAttachment(width: number, height: number, format: GL.Texture.Format, dataType: GL.Texture.DataType) {\r\n return Texture2DHandle.createForAttachment(width, height, format, dataType);\r\n }\r\n\r\n /** Create a 2D texture to hold non-image data */\r\n public static createForData(width: number, height: number, data: Texture2DData, wantPreserveData = false, wrapMode = GL.Texture.WrapMode.ClampToEdge, format = GL.Texture.Format.Rgba) {\r\n return Texture2DHandle.createForData(width, height, data, wantPreserveData, wrapMode, format);\r\n }\r\n\r\n /** Create a 2D texture from a bitmap */\r\n public static createForImageBuffer(image: ImageBuffer, type: RenderTexture.Type) {\r\n return Texture2DHandle.createForImageBuffer(image, type);\r\n }\r\n\r\n /** Create a 2D texture from an HTMLImageElement. */\r\n public static createForImage(image: HTMLImageElement, type: RenderTexture.Type) {\r\n return Texture2DHandle.createForImage(image, type);\r\n }\r\n\r\n /** Create a 2D texture from an ImageBitmap. */\r\n public static createForImageBitmap(image: ImageBitmap, type: RenderTexture.Type) {\r\n return Texture2DHandle.createForImageBitmap(image, type);\r\n }\r\n\r\n /** Create a cube map texture from six HTMLImageElement objects. */\r\n public static createForCubeImages(posX: HTMLImageElement, negX: HTMLImageElement, posY: HTMLImageElement, negY: HTMLImageElement, posZ: HTMLImageElement, negZ: HTMLImageElement) {\r\n return TextureCubeHandle.createForCubeImages(posX, negX, posY, negY, posZ, negZ);\r\n }\r\n\r\n public static createForElement(id: Id64String, imodel: IModelConnection, type: RenderTexture.Type, format: ImageSourceFormat, onLoaded: ExternalTextureLoadCallback) {\r\n return Texture2DHandle.createForElement(id, imodel, type, format, onLoaded);\r\n }\r\n\r\n protected constructor(glTexture: WebGLTexture) {\r\n this._glTexture = glTexture;\r\n }\r\n\r\n /** For debugging purposes, open a new window containing this texture as an image. */\r\n public showDebugImage(): void {\r\n const gl = System.instance.context;\r\n const fbo = gl.createFramebuffer();\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);\r\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.getHandle()!, 0);\r\n if (gl.FRAMEBUFFER_COMPLETE === gl.checkFramebufferStatus(gl.FRAMEBUFFER)) {\r\n const w = this.width;\r\n const h = this.height;\r\n const pixels = new Uint8Array(w * h * 4);\r\n gl.readPixels(0, 0, w, h, gl.RGBA, gl.UNSIGNED_BYTE, pixels);\r\n\r\n const buffer = ImageBuffer.create(pixels, ImageBufferFormat.Rgba, w)!;\r\n const url = imageBufferToPngDataUrl(buffer, false);\r\n openImageDataUrlInNewWindow(url!, \"Classifiers\");\r\n }\r\n\r\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\r\n gl.deleteFramebuffer(fbo);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class Texture2DHandle extends TextureHandle {\r\n private _width: number;\r\n private _height: number;\r\n private _format: GL.Texture.Format;\r\n private _dataType: GL.Texture.DataType;\r\n private _dataBytes?: Uint8Array;\r\n\r\n public get width(): number { return this._width; }\r\n public get height(): number { return this._height; }\r\n public get format(): GL.Texture.Format { return this._format; }\r\n public get dataType(): GL.Texture.DataType { return this._dataType; }\r\n public get dataBytes(): Uint8Array | undefined { return this._dataBytes; }\r\n\r\n /** Bind specified texture handle to specified texture unit. */\r\n public static bindTexture(texUnit: TextureUnit, glTex: WebGLTexture | undefined) {\r\n assert(!(glTex instanceof TextureHandle));\r\n System.instance.bindTexture2d(texUnit, glTex);\r\n }\r\n\r\n /** Bind the specified texture to a uniform sampler2D */\r\n public static bindSampler(uniform: UniformHandle, tex: WebGLTexture, unit: TextureUnit): void {\r\n assert(!(tex instanceof TextureHandle));\r\n this.bindTexture(unit, tex);\r\n uniform.setUniform1i(unit - TextureUnit.Zero);\r\n }\r\n\r\n /** Bind texture handle (if available) associated with an instantiation of this class to specified texture unit. */\r\n public bind(texUnit: TextureUnit): boolean {\r\n if (undefined === this._glTexture)\r\n return false;\r\n Texture2DHandle.bindTexture(texUnit, this._glTexture);\r\n return true;\r\n }\r\n\r\n /** Bind this texture to a uniform sampler2D */\r\n public bindSampler(uniform: UniformHandle, unit: TextureUnit): void {\r\n if (undefined !== this._glTexture)\r\n Texture2DHandle.bindSampler(uniform, this._glTexture, unit);\r\n }\r\n\r\n /** Update the 2D texture contents. */\r\n public update(updater: Texture2DDataUpdater): boolean {\r\n if (0 === this.width || 0 === this.height || undefined === this._dataBytes || 0 === this._dataBytes.length) {\r\n assert(false);\r\n return false;\r\n }\r\n\r\n if (!updater.modified)\r\n return false;\r\n\r\n return this.replaceTextureData(this._dataBytes);\r\n }\r\n\r\n /** Replace the 2D texture contents. */\r\n public replaceTextureData(data: Texture2DData): boolean {\r\n assert((GL.Texture.DataType.Float === this._dataType) === (data instanceof Float32Array));\r\n\r\n const tex = this.getHandle()!;\r\n if (undefined === tex)\r\n return false;\r\n\r\n const gl = System.instance.context;\r\n gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);\r\n\r\n // Go through System to ensure we don't interfere with currently-bound textures!\r\n System.instance.activateTexture2d(TextureUnit.Zero, tex);\r\n gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, this.width, this.height, this._format, this._dataType, data);\r\n System.instance.bindTexture2d(TextureUnit.Zero, undefined);\r\n\r\n return true;\r\n }\r\n\r\n private static create(params: Texture2DCreateParams): Texture2DHandle | undefined {\r\n const glTex = System.instance.context.createTexture();\r\n return null !== glTex ? new Texture2DHandle(glTex, params) : undefined;\r\n }\r\n\r\n /** Create a texture for use as a color attachment for rendering */\r\n public static override createForAttachment(width: number, height: number, format: GL.Texture.Format, dataType: GL.Texture.DataType) {\r\n return this.create(Texture2DCreateParams.createForAttachment(width, height, format, dataType));\r\n }\r\n\r\n /** Create a texture to hold non-image data */\r\n public static override createForData(width: number, height: number, data: Texture2DData, wantPreserveData = false, wrapMode = GL.Texture.WrapMode.ClampToEdge, format = GL.Texture.Format.Rgba) {\r\n return this.create(Texture2DCreateParams.createForData(width, height, data, wantPreserveData, wrapMode, format));\r\n }\r\n\r\n /** Create a texture from a bitmap */\r\n public static override createForImageBuffer(image: ImageBuffer, type: RenderTexture.Type) {\r\n if (RenderTexture.Type.TileSection !== type && RenderTexture.Type.ThematicGradient !== type)\r\n assert(isPowerOfTwo(image.width) && isPowerOfTwo(image.height), \"###TODO: Resize image dimensions to powers-of-two if necessary\");\r\n\r\n return this.create(Texture2DCreateParams.createForImageBuffer(image, type));\r\n }\r\n\r\n /** Create a 2D texture from an HTMLImageElement. */\r\n public static override createForImage(image: HTMLImageElement, type: RenderTexture.Type) {\r\n return this.create(Texture2DCreateParams.createForImage(image, type));\r\n }\r\n\r\n /** Create a 2D texture from an ImageBitmap. */\r\n public static override createForImageBitmap(image: ImageBitmap, type: RenderTexture.Type) {\r\n return this.create(Texture2DCreateParams.createForImageBitmap(image, type));\r\n }\r\n\r\n private static _placeHolderTextureData = new Uint8Array([128, 128, 128, 255]);\r\n\r\n public static override createForElement(id: Id64String, imodel: IModelConnection, type: RenderTexture.Type, format: ImageSourceFormat, onLoaded: ExternalTextureLoadCallback) {\r\n // set a placeholder texture while we wait for the external texture to load\r\n const handle = this.createForData(1, 1, this._placeHolderTextureData, undefined, undefined, GL.Texture.Format.Rgba);\r\n\r\n if (undefined === handle)\r\n return undefined;\r\n\r\n // kick off loading the texture from the backend\r\n ExternalTextureLoader.instance.loadTexture(handle, id, imodel, type, format, onLoaded);\r\n\r\n return handle;\r\n }\r\n\r\n public reload(params: Texture2DCreateParams) {\r\n this._width = params.width;\r\n this._height = params.height;\r\n this._format = params.format;\r\n this._dataType = params.dataType;\r\n this._dataBytes = params.dataBytes;\r\n\r\n params.loadImageData(this, params);\r\n }\r\n\r\n private constructor(glTexture: WebGLTexture, params: Texture2DCreateParams) {\r\n super(glTexture);\r\n this._width = params.width;\r\n this._height = params.height;\r\n this._format = params.format;\r\n this._dataType = params.dataType;\r\n this._dataBytes = params.dataBytes;\r\n\r\n params.loadImageData(this, params);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport type ExternalTextureLoadCallback = (req: ExternalTextureRequest, data: TextureData) => void;\r\n\r\n/** @internal */\r\nexport interface ExternalTextureRequest {\r\n handle: Texture2DHandle;\r\n name: Id64String;\r\n imodel: IModelConnection;\r\n type: RenderTexture.Type;\r\n format: ImageSourceFormat;\r\n onLoaded?: ExternalTextureLoadCallback;\r\n}\r\n\r\n/** @internal */\r\ninterface TextureConvertRequest {\r\n req: ExternalTextureRequest;\r\n texData: TextureData;\r\n}\r\n\r\n/** @internal */\r\nexport class ExternalTextureLoader { /* currently exported for tests only */\r\n public static readonly instance = new ExternalTextureLoader(2);\r\n public readonly onTexturesLoaded = new BeEvent<() => void>();\r\n private readonly _maxActiveRequests: number;\r\n private _activeRequests: Array<ExternalTextureRequest> = [];\r\n private _pendingRequests: Array<ExternalTextureRequest> = [];\r\n private _convertRequests: Array<TextureConvertRequest> = [];\r\n private _convertPending = false;\r\n\r\n public get numActiveRequests() { return this._activeRequests.length; }\r\n public get numPendingRequests() { return this._pendingRequests.length; }\r\n public get maxActiveRequests() { return this._maxActiveRequests; }\r\n\r\n private constructor(maxActiveRequests: number) {\r\n this._maxActiveRequests = maxActiveRequests;\r\n }\r\n\r\n private async _nextRequest(prevReq: ExternalTextureRequest) {\r\n this._activeRequests.splice(this._activeRequests.indexOf(prevReq), 1);\r\n if (this._activeRequests.length < this._maxActiveRequests && this._pendingRequests.length > 0) {\r\n const req = this._pendingRequests.shift()!;\r\n await this._activateRequest(req);\r\n }\r\n if (this._activeRequests.length < 1 && this._pendingRequests.length < 1)\r\n this.onTexturesLoaded.raiseEvent();\r\n }\r\n\r\n private async _activateRequest(req: ExternalTextureRequest) {\r\n if (req.imodel.isClosed)\r\n return;\r\n\r\n this._activeRequests.push(req);\r\n\r\n try {\r\n if (!req.imodel.isClosed) {\r\n const maxTextureSize = System.instance.maxTexSizeAllow;\r\n const texData = await req.imodel.queryTextureData({ name: req.name, maxTextureSize });\r\n if (undefined !== texData) {\r\n const cnvReq = { req, texData };\r\n this._convertRequests.push(cnvReq);\r\n // _convertPending is used to prevent overlapping calls to _convertTexture (from overlapping calls to _activateRequest)\r\n // it has been put on the list, so if it doesn't get converted here it will get converted by the loop that is converting the current one\r\n do {\r\n if (!this._convertPending)\r\n await this._convertTexture();\r\n } while (!this._convertPending && this._convertRequests.length > 0);\r\n if (!req.imodel.isClosed) {\r\n IModelApp.tileAdmin.invalidateAllScenes();\r\n if (undefined !== req.onLoaded)\r\n req.onLoaded(req, texData);\r\n }\r\n }\r\n }\r\n } catch (_e) { }\r\n\r\n return this._nextRequest(req);\r\n }\r\n\r\n private async _convertTexture(): Promise<void> {\r\n this._convertPending = true;\r\n try {\r\n const cnvReq = this._convertRequests.shift();\r\n if (undefined !== cnvReq) {\r\n const imageSource = new ImageSource(cnvReq.texData.bytes, cnvReq.texData.format);\r\n if (System.instance.supportsCreateImageBitmap) {\r\n const blob = new Blob([imageSource.data], { type: getImageSourceMimeType(imageSource.format) });\r\n const image = await createImageBitmap(blob, 0, 0, cnvReq.texData.width, cnvReq.texData.height);\r\n if (!cnvReq.req.imodel.isClosed) {\r\n cnvReq.req.handle.reload(Texture2DCreateParams.createForImageBitmap(image, cnvReq.req.type));\r\n }\r\n } else {\r\n const image = await imageElementFromImageSource(imageSource);\r\n if (!cnvReq.req.imodel.isClosed) {\r\n cnvReq.req.handle.reload(Texture2DCreateParams.createForImage(image, cnvReq.req.type));\r\n }\r\n }\r\n }\r\n } catch (_e) { }\r\n this._convertPending = false;\r\n }\r\n\r\n private _requestExists(reqToCheck: ExternalTextureRequest) {\r\n for (const r of this._activeRequests)\r\n if (reqToCheck.name === r.name && reqToCheck.imodel === r.imodel)\r\n return true;\r\n\r\n for (const r of this._pendingRequests)\r\n if (reqToCheck.name === r.name && reqToCheck.imodel === r.imodel)\r\n return true;\r\n\r\n return false;\r\n }\r\n\r\n public loadTexture(handle: Texture2DHandle, name: Id64String, imodel: IModelConnection, type: RenderTexture.Type, format: ImageSourceFormat, onLoaded?: ExternalTextureLoadCallback) {\r\n const req = { handle, name, imodel, type, format, onLoaded };\r\n if (this._requestExists(req))\r\n return;\r\n\r\n if (this._activeRequests.length + 1 > this._maxActiveRequests) {\r\n this._pendingRequests.push(req);\r\n } else\r\n this._activateRequest(req); // eslint-disable-line @typescript-eslint/no-floating-promises\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class TextureCubeHandle extends TextureHandle {\r\n private _dim: number; // Cubemap texture height and width must match. This must be the same for each of the six faces.\r\n private _format: GL.Texture.Format; // Format must be the same for each of the six faces.\r\n private _dataType: GL.Texture.DataType; // Type must be the same for each of the six faces.\r\n\r\n public get width(): number { return this._dim; }\r\n public get height(): number { return this._dim; }\r\n public get format(): GL.Texture.Format { return this._format; }\r\n public get dataType(): GL.Texture.DataType { return this._dataType; }\r\n public get dataBytes(): Uint8Array | undefined { return undefined; }\r\n\r\n /** Bind specified cubemap texture handle to specified texture unit. */\r\n public static bindTexture(texUnit: TextureUnit, glTex: WebGLTexture | undefined) {\r\n assert(!(glTex instanceof TextureHandle));\r\n System.instance.bindTextureCubeMap(texUnit, glTex);\r\n }\r\n\r\n /** Bind the specified texture to a uniform sampler2D */\r\n public static bindSampler(uniform: UniformHandle, tex: WebGLTexture, unit: TextureUnit): void {\r\n assert(!(tex instanceof TextureHandle));\r\n this.bindTexture(unit, tex);\r\n uniform.setUniform1i(unit - TextureUnit.Zero);\r\n }\r\n\r\n /** Bind texture handle (if available) associated with an instantiation of this class to specified texture unit. */\r\n public bind(texUnit: TextureUnit): boolean {\r\n if (undefined === this._glTexture)\r\n return false;\r\n TextureCubeHandle.bindTexture(texUnit, this._glTexture);\r\n return true;\r\n }\r\n\r\n /** Bind this texture to a uniform sampler2D */\r\n public bindSampler(uniform: UniformHandle, unit: TextureUnit): void {\r\n if (undefined !== this._glTexture)\r\n TextureCubeHandle.bindSampler(uniform, this._glTexture, unit);\r\n }\r\n\r\n private static create(params: TextureCubeCreateParams): TextureHandle | undefined {\r\n const glTex = System.instance.context.createTexture();\r\n return null !== glTex ? new TextureCubeHandle(glTex, params) : undefined;\r\n }\r\n\r\n /** Create a cube map texture from six HTMLImageElement objects. */\r\n public static override createForCubeImages(posX: HTMLImageElement, negX: HTMLImageElement, posY: HTMLImageElement, negY: HTMLImageElement, posZ: HTMLImageElement, negZ: HTMLImageElement) {\r\n const params = TextureCubeCreateParams.createForCubeImages(posX, negX, posY, negY, posZ, negZ);\r\n return params !== undefined ? this.create(params) : undefined;\r\n }\r\n\r\n private constructor(glTexture: WebGLTexture, params: TextureCubeCreateParams) {\r\n super(glTexture);\r\n this._dim = params.dim;\r\n this._format = params.format;\r\n this._dataType = params.dataType;\r\n\r\n params.loadImageData(this, params);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class Texture2DDataUpdater {\r\n public data: Uint8Array;\r\n public modified: boolean = false;\r\n\r\n public constructor(data: Uint8Array) { this.data = data; }\r\n\r\n public setByteAtIndex(index: number, byte: number) {\r\n assert(index < this.data.length);\r\n if (byte !== this.data[index]) {\r\n this.data[index] = byte;\r\n this.modified = true;\r\n }\r\n }\r\n\r\n public setOvrFlagsAtIndex(index: number, value: OvrFlags) {\r\n assert(index < this.data.length - 1);\r\n assert(value < 0xffff);\r\n this.setByteAtIndex(index, value & 0xff);\r\n this.setByteAtIndex(index + 1, (value & 0xff00) >> 8);\r\n }\r\n\r\n public getByteAtIndex(index: number): number {\r\n assert(index < this.data.length);\r\n return this.data[index];\r\n }\r\n\r\n public getOvrFlagsAtIndex(index: number): OvrFlags {\r\n const lo = this.getByteAtIndex(index);\r\n const hi = this.getByteAtIndex(index + 1);\r\n return lo | (hi << 8);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"Texture.js","sourceRoot":"","sources":["../../../../src/render/webgl/Texture.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, BeEvent, dispose, Id64String } from \"@itwin/core-bentley\";\nimport {\n ImageBuffer, ImageBufferFormat, ImageSource, ImageSourceFormat, isPowerOfTwo, nextHighestPowerOfTwo, RenderTexture, TextureData, TextureTransparency,\n} from \"@itwin/core-common\";\nimport { getImageSourceMimeType, imageBufferToPngDataUrl, imageElementFromImageSource, openImageDataUrlInNewWindow } from \"../../common/ImageUtil\";\nimport { IModelConnection } from \"../../IModelConnection\";\nimport { IModelApp } from \"../../IModelApp\";\nimport { WebGLDisposable } from \"./Disposable\";\nimport { GL } from \"./GL\";\nimport { UniformHandle } from \"./UniformHandle\";\nimport { OvrFlags, TextureUnit } from \"./RenderFlags\";\nimport { System } from \"./System\";\nimport { TextureOwnership } from \"../CreateTextureArgs\";\n\n/** @internal */\nexport type Texture2DData = Uint8Array | Float32Array;\n\nfunction computeBytesUsed(width: number, height: number, format: GL.Texture.Format, dataType: GL.Texture.DataType): number {\n const bytesPerComponent = GL.Texture.DataType.UnsignedByte === dataType ? 1 : 4;\n let componentsPerPixel = 1;\n switch (format) {\n case GL.Texture.Format.Rgb:\n componentsPerPixel = 3;\n break;\n case GL.Texture.Format.Rgba:\n componentsPerPixel = 4;\n break;\n }\n\n return width * height * componentsPerPixel * bytesPerComponent;\n}\n\n/** Associate texture data with a WebGLTexture from a canvas, image, OR a bitmap. */\nfunction loadTexture2DImageData(handle: TextureHandle, params: Texture2DCreateParams, bytes?: Texture2DData, source?: TexImageSource): void {\n handle.bytesUsed = undefined !== bytes ? bytes.byteLength : computeBytesUsed(params.width, params.height, params.format, params.dataType);\n\n const tex = handle.getHandle()!;\n const gl = System.instance.context;\n\n // Use tightly packed data\n gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);\n\n // Bind the texture object; make sure we do not interfere with other active textures\n System.instance.activateTexture2d(TextureUnit.Zero, tex);\n\n // Figure out the internal format. For all but WebGL2 float/half-float datatypes it is just same as format.\n // TODO: probably need to just support internal format types in Texture2DCreateParams.\n let internalFormat = params.format;\n const context2 = System.instance.context;\n if (GL.Texture.Format.Rgba === params.format) {\n if (GL.Texture.DataType.Float === params.dataType)\n internalFormat = context2.RGBA32F;\n else if (context2.HALF_FLOAT === params.dataType)\n internalFormat = context2.RGBA16F;\n } else if (GL.Texture.Format.DepthStencil === params.format)\n internalFormat = context2.DEPTH24_STENCIL8;\n\n // send the texture data\n if (undefined !== source) {\n gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat, params.format, params.dataType, source);\n } else {\n const pixelData = undefined !== bytes ? bytes : null;\n gl.texImage2D(gl.TEXTURE_2D, 0, internalFormat, params.width, params.height, 0, params.format, params.dataType, pixelData);\n }\n\n if (params.useMipMaps) {\n gl.generateMipmap(gl.TEXTURE_2D);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n } else {\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, params.interpolate ? gl.LINEAR : gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, params.interpolate ? gl.LINEAR : gl.NEAREST);\n }\n if (params.anisotropicFilter) {\n System.instance.setMaxAnisotropy(params.anisotropicFilter);\n }\n\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, params.wrapMode);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, params.wrapMode);\n\n System.instance.bindTexture2d(TextureUnit.Zero, undefined);\n}\n\nfunction loadTextureFromBytes(handle: TextureHandle, params: Texture2DCreateParams, bytes?: Texture2DData): void {\n loadTexture2DImageData(handle, params, bytes);\n}\n\n/** Associate cube texture data with a WebGLTexture from an image. */\nfunction loadTextureCubeImageData(handle: TextureHandle, params: TextureCubeCreateParams, images: TexImageSource[]): void {\n handle.bytesUsed = computeBytesUsed(params.dim * 6, params.dim, params.format, params.dataType);\n\n const tex = handle.getHandle()!;\n const gl = System.instance.context;\n\n // Use tightly packed data\n gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);\n\n // Bind the texture object; make sure we do not interfere with other active textures\n System.instance.activateTextureCubeMap(TextureUnit.Zero, tex);\n\n const cubeTargets: number[] = [GL.Texture.Target.CubeMapPositiveX, GL.Texture.Target.CubeMapNegativeX, GL.Texture.Target.CubeMapPositiveY, GL.Texture.Target.CubeMapNegativeY, GL.Texture.Target.CubeMapPositiveZ, GL.Texture.Target.CubeMapNegativeZ];\n\n for (let i = 0; i < 6; i++) {\n gl.texImage2D(cubeTargets[i], 0, params.format, params.format, params.dataType, images[i]);\n }\n\n gl.texParameteri(GL.Texture.Target.CubeMap, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texParameteri(GL.Texture.Target.CubeMap, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(GL.Texture.Target.CubeMap, gl.TEXTURE_WRAP_S, params.wrapMode);\n gl.texParameteri(GL.Texture.Target.CubeMap, gl.TEXTURE_WRAP_T, params.wrapMode);\n // gl.texParameteri(GL.Texture.Target.CubeMap, gl.TEXTURE_WRAP_R, params.wrapMode); // Unavailable in GLES2\n\n System.instance.bindTextureCubeMap(TextureUnit.Zero, undefined);\n}\n\ntype TextureFlag = true | undefined;\ntype TextureAnisotropicFilter = number | undefined;\ntype Load2DImageData = (handle: TextureHandle, params: Texture2DCreateParams) => void;\ntype LoadCubeImageData = (handle: TextureHandle, params: TextureCubeCreateParams) => void;\n\ninterface TextureImageProperties {\n wrapMode: GL.Texture.WrapMode;\n useMipMaps: TextureFlag;\n interpolate: TextureFlag;\n format: GL.Texture.Format;\n anisotropicFilter: TextureAnisotropicFilter;\n}\n\n/** @internal */\nexport interface TextureParams {\n type: RenderTexture.Type;\n ownership?: TextureOwnership;\n transparency: TextureTransparency;\n handle: TextureHandle;\n}\n\n/** Wrapper class for a WebGL texture handle and parameters specific to an individual texture.\n * @internal\n */\nexport class Texture extends RenderTexture implements WebGLDisposable {\n public readonly texture: TextureHandle;\n public readonly ownership?: TextureOwnership;\n public transparency: TextureTransparency;\n\n public get bytesUsed(): number { return this.texture.bytesUsed; }\n public get hasOwner(): boolean { return undefined !== this.ownership; }\n public get key(): string | undefined {\n return typeof this.ownership !== \"string\" && typeof this.ownership?.key === \"string\" ? this.ownership.key : undefined;\n }\n\n public constructor(params: TextureParams) {\n super(params.type);\n this.ownership = params.ownership;\n this.texture = params.handle;\n this.transparency = params.handle.format === GL.Texture.Format.Rgba ? params.transparency : TextureTransparency.Opaque;\n }\n\n public get isDisposed(): boolean { return this.texture.isDisposed; }\n\n /** Free this object in the WebGL wrapper. */\n public dispose() {\n dispose(this.texture);\n }\n}\n\nfunction getDataType(data: Texture2DData): GL.Texture.DataType {\n return data instanceof Float32Array ? GL.Texture.DataType.Float : GL.Texture.DataType.UnsignedByte;\n}\n\n/** Parameters used internally to define how to create a texture for use with WebGL. */\nclass Texture2DCreateParams {\n private constructor(\n public width: number,\n public height: number,\n public format: GL.Texture.Format,\n public dataType: GL.Texture.DataType,\n public wrapMode: GL.Texture.WrapMode,\n public loadImageData: Load2DImageData,\n public useMipMaps?: TextureFlag,\n public interpolate?: TextureFlag,\n public anisotropicFilter?: TextureAnisotropicFilter,\n public dataBytes?: Uint8Array) { }\n\n public static createForData(width: number, height: number, data: Texture2DData, preserveData = false, wrapMode = GL.Texture.WrapMode.ClampToEdge, format = GL.Texture.Format.Rgba) {\n const bytes = (preserveData && data instanceof Uint8Array) ? data : undefined;\n return new Texture2DCreateParams(width, height, format, getDataType(data), wrapMode,\n (tex: TextureHandle, params: Texture2DCreateParams) => loadTextureFromBytes(tex, params, data), undefined, undefined, undefined, bytes);\n }\n\n public static createForImageBuffer(image: ImageBuffer, type: RenderTexture.Type) {\n const props = this.getImageProperties(type);\n if (ImageBufferFormat.Rgb === image.format)\n props.format = GL.Texture.Format.Rgb;\n\n return new Texture2DCreateParams(image.width, image.height, props.format, GL.Texture.DataType.UnsignedByte, props.wrapMode,\n (tex: TextureHandle, params: Texture2DCreateParams) => loadTextureFromBytes(tex, params, image.data), props.useMipMaps, props.interpolate);\n }\n\n public static createForAttachment(width: number, height: number, format: GL.Texture.Format, dataType: GL.Texture.DataType) {\n return new Texture2DCreateParams(width, height, format, dataType, GL.Texture.WrapMode.ClampToEdge,\n (tex: TextureHandle, params: Texture2DCreateParams) => loadTextureFromBytes(tex, params), undefined, undefined);\n }\n\n public static createForImage(image: HTMLImageElement, type: RenderTexture.Type) {\n const props = this.getImageProperties(type);\n\n let targetWidth = image.naturalWidth;\n let targetHeight = image.naturalHeight;\n\n if (RenderTexture.Type.Glyph === type) {\n targetWidth = nextHighestPowerOfTwo(targetWidth);\n targetHeight = nextHighestPowerOfTwo(targetHeight);\n } else if (!System.instance.supportsNonPowerOf2Textures && (!isPowerOfTwo(targetWidth) || !isPowerOfTwo(targetHeight))) {\n if (GL.Texture.WrapMode.ClampToEdge === props.wrapMode) {\n // NPOT are supported but not mipmaps\n // Probably on poor hardware so I choose to disable mipmaps for lower memory usage over quality. If quality is required we need to resize the image to a pow of 2.\n // Above comment is not necessarily true - WebGL doesn't support NPOT mipmapping, only supporting base NPOT caps\n props.useMipMaps = undefined;\n } else if (GL.Texture.WrapMode.Repeat === props.wrapMode) {\n targetWidth = nextHighestPowerOfTwo(targetWidth);\n targetHeight = nextHighestPowerOfTwo(targetHeight);\n }\n }\n\n // Cap texture dimensions to system WebGL capabilities\n const maxTexSize = System.instance.maxTextureSize;\n targetWidth = Math.min(targetWidth, maxTexSize);\n targetHeight = Math.min(targetHeight, maxTexSize);\n\n let element: TexImageSource = image;\n if (targetWidth !== image.naturalWidth || targetHeight !== image.naturalHeight) {\n // Resize so dimensions are powers-of-two\n const canvas = document.createElement(\"canvas\");\n canvas.width = targetWidth;\n canvas.height = targetHeight;\n\n const context = canvas.getContext(\"2d\")!;\n context.drawImage(image, 0, 0, canvas.width, canvas.height);\n\n element = canvas;\n }\n\n return new Texture2DCreateParams(targetWidth, targetHeight, props.format, GL.Texture.DataType.UnsignedByte, props.wrapMode,\n (tex: TextureHandle, params: Texture2DCreateParams) => loadTexture2DImageData(tex, params, undefined, element), props.useMipMaps, props.interpolate, props.anisotropicFilter);\n }\n\n public static createForImageBitmap(image: ImageBitmap, type: RenderTexture.Type) {\n const props = this.getImageProperties(type);\n\n let targetWidth = image.width;\n let targetHeight = image.height;\n\n if (RenderTexture.Type.Glyph === type) {\n targetWidth = nextHighestPowerOfTwo(targetWidth);\n targetHeight = nextHighestPowerOfTwo(targetHeight);\n } else if (!System.instance.supportsNonPowerOf2Textures && (!isPowerOfTwo(targetWidth) || !isPowerOfTwo(targetHeight))) {\n if (GL.Texture.WrapMode.ClampToEdge === props.wrapMode) {\n // NPOT are supported but not mipmaps\n // Probably on poor hardware so I choose to disable mipmaps for lower memory usage over quality. If quality is required we need to resize the image to a pow of 2.\n // Above comment is not necessarily true - WebGL doesn't support NPOT mipmapping, only supporting base NPOT caps\n props.useMipMaps = undefined;\n } else if (GL.Texture.WrapMode.Repeat === props.wrapMode) {\n targetWidth = nextHighestPowerOfTwo(targetWidth);\n targetHeight = nextHighestPowerOfTwo(targetHeight);\n }\n }\n\n // If we have to resize, use a canvas\n let source: TexImageSource = image;\n if (image.width !== targetWidth || image.height !== targetHeight) {\n const canvas = document.createElement(\"canvas\");\n canvas.width = targetWidth;\n canvas.height = targetHeight;\n const context = canvas.getContext(\"2d\")!;\n context.drawImage(image, 0, 0, canvas.width, canvas.height);\n\n source = canvas;\n }\n\n return new Texture2DCreateParams(targetWidth, targetHeight, props.format, GL.Texture.DataType.UnsignedByte, props.wrapMode,\n (tex: TextureHandle, params: Texture2DCreateParams) => loadTexture2DImageData(tex, params, undefined, source), props.useMipMaps, props.interpolate, props.anisotropicFilter);\n }\n\n private static getImageProperties(type: RenderTexture.Type): TextureImageProperties {\n const isSky = RenderTexture.Type.SkyBox === type;\n const isTile = RenderTexture.Type.TileSection === type;\n const isThematic = RenderTexture.Type.ThematicGradient === type;\n const isFilteredTile = RenderTexture.Type.FilteredTileSection === type;\n const maxAnisotropicFilterLevel = 16;\n\n const wrapMode = RenderTexture.Type.Normal === type ? GL.Texture.WrapMode.Repeat : GL.Texture.WrapMode.ClampToEdge;\n const useMipMaps: TextureFlag = (!isSky && !isTile && !isFilteredTile && !isThematic) ? true : undefined;\n const interpolate: TextureFlag = isThematic ? undefined : true;\n const anisotropicFilter = isFilteredTile ? maxAnisotropicFilterLevel : undefined;\n\n // Always use RGBA. RGB is much slower and almost certainly does not actually save any GPU memory.\n const format = GL.Texture.Format.Rgba;\n\n return { format, wrapMode, useMipMaps, interpolate, anisotropicFilter };\n }\n\n public static readonly placeholderParams = new Texture2DCreateParams(1, 1, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte, GL.Texture.WrapMode.ClampToEdge,\n (_tex: TextureHandle, _params: Texture2DCreateParams) => undefined);\n}\n\nclass TextureCubeCreateParams {\n private constructor(\n public dim: number,\n public format: GL.Texture.Format,\n public dataType: GL.Texture.DataType,\n public wrapMode: GL.Texture.WrapMode,\n public loadImageData: LoadCubeImageData) { }\n\n public static createForCubeImages(posX: HTMLImageElement, negX: HTMLImageElement, posY: HTMLImageElement, negY: HTMLImageElement, posZ: HTMLImageElement, negZ: HTMLImageElement): TextureCubeCreateParams | undefined {\n const targetDim = posX.naturalWidth;\n\n if (posX.naturalHeight !== targetDim) // Cube texture dimensions must match (width must equal height)\n return undefined;\n\n const images: HTMLImageElement[] = [posX, negX, posY, negY, posZ, negZ];\n\n for (let i = 1; i < images.length; i++) { // Dimensions of all six sides must match each other\n if (images[i].naturalWidth !== targetDim || images[i].naturalHeight !== targetDim)\n return undefined;\n }\n\n return new TextureCubeCreateParams(targetDim, GL.Texture.Format.Rgba, GL.Texture.DataType.UnsignedByte, GL.Texture.WrapMode.ClampToEdge,\n (tex: TextureHandle, params: TextureCubeCreateParams) => loadTextureCubeImageData(tex, params, images));\n }\n}\n\n/** Wraps a WebGLTextureHandle\n * @internal\n */\nexport abstract class TextureHandle implements WebGLDisposable {\n protected _glTexture?: WebGLTexture;\n protected _bytesUsed = 0;\n\n public abstract get width(): number;\n public abstract get height(): number;\n public abstract get format(): GL.Texture.Format;\n public abstract get dataType(): GL.Texture.DataType;\n public abstract get dataBytes(): Uint8Array | undefined;\n public get bytesUsed(): number { return this._bytesUsed; }\n public set bytesUsed(bytesUsed: number) {\n // assert(0 === this.bytesUsed);\n this._bytesUsed = bytesUsed;\n }\n\n /** Get the WebGLTexture for this TextureHandle. */\n public getHandle(): WebGLTexture | undefined { return this._glTexture; }\n\n /** Bind texture handle (if available) associated with an instantiation of this class to specified texture unit. */\n public abstract bind(_texUnit: TextureUnit): boolean;\n\n /** Bind this texture to a uniform sampler. */\n public abstract bindSampler(_uniform: UniformHandle, _unit: TextureUnit): void;\n\n public get isDisposed(): boolean { return this._glTexture === undefined; }\n\n public dispose() {\n if (!this.isDisposed) {\n System.instance.disposeTexture(this._glTexture!);\n this._glTexture = undefined;\n this.bytesUsed = 0;\n }\n }\n\n /** Create a 2D texture for use as a color attachment for rendering */\n public static createForAttachment(width: number, height: number, format: GL.Texture.Format, dataType: GL.Texture.DataType) {\n return Texture2DHandle.createForAttachment(width, height, format, dataType);\n }\n\n /** Create a 2D texture to hold non-image data */\n public static createForData(width: number, height: number, data: Texture2DData, wantPreserveData = false, wrapMode = GL.Texture.WrapMode.ClampToEdge, format = GL.Texture.Format.Rgba) {\n return Texture2DHandle.createForData(width, height, data, wantPreserveData, wrapMode, format);\n }\n\n /** Create a 2D texture from a bitmap */\n public static createForImageBuffer(image: ImageBuffer, type: RenderTexture.Type) {\n return Texture2DHandle.createForImageBuffer(image, type);\n }\n\n /** Create a 2D texture from an HTMLImageElement. */\n public static createForImage(image: HTMLImageElement, type: RenderTexture.Type) {\n return Texture2DHandle.createForImage(image, type);\n }\n\n /** Create a 2D texture from an ImageBitmap. */\n public static createForImageBitmap(image: ImageBitmap, type: RenderTexture.Type) {\n return Texture2DHandle.createForImageBitmap(image, type);\n }\n\n /** Create a cube map texture from six HTMLImageElement objects. */\n public static createForCubeImages(posX: HTMLImageElement, negX: HTMLImageElement, posY: HTMLImageElement, negY: HTMLImageElement, posZ: HTMLImageElement, negZ: HTMLImageElement) {\n return TextureCubeHandle.createForCubeImages(posX, negX, posY, negY, posZ, negZ);\n }\n\n public static createForElement(id: Id64String, imodel: IModelConnection, type: RenderTexture.Type, format: ImageSourceFormat, onLoaded: ExternalTextureLoadCallback) {\n return Texture2DHandle.createForElement(id, imodel, type, format, onLoaded);\n }\n\n protected constructor(glTexture: WebGLTexture) {\n this._glTexture = glTexture;\n }\n\n /** For debugging purposes, open a new window containing this texture as an image. */\n public showDebugImage(): void {\n const gl = System.instance.context;\n const fbo = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, fbo);\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.getHandle()!, 0);\n if (gl.FRAMEBUFFER_COMPLETE === gl.checkFramebufferStatus(gl.FRAMEBUFFER)) {\n const w = this.width;\n const h = this.height;\n const pixels = new Uint8Array(w * h * 4);\n gl.readPixels(0, 0, w, h, gl.RGBA, gl.UNSIGNED_BYTE, pixels);\n\n const buffer = ImageBuffer.create(pixels, ImageBufferFormat.Rgba, w)!;\n const url = imageBufferToPngDataUrl(buffer, false);\n openImageDataUrlInNewWindow(url!, \"Classifiers\");\n }\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n gl.deleteFramebuffer(fbo);\n }\n}\n\n/** @internal */\nexport class Texture2DHandle extends TextureHandle {\n private _width: number;\n private _height: number;\n private _format: GL.Texture.Format;\n private _dataType: GL.Texture.DataType;\n private _dataBytes?: Uint8Array;\n\n public get width(): number { return this._width; }\n public get height(): number { return this._height; }\n public get format(): GL.Texture.Format { return this._format; }\n public get dataType(): GL.Texture.DataType { return this._dataType; }\n public get dataBytes(): Uint8Array | undefined { return this._dataBytes; }\n\n /** Bind specified texture handle to specified texture unit. */\n public static bindTexture(texUnit: TextureUnit, glTex: WebGLTexture | undefined) {\n assert(!(glTex instanceof TextureHandle));\n System.instance.bindTexture2d(texUnit, glTex);\n }\n\n /** Bind the specified texture to a uniform sampler2D */\n public static bindSampler(uniform: UniformHandle, tex: WebGLTexture, unit: TextureUnit): void {\n assert(!(tex instanceof TextureHandle));\n this.bindTexture(unit, tex);\n uniform.setUniform1i(unit - TextureUnit.Zero);\n }\n\n /** Bind texture handle (if available) associated with an instantiation of this class to specified texture unit. */\n public bind(texUnit: TextureUnit): boolean {\n if (undefined === this._glTexture)\n return false;\n Texture2DHandle.bindTexture(texUnit, this._glTexture);\n return true;\n }\n\n /** Bind this texture to a uniform sampler2D */\n public bindSampler(uniform: UniformHandle, unit: TextureUnit): void {\n if (undefined !== this._glTexture)\n Texture2DHandle.bindSampler(uniform, this._glTexture, unit);\n }\n\n /** Update the 2D texture contents. */\n public update(updater: Texture2DDataUpdater): boolean {\n if (0 === this.width || 0 === this.height || undefined === this._dataBytes || 0 === this._dataBytes.length) {\n assert(false);\n return false;\n }\n\n if (!updater.modified)\n return false;\n\n return this.replaceTextureData(this._dataBytes);\n }\n\n /** Replace the 2D texture contents. */\n public replaceTextureData(data: Texture2DData): boolean {\n assert((GL.Texture.DataType.Float === this._dataType) === (data instanceof Float32Array));\n\n const tex = this.getHandle()!;\n if (undefined === tex)\n return false;\n\n const gl = System.instance.context;\n gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);\n\n // Go through System to ensure we don't interfere with currently-bound textures!\n System.instance.activateTexture2d(TextureUnit.Zero, tex);\n gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, this.width, this.height, this._format, this._dataType, data);\n System.instance.bindTexture2d(TextureUnit.Zero, undefined);\n\n return true;\n }\n\n private static create(params: Texture2DCreateParams): Texture2DHandle | undefined {\n const glTex = System.instance.context.createTexture();\n return null !== glTex ? new Texture2DHandle(glTex, params) : undefined;\n }\n\n /** Create a texture for use as a color attachment for rendering */\n public static override createForAttachment(width: number, height: number, format: GL.Texture.Format, dataType: GL.Texture.DataType) {\n return this.create(Texture2DCreateParams.createForAttachment(width, height, format, dataType));\n }\n\n /** Create a texture to hold non-image data */\n public static override createForData(width: number, height: number, data: Texture2DData, wantPreserveData = false, wrapMode = GL.Texture.WrapMode.ClampToEdge, format = GL.Texture.Format.Rgba) {\n return this.create(Texture2DCreateParams.createForData(width, height, data, wantPreserveData, wrapMode, format));\n }\n\n /** Create a texture from a bitmap */\n public static override createForImageBuffer(image: ImageBuffer, type: RenderTexture.Type) {\n if (RenderTexture.Type.TileSection !== type && RenderTexture.Type.ThematicGradient !== type)\n assert(isPowerOfTwo(image.width) && isPowerOfTwo(image.height), \"###TODO: Resize image dimensions to powers-of-two if necessary\");\n\n return this.create(Texture2DCreateParams.createForImageBuffer(image, type));\n }\n\n /** Create a 2D texture from an HTMLImageElement. */\n public static override createForImage(image: HTMLImageElement, type: RenderTexture.Type) {\n return this.create(Texture2DCreateParams.createForImage(image, type));\n }\n\n /** Create a 2D texture from an ImageBitmap. */\n public static override createForImageBitmap(image: ImageBitmap, type: RenderTexture.Type) {\n return this.create(Texture2DCreateParams.createForImageBitmap(image, type));\n }\n\n private static _placeHolderTextureData = new Uint8Array([128, 128, 128, 255]);\n\n public static override createForElement(id: Id64String, imodel: IModelConnection, type: RenderTexture.Type, format: ImageSourceFormat, onLoaded: ExternalTextureLoadCallback) {\n // set a placeholder texture while we wait for the external texture to load\n const handle = this.createForData(1, 1, this._placeHolderTextureData, undefined, undefined, GL.Texture.Format.Rgba);\n\n if (undefined === handle)\n return undefined;\n\n // kick off loading the texture from the backend\n ExternalTextureLoader.instance.loadTexture(handle, id, imodel, type, format, onLoaded);\n\n return handle;\n }\n\n public reload(params: Texture2DCreateParams) {\n this._width = params.width;\n this._height = params.height;\n this._format = params.format;\n this._dataType = params.dataType;\n this._dataBytes = params.dataBytes;\n\n params.loadImageData(this, params);\n }\n\n private constructor(glTexture: WebGLTexture, params: Texture2DCreateParams) {\n super(glTexture);\n this._width = params.width;\n this._height = params.height;\n this._format = params.format;\n this._dataType = params.dataType;\n this._dataBytes = params.dataBytes;\n\n params.loadImageData(this, params);\n }\n}\n\n/** @internal */\nexport type ExternalTextureLoadCallback = (req: ExternalTextureRequest, data: TextureData) => void;\n\n/** @internal */\nexport interface ExternalTextureRequest {\n handle: Texture2DHandle;\n name: Id64String;\n imodel: IModelConnection;\n type: RenderTexture.Type;\n format: ImageSourceFormat;\n onLoaded?: ExternalTextureLoadCallback;\n}\n\n/** @internal */\ninterface TextureConvertRequest {\n req: ExternalTextureRequest;\n texData: TextureData;\n}\n\n/** @internal */\nexport class ExternalTextureLoader { /* currently exported for tests only */\n public static readonly instance = new ExternalTextureLoader(2);\n public readonly onTexturesLoaded = new BeEvent<() => void>();\n private readonly _maxActiveRequests: number;\n private _activeRequests: Array<ExternalTextureRequest> = [];\n private _pendingRequests: Array<ExternalTextureRequest> = [];\n private _convertRequests: Array<TextureConvertRequest> = [];\n private _convertPending = false;\n\n public get numActiveRequests() { return this._activeRequests.length; }\n public get numPendingRequests() { return this._pendingRequests.length; }\n public get maxActiveRequests() { return this._maxActiveRequests; }\n\n private constructor(maxActiveRequests: number) {\n this._maxActiveRequests = maxActiveRequests;\n }\n\n private async _nextRequest(prevReq: ExternalTextureRequest) {\n this._activeRequests.splice(this._activeRequests.indexOf(prevReq), 1);\n if (this._activeRequests.length < this._maxActiveRequests && this._pendingRequests.length > 0) {\n const req = this._pendingRequests.shift()!;\n await this._activateRequest(req);\n }\n if (this._activeRequests.length < 1 && this._pendingRequests.length < 1)\n this.onTexturesLoaded.raiseEvent();\n }\n\n private async _activateRequest(req: ExternalTextureRequest) {\n if (req.imodel.isClosed)\n return;\n\n this._activeRequests.push(req);\n\n try {\n if (!req.imodel.isClosed) {\n const maxTextureSize = System.instance.maxTexSizeAllow;\n const texData = await req.imodel.queryTextureData({ name: req.name, maxTextureSize });\n if (undefined !== texData) {\n const cnvReq = { req, texData };\n this._convertRequests.push(cnvReq);\n // _convertPending is used to prevent overlapping calls to _convertTexture (from overlapping calls to _activateRequest)\n // it has been put on the list, so if it doesn't get converted here it will get converted by the loop that is converting the current one\n do {\n if (!this._convertPending)\n await this._convertTexture();\n } while (!this._convertPending && this._convertRequests.length > 0);\n if (!req.imodel.isClosed) {\n IModelApp.tileAdmin.invalidateAllScenes();\n if (undefined !== req.onLoaded)\n req.onLoaded(req, texData);\n }\n }\n }\n } catch (_e) { }\n\n return this._nextRequest(req);\n }\n\n private async _convertTexture(): Promise<void> {\n this._convertPending = true;\n try {\n const cnvReq = this._convertRequests.shift();\n if (undefined !== cnvReq) {\n const imageSource = new ImageSource(cnvReq.texData.bytes, cnvReq.texData.format);\n if (System.instance.supportsCreateImageBitmap) {\n const blob = new Blob([imageSource.data], { type: getImageSourceMimeType(imageSource.format) });\n const image = await createImageBitmap(blob, 0, 0, cnvReq.texData.width, cnvReq.texData.height);\n if (!cnvReq.req.imodel.isClosed) {\n cnvReq.req.handle.reload(Texture2DCreateParams.createForImageBitmap(image, cnvReq.req.type));\n }\n } else {\n const image = await imageElementFromImageSource(imageSource);\n if (!cnvReq.req.imodel.isClosed) {\n cnvReq.req.handle.reload(Texture2DCreateParams.createForImage(image, cnvReq.req.type));\n }\n }\n }\n } catch (_e) { }\n this._convertPending = false;\n }\n\n private _requestExists(reqToCheck: ExternalTextureRequest) {\n for (const r of this._activeRequests)\n if (reqToCheck.name === r.name && reqToCheck.imodel === r.imodel)\n return true;\n\n for (const r of this._pendingRequests)\n if (reqToCheck.name === r.name && reqToCheck.imodel === r.imodel)\n return true;\n\n return false;\n }\n\n public loadTexture(handle: Texture2DHandle, name: Id64String, imodel: IModelConnection, type: RenderTexture.Type, format: ImageSourceFormat, onLoaded?: ExternalTextureLoadCallback) {\n const req = { handle, name, imodel, type, format, onLoaded };\n if (this._requestExists(req))\n return;\n\n if (this._activeRequests.length + 1 > this._maxActiveRequests) {\n this._pendingRequests.push(req);\n } else\n this._activateRequest(req); // eslint-disable-line @typescript-eslint/no-floating-promises\n }\n}\n\n/** @internal */\nexport class TextureCubeHandle extends TextureHandle {\n private _dim: number; // Cubemap texture height and width must match. This must be the same for each of the six faces.\n private _format: GL.Texture.Format; // Format must be the same for each of the six faces.\n private _dataType: GL.Texture.DataType; // Type must be the same for each of the six faces.\n\n public get width(): number { return this._dim; }\n public get height(): number { return this._dim; }\n public get format(): GL.Texture.Format { return this._format; }\n public get dataType(): GL.Texture.DataType { return this._dataType; }\n public get dataBytes(): Uint8Array | undefined { return undefined; }\n\n /** Bind specified cubemap texture handle to specified texture unit. */\n public static bindTexture(texUnit: TextureUnit, glTex: WebGLTexture | undefined) {\n assert(!(glTex instanceof TextureHandle));\n System.instance.bindTextureCubeMap(texUnit, glTex);\n }\n\n /** Bind the specified texture to a uniform sampler2D */\n public static bindSampler(uniform: UniformHandle, tex: WebGLTexture, unit: TextureUnit): void {\n assert(!(tex instanceof TextureHandle));\n this.bindTexture(unit, tex);\n uniform.setUniform1i(unit - TextureUnit.Zero);\n }\n\n /** Bind texture handle (if available) associated with an instantiation of this class to specified texture unit. */\n public bind(texUnit: TextureUnit): boolean {\n if (undefined === this._glTexture)\n return false;\n TextureCubeHandle.bindTexture(texUnit, this._glTexture);\n return true;\n }\n\n /** Bind this texture to a uniform sampler2D */\n public bindSampler(uniform: UniformHandle, unit: TextureUnit): void {\n if (undefined !== this._glTexture)\n TextureCubeHandle.bindSampler(uniform, this._glTexture, unit);\n }\n\n private static create(params: TextureCubeCreateParams): TextureHandle | undefined {\n const glTex = System.instance.context.createTexture();\n return null !== glTex ? new TextureCubeHandle(glTex, params) : undefined;\n }\n\n /** Create a cube map texture from six HTMLImageElement objects. */\n public static override createForCubeImages(posX: HTMLImageElement, negX: HTMLImageElement, posY: HTMLImageElement, negY: HTMLImageElement, posZ: HTMLImageElement, negZ: HTMLImageElement) {\n const params = TextureCubeCreateParams.createForCubeImages(posX, negX, posY, negY, posZ, negZ);\n return params !== undefined ? this.create(params) : undefined;\n }\n\n private constructor(glTexture: WebGLTexture, params: TextureCubeCreateParams) {\n super(glTexture);\n this._dim = params.dim;\n this._format = params.format;\n this._dataType = params.dataType;\n\n params.loadImageData(this, params);\n }\n}\n\n/** @internal */\nexport class Texture2DDataUpdater {\n public data: Uint8Array;\n public modified: boolean = false;\n\n public constructor(data: Uint8Array) { this.data = data; }\n\n public setByteAtIndex(index: number, byte: number) {\n assert(index < this.data.length);\n if (byte !== this.data[index]) {\n this.data[index] = byte;\n this.modified = true;\n }\n }\n\n public setOvrFlagsAtIndex(index: number, value: OvrFlags) {\n assert(index < this.data.length - 1);\n assert(value < 0xffff);\n this.setByteAtIndex(index, value & 0xff);\n this.setByteAtIndex(index + 1, (value & 0xff00) >> 8);\n }\n\n public getByteAtIndex(index: number): number {\n assert(index < this.data.length);\n return this.data[index];\n }\n\n public getOvrFlagsAtIndex(index: number): OvrFlags {\n const lo = this.getByteAtIndex(index);\n const hi = this.getByteAtIndex(index + 1);\n return lo | (hi << 8);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"TextureDrape.js","sourceRoot":"","sources":["../../../../src/render/webgl/TextureDrape.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAQhD,MAAM,OAAgB,YAAY;IAAlC;QAEY,sBAAiB,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;IAsB1D,CAAC;IArBC,IAAW,OAAO,KAA0B,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACnE,IAAW,gBAAgB,KAAe,OAAO,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAG1E,IAAW,OAAO,KAAc,OAAO,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC;IAE9D,iBAAiB,CAAC,KAA8B;QACrD,IAAI,SAAS,KAAK,IAAI,CAAC,QAAQ;YAC7B,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACvD,CAAC;IAED,IAAW,UAAU,KAAc,OAAO,SAAS,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAEhE,OAAO;QACZ,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IAEM,SAAS,CAAC,MAAoB;QACnC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,wBAAwB;QACzC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,gBAAgB;IACnC,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\nimport { dispose } from \"@itwin/core-bentley\";\r\nimport { Matrix4d } from \"@itwin/core-geometry\";\r\nimport { SceneContext } from \"../../ViewContext\";\r\nimport { RenderMemory } from \"../RenderMemory\";\r\nimport { RenderTextureDrape } from \"../RenderSystem\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { Target } from \"./Target\";\r\nimport { Texture } from \"./Texture\";\r\n\r\nexport abstract class TextureDrape implements RenderTextureDrape, RenderMemory.Consumer, WebGLDisposable {\r\n protected _texture?: Texture;\r\n protected _projectionMatrix = Matrix4d.createIdentity();\r\n public get texture(): Texture | undefined { return this._texture; }\r\n public get projectionMatrix(): Matrix4d { return this._projectionMatrix; }\r\n public abstract collectGraphics(context: SceneContext): void;\r\n public abstract draw(target: Target): void;\r\n public get isReady(): boolean { return this._texture !== undefined; }\r\n\r\n public collectStatistics(stats: RenderMemory.Statistics): void {\r\n if (undefined !== this._texture)\r\n stats.addPlanarClassifier(this._texture.bytesUsed);\r\n }\r\n\r\n public get isDisposed(): boolean { return undefined === this.texture; }\r\n\r\n public dispose() {\r\n this._texture = dispose(this._texture);\r\n }\r\n\r\n public getParams(params: Float32Array): void {\r\n params[0] = 5.0; // Inside, pure texture.\r\n params[1] = 0.0; // Outside, off.\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"TextureDrape.js","sourceRoot":"","sources":["../../../../src/render/webgl/TextureDrape.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAQhD,MAAM,OAAgB,YAAY;IAAlC;QAEY,sBAAiB,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;IAsB1D,CAAC;IArBC,IAAW,OAAO,KAA0B,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACnE,IAAW,gBAAgB,KAAe,OAAO,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAG1E,IAAW,OAAO,KAAc,OAAO,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC;IAE9D,iBAAiB,CAAC,KAA8B;QACrD,IAAI,SAAS,KAAK,IAAI,CAAC,QAAQ;YAC7B,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACvD,CAAC;IAED,IAAW,UAAU,KAAc,OAAO,SAAS,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAEhE,OAAO;QACZ,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IAEM,SAAS,CAAC,MAAoB;QACnC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,wBAAwB;QACzC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,gBAAgB;IACnC,CAAC;CACF","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 */\nimport { dispose } from \"@itwin/core-bentley\";\nimport { Matrix4d } from \"@itwin/core-geometry\";\nimport { SceneContext } from \"../../ViewContext\";\nimport { RenderMemory } from \"../RenderMemory\";\nimport { RenderTextureDrape } from \"../RenderSystem\";\nimport { WebGLDisposable } from \"./Disposable\";\nimport { Target } from \"./Target\";\nimport { Texture } from \"./Texture\";\n\nexport abstract class TextureDrape implements RenderTextureDrape, RenderMemory.Consumer, WebGLDisposable {\n protected _texture?: Texture;\n protected _projectionMatrix = Matrix4d.createIdentity();\n public get texture(): Texture | undefined { return this._texture; }\n public get projectionMatrix(): Matrix4d { return this._projectionMatrix; }\n public abstract collectGraphics(context: SceneContext): void;\n public abstract draw(target: Target): void;\n public get isReady(): boolean { return this._texture !== undefined; }\n\n public collectStatistics(stats: RenderMemory.Statistics): void {\n if (undefined !== this._texture)\n stats.addPlanarClassifier(this._texture.bytesUsed);\n }\n\n public get isDisposed(): boolean { return undefined === this.texture; }\n\n public dispose() {\n this._texture = dispose(this._texture);\n }\n\n public getParams(params: Float32Array): void {\n params[0] = 5.0; // Inside, pure texture.\n params[1] = 0.0; // Outside, off.\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ThematicSensors.js","sourceRoot":"","sources":["../../../../src/render/webgl/ThematicSensors.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 } from \"@itwin/core-bentley\";\r\nimport { Point3d, Range3d, Transform } from \"@itwin/core-geometry\";\r\nimport { ThematicDisplaySensor, ThematicDisplaySensorSettings } from \"@itwin/core-common\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { GL } from \"./GL\";\r\nimport { Texture2DData, Texture2DHandle } from \"./Texture\";\r\nimport { UniformHandle } from \"./UniformHandle\";\r\nimport { TextureUnit } from \"./RenderFlags\";\r\nimport { Target } from \"./Target\";\r\n\r\n/** @internal */\r\ninterface ThematicSensorsTexture {\r\n readonly handle: Texture2DHandle;\r\n readonly data: Texture2DData;\r\n}\r\n\r\n/** Maintains a floating-point texture representing a list of thematic sensors.\r\n * @internal\r\n */\r\nexport class ThematicSensors implements WebGLDisposable {\r\n private readonly _texture: ThematicSensorsTexture;\r\n /** Used for writing to texture data. */\r\n private readonly _view: DataView;\r\n /** Position at which to write next texture data. */\r\n private _curPos: number = 0;\r\n\r\n public readonly target: Target;\r\n public readonly range: Range3d;\r\n public readonly sensorSettings?: ThematicDisplaySensorSettings;\r\n\r\n public get numSensors(): number { return this._sensors.length; }\r\n\r\n private _sensors: ThematicDisplaySensor[];\r\n private readonly _viewMatrix = Transform.createIdentity();\r\n\r\n public matchesTarget(target: Target): boolean {\r\n return target === this.target && this.sensorSettings === target.plan.thematic?.sensorSettings;\r\n }\r\n\r\n public static create(target: Target, range: Range3d): ThematicSensors {\r\n let sensors: ThematicDisplaySensor[] = [];\r\n\r\n if (target.plan.thematic !== undefined) {\r\n sensors = _accumulateSensorsInRange(\r\n target.plan.thematic.sensorSettings.sensors,\r\n range,\r\n target.currentTransform,\r\n target.plan.thematic.sensorSettings.distanceCutoff);\r\n }\r\n\r\n const obj = this.createFloat(target, range, sensors);\r\n obj._update(obj.target.uniforms.frustum.viewMatrix);\r\n return obj;\r\n }\r\n\r\n public get isDisposed(): boolean { return this._texture.handle.isDisposed; }\r\n\r\n public dispose(): void {\r\n dispose(this._texture.handle);\r\n }\r\n\r\n public bindNumSensors(uniform: UniformHandle): void {\r\n uniform.setUniform1i(this.numSensors);\r\n }\r\n\r\n public bindTexture(uniform: UniformHandle): void {\r\n this._texture.handle.bindSampler(uniform, TextureUnit.ThematicSensors);\r\n }\r\n\r\n public get bytesUsed(): number { return this._texture.handle.bytesUsed; }\r\n\r\n public get texture(): Texture2DHandle { return this._texture.handle; }\r\n\r\n private _update(viewMatrix: Transform) {\r\n this._viewMatrix.setFrom(viewMatrix);\r\n\r\n this.reset();\r\n\r\n for (const sensor of this._sensors) {\r\n const position = this._viewMatrix.multiplyPoint3d(sensor.position);\r\n this.appendSensor(position, sensor.value);\r\n }\r\n\r\n this._texture.handle.replaceTextureData(this._texture.data);\r\n }\r\n\r\n public update(viewMatrix: Transform) {\r\n if (!this._viewMatrix.isAlmostEqual(viewMatrix)) {\r\n this._update(viewMatrix);\r\n }\r\n }\r\n\r\n protected constructor(texture: ThematicSensorsTexture, target: Target, range: Range3d, sensors: ThematicDisplaySensor[]) {\r\n this.target = target;\r\n this.range = range;\r\n this.sensorSettings = target.plan.thematic?.sensorSettings;\r\n this._sensors = sensors;\r\n this._texture = texture;\r\n this._view = new DataView(texture.data.buffer);\r\n }\r\n\r\n public static createFloat(target: Target, range: Range3d, sensors: ThematicDisplaySensor[]): ThematicSensors {\r\n const data = new Float32Array(sensors.length * 4);\r\n const handle = Texture2DHandle.createForData(1, sensors.length, data, false, GL.Texture.WrapMode.ClampToEdge, GL.Texture.Format.Rgba);\r\n assert(undefined !== handle);\r\n return new this({ handle, data }, target, range, sensors);\r\n }\r\n\r\n protected append(value: number) { this.appendFloat(value); }\r\n\r\n protected appendFloat(value: number): void {\r\n this._view.setFloat32(this._curPos, value, true);\r\n this.advance(4);\r\n }\r\n\r\n protected appendUint8(value: number): void {\r\n this._view.setUint8(this._curPos, value);\r\n this.advance(1);\r\n }\r\n\r\n private advance(numBytes: number): void { this._curPos += numBytes; }\r\n private reset(): void { this._curPos = 0; }\r\n\r\n private appendValues(a: number, b: number, c: number, d: number) {\r\n this.append(a);\r\n this.append(b);\r\n this.append(c);\r\n this.append(d);\r\n }\r\n\r\n private appendSensor(position: Point3d, value: number): void { this.appendValues(position.x, position.y, position.z, value); }\r\n}\r\n\r\nfunction _sensorRadiusAffectsRange(sensor: ThematicDisplaySensor, sensorRadius: number, range: Range3d) {\r\n const distance = range.distanceToPoint(sensor.position);\r\n return !(distance > sensorRadius);\r\n}\r\n\r\nconst scratchRange = Range3d.createNull();\r\n\r\nfunction _accumulateSensorsInRange(sensors: ThematicDisplaySensor[], range: Range3d, transform: Transform, distanceCutoff: number): ThematicDisplaySensor[] {\r\n const retSensors: ThematicDisplaySensor[] = [];\r\n\r\n transform.multiplyRange(range, scratchRange);\r\n\r\n for (const sensor of sensors) {\r\n const position = sensor.position;\r\n\r\n if (distanceCutoff <= 0 || _sensorRadiusAffectsRange(sensor, distanceCutoff, scratchRange)) {\r\n const value = sensor.value;\r\n retSensors.push(ThematicDisplaySensor.fromJSON({ position, value }));\r\n }\r\n }\r\n\r\n return retSensors;\r\n}\r\n"]}
1
+ {"version":3,"file":"ThematicSensors.js","sourceRoot":"","sources":["../../../../src/render/webgl/ThematicSensors.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 } from \"@itwin/core-bentley\";\nimport { Point3d, Range3d, Transform } from \"@itwin/core-geometry\";\nimport { ThematicDisplaySensor, ThematicDisplaySensorSettings } from \"@itwin/core-common\";\nimport { WebGLDisposable } from \"./Disposable\";\nimport { GL } from \"./GL\";\nimport { Texture2DData, Texture2DHandle } from \"./Texture\";\nimport { UniformHandle } from \"./UniformHandle\";\nimport { TextureUnit } from \"./RenderFlags\";\nimport { Target } from \"./Target\";\n\n/** @internal */\ninterface ThematicSensorsTexture {\n readonly handle: Texture2DHandle;\n readonly data: Texture2DData;\n}\n\n/** Maintains a floating-point texture representing a list of thematic sensors.\n * @internal\n */\nexport class ThematicSensors implements WebGLDisposable {\n private readonly _texture: ThematicSensorsTexture;\n /** Used for writing to texture data. */\n private readonly _view: DataView;\n /** Position at which to write next texture data. */\n private _curPos: number = 0;\n\n public readonly target: Target;\n public readonly range: Range3d;\n public readonly sensorSettings?: ThematicDisplaySensorSettings;\n\n public get numSensors(): number { return this._sensors.length; }\n\n private _sensors: ThematicDisplaySensor[];\n private readonly _viewMatrix = Transform.createIdentity();\n\n public matchesTarget(target: Target): boolean {\n return target === this.target && this.sensorSettings === target.plan.thematic?.sensorSettings;\n }\n\n public static create(target: Target, range: Range3d): ThematicSensors {\n let sensors: ThematicDisplaySensor[] = [];\n\n if (target.plan.thematic !== undefined) {\n sensors = _accumulateSensorsInRange(\n target.plan.thematic.sensorSettings.sensors,\n range,\n target.currentTransform,\n target.plan.thematic.sensorSettings.distanceCutoff);\n }\n\n const obj = this.createFloat(target, range, sensors);\n obj._update(obj.target.uniforms.frustum.viewMatrix);\n return obj;\n }\n\n public get isDisposed(): boolean { return this._texture.handle.isDisposed; }\n\n public dispose(): void {\n dispose(this._texture.handle);\n }\n\n public bindNumSensors(uniform: UniformHandle): void {\n uniform.setUniform1i(this.numSensors);\n }\n\n public bindTexture(uniform: UniformHandle): void {\n this._texture.handle.bindSampler(uniform, TextureUnit.ThematicSensors);\n }\n\n public get bytesUsed(): number { return this._texture.handle.bytesUsed; }\n\n public get texture(): Texture2DHandle { return this._texture.handle; }\n\n private _update(viewMatrix: Transform) {\n this._viewMatrix.setFrom(viewMatrix);\n\n this.reset();\n\n for (const sensor of this._sensors) {\n const position = this._viewMatrix.multiplyPoint3d(sensor.position);\n this.appendSensor(position, sensor.value);\n }\n\n this._texture.handle.replaceTextureData(this._texture.data);\n }\n\n public update(viewMatrix: Transform) {\n if (!this._viewMatrix.isAlmostEqual(viewMatrix)) {\n this._update(viewMatrix);\n }\n }\n\n protected constructor(texture: ThematicSensorsTexture, target: Target, range: Range3d, sensors: ThematicDisplaySensor[]) {\n this.target = target;\n this.range = range;\n this.sensorSettings = target.plan.thematic?.sensorSettings;\n this._sensors = sensors;\n this._texture = texture;\n this._view = new DataView(texture.data.buffer);\n }\n\n public static createFloat(target: Target, range: Range3d, sensors: ThematicDisplaySensor[]): ThematicSensors {\n const data = new Float32Array(sensors.length * 4);\n const handle = Texture2DHandle.createForData(1, sensors.length, data, false, GL.Texture.WrapMode.ClampToEdge, GL.Texture.Format.Rgba);\n assert(undefined !== handle);\n return new this({ handle, data }, target, range, sensors);\n }\n\n protected append(value: number) { this.appendFloat(value); }\n\n protected appendFloat(value: number): void {\n this._view.setFloat32(this._curPos, value, true);\n this.advance(4);\n }\n\n protected appendUint8(value: number): void {\n this._view.setUint8(this._curPos, value);\n this.advance(1);\n }\n\n private advance(numBytes: number): void { this._curPos += numBytes; }\n private reset(): void { this._curPos = 0; }\n\n private appendValues(a: number, b: number, c: number, d: number) {\n this.append(a);\n this.append(b);\n this.append(c);\n this.append(d);\n }\n\n private appendSensor(position: Point3d, value: number): void { this.appendValues(position.x, position.y, position.z, value); }\n}\n\nfunction _sensorRadiusAffectsRange(sensor: ThematicDisplaySensor, sensorRadius: number, range: Range3d) {\n const distance = range.distanceToPoint(sensor.position);\n return !(distance > sensorRadius);\n}\n\nconst scratchRange = Range3d.createNull();\n\nfunction _accumulateSensorsInRange(sensors: ThematicDisplaySensor[], range: Range3d, transform: Transform, distanceCutoff: number): ThematicDisplaySensor[] {\n const retSensors: ThematicDisplaySensor[] = [];\n\n transform.multiplyRange(range, scratchRange);\n\n for (const sensor of sensors) {\n const position = sensor.position;\n\n if (distanceCutoff <= 0 || _sensorRadiusAffectsRange(sensor, distanceCutoff, scratchRange)) {\n const value = sensor.value;\n retSensors.push(ThematicDisplaySensor.fromJSON({ position, value }));\n }\n }\n\n return retSensors;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ThematicUniforms.js","sourceRoot":"","sources":["../../../../src/render/webgl/ThematicUniforms.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 } from \"@itwin/core-bentley\";\r\nimport { Gradient, RenderTexture, ThematicDisplay, ThematicDisplayMode, ThematicGradientMode } from \"@itwin/core-common\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { UniformHandle } from \"./UniformHandle\";\r\nimport { TextureUnit } from \"./RenderFlags\";\r\nimport { desync, sync } from \"./Sync\";\r\nimport { TextureHandle } from \"./Texture\";\r\nimport { ThematicSensors } from \"./ThematicSensors\";\r\nimport { Angle, Range3d, Transform, Vector3d } from \"@itwin/core-geometry\";\r\nimport { Target } from \"./Target\";\r\nimport { System } from \"./System\";\r\nimport { FloatRgb } from \"./FloatRGBA\";\r\n\r\n/** Maintains state for uniforms related to thematic display.\r\n * @internal\r\n */\r\nexport class ThematicUniforms implements WebGLDisposable {\r\n private _sensors?: ThematicSensors; // NB: This is only used if no distance cutoff is applied (this is shared among all batches)\r\n private _texture?: TextureHandle;\r\n private readonly _range = new Float32Array(2);\r\n private _colorMix = 0.0;\r\n private readonly _axis = new Float32Array(3);\r\n private readonly _sunDirection = new Float32Array(3);\r\n private readonly _marginColor = new Float32Array(3);\r\n private readonly _displayMode = new Float32Array(1);\r\n private readonly _fragSettings = new Float32Array(3); // gradientMode, distanceCutoff, stepCount\r\n private _numSensors = 0;\r\n private _gradientDimension = _getGradientDimension();\r\n private _thematicDisplay?: ThematicDisplay;\r\n\r\n public syncKey = 0;\r\n\r\n private get _distanceCutoff(): number { return this._fragSettings[1]; }\r\n\r\n public get thematicDisplay(): ThematicDisplay | undefined {\r\n return this._thematicDisplay;\r\n }\r\n\r\n public get wantIsoLines(): boolean {\r\n if (undefined !== this.thematicDisplay)\r\n return ThematicDisplayMode.Height === this._displayMode[0] && ThematicGradientMode.IsoLines === this.thematicDisplay.gradientSettings.mode;\r\n return false;\r\n }\r\n\r\n public get wantSlopeMode(): boolean {\r\n return (undefined !== this.thematicDisplay) ? ThematicDisplayMode.Slope === this._displayMode[0] : false;\r\n }\r\n\r\n public get wantHillShadeMode(): boolean {\r\n return (undefined !== this.thematicDisplay) ? ThematicDisplayMode.HillShade === this._displayMode[0] : false;\r\n }\r\n\r\n public get wantGlobalSensorTexture(): boolean {\r\n return !(this._distanceCutoff > 0);\r\n }\r\n\r\n public get bytesUsed(): number {\r\n return this._sensors ? this._sensors.bytesUsed : 0;\r\n }\r\n\r\n private _scratchVector = new Vector3d();\r\n\r\n private _updateAxis(axis: Vector3d, viewMatrix?: Transform) {\r\n const tAxis = (viewMatrix !== undefined) ? viewMatrix.multiplyVector(axis, this._scratchVector) : axis;\r\n tAxis.normalizeInPlace();\r\n this._axis[0] = tAxis.x;\r\n this._axis[1] = tAxis.y;\r\n this._axis[2] = tAxis.z;\r\n }\r\n\r\n private _updateSunDirection(sunDir: Vector3d, viewMatrix: Transform) {\r\n viewMatrix.multiplyVector(sunDir, this._scratchVector);\r\n this._scratchVector.negate(this._scratchVector);\r\n this._scratchVector.normalizeInPlace();\r\n this._sunDirection[0] = this._scratchVector.x;\r\n this._sunDirection[1] = this._scratchVector.y;\r\n this._sunDirection[2] = this._scratchVector.z;\r\n }\r\n\r\n public update(target: Target): void {\r\n const plan = target.plan;\r\n\r\n if (this.thematicDisplay && plan.thematic && this.thematicDisplay.equals(plan.thematic) && this._texture) {\r\n if (undefined !== this._sensors)\r\n this._sensors.update(target.uniforms.frustum.viewMatrix);\r\n\r\n if (ThematicDisplayMode.Slope === this.thematicDisplay.displayMode) {\r\n this._updateAxis(this.thematicDisplay.axis, target.uniforms.frustum.viewMatrix);\r\n desync(this);\r\n } else if (ThematicDisplayMode.HillShade === this.thematicDisplay.displayMode) {\r\n this._updateSunDirection(this.thematicDisplay.sunDirection, target.uniforms.frustum.viewMatrix);\r\n desync(this);\r\n }\r\n\r\n return;\r\n }\r\n\r\n desync(this);\r\n\r\n this._thematicDisplay = plan.thematic;\r\n this._texture = dispose(this._texture);\r\n if (!this.thematicDisplay)\r\n return;\r\n\r\n if (ThematicDisplayMode.Slope === this.thematicDisplay.displayMode) {\r\n this._range[0] = Angle.degreesToRadians(this.thematicDisplay.range.low);\r\n this._range[1] = Angle.degreesToRadians(this.thematicDisplay.range.high);\r\n } else {\r\n this._range[0] = this.thematicDisplay.range.low;\r\n this._range[1] = this.thematicDisplay.range.high;\r\n }\r\n\r\n this._colorMix = this.thematicDisplay.gradientSettings.colorMix;\r\n\r\n this._updateAxis(this.thematicDisplay.axis, (ThematicDisplayMode.Slope === this.thematicDisplay.displayMode) ? target.uniforms.frustum.viewMatrix : undefined);\r\n\r\n if (ThematicDisplayMode.HillShade === this.thematicDisplay.displayMode)\r\n this._updateSunDirection(this.thematicDisplay.sunDirection, target.uniforms.frustum.viewMatrix);\r\n\r\n const marginRgb = FloatRgb.fromColorDef(this.thematicDisplay.gradientSettings.marginColor);\r\n this._marginColor[0] = marginRgb.red;\r\n this._marginColor[1] = marginRgb.green;\r\n this._marginColor[2] = marginRgb.blue;\r\n\r\n this._displayMode[0] = this.thematicDisplay.displayMode;\r\n\r\n this._fragSettings[0] = this.thematicDisplay.gradientSettings.mode;\r\n\r\n const sensorSettings = this.thematicDisplay.sensorSettings;\r\n this._fragSettings[1] = (undefined === sensorSettings) ? 0 : this.thematicDisplay.sensorSettings.distanceCutoff;\r\n\r\n this._fragSettings[2] = Math.min(this.thematicDisplay.gradientSettings.stepCount, this._gradientDimension);\r\n\r\n // If we want sensors and have no distance cutoff, then create a global shared sensor texture.\r\n if (target.wantThematicSensors && !(this._distanceCutoff > 0)) {\r\n this._numSensors = sensorSettings.sensors.length;\r\n this._sensors = dispose(this._sensors);\r\n this._sensors = ThematicSensors.create(target, Range3d.createNull());\r\n }\r\n\r\n const symb = Gradient.Symb.createThematic(this.thematicDisplay.gradientSettings);\r\n const image = symb.getThematicImageForRenderer(this._gradientDimension);\r\n this._texture = TextureHandle.createForImageBuffer(image, RenderTexture.Type.ThematicGradient);\r\n }\r\n\r\n public bindRange(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform2fv(this._range);\r\n }\r\n\r\n public bindAxis(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform3fv(this._axis);\r\n }\r\n\r\n public bindSunDirection(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform3fv(this._sunDirection);\r\n }\r\n\r\n public bindMarginColor(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform3fv(this._marginColor);\r\n }\r\n\r\n public bindDisplayMode(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform1fv(this._displayMode);\r\n }\r\n\r\n public bindFragSettings(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform3fv(this._fragSettings);\r\n }\r\n\r\n public bindTexture(uniform: UniformHandle, unit: TextureUnit): void {\r\n assert(undefined !== this._texture);\r\n this._texture.bindSampler(uniform, unit);\r\n }\r\n\r\n public bindNumSensors(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform1i(this._numSensors);\r\n }\r\n\r\n public bindSensors(uniform: UniformHandle): void {\r\n assert(undefined !== this._sensors);\r\n this._sensors.texture.bindSampler(uniform, TextureUnit.ThematicSensors);\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return undefined === this._texture && undefined === this._sensors;\r\n }\r\n\r\n public dispose() {\r\n this._texture = dispose(this._texture);\r\n this._sensors = dispose(this._sensors);\r\n }\r\n}\r\n\r\nfunction _getGradientDimension(): number {\r\n const preferDimension = 8192;\r\n const maxDimension = System.instance.maxTextureSize;\r\n return (preferDimension > maxDimension) ? maxDimension : preferDimension;\r\n}\r\n"]}
1
+ {"version":3,"file":"ThematicUniforms.js","sourceRoot":"","sources":["../../../../src/render/webgl/ThematicUniforms.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 } from \"@itwin/core-bentley\";\nimport { Gradient, RenderTexture, ThematicDisplay, ThematicDisplayMode, ThematicGradientMode } from \"@itwin/core-common\";\nimport { WebGLDisposable } from \"./Disposable\";\nimport { UniformHandle } from \"./UniformHandle\";\nimport { TextureUnit } from \"./RenderFlags\";\nimport { desync, sync } from \"./Sync\";\nimport { TextureHandle } from \"./Texture\";\nimport { ThematicSensors } from \"./ThematicSensors\";\nimport { Angle, Range3d, Transform, Vector3d } from \"@itwin/core-geometry\";\nimport { Target } from \"./Target\";\nimport { System } from \"./System\";\nimport { FloatRgb } from \"./FloatRGBA\";\n\n/** Maintains state for uniforms related to thematic display.\n * @internal\n */\nexport class ThematicUniforms implements WebGLDisposable {\n private _sensors?: ThematicSensors; // NB: This is only used if no distance cutoff is applied (this is shared among all batches)\n private _texture?: TextureHandle;\n private readonly _range = new Float32Array(2);\n private _colorMix = 0.0;\n private readonly _axis = new Float32Array(3);\n private readonly _sunDirection = new Float32Array(3);\n private readonly _marginColor = new Float32Array(3);\n private readonly _displayMode = new Float32Array(1);\n private readonly _fragSettings = new Float32Array(3); // gradientMode, distanceCutoff, stepCount\n private _numSensors = 0;\n private _gradientDimension = _getGradientDimension();\n private _thematicDisplay?: ThematicDisplay;\n\n public syncKey = 0;\n\n private get _distanceCutoff(): number { return this._fragSettings[1]; }\n\n public get thematicDisplay(): ThematicDisplay | undefined {\n return this._thematicDisplay;\n }\n\n public get wantIsoLines(): boolean {\n if (undefined !== this.thematicDisplay)\n return ThematicDisplayMode.Height === this._displayMode[0] && ThematicGradientMode.IsoLines === this.thematicDisplay.gradientSettings.mode;\n return false;\n }\n\n public get wantSlopeMode(): boolean {\n return (undefined !== this.thematicDisplay) ? ThematicDisplayMode.Slope === this._displayMode[0] : false;\n }\n\n public get wantHillShadeMode(): boolean {\n return (undefined !== this.thematicDisplay) ? ThematicDisplayMode.HillShade === this._displayMode[0] : false;\n }\n\n public get wantGlobalSensorTexture(): boolean {\n return !(this._distanceCutoff > 0);\n }\n\n public get bytesUsed(): number {\n return this._sensors ? this._sensors.bytesUsed : 0;\n }\n\n private _scratchVector = new Vector3d();\n\n private _updateAxis(axis: Vector3d, viewMatrix?: Transform) {\n const tAxis = (viewMatrix !== undefined) ? viewMatrix.multiplyVector(axis, this._scratchVector) : axis;\n tAxis.normalizeInPlace();\n this._axis[0] = tAxis.x;\n this._axis[1] = tAxis.y;\n this._axis[2] = tAxis.z;\n }\n\n private _updateSunDirection(sunDir: Vector3d, viewMatrix: Transform) {\n viewMatrix.multiplyVector(sunDir, this._scratchVector);\n this._scratchVector.negate(this._scratchVector);\n this._scratchVector.normalizeInPlace();\n this._sunDirection[0] = this._scratchVector.x;\n this._sunDirection[1] = this._scratchVector.y;\n this._sunDirection[2] = this._scratchVector.z;\n }\n\n public update(target: Target): void {\n const plan = target.plan;\n\n if (this.thematicDisplay && plan.thematic && this.thematicDisplay.equals(plan.thematic) && this._texture) {\n if (undefined !== this._sensors)\n this._sensors.update(target.uniforms.frustum.viewMatrix);\n\n if (ThematicDisplayMode.Slope === this.thematicDisplay.displayMode) {\n this._updateAxis(this.thematicDisplay.axis, target.uniforms.frustum.viewMatrix);\n desync(this);\n } else if (ThematicDisplayMode.HillShade === this.thematicDisplay.displayMode) {\n this._updateSunDirection(this.thematicDisplay.sunDirection, target.uniforms.frustum.viewMatrix);\n desync(this);\n }\n\n return;\n }\n\n desync(this);\n\n this._thematicDisplay = plan.thematic;\n this._texture = dispose(this._texture);\n if (!this.thematicDisplay)\n return;\n\n if (ThematicDisplayMode.Slope === this.thematicDisplay.displayMode) {\n this._range[0] = Angle.degreesToRadians(this.thematicDisplay.range.low);\n this._range[1] = Angle.degreesToRadians(this.thematicDisplay.range.high);\n } else {\n this._range[0] = this.thematicDisplay.range.low;\n this._range[1] = this.thematicDisplay.range.high;\n }\n\n this._colorMix = this.thematicDisplay.gradientSettings.colorMix;\n\n this._updateAxis(this.thematicDisplay.axis, (ThematicDisplayMode.Slope === this.thematicDisplay.displayMode) ? target.uniforms.frustum.viewMatrix : undefined);\n\n if (ThematicDisplayMode.HillShade === this.thematicDisplay.displayMode)\n this._updateSunDirection(this.thematicDisplay.sunDirection, target.uniforms.frustum.viewMatrix);\n\n const marginRgb = FloatRgb.fromColorDef(this.thematicDisplay.gradientSettings.marginColor);\n this._marginColor[0] = marginRgb.red;\n this._marginColor[1] = marginRgb.green;\n this._marginColor[2] = marginRgb.blue;\n\n this._displayMode[0] = this.thematicDisplay.displayMode;\n\n this._fragSettings[0] = this.thematicDisplay.gradientSettings.mode;\n\n const sensorSettings = this.thematicDisplay.sensorSettings;\n this._fragSettings[1] = (undefined === sensorSettings) ? 0 : this.thematicDisplay.sensorSettings.distanceCutoff;\n\n this._fragSettings[2] = Math.min(this.thematicDisplay.gradientSettings.stepCount, this._gradientDimension);\n\n // If we want sensors and have no distance cutoff, then create a global shared sensor texture.\n if (target.wantThematicSensors && !(this._distanceCutoff > 0)) {\n this._numSensors = sensorSettings.sensors.length;\n this._sensors = dispose(this._sensors);\n this._sensors = ThematicSensors.create(target, Range3d.createNull());\n }\n\n const symb = Gradient.Symb.createThematic(this.thematicDisplay.gradientSettings);\n const image = symb.getThematicImageForRenderer(this._gradientDimension);\n this._texture = TextureHandle.createForImageBuffer(image, RenderTexture.Type.ThematicGradient);\n }\n\n public bindRange(uniform: UniformHandle): void {\n if (!sync(this, uniform))\n uniform.setUniform2fv(this._range);\n }\n\n public bindAxis(uniform: UniformHandle): void {\n if (!sync(this, uniform))\n uniform.setUniform3fv(this._axis);\n }\n\n public bindSunDirection(uniform: UniformHandle): void {\n if (!sync(this, uniform))\n uniform.setUniform3fv(this._sunDirection);\n }\n\n public bindMarginColor(uniform: UniformHandle): void {\n if (!sync(this, uniform))\n uniform.setUniform3fv(this._marginColor);\n }\n\n public bindDisplayMode(uniform: UniformHandle): void {\n if (!sync(this, uniform))\n uniform.setUniform1fv(this._displayMode);\n }\n\n public bindFragSettings(uniform: UniformHandle): void {\n if (!sync(this, uniform))\n uniform.setUniform3fv(this._fragSettings);\n }\n\n public bindTexture(uniform: UniformHandle, unit: TextureUnit): void {\n assert(undefined !== this._texture);\n this._texture.bindSampler(uniform, unit);\n }\n\n public bindNumSensors(uniform: UniformHandle): void {\n if (!sync(this, uniform))\n uniform.setUniform1i(this._numSensors);\n }\n\n public bindSensors(uniform: UniformHandle): void {\n assert(undefined !== this._sensors);\n this._sensors.texture.bindSampler(uniform, TextureUnit.ThematicSensors);\n }\n\n public get isDisposed(): boolean {\n return undefined === this._texture && undefined === this._sensors;\n }\n\n public dispose() {\n this._texture = dispose(this._texture);\n this._sensors = dispose(this._sensors);\n }\n}\n\nfunction _getGradientDimension(): number {\n const preferDimension = 8192;\n const maxDimension = System.instance.maxTextureSize;\n return (preferDimension > maxDimension) ? maxDimension : preferDimension;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"UniformHandle.js","sourceRoot":"","sources":["../../../../src/render/webgl/UniformHandle.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, Logger } from \"@itwin/core-bentley\";\r\nimport { FrontendLoggerCategory } from \"../../common/FrontendLoggerCategory\";\r\nimport { Matrix3, Matrix4 } from \"./Matrix\";\r\nimport { ShaderProgram } from \"./ShaderProgram\";\r\nimport { SyncToken } from \"./Sync\";\r\nimport { System } from \"./System\";\r\n\r\nconst enum DataType {// eslint-disable-line no-restricted-syntax\r\n Undefined, // eslint-disable-line id-blacklist\r\n Mat3,\r\n Mat4,\r\n Float,\r\n FloatArray,\r\n Vec2,\r\n Vec3,\r\n Vec4,\r\n Int,\r\n IntArray,\r\n Uint,\r\n}\r\n\r\n/** A handle to the location of a uniform within a shader program\r\n * @internal\r\n */\r\nexport class UniformHandle {\r\n private readonly _location: WebGLUniformLocation | null;\r\n private _type: DataType = DataType.Undefined;\r\n private readonly _data: number[] = [];\r\n public syncToken?: SyncToken;\r\n\r\n private constructor(location: WebGLUniformLocation | null) { this._location = location; }\r\n\r\n public static create(program: ShaderProgram, name: string): UniformHandle {\r\n let location = null;\r\n if (undefined !== program.glProgram) {\r\n location = System.instance.context.getUniformLocation(program.glProgram, name);\r\n }\r\n if (null === location) {\r\n const errMsg = `uniform ${name} not found in ${program.description}.`;\r\n if (System.instance.options.errorOnMissingUniform) {\r\n throw new Error(errMsg);\r\n } else {\r\n Logger.logError(FrontendLoggerCategory.Render, errMsg);\r\n }\r\n }\r\n return new UniformHandle(location);\r\n }\r\n\r\n private updateData(type: DataType, data: Float32Array | Int32Array | number[]): boolean {\r\n assert(DataType.Undefined !== type && DataType.Int !== type && DataType.Float !== type && DataType.Uint !== type);\r\n\r\n let updated = this._type !== type;\r\n if (updated) {\r\n this._type = type;\r\n if (this._data.length !== data.length)\r\n this._data.length = data.length;\r\n }\r\n\r\n for (let i = 0; i < data.length; i++) {\r\n const datum = data[i];\r\n updated = updated || this._data[i] !== datum;\r\n this._data[i] = datum;\r\n }\r\n\r\n return updated;\r\n }\r\n\r\n private updateDatum(type: DataType, datum: number): boolean {\r\n assert(DataType.Int === type || DataType.Uint === type || DataType.Float === type);\r\n\r\n // NB: Yes, calling data.length without actually changing the length shows up as a significant performance bottleneck...\r\n if (this._data.length !== 1)\r\n this._data.length = 1;\r\n\r\n const updated = this._type !== type || this._data[0] !== datum;\r\n this._type = type;\r\n this._data[0] = datum;\r\n\r\n return updated;\r\n }\r\n\r\n public setMatrix3(mat: Matrix3) {\r\n if (this.updateData(DataType.Mat3, mat.data))\r\n System.instance.context.uniformMatrix3fv(this._location, false, mat.data);\r\n }\r\n\r\n public setMatrix4(mat: Matrix4) {\r\n if (this.updateData(DataType.Mat4, mat.data))\r\n System.instance.context.uniformMatrix4fv(this._location, false, mat.data);\r\n }\r\n\r\n public setUniform1iv(data: Int32Array | number[]) {\r\n if (this.updateData(DataType.IntArray, data))\r\n System.instance.context.uniform1iv(this._location, data);\r\n }\r\n\r\n public setUniform1fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.FloatArray, data))\r\n System.instance.context.uniform1fv(this._location, data);\r\n }\r\n\r\n public setUniform2fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.Vec2, data))\r\n System.instance.context.uniform2fv(this._location, data);\r\n }\r\n\r\n public setUniform3fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.Vec3, data))\r\n System.instance.context.uniform3fv(this._location, data);\r\n }\r\n\r\n public setUniform4fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.Vec4, data))\r\n System.instance.context.uniform4fv(this._location, data);\r\n }\r\n\r\n public setUniform1i(data: number) {\r\n if (this.updateDatum(DataType.Int, data))\r\n System.instance.context.uniform1i(this._location, data);\r\n }\r\n\r\n public setUniform1f(data: number) {\r\n if (this.updateDatum(DataType.Float, data))\r\n System.instance.context.uniform1f(this._location, data);\r\n }\r\n\r\n public setUniform1ui(data: number) {\r\n if (this.updateDatum(DataType.Uint, data))\r\n System.instance.context.uniform1ui(this._location, data);\r\n }\r\n\r\n public setUniformBitflags(data: number) {\r\n this.setUniform1ui(data);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"UniformHandle.js","sourceRoot":"","sources":["../../../../src/render/webgl/UniformHandle.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, Logger } from \"@itwin/core-bentley\";\nimport { FrontendLoggerCategory } from \"../../common/FrontendLoggerCategory\";\nimport { Matrix3, Matrix4 } from \"./Matrix\";\nimport { ShaderProgram } from \"./ShaderProgram\";\nimport { SyncToken } from \"./Sync\";\nimport { System } from \"./System\";\n\nconst enum DataType {// eslint-disable-line no-restricted-syntax\n Undefined, // eslint-disable-line id-blacklist\n Mat3,\n Mat4,\n Float,\n FloatArray,\n Vec2,\n Vec3,\n Vec4,\n Int,\n IntArray,\n Uint,\n}\n\n/** A handle to the location of a uniform within a shader program\n * @internal\n */\nexport class UniformHandle {\n private readonly _location: WebGLUniformLocation | null;\n private _type: DataType = DataType.Undefined;\n private readonly _data: number[] = [];\n public syncToken?: SyncToken;\n\n private constructor(location: WebGLUniformLocation | null) { this._location = location; }\n\n public static create(program: ShaderProgram, name: string): UniformHandle {\n let location = null;\n if (undefined !== program.glProgram) {\n location = System.instance.context.getUniformLocation(program.glProgram, name);\n }\n if (null === location) {\n const errMsg = `uniform ${name} not found in ${program.description}.`;\n if (System.instance.options.errorOnMissingUniform) {\n throw new Error(errMsg);\n } else {\n Logger.logError(FrontendLoggerCategory.Render, errMsg);\n }\n }\n return new UniformHandle(location);\n }\n\n private updateData(type: DataType, data: Float32Array | Int32Array | number[]): boolean {\n assert(DataType.Undefined !== type && DataType.Int !== type && DataType.Float !== type && DataType.Uint !== type);\n\n let updated = this._type !== type;\n if (updated) {\n this._type = type;\n if (this._data.length !== data.length)\n this._data.length = data.length;\n }\n\n for (let i = 0; i < data.length; i++) {\n const datum = data[i];\n updated = updated || this._data[i] !== datum;\n this._data[i] = datum;\n }\n\n return updated;\n }\n\n private updateDatum(type: DataType, datum: number): boolean {\n assert(DataType.Int === type || DataType.Uint === type || DataType.Float === type);\n\n // NB: Yes, calling data.length without actually changing the length shows up as a significant performance bottleneck...\n if (this._data.length !== 1)\n this._data.length = 1;\n\n const updated = this._type !== type || this._data[0] !== datum;\n this._type = type;\n this._data[0] = datum;\n\n return updated;\n }\n\n public setMatrix3(mat: Matrix3) {\n if (this.updateData(DataType.Mat3, mat.data))\n System.instance.context.uniformMatrix3fv(this._location, false, mat.data);\n }\n\n public setMatrix4(mat: Matrix4) {\n if (this.updateData(DataType.Mat4, mat.data))\n System.instance.context.uniformMatrix4fv(this._location, false, mat.data);\n }\n\n public setUniform1iv(data: Int32Array | number[]) {\n if (this.updateData(DataType.IntArray, data))\n System.instance.context.uniform1iv(this._location, data);\n }\n\n public setUniform1fv(data: Float32Array | number[]) {\n if (this.updateData(DataType.FloatArray, data))\n System.instance.context.uniform1fv(this._location, data);\n }\n\n public setUniform2fv(data: Float32Array | number[]) {\n if (this.updateData(DataType.Vec2, data))\n System.instance.context.uniform2fv(this._location, data);\n }\n\n public setUniform3fv(data: Float32Array | number[]) {\n if (this.updateData(DataType.Vec3, data))\n System.instance.context.uniform3fv(this._location, data);\n }\n\n public setUniform4fv(data: Float32Array | number[]) {\n if (this.updateData(DataType.Vec4, data))\n System.instance.context.uniform4fv(this._location, data);\n }\n\n public setUniform1i(data: number) {\n if (this.updateDatum(DataType.Int, data))\n System.instance.context.uniform1i(this._location, data);\n }\n\n public setUniform1f(data: number) {\n if (this.updateDatum(DataType.Float, data))\n System.instance.context.uniform1f(this._location, data);\n }\n\n public setUniform1ui(data: number) {\n if (this.updateDatum(DataType.Uint, data))\n System.instance.context.uniform1ui(this._location, data);\n }\n\n public setUniformBitflags(data: number) {\n this.setUniform1ui(data);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"VertexLUT.js","sourceRoot":"","sources":["../../../../src/render/webgl/VertexLUT.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 { dispose } from \"@itwin/core-bentley\";\r\nimport { QParams2d, QParams3d } from \"@itwin/core-common\";\r\nimport { AuxChannel, AuxChannelTable, AuxDisplacementChannel, AuxParamChannel } from \"../../common/render/primitives/AuxChannelTable\";\r\nimport { VertexTable } from \"../../common/render/primitives/VertexTable\";\r\nimport { ColorInfo } from \"./ColorInfo\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { qorigin3dToArray, qparams2dToArray, qscale3dToArray } from \"./AttributeBuffers\";\r\nimport { TextureHandle } from \"./Texture\";\r\n\r\ntype ChannelPropName = \"normals\" | \"displacements\" | \"params\";\r\n\r\n/** @internal */\r\nexport class AuxChannelLUT implements WebGLDisposable {\r\n public readonly texture: TextureHandle;\r\n public readonly numVertices: number;\r\n public readonly numBytesPerVertex: number;\r\n public displacements?: Map<string, AuxDisplacementChannel>;\r\n public normals?: Map<string, AuxChannel>;\r\n public params?: Map<string, AuxParamChannel>;\r\n\r\n private constructor(texture: TextureHandle, table: AuxChannelTable) {\r\n this.texture = texture;\r\n this.numVertices = table.numVertices;\r\n this.numBytesPerVertex = table.numBytesPerVertex;\r\n\r\n this.initChannels<AuxDisplacementChannel>(table, \"displacements\");\r\n this.initChannels<AuxChannel>(table, \"normals\");\r\n this.initChannels<AuxParamChannel>(table, \"params\");\r\n }\r\n\r\n private initChannels<T extends AuxChannel>(table: AuxChannelTable, name: ChannelPropName): void {\r\n const channels = table[name];\r\n if (undefined === channels)\r\n return;\r\n\r\n const map = new Map<string, T>();\r\n\r\n // TS2322: Type 'Map<string, T>' is not assignable to type 'Map<string, AuxChannel> & Map<string, AuxDisplacementChannel> & Map<string, AuxParamChannel>'.\r\n // (Compiler cannot detect that the specific property name is matched to the correct subtype at each call site - but we know that).\r\n this[name] = map as any;\r\n for (const channel of channels)\r\n map.set(channel.name, channel as T);\r\n }\r\n\r\n public get bytesUsed(): number { return this.texture.bytesUsed; }\r\n public get hasScalarAnimation() { return undefined !== this.params; }\r\n\r\n public get isDisposed(): boolean { return this.texture.isDisposed; }\r\n\r\n public dispose() {\r\n dispose(this.texture);\r\n }\r\n\r\n public static create(table: AuxChannelTable): AuxChannelLUT | undefined {\r\n const texture = TextureHandle.createForData(table.width, table.height, table.data);\r\n return undefined !== texture ? new AuxChannelLUT(texture, table) : undefined;\r\n }\r\n}\r\n\r\n/** Represents the finished lookup table ready for submission to GPU.\r\n * @internal\r\n */\r\nexport class VertexLUT implements WebGLDisposable {\r\n public readonly texture: TextureHandle; // Texture containing vertex data\r\n public readonly numVertices: number;\r\n public readonly numRgbaPerVertex: number;\r\n public readonly colorInfo: ColorInfo;\r\n public readonly usesQuantizedPositions: boolean; // If true, positions are 16-bit integers quantized to qOrigin and qScale; otherwise they are unquantized 32-bit floats.\r\n public readonly qOrigin: Float32Array; // Origin of quantized range\r\n public readonly qScale: Float32Array; // Scale of quantized range\r\n public readonly uvQParams?: Float32Array; // If vertices contain texture UV params, quantization parameters as [origin.x, origin.y, scale.x, scale.y ]\r\n public readonly auxChannels?: AuxChannelLUT;\r\n\r\n public get hasAnimation() { return undefined !== this.auxChannels; }\r\n public get hasScalarAnimation() { return undefined !== this.auxChannels && this.auxChannels.hasScalarAnimation; }\r\n\r\n public get bytesUsed(): number {\r\n let bytesUsed = this.texture.bytesUsed;\r\n if (undefined !== this.auxChannels)\r\n bytesUsed += this.auxChannels.bytesUsed;\r\n\r\n return bytesUsed;\r\n }\r\n\r\n public static createFromVertexTable(vt: VertexTable, aux?: AuxChannelTable): VertexLUT | undefined {\r\n const texture = TextureHandle.createForData(vt.width, vt.height, vt.data);\r\n if (undefined === texture)\r\n return undefined;\r\n\r\n const auxLUT = undefined !== aux ? AuxChannelLUT.create(aux) : undefined;\r\n return new VertexLUT(texture, vt, ColorInfo.createFromVertexTable(vt), vt.qparams, !vt.usesUnquantizedPositions, vt.uvParams, auxLUT);\r\n }\r\n\r\n private constructor(texture: TextureHandle, table: VertexTable, colorInfo: ColorInfo, qparams: QParams3d, positionsAreQuantized: boolean, uvParams?: QParams2d, auxChannels?: AuxChannelLUT) {\r\n this.texture = texture;\r\n this.numVertices = table.numVertices;\r\n this.numRgbaPerVertex = table.numRgbaPerVertex;\r\n this.colorInfo = colorInfo;\r\n this.qOrigin = qorigin3dToArray(qparams.origin);\r\n this.qScale = qscale3dToArray(qparams.scale);\r\n this.usesQuantizedPositions = positionsAreQuantized;\r\n this.auxChannels = auxChannels;\r\n\r\n if (undefined !== uvParams)\r\n this.uvQParams = qparams2dToArray(uvParams);\r\n }\r\n\r\n public get isDisposed(): boolean { return this.texture.isDisposed; }\r\n\r\n public dispose() {\r\n dispose(this.texture);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"VertexLUT.js","sourceRoot":"","sources":["../../../../src/render/webgl/VertexLUT.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAI9C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAI1C,gBAAgB;AAChB,MAAM,OAAO,aAAa;IAQxB,YAAoB,OAAsB,EAAE,KAAsB;QAChE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QACrC,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,iBAAiB,CAAC;QAEjD,IAAI,CAAC,YAAY,CAAyB,KAAK,EAAE,eAAe,CAAC,CAAC;QAClE,IAAI,CAAC,YAAY,CAAa,KAAK,EAAE,SAAS,CAAC,CAAC;QAChD,IAAI,CAAC,YAAY,CAAkB,KAAK,EAAE,QAAQ,CAAC,CAAC;IACtD,CAAC;IAEO,YAAY,CAAuB,KAAsB,EAAE,IAAqB;QACtF,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,SAAS,KAAK,QAAQ;YACxB,OAAO;QAET,MAAM,GAAG,GAAG,IAAI,GAAG,EAAa,CAAC;QAEjC,0JAA0J;QAC1J,mIAAmI;QACnI,IAAI,CAAC,IAAI,CAAC,GAAG,GAAU,CAAC;QACxB,KAAK,MAAM,OAAO,IAAI,QAAQ;YAC5B,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAY,CAAC,CAAC;IACxC,CAAC;IAED,IAAW,SAAS,KAAa,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IACjE,IAAW,kBAAkB,KAAK,OAAO,SAAS,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAErE,IAAW,UAAU,KAAc,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IAE7D,OAAO;QACZ,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,KAAsB;QACzC,MAAM,OAAO,GAAG,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACnF,OAAO,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/E,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,SAAS;IAWpB,IAAW,YAAY,KAAK,OAAO,SAAS,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACpE,IAAW,kBAAkB,KAAK,OAAO,SAAS,KAAK,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAEjH,IAAW,SAAS;QAClB,IAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;QACvC,IAAI,SAAS,KAAK,IAAI,CAAC,WAAW;YAChC,SAAS,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;QAE1C,OAAO,SAAS,CAAC;IACnB,CAAC;IAEM,MAAM,CAAC,qBAAqB,CAAC,EAAe,EAAE,GAAqB;QACxE,MAAM,OAAO,GAAG,aAAa,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QAC1E,IAAI,SAAS,KAAK,OAAO;YACvB,OAAO,SAAS,CAAC;QAEnB,MAAM,MAAM,GAAG,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACzE,OAAO,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,EAAE,SAAS,CAAC,qBAAqB,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,wBAAwB,EAAE,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACxI,CAAC;IAED,YAAoB,OAAsB,EAAE,KAAkB,EAAE,SAAoB,EAAE,OAAkB,EAAE,qBAA8B,EAAE,QAAoB,EAAE,WAA2B;QACzL,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QACrC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;QAC/C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,sBAAsB,GAAG,qBAAqB,CAAC;QACpD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAE/B,IAAI,SAAS,KAAK,QAAQ;YACxB,IAAI,CAAC,SAAS,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED,IAAW,UAAU,KAAc,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IAE7D,OAAO;QACZ,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;CACF","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 { dispose } from \"@itwin/core-bentley\";\nimport { QParams2d, QParams3d } from \"@itwin/core-common\";\nimport { AuxChannel, AuxChannelTable, AuxDisplacementChannel, AuxParamChannel } from \"../../common/render/primitives/AuxChannelTable\";\nimport { VertexTable } from \"../../common/render/primitives/VertexTable\";\nimport { ColorInfo } from \"./ColorInfo\";\nimport { WebGLDisposable } from \"./Disposable\";\nimport { qorigin3dToArray, qparams2dToArray, qscale3dToArray } from \"./AttributeBuffers\";\nimport { TextureHandle } from \"./Texture\";\n\ntype ChannelPropName = \"normals\" | \"displacements\" | \"params\";\n\n/** @internal */\nexport class AuxChannelLUT implements WebGLDisposable {\n public readonly texture: TextureHandle;\n public readonly numVertices: number;\n public readonly numBytesPerVertex: number;\n public displacements?: Map<string, AuxDisplacementChannel>;\n public normals?: Map<string, AuxChannel>;\n public params?: Map<string, AuxParamChannel>;\n\n private constructor(texture: TextureHandle, table: AuxChannelTable) {\n this.texture = texture;\n this.numVertices = table.numVertices;\n this.numBytesPerVertex = table.numBytesPerVertex;\n\n this.initChannels<AuxDisplacementChannel>(table, \"displacements\");\n this.initChannels<AuxChannel>(table, \"normals\");\n this.initChannels<AuxParamChannel>(table, \"params\");\n }\n\n private initChannels<T extends AuxChannel>(table: AuxChannelTable, name: ChannelPropName): void {\n const channels = table[name];\n if (undefined === channels)\n return;\n\n const map = new Map<string, T>();\n\n // TS2322: Type 'Map<string, T>' is not assignable to type 'Map<string, AuxChannel> & Map<string, AuxDisplacementChannel> & Map<string, AuxParamChannel>'.\n // (Compiler cannot detect that the specific property name is matched to the correct subtype at each call site - but we know that).\n this[name] = map as any;\n for (const channel of channels)\n map.set(channel.name, channel as T);\n }\n\n public get bytesUsed(): number { return this.texture.bytesUsed; }\n public get hasScalarAnimation() { return undefined !== this.params; }\n\n public get isDisposed(): boolean { return this.texture.isDisposed; }\n\n public dispose() {\n dispose(this.texture);\n }\n\n public static create(table: AuxChannelTable): AuxChannelLUT | undefined {\n const texture = TextureHandle.createForData(table.width, table.height, table.data);\n return undefined !== texture ? new AuxChannelLUT(texture, table) : undefined;\n }\n}\n\n/** Represents the finished lookup table ready for submission to GPU.\n * @internal\n */\nexport class VertexLUT implements WebGLDisposable {\n public readonly texture: TextureHandle; // Texture containing vertex data\n public readonly numVertices: number;\n public readonly numRgbaPerVertex: number;\n public readonly colorInfo: ColorInfo;\n public readonly usesQuantizedPositions: boolean; // If true, positions are 16-bit integers quantized to qOrigin and qScale; otherwise they are unquantized 32-bit floats.\n public readonly qOrigin: Float32Array; // Origin of quantized range\n public readonly qScale: Float32Array; // Scale of quantized range\n public readonly uvQParams?: Float32Array; // If vertices contain texture UV params, quantization parameters as [origin.x, origin.y, scale.x, scale.y ]\n public readonly auxChannels?: AuxChannelLUT;\n\n public get hasAnimation() { return undefined !== this.auxChannels; }\n public get hasScalarAnimation() { return undefined !== this.auxChannels && this.auxChannels.hasScalarAnimation; }\n\n public get bytesUsed(): number {\n let bytesUsed = this.texture.bytesUsed;\n if (undefined !== this.auxChannels)\n bytesUsed += this.auxChannels.bytesUsed;\n\n return bytesUsed;\n }\n\n public static createFromVertexTable(vt: VertexTable, aux?: AuxChannelTable): VertexLUT | undefined {\n const texture = TextureHandle.createForData(vt.width, vt.height, vt.data);\n if (undefined === texture)\n return undefined;\n\n const auxLUT = undefined !== aux ? AuxChannelLUT.create(aux) : undefined;\n return new VertexLUT(texture, vt, ColorInfo.createFromVertexTable(vt), vt.qparams, !vt.usesUnquantizedPositions, vt.uvParams, auxLUT);\n }\n\n private constructor(texture: TextureHandle, table: VertexTable, colorInfo: ColorInfo, qparams: QParams3d, positionsAreQuantized: boolean, uvParams?: QParams2d, auxChannels?: AuxChannelLUT) {\n this.texture = texture;\n this.numVertices = table.numVertices;\n this.numRgbaPerVertex = table.numRgbaPerVertex;\n this.colorInfo = colorInfo;\n this.qOrigin = qorigin3dToArray(qparams.origin);\n this.qScale = qscale3dToArray(qparams.scale);\n this.usesQuantizedPositions = positionsAreQuantized;\n this.auxChannels = auxChannels;\n\n if (undefined !== uvParams)\n this.uvQParams = qparams2dToArray(uvParams);\n }\n\n public get isDisposed(): boolean { return this.texture.isDisposed; }\n\n public dispose() {\n dispose(this.texture);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ViewRectUniforms.js","sourceRoot":"","sources":["../../../../src/render/webgl/ViewRectUniforms.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 } from \"@itwin/core-geometry\";\r\nimport { UniformHandle } from \"./UniformHandle\";\r\nimport { Matrix4 } from \"./Matrix\";\r\nimport { desync, sync } from \"./Sync\";\r\n\r\n/** Maintains uniform variable state associated with a Target's ViewRect.\r\n * @internal\r\n */\r\nexport class ViewRectUniforms {\r\n public syncKey = 0;\r\n public readonly projectionMatrix = Matrix4d.createIdentity();\r\n\r\n public readonly projectionMatrix32 = new Matrix4();\r\n private readonly _dimensions = [ 0, 0 ];\r\n private readonly _inverseDimensions = [ 0, 0 ];\r\n private readonly _viewportMatrix = new Matrix4();\r\n\r\n public update(width: number, height: number): void {\r\n if (width === this.width && height === this.height)\r\n return;\r\n\r\n desync(this);\r\n this._dimensions[0] = width;\r\n this._dimensions[1] = height;\r\n\r\n Matrix4.fromOrtho(0.0, width, height, 0.0, -1.0, 1.0, this.projectionMatrix32);\r\n this.projectionMatrix32.toMatrix4d(this.projectionMatrix);\r\n\r\n this._inverseDimensions[0] = 1 / width;\r\n this._inverseDimensions[1] = 1 / height;\r\n\r\n const nearDepthRange = 0.0;\r\n const farDepthRange = 1.0;\r\n const x = 0;\r\n const y = 0;\r\n\r\n const halfWidth = width * 0.5;\r\n const halfHeight = height * 0.5;\r\n const halfDepth = (farDepthRange - nearDepthRange) * 0.5;\r\n\r\n const column0Row0 = halfWidth;\r\n const column1Row1 = halfHeight;\r\n const column2Row2 = halfDepth;\r\n const column3Row0 = x + halfWidth;\r\n const column3Row1 = y + halfHeight;\r\n const column3Row2 = nearDepthRange + halfDepth;\r\n const column3Row3 = 1.0;\r\n\r\n Matrix4.fromValues(\r\n column0Row0, 0.0, 0.0, column3Row0,\r\n 0.0, column1Row1, 0.0, column3Row1,\r\n 0.0, 0.0, column2Row2, column3Row2,\r\n 0.0, 0.0, 0.0, column3Row3,\r\n this._viewportMatrix);\r\n }\r\n\r\n public get width() { return this._dimensions[0]; }\r\n public get height() { return this._dimensions[1]; }\r\n\r\n public bindProjectionMatrix(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setMatrix4(this.projectionMatrix32);\r\n }\r\n\r\n public bindDimensions(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform2fv(this._dimensions);\r\n }\r\n\r\n public bindInverseDimensions(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform2fv(this._inverseDimensions);\r\n }\r\n\r\n public bindViewportMatrix(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setMatrix4(this._viewportMatrix);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ViewRectUniforms.js","sourceRoot":"","sources":["../../../../src/render/webgl/ViewRectUniforms.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 } from \"@itwin/core-geometry\";\nimport { UniformHandle } from \"./UniformHandle\";\nimport { Matrix4 } from \"./Matrix\";\nimport { desync, sync } from \"./Sync\";\n\n/** Maintains uniform variable state associated with a Target's ViewRect.\n * @internal\n */\nexport class ViewRectUniforms {\n public syncKey = 0;\n public readonly projectionMatrix = Matrix4d.createIdentity();\n\n public readonly projectionMatrix32 = new Matrix4();\n private readonly _dimensions = [ 0, 0 ];\n private readonly _inverseDimensions = [ 0, 0 ];\n private readonly _viewportMatrix = new Matrix4();\n\n public update(width: number, height: number): void {\n if (width === this.width && height === this.height)\n return;\n\n desync(this);\n this._dimensions[0] = width;\n this._dimensions[1] = height;\n\n Matrix4.fromOrtho(0.0, width, height, 0.0, -1.0, 1.0, this.projectionMatrix32);\n this.projectionMatrix32.toMatrix4d(this.projectionMatrix);\n\n this._inverseDimensions[0] = 1 / width;\n this._inverseDimensions[1] = 1 / height;\n\n const nearDepthRange = 0.0;\n const farDepthRange = 1.0;\n const x = 0;\n const y = 0;\n\n const halfWidth = width * 0.5;\n const halfHeight = height * 0.5;\n const halfDepth = (farDepthRange - nearDepthRange) * 0.5;\n\n const column0Row0 = halfWidth;\n const column1Row1 = halfHeight;\n const column2Row2 = halfDepth;\n const column3Row0 = x + halfWidth;\n const column3Row1 = y + halfHeight;\n const column3Row2 = nearDepthRange + halfDepth;\n const column3Row3 = 1.0;\n\n Matrix4.fromValues(\n column0Row0, 0.0, 0.0, column3Row0,\n 0.0, column1Row1, 0.0, column3Row1,\n 0.0, 0.0, column2Row2, column3Row2,\n 0.0, 0.0, 0.0, column3Row3,\n this._viewportMatrix);\n }\n\n public get width() { return this._dimensions[0]; }\n public get height() { return this._dimensions[1]; }\n\n public bindProjectionMatrix(uniform: UniformHandle): void {\n if (!sync(this, uniform))\n uniform.setMatrix4(this.projectionMatrix32);\n }\n\n public bindDimensions(uniform: UniformHandle): void {\n if (!sync(this, uniform))\n uniform.setUniform2fv(this._dimensions);\n }\n\n public bindInverseDimensions(uniform: UniformHandle): void {\n if (!sync(this, uniform))\n uniform.setUniform2fv(this._inverseDimensions);\n }\n\n public bindViewportMatrix(uniform: UniformHandle): void {\n if (!sync(this, uniform))\n uniform.setMatrix4(this._viewportMatrix);\n }\n}\n"]}