@itwin/core-frontend 3.3.0-dev.9 → 3.3.2

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 (358) hide show
  1. package/CHANGELOG.md +90 -1
  2. package/lib/cjs/DisplayStyleState.d.ts +80 -31
  3. package/lib/cjs/DisplayStyleState.d.ts.map +1 -1
  4. package/lib/cjs/DisplayStyleState.js +150 -89
  5. package/lib/cjs/DisplayStyleState.js.map +1 -1
  6. package/lib/cjs/DrawingViewState.js +1 -1
  7. package/lib/cjs/DrawingViewState.js.map +1 -1
  8. package/lib/cjs/EmphasizeElements.d.ts.map +1 -1
  9. package/lib/cjs/EmphasizeElements.js +5 -0
  10. package/lib/cjs/EmphasizeElements.js.map +1 -1
  11. package/lib/cjs/EntityState.d.ts +5 -5
  12. package/lib/cjs/EntityState.d.ts.map +1 -1
  13. package/lib/cjs/EntityState.js.map +1 -1
  14. package/lib/cjs/IModelApp.d.ts +5 -0
  15. package/lib/cjs/IModelApp.d.ts.map +1 -1
  16. package/lib/cjs/IModelApp.js +16 -12
  17. package/lib/cjs/IModelApp.js.map +1 -1
  18. package/lib/cjs/IModelConnection.d.ts +43 -3
  19. package/lib/cjs/IModelConnection.d.ts.map +1 -1
  20. package/lib/cjs/IModelConnection.js +29 -3
  21. package/lib/cjs/IModelConnection.js.map +1 -1
  22. package/lib/cjs/LocalhostIpcApp.d.ts.map +1 -1
  23. package/lib/cjs/LocalhostIpcApp.js +10 -0
  24. package/lib/cjs/LocalhostIpcApp.js.map +1 -1
  25. package/lib/cjs/NoRenderApp.d.ts.map +1 -1
  26. package/lib/cjs/NoRenderApp.js +1 -0
  27. package/lib/cjs/NoRenderApp.js.map +1 -1
  28. package/lib/cjs/RealityDataSource.d.ts.map +1 -1
  29. package/lib/cjs/RealityDataSource.js +6 -2
  30. package/lib/cjs/RealityDataSource.js.map +1 -1
  31. package/lib/cjs/SelectionSet.d.ts +30 -4
  32. package/lib/cjs/SelectionSet.d.ts.map +1 -1
  33. package/lib/cjs/SelectionSet.js +26 -2
  34. package/lib/cjs/SelectionSet.js.map +1 -1
  35. package/lib/cjs/SheetViewState.js +1 -1
  36. package/lib/cjs/SheetViewState.js.map +1 -1
  37. package/lib/cjs/SubCategoriesCache.d.ts +3 -0
  38. package/lib/cjs/SubCategoriesCache.d.ts.map +1 -1
  39. package/lib/cjs/SubCategoriesCache.js +34 -0
  40. package/lib/cjs/SubCategoriesCache.js.map +1 -1
  41. package/lib/cjs/TentativePoint.js +1 -1
  42. package/lib/cjs/TentativePoint.js.map +1 -1
  43. package/lib/cjs/ViewState.d.ts +2 -3
  44. package/lib/cjs/ViewState.d.ts.map +1 -1
  45. package/lib/cjs/ViewState.js +7 -3
  46. package/lib/cjs/ViewState.js.map +1 -1
  47. package/lib/cjs/Viewport.d.ts +10 -10
  48. package/lib/cjs/Viewport.d.ts.map +1 -1
  49. package/lib/cjs/Viewport.js +19 -14
  50. package/lib/cjs/Viewport.js.map +1 -1
  51. package/lib/cjs/core-frontend.d.ts +0 -2
  52. package/lib/cjs/core-frontend.d.ts.map +1 -1
  53. package/lib/cjs/core-frontend.js +0 -2
  54. package/lib/cjs/core-frontend.js.map +1 -1
  55. package/lib/cjs/extension/ExtensionAdmin.d.ts +5 -2
  56. package/lib/cjs/extension/ExtensionAdmin.d.ts.map +1 -1
  57. package/lib/cjs/extension/ExtensionAdmin.js +24 -6
  58. package/lib/cjs/extension/ExtensionAdmin.js.map +1 -1
  59. package/lib/cjs/extension/providers/RemoteExtensionProvider.d.ts +0 -2
  60. package/lib/cjs/extension/providers/RemoteExtensionProvider.d.ts.map +1 -1
  61. package/lib/cjs/extension/providers/RemoteExtensionProvider.js +9 -22
  62. package/lib/cjs/extension/providers/RemoteExtensionProvider.js.map +1 -1
  63. package/lib/cjs/render/FeatureSymbology.js +2 -2
  64. package/lib/cjs/render/FeatureSymbology.js.map +1 -1
  65. package/lib/cjs/render/GraphicBranch.d.ts +15 -9
  66. package/lib/cjs/render/GraphicBranch.d.ts.map +1 -1
  67. package/lib/cjs/render/GraphicBranch.js +38 -1
  68. package/lib/cjs/render/GraphicBranch.js.map +1 -1
  69. package/lib/cjs/render/RenderSystem.d.ts +5 -0
  70. package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
  71. package/lib/cjs/render/RenderSystem.js.map +1 -1
  72. package/lib/cjs/render/primitives/EdgeParams.d.ts +11 -0
  73. package/lib/cjs/render/primitives/EdgeParams.d.ts.map +1 -1
  74. package/lib/cjs/render/primitives/EdgeParams.js +36 -29
  75. package/lib/cjs/render/primitives/EdgeParams.js.map +1 -1
  76. package/lib/cjs/render/primitives/VertexTable.d.ts +11 -4
  77. package/lib/cjs/render/primitives/VertexTable.d.ts.map +1 -1
  78. package/lib/cjs/render/primitives/VertexTable.js +13 -6
  79. package/lib/cjs/render/primitives/VertexTable.js.map +1 -1
  80. package/lib/cjs/render/primitives/VertexTableSplitter.d.ts +41 -0
  81. package/lib/cjs/render/primitives/VertexTableSplitter.d.ts.map +1 -0
  82. package/lib/cjs/render/primitives/VertexTableSplitter.js +662 -0
  83. package/lib/cjs/render/primitives/VertexTableSplitter.js.map +1 -0
  84. package/lib/cjs/render/primitives/geometry/GeometryListBuilder.d.ts.map +1 -1
  85. package/lib/cjs/render/primitives/geometry/GeometryListBuilder.js +3 -1
  86. package/lib/cjs/render/primitives/geometry/GeometryListBuilder.js.map +1 -1
  87. package/lib/cjs/render/webgl/DrawCommand.js +1 -1
  88. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  89. package/lib/cjs/render/webgl/FeatureOverrides.d.ts +4 -1
  90. package/lib/cjs/render/webgl/FeatureOverrides.d.ts.map +1 -1
  91. package/lib/cjs/render/webgl/FeatureOverrides.js +56 -26
  92. package/lib/cjs/render/webgl/FeatureOverrides.js.map +1 -1
  93. package/lib/cjs/render/webgl/RealityMesh.d.ts +1 -1
  94. package/lib/cjs/render/webgl/RealityMesh.d.ts.map +1 -1
  95. package/lib/cjs/render/webgl/RealityMesh.js +0 -2
  96. package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
  97. package/lib/cjs/render/webgl/ShaderProgram.js +1 -1
  98. package/lib/cjs/render/webgl/ShaderProgram.js.map +1 -1
  99. package/lib/cjs/render/webgl/Target.d.ts +2 -1
  100. package/lib/cjs/render/webgl/Target.d.ts.map +1 -1
  101. package/lib/cjs/render/webgl/Target.js +1 -0
  102. package/lib/cjs/render/webgl/Target.js.map +1 -1
  103. package/lib/cjs/render/webgl/UniformHandle.d.ts +2 -1
  104. package/lib/cjs/render/webgl/UniformHandle.d.ts.map +1 -1
  105. package/lib/cjs/render/webgl/UniformHandle.js +15 -3
  106. package/lib/cjs/render/webgl/UniformHandle.js.map +1 -1
  107. package/lib/cjs/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  108. package/lib/cjs/render/webgl/glsl/RealityMesh.js +5 -2
  109. package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
  110. package/lib/cjs/render-primitives.d.ts +1 -0
  111. package/lib/cjs/render-primitives.d.ts.map +1 -1
  112. package/lib/cjs/render-primitives.js +1 -0
  113. package/lib/cjs/render-primitives.js.map +1 -1
  114. package/lib/cjs/tile/ClassifierTileTree.d.ts.map +1 -1
  115. package/lib/cjs/tile/ClassifierTileTree.js +8 -8
  116. package/lib/cjs/tile/ClassifierTileTree.js.map +1 -1
  117. package/lib/cjs/tile/IModelTile.d.ts.map +1 -1
  118. package/lib/cjs/tile/IModelTile.js +1 -0
  119. package/lib/cjs/tile/IModelTile.js.map +1 -1
  120. package/lib/cjs/tile/IModelTileTree.d.ts +3 -1
  121. package/lib/cjs/tile/IModelTileTree.d.ts.map +1 -1
  122. package/lib/cjs/tile/IModelTileTree.js +1 -0
  123. package/lib/cjs/tile/IModelTileTree.js.map +1 -1
  124. package/lib/cjs/tile/ImdlReader.d.ts +9 -4
  125. package/lib/cjs/tile/ImdlReader.d.ts.map +1 -1
  126. package/lib/cjs/tile/ImdlReader.js +174 -60
  127. package/lib/cjs/tile/ImdlReader.js.map +1 -1
  128. package/lib/cjs/tile/PrimaryTileTree.d.ts +8 -7
  129. package/lib/cjs/tile/PrimaryTileTree.d.ts.map +1 -1
  130. package/lib/cjs/tile/PrimaryTileTree.js +30 -25
  131. package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
  132. package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
  133. package/lib/cjs/tile/RealityTileTree.js +1 -0
  134. package/lib/cjs/tile/RealityTileTree.js.map +1 -1
  135. package/lib/cjs/tile/TileAdmin.d.ts +21 -2
  136. package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
  137. package/lib/cjs/tile/TileAdmin.js +32 -12
  138. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  139. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  140. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +46 -2
  141. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  142. package/lib/cjs/tile/map/MapCartoRectangle.d.ts +1 -0
  143. package/lib/cjs/tile/map/MapCartoRectangle.d.ts.map +1 -1
  144. package/lib/cjs/tile/map/MapCartoRectangle.js +1 -0
  145. package/lib/cjs/tile/map/MapCartoRectangle.js.map +1 -1
  146. package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts +2 -1
  147. package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
  148. package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
  149. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts +2 -0
  150. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  151. package/lib/cjs/tile/map/MapLayerImageryProvider.js +23 -9
  152. package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
  153. package/lib/cjs/tile/map/MapLayerSources.d.ts +14 -9
  154. package/lib/cjs/tile/map/MapLayerSources.d.ts.map +1 -1
  155. package/lib/cjs/tile/map/MapLayerSources.js +14 -6
  156. package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
  157. package/lib/cjs/tools/ClipViewTool.d.ts.map +1 -1
  158. package/lib/cjs/tools/ClipViewTool.js +25 -2
  159. package/lib/cjs/tools/ClipViewTool.js.map +1 -1
  160. package/lib/cjs/tools/PrimitiveTool.js +4 -4
  161. package/lib/cjs/tools/PrimitiveTool.js.map +1 -1
  162. package/lib/cjs/tools/Tool.d.ts +7 -7
  163. package/lib/cjs/tools/Tool.js +7 -7
  164. package/lib/cjs/tools/Tool.js.map +1 -1
  165. package/lib/cjs/tools/ToolAdmin.d.ts.map +1 -1
  166. package/lib/cjs/tools/ToolAdmin.js +25 -10
  167. package/lib/cjs/tools/ToolAdmin.js.map +1 -1
  168. package/lib/esm/DisplayStyleState.d.ts +80 -31
  169. package/lib/esm/DisplayStyleState.d.ts.map +1 -1
  170. package/lib/esm/DisplayStyleState.js +150 -89
  171. package/lib/esm/DisplayStyleState.js.map +1 -1
  172. package/lib/esm/DrawingViewState.js +1 -1
  173. package/lib/esm/DrawingViewState.js.map +1 -1
  174. package/lib/esm/EmphasizeElements.d.ts.map +1 -1
  175. package/lib/esm/EmphasizeElements.js +5 -0
  176. package/lib/esm/EmphasizeElements.js.map +1 -1
  177. package/lib/esm/EntityState.d.ts +5 -5
  178. package/lib/esm/EntityState.d.ts.map +1 -1
  179. package/lib/esm/EntityState.js.map +1 -1
  180. package/lib/esm/IModelApp.d.ts +5 -0
  181. package/lib/esm/IModelApp.d.ts.map +1 -1
  182. package/lib/esm/IModelApp.js +16 -12
  183. package/lib/esm/IModelApp.js.map +1 -1
  184. package/lib/esm/IModelConnection.d.ts +43 -3
  185. package/lib/esm/IModelConnection.d.ts.map +1 -1
  186. package/lib/esm/IModelConnection.js +29 -3
  187. package/lib/esm/IModelConnection.js.map +1 -1
  188. package/lib/esm/LocalhostIpcApp.d.ts.map +1 -1
  189. package/lib/esm/LocalhostIpcApp.js +11 -1
  190. package/lib/esm/LocalhostIpcApp.js.map +1 -1
  191. package/lib/esm/NoRenderApp.d.ts.map +1 -1
  192. package/lib/esm/NoRenderApp.js +1 -0
  193. package/lib/esm/NoRenderApp.js.map +1 -1
  194. package/lib/esm/RealityDataSource.d.ts.map +1 -1
  195. package/lib/esm/RealityDataSource.js +6 -2
  196. package/lib/esm/RealityDataSource.js.map +1 -1
  197. package/lib/esm/SelectionSet.d.ts +30 -4
  198. package/lib/esm/SelectionSet.d.ts.map +1 -1
  199. package/lib/esm/SelectionSet.js +26 -2
  200. package/lib/esm/SelectionSet.js.map +1 -1
  201. package/lib/esm/SheetViewState.js +1 -1
  202. package/lib/esm/SheetViewState.js.map +1 -1
  203. package/lib/esm/SubCategoriesCache.d.ts +3 -0
  204. package/lib/esm/SubCategoriesCache.d.ts.map +1 -1
  205. package/lib/esm/SubCategoriesCache.js +34 -0
  206. package/lib/esm/SubCategoriesCache.js.map +1 -1
  207. package/lib/esm/TentativePoint.js +1 -1
  208. package/lib/esm/TentativePoint.js.map +1 -1
  209. package/lib/esm/ViewState.d.ts +2 -3
  210. package/lib/esm/ViewState.d.ts.map +1 -1
  211. package/lib/esm/ViewState.js +7 -3
  212. package/lib/esm/ViewState.js.map +1 -1
  213. package/lib/esm/Viewport.d.ts +10 -10
  214. package/lib/esm/Viewport.d.ts.map +1 -1
  215. package/lib/esm/Viewport.js +19 -14
  216. package/lib/esm/Viewport.js.map +1 -1
  217. package/lib/esm/core-frontend.d.ts +0 -2
  218. package/lib/esm/core-frontend.d.ts.map +1 -1
  219. package/lib/esm/core-frontend.js +0 -2
  220. package/lib/esm/core-frontend.js.map +1 -1
  221. package/lib/esm/extension/ExtensionAdmin.d.ts +5 -2
  222. package/lib/esm/extension/ExtensionAdmin.d.ts.map +1 -1
  223. package/lib/esm/extension/ExtensionAdmin.js +24 -6
  224. package/lib/esm/extension/ExtensionAdmin.js.map +1 -1
  225. package/lib/esm/extension/providers/RemoteExtensionProvider.d.ts +0 -2
  226. package/lib/esm/extension/providers/RemoteExtensionProvider.d.ts.map +1 -1
  227. package/lib/esm/extension/providers/RemoteExtensionProvider.js +9 -22
  228. package/lib/esm/extension/providers/RemoteExtensionProvider.js.map +1 -1
  229. package/lib/esm/render/FeatureSymbology.js +2 -2
  230. package/lib/esm/render/FeatureSymbology.js.map +1 -1
  231. package/lib/esm/render/GraphicBranch.d.ts +15 -9
  232. package/lib/esm/render/GraphicBranch.d.ts.map +1 -1
  233. package/lib/esm/render/GraphicBranch.js +36 -0
  234. package/lib/esm/render/GraphicBranch.js.map +1 -1
  235. package/lib/esm/render/RenderSystem.d.ts +5 -0
  236. package/lib/esm/render/RenderSystem.d.ts.map +1 -1
  237. package/lib/esm/render/RenderSystem.js.map +1 -1
  238. package/lib/esm/render/primitives/EdgeParams.d.ts +11 -0
  239. package/lib/esm/render/primitives/EdgeParams.d.ts.map +1 -1
  240. package/lib/esm/render/primitives/EdgeParams.js +34 -28
  241. package/lib/esm/render/primitives/EdgeParams.js.map +1 -1
  242. package/lib/esm/render/primitives/VertexTable.d.ts +11 -4
  243. package/lib/esm/render/primitives/VertexTable.d.ts.map +1 -1
  244. package/lib/esm/render/primitives/VertexTable.js +14 -7
  245. package/lib/esm/render/primitives/VertexTable.js.map +1 -1
  246. package/lib/esm/render/primitives/VertexTableSplitter.d.ts +41 -0
  247. package/lib/esm/render/primitives/VertexTableSplitter.d.ts.map +1 -0
  248. package/lib/esm/render/primitives/VertexTableSplitter.js +655 -0
  249. package/lib/esm/render/primitives/VertexTableSplitter.js.map +1 -0
  250. package/lib/esm/render/primitives/geometry/GeometryListBuilder.d.ts.map +1 -1
  251. package/lib/esm/render/primitives/geometry/GeometryListBuilder.js +3 -1
  252. package/lib/esm/render/primitives/geometry/GeometryListBuilder.js.map +1 -1
  253. package/lib/esm/render/webgl/DrawCommand.js +1 -1
  254. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  255. package/lib/esm/render/webgl/FeatureOverrides.d.ts +4 -1
  256. package/lib/esm/render/webgl/FeatureOverrides.d.ts.map +1 -1
  257. package/lib/esm/render/webgl/FeatureOverrides.js +56 -26
  258. package/lib/esm/render/webgl/FeatureOverrides.js.map +1 -1
  259. package/lib/esm/render/webgl/RealityMesh.d.ts +1 -1
  260. package/lib/esm/render/webgl/RealityMesh.d.ts.map +1 -1
  261. package/lib/esm/render/webgl/RealityMesh.js +0 -2
  262. package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
  263. package/lib/esm/render/webgl/ShaderProgram.js +1 -1
  264. package/lib/esm/render/webgl/ShaderProgram.js.map +1 -1
  265. package/lib/esm/render/webgl/Target.d.ts +2 -1
  266. package/lib/esm/render/webgl/Target.d.ts.map +1 -1
  267. package/lib/esm/render/webgl/Target.js +1 -0
  268. package/lib/esm/render/webgl/Target.js.map +1 -1
  269. package/lib/esm/render/webgl/UniformHandle.d.ts +2 -1
  270. package/lib/esm/render/webgl/UniformHandle.d.ts.map +1 -1
  271. package/lib/esm/render/webgl/UniformHandle.js +15 -3
  272. package/lib/esm/render/webgl/UniformHandle.js.map +1 -1
  273. package/lib/esm/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  274. package/lib/esm/render/webgl/glsl/RealityMesh.js +5 -2
  275. package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
  276. package/lib/esm/render-primitives.d.ts +1 -0
  277. package/lib/esm/render-primitives.d.ts.map +1 -1
  278. package/lib/esm/render-primitives.js +1 -0
  279. package/lib/esm/render-primitives.js.map +1 -1
  280. package/lib/esm/tile/ClassifierTileTree.d.ts.map +1 -1
  281. package/lib/esm/tile/ClassifierTileTree.js +10 -10
  282. package/lib/esm/tile/ClassifierTileTree.js.map +1 -1
  283. package/lib/esm/tile/IModelTile.d.ts.map +1 -1
  284. package/lib/esm/tile/IModelTile.js +1 -0
  285. package/lib/esm/tile/IModelTile.js.map +1 -1
  286. package/lib/esm/tile/IModelTileTree.d.ts +3 -1
  287. package/lib/esm/tile/IModelTileTree.d.ts.map +1 -1
  288. package/lib/esm/tile/IModelTileTree.js +1 -0
  289. package/lib/esm/tile/IModelTileTree.js.map +1 -1
  290. package/lib/esm/tile/ImdlReader.d.ts +9 -4
  291. package/lib/esm/tile/ImdlReader.d.ts.map +1 -1
  292. package/lib/esm/tile/ImdlReader.js +174 -60
  293. package/lib/esm/tile/ImdlReader.js.map +1 -1
  294. package/lib/esm/tile/PrimaryTileTree.d.ts +8 -7
  295. package/lib/esm/tile/PrimaryTileTree.d.ts.map +1 -1
  296. package/lib/esm/tile/PrimaryTileTree.js +31 -26
  297. package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
  298. package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
  299. package/lib/esm/tile/RealityTileTree.js +1 -0
  300. package/lib/esm/tile/RealityTileTree.js.map +1 -1
  301. package/lib/esm/tile/TileAdmin.d.ts +21 -2
  302. package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
  303. package/lib/esm/tile/TileAdmin.js +33 -13
  304. package/lib/esm/tile/TileAdmin.js.map +1 -1
  305. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  306. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +46 -2
  307. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  308. package/lib/esm/tile/map/MapCartoRectangle.d.ts +1 -0
  309. package/lib/esm/tile/map/MapCartoRectangle.d.ts.map +1 -1
  310. package/lib/esm/tile/map/MapCartoRectangle.js +1 -0
  311. package/lib/esm/tile/map/MapCartoRectangle.js.map +1 -1
  312. package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts +2 -1
  313. package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
  314. package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
  315. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts +2 -0
  316. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  317. package/lib/esm/tile/map/MapLayerImageryProvider.js +24 -10
  318. package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
  319. package/lib/esm/tile/map/MapLayerSources.d.ts +14 -9
  320. package/lib/esm/tile/map/MapLayerSources.d.ts.map +1 -1
  321. package/lib/esm/tile/map/MapLayerSources.js +14 -6
  322. package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
  323. package/lib/esm/tools/ClipViewTool.d.ts.map +1 -1
  324. package/lib/esm/tools/ClipViewTool.js +25 -2
  325. package/lib/esm/tools/ClipViewTool.js.map +1 -1
  326. package/lib/esm/tools/PrimitiveTool.js +4 -4
  327. package/lib/esm/tools/PrimitiveTool.js.map +1 -1
  328. package/lib/esm/tools/Tool.d.ts +7 -7
  329. package/lib/esm/tools/Tool.js +7 -7
  330. package/lib/esm/tools/Tool.js.map +1 -1
  331. package/lib/esm/tools/ToolAdmin.d.ts.map +1 -1
  332. package/lib/esm/tools/ToolAdmin.js +25 -10
  333. package/lib/esm/tools/ToolAdmin.js.map +1 -1
  334. package/package.json +27 -27
  335. package/lib/cjs/RenderScheduleState.d.ts +0 -24
  336. package/lib/cjs/RenderScheduleState.d.ts.map +0 -1
  337. package/lib/cjs/RenderScheduleState.js +0 -76
  338. package/lib/cjs/RenderScheduleState.js.map +0 -1
  339. package/lib/cjs/extension/providers/ExtensionServiceClient.d.ts +0 -52
  340. package/lib/cjs/extension/providers/ExtensionServiceClient.d.ts.map +0 -1
  341. package/lib/cjs/extension/providers/ExtensionServiceClient.js +0 -131
  342. package/lib/cjs/extension/providers/ExtensionServiceClient.js.map +0 -1
  343. package/lib/cjs/extension/providers/ServiceExtensionProvider.d.ts +0 -37
  344. package/lib/cjs/extension/providers/ServiceExtensionProvider.d.ts.map +0 -1
  345. package/lib/cjs/extension/providers/ServiceExtensionProvider.js +0 -84
  346. package/lib/cjs/extension/providers/ServiceExtensionProvider.js.map +0 -1
  347. package/lib/esm/RenderScheduleState.d.ts +0 -24
  348. package/lib/esm/RenderScheduleState.d.ts.map +0 -1
  349. package/lib/esm/RenderScheduleState.js +0 -71
  350. package/lib/esm/RenderScheduleState.js.map +0 -1
  351. package/lib/esm/extension/providers/ExtensionServiceClient.d.ts +0 -52
  352. package/lib/esm/extension/providers/ExtensionServiceClient.d.ts.map +0 -1
  353. package/lib/esm/extension/providers/ExtensionServiceClient.js +0 -127
  354. package/lib/esm/extension/providers/ExtensionServiceClient.js.map +0 -1
  355. package/lib/esm/extension/providers/ServiceExtensionProvider.d.ts +0 -37
  356. package/lib/esm/extension/providers/ServiceExtensionProvider.d.ts.map +0 -1
  357. package/lib/esm/extension/providers/ServiceExtensionProvider.js +0 -80
  358. package/lib/esm/extension/providers/ServiceExtensionProvider.js.map +0 -1
@@ -6,6 +6,8 @@
6
6
  * @module WebGL
7
7
  */
8
8
  import { assert } from "@itwin/core-bentley";
9
+ import { Logger } from "@itwin/core-bentley/lib/cjs/Logger";
10
+ import { FrontendLoggerCategory } from "../../FrontendLoggerCategory";
9
11
  import { System } from "./System";
10
12
  /** A handle to the location of a uniform within a shader program
11
13
  * @internal
@@ -17,9 +19,19 @@ export class UniformHandle {
17
19
  this._location = location;
18
20
  }
19
21
  static create(program, name) {
20
- const location = System.instance.context.getUniformLocation(program, name);
21
- if (null === location)
22
- throw new Error(`uniform ${name} not found.`);
22
+ let location = null;
23
+ if (undefined !== program.glProgram) {
24
+ location = System.instance.context.getUniformLocation(program.glProgram, name);
25
+ }
26
+ if (null === location) {
27
+ const errMsg = `uniform ${name} not found in ${program.description}.`;
28
+ if (System.instance.options.errorOnMissingUniform) {
29
+ throw new Error(errMsg);
30
+ }
31
+ else {
32
+ Logger.logError(FrontendLoggerCategory.Render, errMsg);
33
+ }
34
+ }
23
35
  return new UniformHandle(location);
24
36
  }
25
37
  updateData(type, data) {
@@ -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 } from \"@itwin/core-bentley\";\r\nimport { Matrix3, Matrix4 } from \"./Matrix\";\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;\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) { this._location = location; }\r\n\r\n public static create(program: WebGLProgram, name: string): UniformHandle {\r\n const location = System.instance.context.getUniformLocation(program, name);\r\n if (null === location)\r\n throw new Error(`uniform ${name} not found.`);\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 as WebGL2RenderingContext).uniform1ui(this._location, data);\r\n }\r\n\r\n public setUniformBitflags(data: number) {\r\n if (System.instance.capabilities.isWebGL2)\r\n this.setUniform1ui(data);\r\n else\r\n this.setUniform1f(data);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"UniformHandle.js","sourceRoot":"","sources":["../../../../src/render/webgl/UniformHandle.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAItE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAgBlC;;GAEG;AACH,MAAM,OAAO,aAAa;IAMxB,YAAoB,QAAqC;QAJjD,UAAK,qBAAgC;QAC5B,UAAK,GAAa,EAAE,CAAC;QAGuB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAAC,CAAC;IAElF,MAAM,CAAC,MAAM,CAAC,OAAsB,EAAE,IAAY;QACvD,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,IAAI,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE;YACnC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;SAChF;QACD,IAAI,IAAI,KAAK,QAAQ,EAAE;YACrB,MAAM,MAAM,GAAG,WAAW,IAAI,iBAAiB,OAAO,CAAC,WAAW,GAAG,CAAC;YACtE,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE;gBACjD,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;aACzB;iBAAM;gBACL,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;aACxD;SACF;QACD,OAAO,IAAI,aAAa,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAEO,UAAU,CAAC,IAAc,EAAE,IAA0C;QAC3E,MAAM,CAAC,sBAAuB,IAAI,IAAI,gBAAiB,IAAI,IAAI,kBAAmB,IAAI,IAAI,kBAAkB,IAAI,CAAC,CAAC;QAElH,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC;QAClC,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;gBACnC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;SACnC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACtB,OAAO,GAAG,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC;YAC7C,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;SACvB;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,WAAW,CAAC,IAAc,EAAE,KAAa;QAC/C,MAAM,CAAC,gBAAiB,IAAI,IAAI,kBAAkB,IAAI,IAAI,kBAAmB,IAAI,CAAC,CAAC;QAEnF,wHAAwH;QACxH,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YACzB,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAExB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC;QAC/D,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QAEtB,OAAO,OAAO,CAAC;IACjB,CAAC;IAEM,UAAU,CAAC,GAAY;QAC5B,IAAI,IAAI,CAAC,UAAU,eAAgB,GAAG,CAAC,IAAI,CAAC;YAC1C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9E,CAAC;IAEM,UAAU,CAAC,GAAY;QAC5B,IAAI,IAAI,CAAC,UAAU,eAAgB,GAAG,CAAC,IAAI,CAAC;YAC1C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9E,CAAC;IAEM,aAAa,CAAC,IAA2B;QAC9C,IAAI,IAAI,CAAC,UAAU,mBAAoB,IAAI,CAAC;YAC1C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;IAEM,aAAa,CAAC,IAA6B;QAChD,IAAI,IAAI,CAAC,UAAU,qBAAsB,IAAI,CAAC;YAC5C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;IAEM,aAAa,CAAC,IAA6B;QAChD,IAAI,IAAI,CAAC,UAAU,eAAgB,IAAI,CAAC;YACtC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;IAEM,aAAa,CAAC,IAA6B;QAChD,IAAI,IAAI,CAAC,UAAU,eAAgB,IAAI,CAAC;YACtC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;IAEM,aAAa,CAAC,IAA6B;QAChD,IAAI,IAAI,CAAC,UAAU,eAAgB,IAAI,CAAC;YACtC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;IAEM,YAAY,CAAC,IAAY;QAC9B,IAAI,IAAI,CAAC,WAAW,cAAe,IAAI,CAAC;YACtC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC;IAEM,YAAY,CAAC,IAAY;QAC9B,IAAI,IAAI,CAAC,WAAW,gBAAiB,IAAI,CAAC;YACxC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC;IAEM,aAAa,CAAC,IAAY;QAC/B,IAAI,IAAI,CAAC,WAAW,gBAAgB,IAAI,CAAC;YACtC,MAAM,CAAC,QAAQ,CAAC,OAAkC,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACzF,CAAC;IAEM,kBAAkB,CAAC,IAAY;QACpC,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ;YACvC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;;YAEzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC5B,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\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { Logger } from \"@itwin/core-bentley/lib/cjs/Logger\";\r\nimport { FrontendLoggerCategory } from \"../../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 as WebGL2RenderingContext).uniform1ui(this._location, data);\r\n }\r\n\r\n public setUniformBitflags(data: number) {\r\n if (System.instance.capabilities.isWebGL2)\r\n this.setUniform1ui(data);\r\n else\r\n this.setUniform1f(data);\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"RealityMesh.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/RealityMesh.ts"],"names":[],"mappings":"AAIA;;GAEG;AAQH,OAAO,EAAkD,cAAc,EAAuC,MAAM,kBAAkB,CAAC;AAEvI,OAAO,EAAsD,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAwOvG,gBAAgB;AAChB,wBAAgB,kCAAkC,IAAI,cAAc,CAInE;AAED,gBAAgB;AAChB,wBAAgB,wBAAwB,IAAI,cAAc,CAIzD;AAED,gBAAgB;AAChB,MAAM,CAAC,OAAO,UAAU,wBAAwB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CA2EtF"}
1
+ {"version":3,"file":"RealityMesh.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/RealityMesh.ts"],"names":[],"mappings":"AAIA;;GAEG;AAQH,OAAO,EAAkD,cAAc,EAAuC,MAAM,kBAAkB,CAAC;AAEvI,OAAO,EAAsD,cAAc,EAAE,MAAM,mBAAmB,CAAC;AA2OvG,gBAAgB;AAChB,wBAAgB,kCAAkC,IAAI,cAAc,CAInE;AAED,gBAAgB;AAChB,wBAAgB,wBAAwB,IAAI,cAAc,CAIzD;AAED,gBAAgB;AAChB,MAAM,CAAC,OAAO,UAAU,wBAAwB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CA2EtF"}
@@ -176,8 +176,11 @@ function baseColorFromTextures(textureCount, applyFeatureColor) {
176
176
  for (let i = 0; i < textureCount; i++)
177
177
  applyTextureStrings.push(`if (applyTexture(col, s_texture${i}, u_texParams${i}, u_texMatrix${i})) doDiscard = false; `);
178
178
  return `
179
- if (!u_texturesPresent)
180
- return u_baseColor;
179
+ if (!u_texturesPresent) {
180
+ vec4 col = u_baseColor;
181
+ ${applyFeatureColor}
182
+ return col;
183
+ }
181
184
 
182
185
  bool doDiscard = true;
183
186
  vec4 col = u_baseColor;
@@ -1 +1 @@
1
- {"version":3,"file":"RealityMesh.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/RealityMesh.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { ColorDef } from \"@itwin/core-common\";\r\nimport { Matrix4d } from \"@itwin/core-geometry\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { Matrix4 } from \"../Matrix\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderBuilder, FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { FeatureMode, IsInstanced, IsShadowable, IsThematic, TechniqueFlags } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { Texture } from \"../Texture\";\r\nimport { addVaryingColor } from \"./Color\";\r\nimport { addEyeSpace, addShaderFlags, addUInt32s } from \"./Common\";\r\nimport { decodeDepthRgb, unquantize2d } from \"./Decode\";\r\nimport { addFeatureSymbology, addHiliter, FeatureSymbologyOptions } from \"./FeatureSymbology\";\r\nimport { addAltPickBufferOutputs, addPickBufferOutputs, assignFragColor } from \"./Fragment\";\r\nimport { addColorPlanarClassifier, addFeaturePlanarClassifier, addHilitePlanarClassifier } from \"./PlanarClassification\";\r\nimport { addSolarShadowMap } from \"./SolarShadowMapping\";\r\nimport { addClassificationTranslucencyDiscard, octDecodeNormal } from \"./Surface\";\r\nimport { addThematicDisplay, getComputeThematicIndex } from \"./Thematic\";\r\nimport { addModelViewProjectionMatrix, addNormalMatrix } from \"./Vertex\";\r\nimport { addWiremesh } from \"./Wiremesh\";\r\n\r\nconst computePosition = \"gl_PointSize = 1.0; return MAT_MVP * rawPos;\";\r\nconst computeNormal = `\r\n vec3 normal = octDecodeNormal(a_norm); // normal coming in for is already in world space\r\n g_hillshadeIndex = normal.z; // save off world Z for thematic hill shade mode index\r\n return normalize(u_worldToViewN * normal);\r\n`;\r\n\r\nconst testInside = `\r\nbool testInside(float x0, float y0, float x1, float y1, float x, float y) {\r\n vec2 perp = vec2(y0 - y1, x1 - x0), test = vec2(x - x0, y - y0);\r\n float dot = (test.x * perp.x + test.y * perp.y) / sqrt(perp.x * perp.x + perp.y * perp.y);\r\n return dot >= -0.001;\r\n}\r\n`;\r\n\r\n/* There are two methods of applying a texture to a reality mesh. the first member of \"params\" denotes which\r\n method is to be used. A value of zero indicates a standard texture and one represents a projected texture.\r\n\r\n A standard (nonprojected) texture is generated by multiplying v_textCoord by the scaling and translation packed into the first row\r\n of \"matrix\". A clip rectangle is packed into second row of \"matrix\".\r\n\r\n A \"projected\" reality mesh texture is used for map layers. It does not uses v_texCoord, the texture coordinates\r\n are instead generated by a projection of the model position onto the X-Y plane. We only have eye position, not model position\r\n so the matrix in this case is a real transform matrix that contains a mapping from eye to model position\r\n followed by the model to texture projection.\r\n*/\r\nconst applyTexture = `\r\nbool applyTexture(inout vec4 col, sampler2D sampler, mat4 params, mat4 matrix) {\r\n vec2 uv;\r\n float layerAlpha;\r\n bool isProjected = params[0][0] != 0.0;\r\n float imageCount = params[0][1];\r\n vec2 classPos;\r\n\r\n if (isProjected) {\r\n vec4 eye4 = vec4(v_eyeSpace, 1.0);\r\n vec4 classPos4 = matrix * eye4;\r\n classPos = classPos4.xy / classPos4.w;\r\n\r\n if (!testInside(params[2].x, params[2].y, params[2].z, params[2].w, classPos.x, classPos.y) ||\r\n !testInside(params[2].z, params[2].w, params[3].x, params[3].y, classPos.x, classPos.y) ||\r\n !testInside(params[3].x, params[3].y, params[3].z, params[3].w, classPos.x, classPos.y) ||\r\n !testInside(params[3].z, params[3].w, params[2].x, params[2].y, classPos.x, classPos.y))\r\n return false;\r\n\r\n uv.x = classPos.x;\r\n uv.y = classPos.y / imageCount;\r\n layerAlpha = params[0][2];\r\n if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0)\r\n return false;\r\n } else {\r\n vec4 texTransform = matrix[0].xyzw;\r\n vec4 texClip = matrix[1].xyzw;\r\n layerAlpha = matrix[2].x;\r\n uv = vec2(texTransform[0] + texTransform[2] * v_texCoord.x, texTransform[1] + texTransform[3] * v_texCoord.y);\r\n if (uv.x < texClip[0] || uv.x > texClip[2] || uv.y < texClip[1] || uv.y > texClip[3])\r\n return false;\r\n uv.y = 1.0 - uv.y;\r\n }\r\n vec4 texCol = TEXTURE(sampler, uv);\r\n float alpha = layerAlpha * texCol.a;\r\n if (alpha > 0.05) {\r\n vec3 texRgb = isProjected ? (texCol.rgb / texCol.a) : texCol.rgb; // Texture color is premultiplied by alpha only if projected (from classification).\r\n col.rgb = (1.0 - alpha) * col.rgb + alpha * texRgb;\r\n if (isProjected) {\r\n vec4 featureTexel = TEXTURE(sampler, vec2(uv.x, (1.0 + classPos.y) / imageCount));\r\n classifierId = addUInt32s(params[1], featureTexel * 255.0) / 255.0;\r\n } else {\r\n featureIncrement = matrix[2].y;\r\n classifierId = vec4(0);\r\n }\r\n if (alpha > col.a)\r\n col.a = alpha;\r\n\r\n return true;\r\n }\r\nreturn false;\r\n}\r\n`;\r\n\r\nconst computeTexCoord = \"return unquantize2d(a_uvParam, u_qTexCoordParams);\";\r\nconst scratchMatrix4d1 = Matrix4d.createIdentity();\r\nconst scratchMatrix4d2 = Matrix4d.createIdentity();\r\nconst scratchMatrix = new Matrix4();\r\n\r\nconst overrideFeatureId = `return (classifierId == vec4(0)) ? (addUInt32s(feature_id * 255.0, vec4(featureIncrement, 0.0, 0.0, 0.0)) / 255.0) : classifierId;`;\r\n\r\nfunction addTextures(builder: ProgramBuilder, maxTexturesPerMesh: number) {\r\n builder.vert.addFunction(unquantize2d);\r\n builder.addFunctionComputedVarying(\"v_texCoord\", VariableType.Vec2, \"computeTexCoord\", computeTexCoord);\r\n builder.vert.addUniform(\"u_qTexCoordParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_qTexCoordParams\", (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n if (undefined !== realityMesh.uvQParams) {\r\n uniform.setUniform4fv(realityMesh.uvQParams);\r\n }\r\n });\r\n });\r\n\r\n builder.frag.addUniform(\"u_texturesPresent\", VariableType.Boolean, (program) => {\r\n program.addGraphicUniform(\"u_texturesPresent\", (uniform, params) => {\r\n uniform.setUniform1i(params.geometry.asRealityMesh!.hasTextures ? 1 : 0);\r\n });\r\n });\r\n\r\n for (let i = 0; i < maxTexturesPerMesh; i++) {\r\n const textureLabel = `s_texture${i}`;\r\n builder.frag.addUniform(textureLabel, VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(textureLabel, (uniform, params) => {\r\n const textureUnits = [TextureUnit.RealityMesh0, TextureUnit.RealityMesh1, params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder, TextureUnit.RealityMesh3, TextureUnit.RealityMesh4, TextureUnit.RealityMesh5];\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const realityTexture = realityMesh.textureParams ? realityMesh.textureParams.params[i].texture : undefined;\r\n if (realityTexture !== undefined) {\r\n const texture = realityTexture as Texture;\r\n texture.texture.bindSampler(uniform, textureUnits[i]);\r\n } else {\r\n // assert(false, \"Terrain Mesh texture not defined when beginning texture.\");\r\n System.instance.ensureSamplerBound(uniform, textureUnits[i]);\r\n }\r\n });\r\n });\r\n const paramsLabel = `u_texParams${i}`, matrixLabel = `u_texMatrix${i}`;\r\n builder.frag.addUniform(matrixLabel, VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(matrixLabel, (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const textureParam = realityMesh.textureParams?.params[i];\r\n assert(undefined !== textureParam);\r\n if (undefined !== textureParam) {\r\n const projectionMatrix = textureParam.getProjectionMatrix();\r\n if (projectionMatrix) {\r\n const eyeToModel = Matrix4d.createTransform(params.target.uniforms.frustum.viewMatrix.inverse()!, scratchMatrix4d1);\r\n const eyeToTexture = projectionMatrix.multiplyMatrixMatrix(eyeToModel, scratchMatrix4d2);\r\n uniform.setMatrix4(Matrix4.fromMatrix4d(eyeToTexture, scratchMatrix));\r\n } else\r\n uniform.setMatrix4(textureParam.getTerrainMatrix()!);\r\n }\r\n });\r\n });\r\n builder.frag.addUniform(paramsLabel, VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(paramsLabel, (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const textureParam = realityMesh.textureParams?.params[i];\r\n assert(undefined !== textureParam);\r\n if (undefined !== textureParam) {\r\n uniform.setMatrix4(textureParam.getParams(scratchMatrix));\r\n }\r\n });\r\n });\r\n }\r\n}\r\nfunction baseColorFromTextures(textureCount: number, applyFeatureColor: string) {\r\n const applyTextureStrings = [];\r\n\r\n for (let i = 0; i < textureCount; i++)\r\n applyTextureStrings.push(`if (applyTexture(col, s_texture${i}, u_texParams${i}, u_texMatrix${i})) doDiscard = false; `);\r\n\r\n return `\r\n if (!u_texturesPresent)\r\n return u_baseColor;\r\n\r\n bool doDiscard = true;\r\n vec4 col = u_baseColor;\r\n ${applyTextureStrings.join(\"\\n \")}\r\n if (doDiscard)\r\n discard;\r\n\r\n ${applyFeatureColor}\r\n\r\n return col;\r\n`;\r\n}\r\n\r\n// feature_rgb.r = -1.0 if rgb color not overridden for feature.\r\n// feature_alpha = -1.0 if alpha not overridden for feature.\r\nconst mixFeatureColor = `\r\n col.rgb = mix(col.rgb, mix(col.rgb, v_color.rgb, u_overrideColorMix), step(0.0, v_color.r));\r\n col.a = mix(col.a, v_color.a, step(0.0, v_color.a));\r\n `;\r\n\r\nfunction addThematicToRealityMesh(builder: ProgramBuilder, gradientTextureUnit: TextureUnit) {\r\n addNormalMatrix(builder.vert, IsInstanced.No);\r\n builder.vert.addFunction(octDecodeNormal);\r\n builder.vert.addGlobal(\"g_hillshadeIndex\", VariableType.Float);\r\n builder.addFunctionComputedVarying(\"v_n\", VariableType.Vec3, \"computeLightingNormal\", computeNormal);\r\n addThematicDisplay(builder, false, true);\r\n builder.addInlineComputedVarying(\"v_thematicIndex\", VariableType.Float, getComputeThematicIndex(builder.vert.usesInstancedGeometry, false, false));\r\n builder.vert.addUniform(\"u_worldToViewN\", VariableType.Mat3, (prog) => {\r\n prog.addGraphicUniform(\"u_worldToViewN\", (uniform, params) => {\r\n params.target.uniforms.branch.bindWorldToViewNTransform(uniform, params.geometry, false);\r\n });\r\n });\r\n builder.frag.addUniform(\"s_texture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_texture\", (uniform, params) => {\r\n params.target.uniforms.thematic.bindTexture(uniform, gradientTextureUnit >= 0 ? gradientTextureUnit : (params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder));\r\n });\r\n });\r\n}\r\n\r\nfunction addColorOverrideMix(frag: FragmentShaderBuilder) {\r\n frag.addUniform(\"u_overrideColorMix\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_overrideColorMix\", (uniform, params) => {\r\n uniform.setUniform1f(params.geometry.asRealityMesh!.overrideColorMix);\r\n });\r\n });\r\n\r\n}\r\n\r\nfunction createRealityMeshHiliterBuilder(): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n return builder;\r\n\r\n}\r\n\r\n/** @internal */\r\nexport function createClassifierRealityMeshHiliter(): ProgramBuilder {\r\n const builder = createRealityMeshHiliterBuilder();\r\n addHilitePlanarClassifier(builder, false);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createRealityMeshHiliter(): ProgramBuilder {\r\n const builder = createRealityMeshHiliterBuilder();\r\n addHiliter(builder, false);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport default function createRealityMeshBuilder(flags: TechniqueFlags): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n\r\n if (flags.isShadowable === IsShadowable.Yes)\r\n addSolarShadowMap(builder, true);\r\n\r\n const frag = builder.frag;\r\n frag.addGlobal(\"featureIncrement\", VariableType.Float, \"0.0\");\r\n frag.addGlobal(\"classifierId\", VariableType.Vec4);\r\n frag.set(FragmentShaderComponent.OverrideFeatureId, overrideFeatureId);\r\n let textureCount = System.instance.maxRealityImageryLayers;\r\n let gradientTextureUnit = TextureUnit.RealityMeshThematicGradient;\r\n const caps = System.instance.capabilities;\r\n if (Math.min(caps.maxFragTextureUnits, caps.maxVertTextureUnits) < 16 && IsThematic.Yes === flags.isThematic) {\r\n textureCount--; // steal the last bg map layer texture for thematic gradient (just when thematic display is applied)\r\n gradientTextureUnit = -1; // is dependent on drawing mode so will set later\r\n }\r\n\r\n const feat = flags.featureMode;\r\n let opts = FeatureMode.Overrides === feat ? FeatureSymbologyOptions.Surface : FeatureSymbologyOptions.None;\r\n let applyFragmentFeatureColor = \"\";\r\n\r\n if (flags.isClassified) {\r\n opts &= ~FeatureSymbologyOptions.Alpha;\r\n addColorPlanarClassifier(builder, flags.isTranslucent, flags.isThematic);\r\n addClassificationTranslucencyDiscard(builder);\r\n }\r\n\r\n addFeatureSymbology(builder, feat, opts);\r\n if (feat === FeatureMode.Overrides) {\r\n addShaderFlags(builder);\r\n addVaryingColor(builder, \"return vec4(-1.0, -1.0, -1.0, -1.0);\");\r\n applyFragmentFeatureColor = mixFeatureColor;\r\n addColorOverrideMix(builder.frag);\r\n }\r\n const computeFragmentBaseColor = baseColorFromTextures(textureCount, applyFragmentFeatureColor);\r\n\r\n frag.addFunction(addUInt32s);\r\n frag.addFunction(testInside);\r\n addEyeSpace(builder);\r\n frag.addFunction(applyTexture);\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\r\n builder.frag.addUniform(\"u_baseColor\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_baseColor\", (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const baseColor = (realityMesh.baseColor ? realityMesh.baseColor : ColorDef.create(0xff000000)).colors;\r\n uniform.setUniform4fv([baseColor.r / 255, baseColor.g / 255, baseColor.b / 255, 1 - baseColor.t / 255]);\r\n });\r\n });\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\r\n if (!flags.isTranslucent) {\r\n if (FeatureMode.None !== feat) {\r\n if (flags.isClassified)\r\n addFeaturePlanarClassifier(builder);\r\n\r\n builder.frag.addFunction(decodeDepthRgb);\r\n if (flags.isClassified)\r\n addPickBufferOutputs(builder.frag);\r\n else\r\n addAltPickBufferOutputs(builder.frag);\r\n }\r\n }\r\n\r\n addTextures(builder, textureCount);\r\n\r\n if (IsThematic.Yes === flags.isThematic)\r\n addThematicToRealityMesh(builder, gradientTextureUnit);\r\n\r\n if (flags.isWiremesh)\r\n addWiremesh(builder);\r\n\r\n return builder;\r\n}\r\n\r\n"]}
1
+ {"version":3,"file":"RealityMesh.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/RealityMesh.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { ColorDef } from \"@itwin/core-common\";\r\nimport { Matrix4d } from \"@itwin/core-geometry\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { Matrix4 } from \"../Matrix\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderBuilder, FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { FeatureMode, IsInstanced, IsShadowable, IsThematic, TechniqueFlags } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { Texture } from \"../Texture\";\r\nimport { addVaryingColor } from \"./Color\";\r\nimport { addEyeSpace, addShaderFlags, addUInt32s } from \"./Common\";\r\nimport { decodeDepthRgb, unquantize2d } from \"./Decode\";\r\nimport { addFeatureSymbology, addHiliter, FeatureSymbologyOptions } from \"./FeatureSymbology\";\r\nimport { addAltPickBufferOutputs, addPickBufferOutputs, assignFragColor } from \"./Fragment\";\r\nimport { addColorPlanarClassifier, addFeaturePlanarClassifier, addHilitePlanarClassifier } from \"./PlanarClassification\";\r\nimport { addSolarShadowMap } from \"./SolarShadowMapping\";\r\nimport { addClassificationTranslucencyDiscard, octDecodeNormal } from \"./Surface\";\r\nimport { addThematicDisplay, getComputeThematicIndex } from \"./Thematic\";\r\nimport { addModelViewProjectionMatrix, addNormalMatrix } from \"./Vertex\";\r\nimport { addWiremesh } from \"./Wiremesh\";\r\n\r\nconst computePosition = \"gl_PointSize = 1.0; return MAT_MVP * rawPos;\";\r\nconst computeNormal = `\r\n vec3 normal = octDecodeNormal(a_norm); // normal coming in for is already in world space\r\n g_hillshadeIndex = normal.z; // save off world Z for thematic hill shade mode index\r\n return normalize(u_worldToViewN * normal);\r\n`;\r\n\r\nconst testInside = `\r\nbool testInside(float x0, float y0, float x1, float y1, float x, float y) {\r\n vec2 perp = vec2(y0 - y1, x1 - x0), test = vec2(x - x0, y - y0);\r\n float dot = (test.x * perp.x + test.y * perp.y) / sqrt(perp.x * perp.x + perp.y * perp.y);\r\n return dot >= -0.001;\r\n}\r\n`;\r\n\r\n/* There are two methods of applying a texture to a reality mesh. the first member of \"params\" denotes which\r\n method is to be used. A value of zero indicates a standard texture and one represents a projected texture.\r\n\r\n A standard (nonprojected) texture is generated by multiplying v_textCoord by the scaling and translation packed into the first row\r\n of \"matrix\". A clip rectangle is packed into second row of \"matrix\".\r\n\r\n A \"projected\" reality mesh texture is used for map layers. It does not uses v_texCoord, the texture coordinates\r\n are instead generated by a projection of the model position onto the X-Y plane. We only have eye position, not model position\r\n so the matrix in this case is a real transform matrix that contains a mapping from eye to model position\r\n followed by the model to texture projection.\r\n*/\r\nconst applyTexture = `\r\nbool applyTexture(inout vec4 col, sampler2D sampler, mat4 params, mat4 matrix) {\r\n vec2 uv;\r\n float layerAlpha;\r\n bool isProjected = params[0][0] != 0.0;\r\n float imageCount = params[0][1];\r\n vec2 classPos;\r\n\r\n if (isProjected) {\r\n vec4 eye4 = vec4(v_eyeSpace, 1.0);\r\n vec4 classPos4 = matrix * eye4;\r\n classPos = classPos4.xy / classPos4.w;\r\n\r\n if (!testInside(params[2].x, params[2].y, params[2].z, params[2].w, classPos.x, classPos.y) ||\r\n !testInside(params[2].z, params[2].w, params[3].x, params[3].y, classPos.x, classPos.y) ||\r\n !testInside(params[3].x, params[3].y, params[3].z, params[3].w, classPos.x, classPos.y) ||\r\n !testInside(params[3].z, params[3].w, params[2].x, params[2].y, classPos.x, classPos.y))\r\n return false;\r\n\r\n uv.x = classPos.x;\r\n uv.y = classPos.y / imageCount;\r\n layerAlpha = params[0][2];\r\n if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0)\r\n return false;\r\n } else {\r\n vec4 texTransform = matrix[0].xyzw;\r\n vec4 texClip = matrix[1].xyzw;\r\n layerAlpha = matrix[2].x;\r\n uv = vec2(texTransform[0] + texTransform[2] * v_texCoord.x, texTransform[1] + texTransform[3] * v_texCoord.y);\r\n if (uv.x < texClip[0] || uv.x > texClip[2] || uv.y < texClip[1] || uv.y > texClip[3])\r\n return false;\r\n uv.y = 1.0 - uv.y;\r\n }\r\n vec4 texCol = TEXTURE(sampler, uv);\r\n float alpha = layerAlpha * texCol.a;\r\n if (alpha > 0.05) {\r\n vec3 texRgb = isProjected ? (texCol.rgb / texCol.a) : texCol.rgb; // Texture color is premultiplied by alpha only if projected (from classification).\r\n col.rgb = (1.0 - alpha) * col.rgb + alpha * texRgb;\r\n if (isProjected) {\r\n vec4 featureTexel = TEXTURE(sampler, vec2(uv.x, (1.0 + classPos.y) / imageCount));\r\n classifierId = addUInt32s(params[1], featureTexel * 255.0) / 255.0;\r\n } else {\r\n featureIncrement = matrix[2].y;\r\n classifierId = vec4(0);\r\n }\r\n if (alpha > col.a)\r\n col.a = alpha;\r\n\r\n return true;\r\n }\r\nreturn false;\r\n}\r\n`;\r\n\r\nconst computeTexCoord = \"return unquantize2d(a_uvParam, u_qTexCoordParams);\";\r\nconst scratchMatrix4d1 = Matrix4d.createIdentity();\r\nconst scratchMatrix4d2 = Matrix4d.createIdentity();\r\nconst scratchMatrix = new Matrix4();\r\n\r\nconst overrideFeatureId = `return (classifierId == vec4(0)) ? (addUInt32s(feature_id * 255.0, vec4(featureIncrement, 0.0, 0.0, 0.0)) / 255.0) : classifierId;`;\r\n\r\nfunction addTextures(builder: ProgramBuilder, maxTexturesPerMesh: number) {\r\n builder.vert.addFunction(unquantize2d);\r\n builder.addFunctionComputedVarying(\"v_texCoord\", VariableType.Vec2, \"computeTexCoord\", computeTexCoord);\r\n builder.vert.addUniform(\"u_qTexCoordParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_qTexCoordParams\", (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n if (undefined !== realityMesh.uvQParams) {\r\n uniform.setUniform4fv(realityMesh.uvQParams);\r\n }\r\n });\r\n });\r\n\r\n builder.frag.addUniform(\"u_texturesPresent\", VariableType.Boolean, (program) => {\r\n program.addGraphicUniform(\"u_texturesPresent\", (uniform, params) => {\r\n uniform.setUniform1i(params.geometry.asRealityMesh!.hasTextures ? 1 : 0);\r\n });\r\n });\r\n\r\n for (let i = 0; i < maxTexturesPerMesh; i++) {\r\n const textureLabel = `s_texture${i}`;\r\n builder.frag.addUniform(textureLabel, VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(textureLabel, (uniform, params) => {\r\n const textureUnits = [TextureUnit.RealityMesh0, TextureUnit.RealityMesh1, params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder, TextureUnit.RealityMesh3, TextureUnit.RealityMesh4, TextureUnit.RealityMesh5];\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const realityTexture = realityMesh.textureParams ? realityMesh.textureParams.params[i].texture : undefined;\r\n if (realityTexture !== undefined) {\r\n const texture = realityTexture as Texture;\r\n texture.texture.bindSampler(uniform, textureUnits[i]);\r\n } else {\r\n // assert(false, \"Terrain Mesh texture not defined when beginning texture.\");\r\n System.instance.ensureSamplerBound(uniform, textureUnits[i]);\r\n }\r\n });\r\n });\r\n const paramsLabel = `u_texParams${i}`, matrixLabel = `u_texMatrix${i}`;\r\n builder.frag.addUniform(matrixLabel, VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(matrixLabel, (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const textureParam = realityMesh.textureParams?.params[i];\r\n assert(undefined !== textureParam);\r\n if (undefined !== textureParam) {\r\n const projectionMatrix = textureParam.getProjectionMatrix();\r\n if (projectionMatrix) {\r\n const eyeToModel = Matrix4d.createTransform(params.target.uniforms.frustum.viewMatrix.inverse()!, scratchMatrix4d1);\r\n const eyeToTexture = projectionMatrix.multiplyMatrixMatrix(eyeToModel, scratchMatrix4d2);\r\n uniform.setMatrix4(Matrix4.fromMatrix4d(eyeToTexture, scratchMatrix));\r\n } else\r\n uniform.setMatrix4(textureParam.getTerrainMatrix()!);\r\n }\r\n });\r\n });\r\n builder.frag.addUniform(paramsLabel, VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(paramsLabel, (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const textureParam = realityMesh.textureParams?.params[i];\r\n assert(undefined !== textureParam);\r\n if (undefined !== textureParam) {\r\n uniform.setMatrix4(textureParam.getParams(scratchMatrix));\r\n }\r\n });\r\n });\r\n }\r\n}\r\nfunction baseColorFromTextures(textureCount: number, applyFeatureColor: string) {\r\n const applyTextureStrings = [];\r\n\r\n for (let i = 0; i < textureCount; i++)\r\n applyTextureStrings.push(`if (applyTexture(col, s_texture${i}, u_texParams${i}, u_texMatrix${i})) doDiscard = false; `);\r\n\r\n return `\r\n if (!u_texturesPresent) {\r\n vec4 col = u_baseColor;\r\n ${applyFeatureColor}\r\n return col;\r\n }\r\n\r\n bool doDiscard = true;\r\n vec4 col = u_baseColor;\r\n ${applyTextureStrings.join(\"\\n \")}\r\n if (doDiscard)\r\n discard;\r\n\r\n ${applyFeatureColor}\r\n\r\n return col;\r\n`;\r\n}\r\n\r\n// feature_rgb.r = -1.0 if rgb color not overridden for feature.\r\n// feature_alpha = -1.0 if alpha not overridden for feature.\r\nconst mixFeatureColor = `\r\n col.rgb = mix(col.rgb, mix(col.rgb, v_color.rgb, u_overrideColorMix), step(0.0, v_color.r));\r\n col.a = mix(col.a, v_color.a, step(0.0, v_color.a));\r\n `;\r\n\r\nfunction addThematicToRealityMesh(builder: ProgramBuilder, gradientTextureUnit: TextureUnit) {\r\n addNormalMatrix(builder.vert, IsInstanced.No);\r\n builder.vert.addFunction(octDecodeNormal);\r\n builder.vert.addGlobal(\"g_hillshadeIndex\", VariableType.Float);\r\n builder.addFunctionComputedVarying(\"v_n\", VariableType.Vec3, \"computeLightingNormal\", computeNormal);\r\n addThematicDisplay(builder, false, true);\r\n builder.addInlineComputedVarying(\"v_thematicIndex\", VariableType.Float, getComputeThematicIndex(builder.vert.usesInstancedGeometry, false, false));\r\n builder.vert.addUniform(\"u_worldToViewN\", VariableType.Mat3, (prog) => {\r\n prog.addGraphicUniform(\"u_worldToViewN\", (uniform, params) => {\r\n params.target.uniforms.branch.bindWorldToViewNTransform(uniform, params.geometry, false);\r\n });\r\n });\r\n builder.frag.addUniform(\"s_texture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_texture\", (uniform, params) => {\r\n params.target.uniforms.thematic.bindTexture(uniform, gradientTextureUnit >= 0 ? gradientTextureUnit : (params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder));\r\n });\r\n });\r\n}\r\n\r\nfunction addColorOverrideMix(frag: FragmentShaderBuilder) {\r\n frag.addUniform(\"u_overrideColorMix\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_overrideColorMix\", (uniform, params) => {\r\n uniform.setUniform1f(params.geometry.asRealityMesh!.overrideColorMix);\r\n });\r\n });\r\n\r\n}\r\n\r\nfunction createRealityMeshHiliterBuilder(): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n return builder;\r\n\r\n}\r\n\r\n/** @internal */\r\nexport function createClassifierRealityMeshHiliter(): ProgramBuilder {\r\n const builder = createRealityMeshHiliterBuilder();\r\n addHilitePlanarClassifier(builder, false);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createRealityMeshHiliter(): ProgramBuilder {\r\n const builder = createRealityMeshHiliterBuilder();\r\n addHiliter(builder, false);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport default function createRealityMeshBuilder(flags: TechniqueFlags): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n\r\n if (flags.isShadowable === IsShadowable.Yes)\r\n addSolarShadowMap(builder, true);\r\n\r\n const frag = builder.frag;\r\n frag.addGlobal(\"featureIncrement\", VariableType.Float, \"0.0\");\r\n frag.addGlobal(\"classifierId\", VariableType.Vec4);\r\n frag.set(FragmentShaderComponent.OverrideFeatureId, overrideFeatureId);\r\n let textureCount = System.instance.maxRealityImageryLayers;\r\n let gradientTextureUnit = TextureUnit.RealityMeshThematicGradient;\r\n const caps = System.instance.capabilities;\r\n if (Math.min(caps.maxFragTextureUnits, caps.maxVertTextureUnits) < 16 && IsThematic.Yes === flags.isThematic) {\r\n textureCount--; // steal the last bg map layer texture for thematic gradient (just when thematic display is applied)\r\n gradientTextureUnit = -1; // is dependent on drawing mode so will set later\r\n }\r\n\r\n const feat = flags.featureMode;\r\n let opts = FeatureMode.Overrides === feat ? FeatureSymbologyOptions.Surface : FeatureSymbologyOptions.None;\r\n let applyFragmentFeatureColor = \"\";\r\n\r\n if (flags.isClassified) {\r\n opts &= ~FeatureSymbologyOptions.Alpha;\r\n addColorPlanarClassifier(builder, flags.isTranslucent, flags.isThematic);\r\n addClassificationTranslucencyDiscard(builder);\r\n }\r\n\r\n addFeatureSymbology(builder, feat, opts);\r\n if (feat === FeatureMode.Overrides) {\r\n addShaderFlags(builder);\r\n addVaryingColor(builder, \"return vec4(-1.0, -1.0, -1.0, -1.0);\");\r\n applyFragmentFeatureColor = mixFeatureColor;\r\n addColorOverrideMix(builder.frag);\r\n }\r\n const computeFragmentBaseColor = baseColorFromTextures(textureCount, applyFragmentFeatureColor);\r\n\r\n frag.addFunction(addUInt32s);\r\n frag.addFunction(testInside);\r\n addEyeSpace(builder);\r\n frag.addFunction(applyTexture);\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\r\n builder.frag.addUniform(\"u_baseColor\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_baseColor\", (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const baseColor = (realityMesh.baseColor ? realityMesh.baseColor : ColorDef.create(0xff000000)).colors;\r\n uniform.setUniform4fv([baseColor.r / 255, baseColor.g / 255, baseColor.b / 255, 1 - baseColor.t / 255]);\r\n });\r\n });\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\r\n if (!flags.isTranslucent) {\r\n if (FeatureMode.None !== feat) {\r\n if (flags.isClassified)\r\n addFeaturePlanarClassifier(builder);\r\n\r\n builder.frag.addFunction(decodeDepthRgb);\r\n if (flags.isClassified)\r\n addPickBufferOutputs(builder.frag);\r\n else\r\n addAltPickBufferOutputs(builder.frag);\r\n }\r\n }\r\n\r\n addTextures(builder, textureCount);\r\n\r\n if (IsThematic.Yes === flags.isThematic)\r\n addThematicToRealityMesh(builder, gradientTextureUnit);\r\n\r\n if (flags.isWiremesh)\r\n addWiremesh(builder);\r\n\r\n return builder;\r\n}\r\n\r\n"]}
@@ -17,4 +17,5 @@ export * from "./render/primitives/Strokes";
17
17
  export * from "./render/primitives/SurfaceParams";
18
18
  export * from "./render/primitives/VertexKey";
19
19
  export * from "./render/primitives/VertexTable";
20
+ export * from "./render/primitives/VertexTableSplitter";
20
21
  //# sourceMappingURL=render-primitives.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"render-primitives.d.ts","sourceRoot":"","sources":["../../src/render-primitives.ts"],"names":[],"mappings":"AAIA,cAAc,iDAAiD,CAAC;AAChE,cAAc,2CAA2C,CAAC;AAC1D,cAAc,kDAAkD,CAAC;AACjE,cAAc,kDAAkD,CAAC;AAEjE,cAAc,sCAAsC,CAAC;AACrD,cAAc,yCAAyC,CAAC;AACxD,cAAc,yCAAyC,CAAC;AAExD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yCAAyC,CAAC;AACxD,cAAc,uCAAuC,CAAC;AACtD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oCAAoC,CAAC;AACnD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC"}
1
+ {"version":3,"file":"render-primitives.d.ts","sourceRoot":"","sources":["../../src/render-primitives.ts"],"names":[],"mappings":"AAIA,cAAc,iDAAiD,CAAC;AAChE,cAAc,2CAA2C,CAAC;AAC1D,cAAc,kDAAkD,CAAC;AACjE,cAAc,kDAAkD,CAAC;AAEjE,cAAc,sCAAsC,CAAC;AACrD,cAAc,yCAAyC,CAAC;AACxD,cAAc,yCAAyC,CAAC;AAExD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yCAAyC,CAAC;AACxD,cAAc,uCAAuC,CAAC;AACtD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oCAAoC,CAAC;AACnD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,yCAAyC,CAAC"}
@@ -21,4 +21,5 @@ export * from "./render/primitives/Strokes";
21
21
  export * from "./render/primitives/SurfaceParams";
22
22
  export * from "./render/primitives/VertexKey";
23
23
  export * from "./render/primitives/VertexTable";
24
+ export * from "./render/primitives/VertexTableSplitter";
24
25
  //# sourceMappingURL=render-primitives.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"render-primitives.js","sourceRoot":"","sources":["../../src/render-primitives.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,cAAc,iDAAiD,CAAC;AAChE,cAAc,2CAA2C,CAAC;AAC1D,cAAc,kDAAkD,CAAC;AACjE,cAAc,kDAAkD,CAAC;AAEjE,cAAc,sCAAsC,CAAC;AACrD,cAAc,yCAAyC,CAAC;AACxD,cAAc,yCAAyC,CAAC;AAExD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yCAAyC,CAAC;AACxD,cAAc,uCAAuC,CAAC;AACtD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oCAAoC,CAAC;AACnD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nexport * from \"./render/primitives/geometry/GeometryPrimitives\";\r\nexport * from \"./render/primitives/geometry/GeometryList\";\r\nexport * from \"./render/primitives/geometry/GeometryListBuilder\";\r\nexport * from \"./render/primitives/geometry/GeometryAccumulator\";\r\n\r\nexport * from \"./render/primitives/mesh/MeshBuilder\";\r\nexport * from \"./render/primitives/mesh/MeshBuilderMap\";\r\nexport * from \"./render/primitives/mesh/MeshPrimitives\";\r\n\r\nexport * from \"./render/primitives/ColorMap\";\r\nexport * from \"./render/primitives/DisplayParams\";\r\nexport * from \"./render/primitives/EdgeParams\";\r\nexport * from \"./render/primitives/PointCloudPrimitive\";\r\nexport * from \"./render/primitives/PointStringParams\";\r\nexport * from \"./render/primitives/Polyface\";\r\nexport * from \"./render/primitives/PolylineParams\";\r\nexport * from \"./render/primitives/Primitives\";\r\nexport * from \"./render/primitives/Strokes\";\r\nexport * from \"./render/primitives/SurfaceParams\";\r\nexport * from \"./render/primitives/VertexKey\";\r\nexport * from \"./render/primitives/VertexTable\";\r\n"]}
1
+ {"version":3,"file":"render-primitives.js","sourceRoot":"","sources":["../../src/render-primitives.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,cAAc,iDAAiD,CAAC;AAChE,cAAc,2CAA2C,CAAC;AAC1D,cAAc,kDAAkD,CAAC;AACjE,cAAc,kDAAkD,CAAC;AAEjE,cAAc,sCAAsC,CAAC;AACrD,cAAc,yCAAyC,CAAC;AACxD,cAAc,yCAAyC,CAAC;AAExD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC;AAClD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yCAAyC,CAAC;AACxD,cAAc,uCAAuC,CAAC;AACtD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oCAAoC,CAAC;AACnD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,yCAAyC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nexport * from \"./render/primitives/geometry/GeometryPrimitives\";\r\nexport * from \"./render/primitives/geometry/GeometryList\";\r\nexport * from \"./render/primitives/geometry/GeometryListBuilder\";\r\nexport * from \"./render/primitives/geometry/GeometryAccumulator\";\r\n\r\nexport * from \"./render/primitives/mesh/MeshBuilder\";\r\nexport * from \"./render/primitives/mesh/MeshBuilderMap\";\r\nexport * from \"./render/primitives/mesh/MeshPrimitives\";\r\n\r\nexport * from \"./render/primitives/ColorMap\";\r\nexport * from \"./render/primitives/DisplayParams\";\r\nexport * from \"./render/primitives/EdgeParams\";\r\nexport * from \"./render/primitives/PointCloudPrimitive\";\r\nexport * from \"./render/primitives/PointStringParams\";\r\nexport * from \"./render/primitives/Polyface\";\r\nexport * from \"./render/primitives/PolylineParams\";\r\nexport * from \"./render/primitives/Primitives\";\r\nexport * from \"./render/primitives/Strokes\";\r\nexport * from \"./render/primitives/SurfaceParams\";\r\nexport * from \"./render/primitives/VertexKey\";\r\nexport * from \"./render/primitives/VertexTable\";\r\nexport * from \"./render/primitives/VertexTableSplitter\";\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ClassifierTileTree.d.ts","sourceRoot":"","sources":["../../../src/tile/ClassifierTileTree.ts"],"names":[],"mappings":"AAQA,OAAO,EAAmG,iBAAiB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACjM,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAC4G,iBAAiB,EACnI,MAAM,YAAY,CAAC;AAiEpB,gBAAgB;AAChB,8BAAsB,kCAAmC,SAAQ,iBAAiB;IAChF,aAAoB,QAAQ,IAAI,OAAO,CAAC;IACxC,aAAoB,gBAAgB,IAAI,iBAAiB,GAAG,SAAS,CAAC;IACtE,IAAW,QAAQ,YAAoB,CAAG,6EAA6E;IACvH,aAAoB,SAAS,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC9D,IAAW,YAAY,IAAI,MAAM,GAAG,SAAS,CAAsB;CACpE;AAuFD,gBAAgB;AAChB,wBAAgB,iCAAiC,CAAC,WAAW,EAAE,kBAAkB,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,GAAG,iBAAiB,GAAG,kCAAkC,CAEzN"}
1
+ {"version":3,"file":"ClassifierTileTree.d.ts","sourceRoot":"","sources":["../../../src/tile/ClassifierTileTree.ts"],"names":[],"mappings":"AAQA,OAAO,EACkF,iBAAiB,EAAE,kBAAkB,EAAE,mBAAmB,EAClJ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAC4G,iBAAiB,EACnI,MAAM,YAAY,CAAC;AAiEpB,gBAAgB;AAChB,8BAAsB,kCAAmC,SAAQ,iBAAiB;IAChF,aAAoB,QAAQ,IAAI,OAAO,CAAC;IACxC,aAAoB,gBAAgB,IAAI,iBAAiB,GAAG,SAAS,CAAC;IACtE,IAAW,QAAQ,YAAoB,CAAG,6EAA6E;IACvH,aAAoB,SAAS,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC9D,IAAW,YAAY,IAAI,MAAM,GAAG,SAAS,CAAsB;CACpE;AAuFD,gBAAgB;AAChB,wBAAgB,iCAAiC,CAAC,WAAW,EAAE,kBAAkB,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,GAAG,iBAAiB,GAAG,kCAAkC,CAEzN"}
@@ -5,16 +5,14 @@
5
5
  /** @packageDocumentation
6
6
  * @module Tiles
7
7
  */
8
- import { compareStrings, compareStringsOrUndefined, Id64 } from "@itwin/core-bentley";
9
- import { BatchType, compareIModelTileTreeIds, iModelTileTreeIdToString, RenderMode } from "@itwin/core-common";
8
+ import { comparePossiblyUndefined, compareStrings, compareStringsOrUndefined, Id64 } from "@itwin/core-bentley";
9
+ import { BatchType, iModelTileTreeIdToString, RenderMode, } from "@itwin/core-common";
10
10
  import { IModelApp } from "../IModelApp";
11
11
  import { GeometricModelState } from "../ModelState";
12
12
  import { IModelTileTree, iModelTileTreeParamsFromJSON, TileTreeLoadStatus, TileTreeReference, } from "./internal";
13
13
  function compareIds(lhs, rhs) {
14
- let cmp = compareStrings(lhs.modelId, rhs.modelId);
15
- if (0 === cmp)
16
- cmp = compareStringsOrUndefined(lhs.animationId, rhs.animationId);
17
- return 0 === cmp ? compareIModelTileTreeIds(lhs, rhs) : cmp;
14
+ return compareStrings(lhs.modelId, rhs.modelId) || compareStringsOrUndefined(lhs.animationId, rhs.animationId)
15
+ || comparePossiblyUndefined((x, y) => x.compareTo(y), lhs.timeline, rhs.timeline);
18
16
  }
19
17
  class ClassifierTreeSupplier {
20
18
  constructor() {
@@ -42,6 +40,7 @@ class ClassifierTreeSupplier {
42
40
  allowInstancing: false,
43
41
  is3d: true,
44
42
  batchType: id.type,
43
+ timeline: id.timeline,
45
44
  });
46
45
  return new IModelTileTree(params, id);
47
46
  }
@@ -49,8 +48,9 @@ class ClassifierTreeSupplier {
49
48
  return Id64.isValid(id.modelId) ? iModel.tiles.getTileTreeOwner(id, this) : this._nonexistentTreeOwner;
50
49
  }
51
50
  addModelsAnimatedByScript(modelIds, scriptSourceId, trees) {
51
+ // Note: This is invoked when an element hosting a schedule script is updated - it doesn't care about frontend schedule scripts.
52
52
  for (const tree of trees)
53
- if (tree.id.animationId === scriptSourceId)
53
+ if (scriptSourceId === tree.id.animationId)
54
54
  modelIds.add(tree.id.modelId);
55
55
  }
56
56
  addSpatialModels(modelIds, trees) {
@@ -136,13 +136,13 @@ function createClassifierId(classifier, source) {
136
136
  if (undefined === classifier)
137
137
  return { modelId: Id64.invalid, type: BatchType.PlanarClassifier, expansion: 0, animationId: undefined };
138
138
  const type = classifier.flags.isVolumeClassifier ? BatchType.VolumeClassifier : BatchType.PlanarClassifier;
139
- const script = source === null || source === void 0 ? void 0 : source.scheduleState;
140
- const animationId = (undefined !== script) ? script.getModelAnimationId(classifier.modelId) : undefined;
139
+ const scriptInfo = IModelApp.tileAdmin.getScriptInfoForTreeId(classifier.modelId, source === null || source === void 0 ? void 0 : source.scheduleScriptReference); // eslint-disable-line deprecation/deprecation
141
140
  return {
142
141
  modelId: classifier.modelId,
143
142
  type,
144
143
  expansion: classifier.expand,
145
- animationId,
144
+ animationId: scriptInfo === null || scriptInfo === void 0 ? void 0 : scriptInfo.animationId,
145
+ timeline: scriptInfo === null || scriptInfo === void 0 ? void 0 : scriptInfo.timeline,
146
146
  };
147
147
  }
148
148
  //# sourceMappingURL=ClassifierTileTree.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ClassifierTileTree.js","sourceRoot":"","sources":["../../../src/tile/ClassifierTileTree.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 Tiles\r\n */\r\nimport { compareStrings, compareStringsOrUndefined, Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { BatchType, ClassifierTileTreeId, compareIModelTileTreeIds, iModelTileTreeIdToString, RenderMode, SpatialClassifier, SpatialClassifiers, ViewFlagsProperties } from \"@itwin/core-common\";\r\nimport { DisplayStyleState } from \"../DisplayStyleState\";\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { GeometricModelState } from \"../ModelState\";\r\nimport { SceneContext } from \"../ViewContext\";\r\nimport { ViewState } from \"../ViewState\";\r\nimport {\r\n DisclosedTileTreeSet, IModelTileTree, iModelTileTreeParamsFromJSON, TileTree, TileTreeLoadStatus, TileTreeOwner, TileTreeReference, TileTreeSupplier,\r\n} from \"./internal\";\r\n\r\ninterface ClassifierTreeId extends ClassifierTileTreeId {\r\n modelId: Id64String;\r\n}\r\n\r\nfunction compareIds(lhs: ClassifierTreeId, rhs: ClassifierTreeId): number {\r\n let cmp = compareStrings(lhs.modelId, rhs.modelId);\r\n if (0 === cmp)\r\n cmp = compareStringsOrUndefined(lhs.animationId, rhs.animationId);\r\n\r\n return 0 === cmp ? compareIModelTileTreeIds(lhs, rhs) : cmp;\r\n}\r\n\r\nclass ClassifierTreeSupplier implements TileTreeSupplier {\r\n private readonly _nonexistentTreeOwner = {\r\n tileTree: undefined,\r\n loadStatus: TileTreeLoadStatus.NotFound,\r\n load: () => undefined,\r\n dispose: () => undefined,\r\n loadTree: async () => undefined,\r\n iModel: undefined as unknown as IModelConnection,\r\n };\r\n\r\n public compareTileTreeIds(lhs: ClassifierTreeId, rhs: ClassifierTreeId): number {\r\n return compareIds(lhs, rhs);\r\n }\r\n\r\n public async createTileTree(id: ClassifierTreeId, iModel: IModelConnection): Promise<TileTree | undefined> {\r\n await iModel.models.load(id.modelId);\r\n const model = iModel.models.getLoaded(id.modelId);\r\n if (undefined === model || !(model instanceof GeometricModelState))\r\n return undefined;\r\n\r\n const idStr = iModelTileTreeIdToString(id.modelId, id, IModelApp.tileAdmin);\r\n const props = await IModelApp.tileAdmin.requestTileTreeProps(iModel, idStr);\r\n\r\n const params = iModelTileTreeParamsFromJSON(props, iModel, id.modelId, {\r\n edges: false,\r\n allowInstancing: false,\r\n is3d: true,\r\n batchType: id.type,\r\n });\r\n\r\n return new IModelTileTree(params, id);\r\n }\r\n\r\n public getOwner(id: ClassifierTreeId, iModel: IModelConnection): TileTreeOwner {\r\n return Id64.isValid(id.modelId) ? iModel.tiles.getTileTreeOwner(id, this) : this._nonexistentTreeOwner;\r\n }\r\n\r\n public addModelsAnimatedByScript(modelIds: Set<Id64String>, scriptSourceId: Id64String, trees: Iterable<{ id: ClassifierTreeId, owner: TileTreeOwner }>): void {\r\n for (const tree of trees)\r\n if (tree.id.animationId === scriptSourceId)\r\n modelIds.add(tree.id.modelId);\r\n }\r\n\r\n public addSpatialModels(modelIds: Set<Id64String>, trees: Iterable<{ id: ClassifierTreeId, owner: TileTreeOwner }>): void {\r\n for (const tree of trees)\r\n modelIds.add(tree.id.modelId);\r\n }\r\n}\r\n\r\nconst classifierTreeSupplier = new ClassifierTreeSupplier();\r\n\r\n/** @internal */\r\nexport abstract class SpatialClassifierTileTreeReference extends TileTreeReference {\r\n public abstract get isPlanar(): boolean;\r\n public abstract get activeClassifier(): SpatialClassifier | undefined;\r\n public get isOpaque() { return false; } /** When referenced as a map layer reference, BIM models are never opaque. */\r\n public abstract get viewFlags(): Partial<ViewFlagsProperties>;\r\n public get transparency(): number | undefined { return undefined; }\r\n}\r\n\r\n/** @internal */\r\nclass ClassifierTreeReference extends SpatialClassifierTileTreeReference {\r\n private _id: ClassifierTreeId;\r\n private readonly _classifiers: SpatialClassifiers;\r\n private readonly _source: ViewState | DisplayStyleState;\r\n private readonly _iModel: IModelConnection;\r\n private readonly _classifiedTree: TileTreeReference;\r\n private _owner: TileTreeOwner;\r\n\r\n public constructor(classifiers: SpatialClassifiers, classifiedTree: TileTreeReference, iModel: IModelConnection, source: ViewState | DisplayStyleState) {\r\n super();\r\n this._id = createClassifierId(classifiers.active, source);\r\n this._source = source;\r\n this._iModel = iModel;\r\n this._classifiers = classifiers;\r\n this._classifiedTree = classifiedTree;\r\n this._owner = classifierTreeSupplier.getOwner(this._id, iModel);\r\n }\r\n\r\n public get classifiers(): SpatialClassifiers { return this._classifiers; }\r\n public get activeClassifier(): SpatialClassifier | undefined { return this.classifiers.active; }\r\n\r\n public override get castsShadows() {\r\n return false;\r\n }\r\n\r\n public get treeOwner(): TileTreeOwner {\r\n const newId = createClassifierId(this._classifiers.active, this._source);\r\n if (0 !== compareIds(this._id, newId)) {\r\n this._id = newId;\r\n this._owner = classifierTreeSupplier.getOwner(this._id, this._iModel);\r\n }\r\n\r\n return this._owner;\r\n }\r\n\r\n public override discloseTileTrees(trees: DisclosedTileTreeSet): void {\r\n // NB: We do NOT call super because we don't use our tree if no classifier is active.\r\n trees.disclose(this._classifiedTree);\r\n\r\n const classifier = this.activeClassifier;\r\n const classifierTree = undefined !== classifier ? this.treeOwner.tileTree : undefined;\r\n if (undefined !== classifierTree)\r\n trees.add(classifierTree);\r\n }\r\n public get isPlanar() { return BatchType.PlanarClassifier === this._id.type; }\r\n\r\n public get viewFlags(): Partial<ViewFlagsProperties> {\r\n return {\r\n renderMode: RenderMode.SmoothShade,\r\n transparency: true, // Igored for point clouds as they don't support transparency.\r\n textures: false,\r\n lighting: false,\r\n shadows: false,\r\n monochrome: false,\r\n materials: false,\r\n ambientOcclusion: false,\r\n visibleEdges: false,\r\n hiddenEdges: false,\r\n };\r\n }\r\n\r\n // Add volume classifiers to scene (planar classifiers are added seperately.)\r\n public override addToScene(context: SceneContext): void {\r\n if (this.isPlanar)\r\n return;\r\n\r\n const classifiedTree = this._classifiedTree.treeOwner.load();\r\n if (undefined === classifiedTree)\r\n return;\r\n\r\n const classifier = this._classifiers.active;\r\n if (undefined === classifier)\r\n return;\r\n\r\n const classifierTree = this.treeOwner.load();\r\n if (undefined === classifierTree)\r\n return;\r\n\r\n context.setVolumeClassifier(classifier, classifiedTree.modelId);\r\n super.addToScene(context);\r\n }\r\n\r\n}\r\n\r\n/** @internal */\r\nexport function createClassifierTileTreeReference(classifiers: SpatialClassifiers, classifiedTree: TileTreeReference, iModel: IModelConnection, source: ViewState | DisplayStyleState): SpatialClassifierTileTreeReference {\r\n return new ClassifierTreeReference(classifiers, classifiedTree, iModel, source);\r\n}\r\n\r\nfunction createClassifierId(classifier: SpatialClassifier | undefined, source: ViewState | DisplayStyleState | undefined): ClassifierTreeId {\r\n if (undefined === classifier)\r\n return { modelId: Id64.invalid, type: BatchType.PlanarClassifier, expansion: 0, animationId: undefined };\r\n\r\n const type = classifier.flags.isVolumeClassifier ? BatchType.VolumeClassifier : BatchType.PlanarClassifier;\r\n const script = source?.scheduleState;\r\n const animationId = (undefined !== script) ? script.getModelAnimationId(classifier.modelId) : undefined;\r\n return {\r\n modelId: classifier.modelId,\r\n type,\r\n expansion: classifier.expand,\r\n animationId,\r\n };\r\n}\r\n"]}
1
+ {"version":3,"file":"ClassifierTileTree.js","sourceRoot":"","sources":["../../../src/tile/ClassifierTileTree.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 Tiles\r\n */\r\nimport { comparePossiblyUndefined, compareStrings, compareStringsOrUndefined, Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport {\r\n BatchType, ClassifierTileTreeId, iModelTileTreeIdToString, RenderMode, RenderSchedule, SpatialClassifier, SpatialClassifiers, ViewFlagsProperties,\r\n} from \"@itwin/core-common\";\r\nimport { DisplayStyleState } from \"../DisplayStyleState\";\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { GeometricModelState } from \"../ModelState\";\r\nimport { SceneContext } from \"../ViewContext\";\r\nimport { ViewState } from \"../ViewState\";\r\nimport {\r\n DisclosedTileTreeSet, IModelTileTree, iModelTileTreeParamsFromJSON, TileTree, TileTreeLoadStatus, TileTreeOwner, TileTreeReference, TileTreeSupplier,\r\n} from \"./internal\";\r\n\r\ninterface ClassifierTreeId extends ClassifierTileTreeId {\r\n modelId: Id64String;\r\n timeline?: RenderSchedule.ModelTimeline;\r\n}\r\n\r\nfunction compareIds(lhs: ClassifierTreeId, rhs: ClassifierTreeId): number {\r\n return compareStrings(lhs.modelId, rhs.modelId) || compareStringsOrUndefined(lhs.animationId, rhs.animationId)\r\n || comparePossiblyUndefined((x, y) => x.compareTo(y), lhs.timeline, rhs.timeline);\r\n}\r\n\r\nclass ClassifierTreeSupplier implements TileTreeSupplier {\r\n private readonly _nonexistentTreeOwner = {\r\n tileTree: undefined,\r\n loadStatus: TileTreeLoadStatus.NotFound,\r\n load: () => undefined,\r\n dispose: () => undefined,\r\n loadTree: async () => undefined,\r\n iModel: undefined as unknown as IModelConnection,\r\n };\r\n\r\n public compareTileTreeIds(lhs: ClassifierTreeId, rhs: ClassifierTreeId): number {\r\n return compareIds(lhs, rhs);\r\n }\r\n\r\n public async createTileTree(id: ClassifierTreeId, iModel: IModelConnection): Promise<TileTree | undefined> {\r\n await iModel.models.load(id.modelId);\r\n const model = iModel.models.getLoaded(id.modelId);\r\n if (undefined === model || !(model instanceof GeometricModelState))\r\n return undefined;\r\n\r\n const idStr = iModelTileTreeIdToString(id.modelId, id, IModelApp.tileAdmin);\r\n const props = await IModelApp.tileAdmin.requestTileTreeProps(iModel, idStr);\r\n\r\n const params = iModelTileTreeParamsFromJSON(props, iModel, id.modelId, {\r\n edges: false,\r\n allowInstancing: false,\r\n is3d: true,\r\n batchType: id.type,\r\n timeline: id.timeline,\r\n });\r\n\r\n return new IModelTileTree(params, id);\r\n }\r\n\r\n public getOwner(id: ClassifierTreeId, iModel: IModelConnection): TileTreeOwner {\r\n return Id64.isValid(id.modelId) ? iModel.tiles.getTileTreeOwner(id, this) : this._nonexistentTreeOwner;\r\n }\r\n\r\n public addModelsAnimatedByScript(modelIds: Set<Id64String>, scriptSourceId: Id64String, trees: Iterable<{ id: ClassifierTreeId, owner: TileTreeOwner }>): void {\r\n // Note: This is invoked when an element hosting a schedule script is updated - it doesn't care about frontend schedule scripts.\r\n for (const tree of trees)\r\n if (scriptSourceId === tree.id.animationId)\r\n modelIds.add(tree.id.modelId);\r\n }\r\n\r\n public addSpatialModels(modelIds: Set<Id64String>, trees: Iterable<{ id: ClassifierTreeId, owner: TileTreeOwner }>): void {\r\n for (const tree of trees)\r\n modelIds.add(tree.id.modelId);\r\n }\r\n}\r\n\r\nconst classifierTreeSupplier = new ClassifierTreeSupplier();\r\n\r\n/** @internal */\r\nexport abstract class SpatialClassifierTileTreeReference extends TileTreeReference {\r\n public abstract get isPlanar(): boolean;\r\n public abstract get activeClassifier(): SpatialClassifier | undefined;\r\n public get isOpaque() { return false; } /** When referenced as a map layer reference, BIM models are never opaque. */\r\n public abstract get viewFlags(): Partial<ViewFlagsProperties>;\r\n public get transparency(): number | undefined { return undefined; }\r\n}\r\n\r\n/** @internal */\r\nclass ClassifierTreeReference extends SpatialClassifierTileTreeReference {\r\n private _id: ClassifierTreeId;\r\n private readonly _classifiers: SpatialClassifiers;\r\n private readonly _source: ViewState | DisplayStyleState;\r\n private readonly _iModel: IModelConnection;\r\n private readonly _classifiedTree: TileTreeReference;\r\n private _owner: TileTreeOwner;\r\n\r\n public constructor(classifiers: SpatialClassifiers, classifiedTree: TileTreeReference, iModel: IModelConnection, source: ViewState | DisplayStyleState) {\r\n super();\r\n this._id = createClassifierId(classifiers.active, source);\r\n this._source = source;\r\n this._iModel = iModel;\r\n this._classifiers = classifiers;\r\n this._classifiedTree = classifiedTree;\r\n this._owner = classifierTreeSupplier.getOwner(this._id, iModel);\r\n }\r\n\r\n public get classifiers(): SpatialClassifiers { return this._classifiers; }\r\n public get activeClassifier(): SpatialClassifier | undefined { return this.classifiers.active; }\r\n\r\n public override get castsShadows() {\r\n return false;\r\n }\r\n\r\n public get treeOwner(): TileTreeOwner {\r\n const newId = createClassifierId(this._classifiers.active, this._source);\r\n if (0 !== compareIds(this._id, newId)) {\r\n this._id = newId;\r\n this._owner = classifierTreeSupplier.getOwner(this._id, this._iModel);\r\n }\r\n\r\n return this._owner;\r\n }\r\n\r\n public override discloseTileTrees(trees: DisclosedTileTreeSet): void {\r\n // NB: We do NOT call super because we don't use our tree if no classifier is active.\r\n trees.disclose(this._classifiedTree);\r\n\r\n const classifier = this.activeClassifier;\r\n const classifierTree = undefined !== classifier ? this.treeOwner.tileTree : undefined;\r\n if (undefined !== classifierTree)\r\n trees.add(classifierTree);\r\n }\r\n public get isPlanar() { return BatchType.PlanarClassifier === this._id.type; }\r\n\r\n public get viewFlags(): Partial<ViewFlagsProperties> {\r\n return {\r\n renderMode: RenderMode.SmoothShade,\r\n transparency: true, // Igored for point clouds as they don't support transparency.\r\n textures: false,\r\n lighting: false,\r\n shadows: false,\r\n monochrome: false,\r\n materials: false,\r\n ambientOcclusion: false,\r\n visibleEdges: false,\r\n hiddenEdges: false,\r\n };\r\n }\r\n\r\n // Add volume classifiers to scene (planar classifiers are added seperately.)\r\n public override addToScene(context: SceneContext): void {\r\n if (this.isPlanar)\r\n return;\r\n\r\n const classifiedTree = this._classifiedTree.treeOwner.load();\r\n if (undefined === classifiedTree)\r\n return;\r\n\r\n const classifier = this._classifiers.active;\r\n if (undefined === classifier)\r\n return;\r\n\r\n const classifierTree = this.treeOwner.load();\r\n if (undefined === classifierTree)\r\n return;\r\n\r\n context.setVolumeClassifier(classifier, classifiedTree.modelId);\r\n super.addToScene(context);\r\n }\r\n\r\n}\r\n\r\n/** @internal */\r\nexport function createClassifierTileTreeReference(classifiers: SpatialClassifiers, classifiedTree: TileTreeReference, iModel: IModelConnection, source: ViewState | DisplayStyleState): SpatialClassifierTileTreeReference {\r\n return new ClassifierTreeReference(classifiers, classifiedTree, iModel, source);\r\n}\r\n\r\nfunction createClassifierId(classifier: SpatialClassifier | undefined, source: ViewState | DisplayStyleState | undefined): ClassifierTreeId {\r\n if (undefined === classifier)\r\n return { modelId: Id64.invalid, type: BatchType.PlanarClassifier, expansion: 0, animationId: undefined };\r\n\r\n const type = classifier.flags.isVolumeClassifier ? BatchType.VolumeClassifier : BatchType.PlanarClassifier;\r\n const scriptInfo = IModelApp.tileAdmin.getScriptInfoForTreeId(classifier.modelId, source?.scheduleScriptReference); // eslint-disable-line deprecation/deprecation\r\n return {\r\n modelId: classifier.modelId,\r\n type,\r\n expansion: classifier.expand,\r\n animationId: scriptInfo?.animationId,\r\n timeline: scriptInfo?.timeline,\r\n };\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"IModelTile.d.ts","sourceRoot":"","sources":["../../../src/tile/IModelTile.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAwB,WAAW,EAAc,MAAM,qBAAqB,CAAC;AAEpF,OAAO,EACL,QAAQ,EAAyH,SAAS,EAC3I,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EACwB,cAAc,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAkB,UAAU,EAAE,WAAW,EACxI,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,UAAU;IAClD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,gBAAgB;AAChB,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,gBAAgB,CAS3G;AAED;;;GAGG;AACH,oBAAY,YAAY;IACtB,EAAE,IAAA;IACF,GAAG,IAAA;CACJ;AAED,gBAAgB;AAChB,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IACpD,0FAA0F;IAC1F,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,IAAI;IAClC,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,OAAO,CAAC,kBAAkB,CAAC,CAAS;IACpC;;OAEG;IACI,cAAc,CAAC,EAAE,kBAAkB,CAAC;gBAExB,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,cAAc;IAYjE,IAAW,UAAU,IAAI,cAAc,CAAwC;IAC/E,IAAW,cAAc,IAAI,UAAU,EAAE,GAAG,SAAS,CAAsD;IAC3G,IAAW,iBAAiB,IAAI,MAAM,CAAyC;IAE/E,IAAW,cAAc,IAAI,MAAM,GAAG,SAAS,CAAiC;IAChF,IAAW,iBAAiB,YAAgD;IAC5E,IAAoB,WAAW,IAAI,MAAM,CAExC;IAED,IAAW,OAAO,IAAI,kBAAkB,CAEvC;IAEY,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;IAI/C,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAsCtH,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAoB5D,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAkBlG,cAAuB,iBAAiB,IAAI,QAAQ,CAEnD;cAEkB,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI;IAgBnF,aAAa,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;IAc3C,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY;CAkI3F"}
1
+ {"version":3,"file":"IModelTile.d.ts","sourceRoot":"","sources":["../../../src/tile/IModelTile.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAwB,WAAW,EAAc,MAAM,qBAAqB,CAAC;AAEpF,OAAO,EACL,QAAQ,EAAyH,SAAS,EAC3I,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EACwB,cAAc,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAkB,UAAU,EAAE,WAAW,EACxI,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,UAAU;IAClD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,gBAAgB;AAChB,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,gBAAgB,CAS3G;AAED;;;GAGG;AACH,oBAAY,YAAY;IACtB,EAAE,IAAA;IACF,GAAG,IAAA;CACJ;AAED,gBAAgB;AAChB,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IACpD,0FAA0F;IAC1F,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,IAAI;IAClC,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,OAAO,CAAC,kBAAkB,CAAC,CAAS;IACpC;;OAEG;IACI,cAAc,CAAC,EAAE,kBAAkB,CAAC;gBAExB,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,cAAc;IAYjE,IAAW,UAAU,IAAI,cAAc,CAAwC;IAC/E,IAAW,cAAc,IAAI,UAAU,EAAE,GAAG,SAAS,CAAsD;IAC3G,IAAW,iBAAiB,IAAI,MAAM,CAAyC;IAE/E,IAAW,cAAc,IAAI,MAAM,GAAG,SAAS,CAAiC;IAChF,IAAW,iBAAiB,YAAgD;IAC5E,IAAoB,WAAW,IAAI,MAAM,CAExC;IAED,IAAW,OAAO,IAAI,kBAAkB,CAEvC;IAEY,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;IAI/C,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAuCtH,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI;IAoB5D,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAkBlG,cAAuB,iBAAiB,IAAI,QAAQ,CAEnD;cAEkB,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI;IAgBnF,aAAa,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;IAc3C,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY;CAkI3F"}
@@ -77,6 +77,7 @@ export class IModelTile extends Tile {
77
77
  type: tree.batchType,
78
78
  loadEdges: false !== tree.edgeOptions,
79
79
  options: { tileId: this.contentId },
80
+ timeline: tree.timeline,
80
81
  iModel, modelId, is3d, system, isCanceled, sizeMultiplier, containsTransformNodes,
81
82
  });
82
83
  if (undefined !== reader) {
@@ -1 +1 @@
1
- {"version":3,"file":"IModelTile.js","sourceRoot":"","sources":["../../../src/tile/IModelTile.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 Tiles\r\n */\r\n\r\nimport { assert, BentleyError, BeTimePoint, ByteStream } from \"@itwin/core-bentley\";\r\nimport { Range3d } from \"@itwin/core-geometry\";\r\nimport {\r\n ColorDef, computeChildTileProps, computeChildTileRanges, computeTileChordTolerance, ElementAlignedBox3d, LinePixels, TileFormat, TileProps,\r\n} from \"@itwin/core-common\";\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { GraphicBuilder } from \"../render/GraphicBuilder\";\r\nimport { RenderSystem } from \"../render/RenderSystem\";\r\nimport {\r\n addRangeGraphic, ImdlReader, IModelTileTree, Tile, TileBoundingBoxes, TileContent, TileDrawArgs, TileLoadStatus, TileParams, TileRequest,\r\n TileRequestChannel, TileTreeLoadStatus, TileVisibility,\r\n} from \"./internal\";\r\n\r\n/** Parameters used to construct an [[IModelTile]].\r\n * @internal\r\n */\r\nexport interface IModelTileParams extends TileParams {\r\n sizeMultiplier?: number;\r\n}\r\n\r\n/** @internal */\r\nexport function iModelTileParamsFromJSON(props: TileProps, parent: IModelTile | undefined): IModelTileParams {\r\n const { contentId, maximumSize, isLeaf, sizeMultiplier } = props;\r\n const range = Range3d.fromJSON(props.range);\r\n\r\n let contentRange;\r\n if (undefined !== props.contentRange)\r\n contentRange = Range3d.fromJSON<ElementAlignedBox3d>(props.contentRange);\r\n\r\n return { contentId, range, maximumSize, isLeaf, parent, contentRange, sizeMultiplier };\r\n}\r\n\r\n/**\r\n * Indicates whether a parent tile should be drawn in place of a child tile.\r\n * @internal\r\n */\r\nexport enum SelectParent {\r\n No,\r\n Yes,\r\n}\r\n\r\n/** @internal */\r\nexport interface IModelTileContent extends TileContent {\r\n /** If this tile was produced by refinement, the multiplier applied to its screen size. */\r\n sizeMultiplier?: number;\r\n /** A bitfield describing empty sub-volumes of this tile's volume. */\r\n emptySubRangeMask?: number;\r\n}\r\n\r\n/** A tile belonging to an [[IModelTileTree].\r\n * @internal\r\n */\r\nexport class IModelTile extends Tile {\r\n private _sizeMultiplier?: number;\r\n private _emptySubRangeMask?: number;\r\n /** If an initial attempt to obtain this tile's content (e.g., from cloud storage cache) failed,\r\n * the next channel to try.\r\n */\r\n public requestChannel?: TileRequestChannel;\r\n\r\n public constructor(params: IModelTileParams, tree: IModelTileTree) {\r\n super(params, tree);\r\n this._sizeMultiplier = params.sizeMultiplier;\r\n\r\n if (!this.isLeaf && this.tree.is3d && !this.isReady) { // ###TODO: Want to know specifically if tree is *spatial*.\r\n // Do not sub-divide such that chord tolerance would be below specified minimum, if minimum defined.\r\n const minTolerance = IModelApp.tileAdmin.minimumSpatialTolerance;\r\n if (minTolerance > 0 && computeTileChordTolerance(this, this.tree.is3d, this.iModelTree.tileScreenSize) <= minTolerance)\r\n this.setLeaf();\r\n }\r\n }\r\n\r\n public get iModelTree(): IModelTileTree { return this.tree as IModelTileTree; }\r\n public get iModelChildren(): IModelTile[] | undefined { return this.children as IModelTile[] | undefined; }\r\n public get emptySubRangeMask(): number { return this._emptySubRangeMask ?? 0; }\r\n\r\n public get sizeMultiplier(): number | undefined { return this._sizeMultiplier; }\r\n public get hasSizeMultiplier() { return undefined !== this.sizeMultiplier; }\r\n public override get maximumSize(): number {\r\n return super.maximumSize * (this.sizeMultiplier ?? 1.0);\r\n }\r\n\r\n public get channel(): TileRequestChannel {\r\n return IModelApp.tileAdmin.channels.getIModelTileChannel(this);\r\n }\r\n\r\n public async requestContent(): Promise<TileRequest.Response> {\r\n return IModelApp.tileAdmin.generateTileContent(this);\r\n }\r\n\r\n public async readContent(data: TileRequest.ResponseData, system: RenderSystem, isCanceled?: () => boolean): Promise<IModelTileContent> {\r\n if (undefined === isCanceled)\r\n isCanceled = () => !this.isLoading;\r\n\r\n assert(data instanceof Uint8Array);\r\n const streamBuffer = ByteStream.fromUint8Array(data);\r\n\r\n const position = streamBuffer.curPos;\r\n const format = streamBuffer.nextUint32;\r\n streamBuffer.curPos = position;\r\n\r\n let content: IModelTileContent = { isLeaf: true };\r\n assert(TileFormat.IModel === format);\r\n if (format !== TileFormat.IModel)\r\n return content;\r\n\r\n const tree = this.iModelTree;\r\n const sizeMultiplier = this.hasSizeMultiplier ? this.sizeMultiplier : undefined;\r\n const { iModel, modelId, is3d, containsTransformNodes } = tree;\r\n const reader = ImdlReader.create({\r\n stream: streamBuffer,\r\n type: tree.batchType,\r\n loadEdges: false !== tree.edgeOptions,\r\n options: { tileId: this.contentId },\r\n iModel, modelId, is3d, system, isCanceled, sizeMultiplier, containsTransformNodes,\r\n });\r\n\r\n if (undefined !== reader) {\r\n try {\r\n content = await reader.read();\r\n } catch {\r\n //\r\n }\r\n }\r\n\r\n return content;\r\n }\r\n\r\n public override setContent(content: IModelTileContent): void {\r\n super.setContent(content);\r\n\r\n this._emptySubRangeMask = content.emptySubRangeMask;\r\n\r\n // NB: If this tile has no graphics, it may or may not have children - but we don't want to load the children until\r\n // this tile is too coarse for view based on its size in pixels.\r\n // That is different than an \"undisplayable\" tile (maximumSize=0) whose children should be loaded immediately.\r\n if (undefined !== content.graphic && 0 === this.maximumSize)\r\n this._maximumSize = this.iModelTree.tileScreenSize;\r\n\r\n const sizeMult = content.sizeMultiplier;\r\n if (undefined !== sizeMult && (undefined === this._sizeMultiplier || sizeMult > this._sizeMultiplier)) {\r\n this._sizeMultiplier = sizeMult;\r\n this._contentId = this.iModelTree.contentIdProvider.idFromParentAndMultiplier(this.contentId, sizeMult);\r\n if (undefined !== this.children && this.children.length > 1)\r\n this.disposeChildren();\r\n }\r\n }\r\n\r\n protected _loadChildren(resolve: (children: Tile[]) => void, reject: (error: Error) => void): void {\r\n try {\r\n const tree = this.iModelTree;\r\n const kids = computeChildTileProps(this, tree.contentIdProvider, tree);\r\n IModelApp.tileAdmin.onTilesElided(kids.numEmpty);\r\n\r\n const children: IModelTile[] = [];\r\n for (const props of kids.children) {\r\n const child = new IModelTile(iModelTileParamsFromJSON(props, this), tree);\r\n children.push(child);\r\n }\r\n\r\n resolve(children);\r\n } catch (err) {\r\n reject(err instanceof Error ? err : new Error(BentleyError.getErrorMessage(err)));\r\n }\r\n }\r\n\r\n protected override get rangeGraphicColor(): ColorDef {\r\n return this.hasSizeMultiplier ? ColorDef.red : super.rangeGraphicColor;\r\n }\r\n\r\n protected override addRangeGraphic(builder: GraphicBuilder, type: TileBoundingBoxes): void {\r\n if (TileBoundingBoxes.ChildVolumes !== type) {\r\n super.addRangeGraphic(builder, type);\r\n return;\r\n }\r\n\r\n const ranges = computeChildTileRanges(this, this.iModelTree);\r\n for (const range of ranges) {\r\n const color = range.isEmpty ? ColorDef.blue : ColorDef.green;\r\n const pixels = !range.isEmpty ? LinePixels.HiddenLine : LinePixels.Solid;\r\n const width = !range.isEmpty ? 2 : 1;\r\n builder.setSymbology(color, color, width, pixels);\r\n addRangeGraphic(builder, range.range, this.tree.is2d);\r\n }\r\n }\r\n\r\n public pruneChildren(olderThan: BeTimePoint): void {\r\n // A tile's usage marker indicates its the most recent time its *children* were used.\r\n if (this.usageMarker.isExpired(olderThan)) {\r\n this.disposeChildren();\r\n return;\r\n }\r\n\r\n // this node has been used recently. Keep it, but potentially unload its grandchildren.\r\n const children = this.iModelChildren;\r\n if (undefined !== children)\r\n for (const child of children)\r\n child.pruneChildren(olderThan);\r\n }\r\n\r\n public selectTiles(selected: Tile[], args: TileDrawArgs, numSkipped: number): SelectParent {\r\n let vis = this.computeVisibility(args);\r\n if (TileVisibility.OutsideFrustum === vis)\r\n return SelectParent.No;\r\n\r\n const maxDepth = this.iModelTree.debugMaxDepth;\r\n if (undefined !== maxDepth && this.depth >= maxDepth)\r\n vis = TileVisibility.Visible;\r\n\r\n if (TileVisibility.Visible === vis) {\r\n // This tile is of appropriate resolution to draw. If need loading or refinement, enqueue.\r\n if (!this.isReady)\r\n args.insertMissing(this);\r\n\r\n if (this.hasGraphics) {\r\n // It can be drawn - select it\r\n args.markReady(this);\r\n selected.push(this);\r\n } else if (!this.isReady) {\r\n // It can't be drawn. Try to draw children in its place; otherwise draw the parent.\r\n // Do not load/request the children for this purpose.\r\n const initialSize = selected.length;\r\n const kids = this.iModelChildren;\r\n if (undefined === kids)\r\n return SelectParent.Yes;\r\n\r\n // Find any descendant to draw, until we exceed max initial tiles to skip.\r\n if (this.depth < this.iModelTree.maxInitialTilesToSkip) {\r\n for (const kid of kids) {\r\n if (SelectParent.Yes === kid.selectTiles(selected, args, numSkipped)) {\r\n selected.length = initialSize;\r\n return SelectParent.Yes;\r\n }\r\n\r\n return SelectParent.No;\r\n }\r\n }\r\n\r\n // If all visible direct children can be drawn, draw them.\r\n for (const kid of kids) {\r\n if (TileVisibility.OutsideFrustum !== kid.computeVisibility(args)) {\r\n if (!kid.hasGraphics) {\r\n selected.length = initialSize;\r\n return SelectParent.Yes;\r\n } else {\r\n selected.push(kid);\r\n }\r\n }\r\n }\r\n\r\n args.markUsed(this);\r\n }\r\n\r\n // We're drawing either this tile, or its direct children.\r\n return SelectParent.No;\r\n }\r\n\r\n // This tile is too coarse to draw. Try to draw something more appropriate.\r\n // If it is not ready to draw, we may want to skip loading in favor of loading its descendants.\r\n // If we previously loaded and later unloaded content for this tile to free memory, don't force it to reload its content - proceed to children.\r\n let canSkipThisTile = (this._hadGraphics && !this.hasGraphics) || this.depth < this.iModelTree.maxInitialTilesToSkip;\r\n if (canSkipThisTile) {\r\n numSkipped = 1;\r\n } else {\r\n canSkipThisTile = this.isReady || this.isParentDisplayable || this.depth < this.iModelTree.maxInitialTilesToSkip;\r\n if (canSkipThisTile && this.isDisplayable) { // skipping an undisplayable tile doesn't count toward the maximum\r\n // Some tiles do not sub-divide - they only facet the same geometry to a higher resolution. We can skip directly to the correct resolution.\r\n const isNotReady = !this.isReady && !this.hasGraphics && !this.hasSizeMultiplier;\r\n if (isNotReady) {\r\n if (numSkipped >= this.iModelTree.maxTilesToSkip)\r\n canSkipThisTile = false;\r\n else\r\n numSkipped += 1;\r\n }\r\n }\r\n }\r\n\r\n const childrenLoadStatus = this.loadChildren(); // NB: asynchronous\r\n const children = canSkipThisTile ? this.iModelChildren : undefined;\r\n if (canSkipThisTile && TileTreeLoadStatus.Loading === childrenLoadStatus) {\r\n args.markChildrenLoading();\r\n args.markUsed(this);\r\n }\r\n\r\n if (undefined !== children) {\r\n // If we are the root tile and we are not displayable, then we want to draw *any* currently available children in our place, or else we would draw nothing.\r\n // Otherwise, if we want to draw children in our place, we should wait for *all* of them to load, or else we would show missing chunks where not-yet-loaded children belong.\r\n const isUndisplayableRootTile = this.isUndisplayableRootTile;\r\n args.markUsed(this);\r\n let drawChildren = true;\r\n const initialSize = selected.length;\r\n for (const child of children) {\r\n // NB: We must continue iterating children so that they can be requested if missing.\r\n if (SelectParent.Yes === child.selectTiles(selected, args, numSkipped)) {\r\n if (child.loadStatus === TileLoadStatus.NotFound) {\r\n // At least one child we want to draw failed to load. e.g., we reached max depth of map tile tree. Draw parent instead.\r\n drawChildren = canSkipThisTile = false;\r\n } else {\r\n // At least one child we want to draw is not yet loaded. Wait for it to load before drawing it and its siblings, unless we have nothing to draw in their place.\r\n drawChildren = isUndisplayableRootTile;\r\n }\r\n }\r\n }\r\n\r\n if (drawChildren)\r\n return SelectParent.No;\r\n\r\n // Some types of tiles (like maps) allow the ready children to be drawn on top of the parent while other children are not yet loaded.\r\n if (args.parentsAndChildrenExclusive)\r\n selected.length = initialSize;\r\n }\r\n\r\n if (this.isReady) {\r\n if (this.hasGraphics) {\r\n selected.push(this);\r\n if (!canSkipThisTile) {\r\n // This tile is too coarse, but we require loading it before we can start loading higher-res children.\r\n args.markReady(this);\r\n }\r\n }\r\n\r\n return SelectParent.No;\r\n }\r\n\r\n // This tile is not ready to be drawn. Request it *only* if we cannot skip it.\r\n if (!canSkipThisTile)\r\n args.insertMissing(this);\r\n\r\n return this.isParentDisplayable ? SelectParent.Yes : SelectParent.No;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"IModelTile.js","sourceRoot":"","sources":["../../../src/tile/IModelTile.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 Tiles\r\n */\r\n\r\nimport { assert, BentleyError, BeTimePoint, ByteStream } from \"@itwin/core-bentley\";\r\nimport { Range3d } from \"@itwin/core-geometry\";\r\nimport {\r\n ColorDef, computeChildTileProps, computeChildTileRanges, computeTileChordTolerance, ElementAlignedBox3d, LinePixels, TileFormat, TileProps,\r\n} from \"@itwin/core-common\";\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { GraphicBuilder } from \"../render/GraphicBuilder\";\r\nimport { RenderSystem } from \"../render/RenderSystem\";\r\nimport {\r\n addRangeGraphic, ImdlReader, IModelTileTree, Tile, TileBoundingBoxes, TileContent, TileDrawArgs, TileLoadStatus, TileParams, TileRequest,\r\n TileRequestChannel, TileTreeLoadStatus, TileVisibility,\r\n} from \"./internal\";\r\n\r\n/** Parameters used to construct an [[IModelTile]].\r\n * @internal\r\n */\r\nexport interface IModelTileParams extends TileParams {\r\n sizeMultiplier?: number;\r\n}\r\n\r\n/** @internal */\r\nexport function iModelTileParamsFromJSON(props: TileProps, parent: IModelTile | undefined): IModelTileParams {\r\n const { contentId, maximumSize, isLeaf, sizeMultiplier } = props;\r\n const range = Range3d.fromJSON(props.range);\r\n\r\n let contentRange;\r\n if (undefined !== props.contentRange)\r\n contentRange = Range3d.fromJSON<ElementAlignedBox3d>(props.contentRange);\r\n\r\n return { contentId, range, maximumSize, isLeaf, parent, contentRange, sizeMultiplier };\r\n}\r\n\r\n/**\r\n * Indicates whether a parent tile should be drawn in place of a child tile.\r\n * @internal\r\n */\r\nexport enum SelectParent {\r\n No,\r\n Yes,\r\n}\r\n\r\n/** @internal */\r\nexport interface IModelTileContent extends TileContent {\r\n /** If this tile was produced by refinement, the multiplier applied to its screen size. */\r\n sizeMultiplier?: number;\r\n /** A bitfield describing empty sub-volumes of this tile's volume. */\r\n emptySubRangeMask?: number;\r\n}\r\n\r\n/** A tile belonging to an [[IModelTileTree].\r\n * @internal\r\n */\r\nexport class IModelTile extends Tile {\r\n private _sizeMultiplier?: number;\r\n private _emptySubRangeMask?: number;\r\n /** If an initial attempt to obtain this tile's content (e.g., from cloud storage cache) failed,\r\n * the next channel to try.\r\n */\r\n public requestChannel?: TileRequestChannel;\r\n\r\n public constructor(params: IModelTileParams, tree: IModelTileTree) {\r\n super(params, tree);\r\n this._sizeMultiplier = params.sizeMultiplier;\r\n\r\n if (!this.isLeaf && this.tree.is3d && !this.isReady) { // ###TODO: Want to know specifically if tree is *spatial*.\r\n // Do not sub-divide such that chord tolerance would be below specified minimum, if minimum defined.\r\n const minTolerance = IModelApp.tileAdmin.minimumSpatialTolerance;\r\n if (minTolerance > 0 && computeTileChordTolerance(this, this.tree.is3d, this.iModelTree.tileScreenSize) <= minTolerance)\r\n this.setLeaf();\r\n }\r\n }\r\n\r\n public get iModelTree(): IModelTileTree { return this.tree as IModelTileTree; }\r\n public get iModelChildren(): IModelTile[] | undefined { return this.children as IModelTile[] | undefined; }\r\n public get emptySubRangeMask(): number { return this._emptySubRangeMask ?? 0; }\r\n\r\n public get sizeMultiplier(): number | undefined { return this._sizeMultiplier; }\r\n public get hasSizeMultiplier() { return undefined !== this.sizeMultiplier; }\r\n public override get maximumSize(): number {\r\n return super.maximumSize * (this.sizeMultiplier ?? 1.0);\r\n }\r\n\r\n public get channel(): TileRequestChannel {\r\n return IModelApp.tileAdmin.channels.getIModelTileChannel(this);\r\n }\r\n\r\n public async requestContent(): Promise<TileRequest.Response> {\r\n return IModelApp.tileAdmin.generateTileContent(this);\r\n }\r\n\r\n public async readContent(data: TileRequest.ResponseData, system: RenderSystem, isCanceled?: () => boolean): Promise<IModelTileContent> {\r\n if (undefined === isCanceled)\r\n isCanceled = () => !this.isLoading;\r\n\r\n assert(data instanceof Uint8Array);\r\n const streamBuffer = ByteStream.fromUint8Array(data);\r\n\r\n const position = streamBuffer.curPos;\r\n const format = streamBuffer.nextUint32;\r\n streamBuffer.curPos = position;\r\n\r\n let content: IModelTileContent = { isLeaf: true };\r\n assert(TileFormat.IModel === format);\r\n if (format !== TileFormat.IModel)\r\n return content;\r\n\r\n const tree = this.iModelTree;\r\n const sizeMultiplier = this.hasSizeMultiplier ? this.sizeMultiplier : undefined;\r\n const { iModel, modelId, is3d, containsTransformNodes } = tree;\r\n const reader = ImdlReader.create({\r\n stream: streamBuffer,\r\n type: tree.batchType,\r\n loadEdges: false !== tree.edgeOptions,\r\n options: { tileId: this.contentId },\r\n timeline: tree.timeline,\r\n iModel, modelId, is3d, system, isCanceled, sizeMultiplier, containsTransformNodes,\r\n });\r\n\r\n if (undefined !== reader) {\r\n try {\r\n content = await reader.read();\r\n } catch {\r\n //\r\n }\r\n }\r\n\r\n return content;\r\n }\r\n\r\n public override setContent(content: IModelTileContent): void {\r\n super.setContent(content);\r\n\r\n this._emptySubRangeMask = content.emptySubRangeMask;\r\n\r\n // NB: If this tile has no graphics, it may or may not have children - but we don't want to load the children until\r\n // this tile is too coarse for view based on its size in pixels.\r\n // That is different than an \"undisplayable\" tile (maximumSize=0) whose children should be loaded immediately.\r\n if (undefined !== content.graphic && 0 === this.maximumSize)\r\n this._maximumSize = this.iModelTree.tileScreenSize;\r\n\r\n const sizeMult = content.sizeMultiplier;\r\n if (undefined !== sizeMult && (undefined === this._sizeMultiplier || sizeMult > this._sizeMultiplier)) {\r\n this._sizeMultiplier = sizeMult;\r\n this._contentId = this.iModelTree.contentIdProvider.idFromParentAndMultiplier(this.contentId, sizeMult);\r\n if (undefined !== this.children && this.children.length > 1)\r\n this.disposeChildren();\r\n }\r\n }\r\n\r\n protected _loadChildren(resolve: (children: Tile[]) => void, reject: (error: Error) => void): void {\r\n try {\r\n const tree = this.iModelTree;\r\n const kids = computeChildTileProps(this, tree.contentIdProvider, tree);\r\n IModelApp.tileAdmin.onTilesElided(kids.numEmpty);\r\n\r\n const children: IModelTile[] = [];\r\n for (const props of kids.children) {\r\n const child = new IModelTile(iModelTileParamsFromJSON(props, this), tree);\r\n children.push(child);\r\n }\r\n\r\n resolve(children);\r\n } catch (err) {\r\n reject(err instanceof Error ? err : new Error(BentleyError.getErrorMessage(err)));\r\n }\r\n }\r\n\r\n protected override get rangeGraphicColor(): ColorDef {\r\n return this.hasSizeMultiplier ? ColorDef.red : super.rangeGraphicColor;\r\n }\r\n\r\n protected override addRangeGraphic(builder: GraphicBuilder, type: TileBoundingBoxes): void {\r\n if (TileBoundingBoxes.ChildVolumes !== type) {\r\n super.addRangeGraphic(builder, type);\r\n return;\r\n }\r\n\r\n const ranges = computeChildTileRanges(this, this.iModelTree);\r\n for (const range of ranges) {\r\n const color = range.isEmpty ? ColorDef.blue : ColorDef.green;\r\n const pixels = !range.isEmpty ? LinePixels.HiddenLine : LinePixels.Solid;\r\n const width = !range.isEmpty ? 2 : 1;\r\n builder.setSymbology(color, color, width, pixels);\r\n addRangeGraphic(builder, range.range, this.tree.is2d);\r\n }\r\n }\r\n\r\n public pruneChildren(olderThan: BeTimePoint): void {\r\n // A tile's usage marker indicates its the most recent time its *children* were used.\r\n if (this.usageMarker.isExpired(olderThan)) {\r\n this.disposeChildren();\r\n return;\r\n }\r\n\r\n // this node has been used recently. Keep it, but potentially unload its grandchildren.\r\n const children = this.iModelChildren;\r\n if (undefined !== children)\r\n for (const child of children)\r\n child.pruneChildren(olderThan);\r\n }\r\n\r\n public selectTiles(selected: Tile[], args: TileDrawArgs, numSkipped: number): SelectParent {\r\n let vis = this.computeVisibility(args);\r\n if (TileVisibility.OutsideFrustum === vis)\r\n return SelectParent.No;\r\n\r\n const maxDepth = this.iModelTree.debugMaxDepth;\r\n if (undefined !== maxDepth && this.depth >= maxDepth)\r\n vis = TileVisibility.Visible;\r\n\r\n if (TileVisibility.Visible === vis) {\r\n // This tile is of appropriate resolution to draw. If need loading or refinement, enqueue.\r\n if (!this.isReady)\r\n args.insertMissing(this);\r\n\r\n if (this.hasGraphics) {\r\n // It can be drawn - select it\r\n args.markReady(this);\r\n selected.push(this);\r\n } else if (!this.isReady) {\r\n // It can't be drawn. Try to draw children in its place; otherwise draw the parent.\r\n // Do not load/request the children for this purpose.\r\n const initialSize = selected.length;\r\n const kids = this.iModelChildren;\r\n if (undefined === kids)\r\n return SelectParent.Yes;\r\n\r\n // Find any descendant to draw, until we exceed max initial tiles to skip.\r\n if (this.depth < this.iModelTree.maxInitialTilesToSkip) {\r\n for (const kid of kids) {\r\n if (SelectParent.Yes === kid.selectTiles(selected, args, numSkipped)) {\r\n selected.length = initialSize;\r\n return SelectParent.Yes;\r\n }\r\n\r\n return SelectParent.No;\r\n }\r\n }\r\n\r\n // If all visible direct children can be drawn, draw them.\r\n for (const kid of kids) {\r\n if (TileVisibility.OutsideFrustum !== kid.computeVisibility(args)) {\r\n if (!kid.hasGraphics) {\r\n selected.length = initialSize;\r\n return SelectParent.Yes;\r\n } else {\r\n selected.push(kid);\r\n }\r\n }\r\n }\r\n\r\n args.markUsed(this);\r\n }\r\n\r\n // We're drawing either this tile, or its direct children.\r\n return SelectParent.No;\r\n }\r\n\r\n // This tile is too coarse to draw. Try to draw something more appropriate.\r\n // If it is not ready to draw, we may want to skip loading in favor of loading its descendants.\r\n // If we previously loaded and later unloaded content for this tile to free memory, don't force it to reload its content - proceed to children.\r\n let canSkipThisTile = (this._hadGraphics && !this.hasGraphics) || this.depth < this.iModelTree.maxInitialTilesToSkip;\r\n if (canSkipThisTile) {\r\n numSkipped = 1;\r\n } else {\r\n canSkipThisTile = this.isReady || this.isParentDisplayable || this.depth < this.iModelTree.maxInitialTilesToSkip;\r\n if (canSkipThisTile && this.isDisplayable) { // skipping an undisplayable tile doesn't count toward the maximum\r\n // Some tiles do not sub-divide - they only facet the same geometry to a higher resolution. We can skip directly to the correct resolution.\r\n const isNotReady = !this.isReady && !this.hasGraphics && !this.hasSizeMultiplier;\r\n if (isNotReady) {\r\n if (numSkipped >= this.iModelTree.maxTilesToSkip)\r\n canSkipThisTile = false;\r\n else\r\n numSkipped += 1;\r\n }\r\n }\r\n }\r\n\r\n const childrenLoadStatus = this.loadChildren(); // NB: asynchronous\r\n const children = canSkipThisTile ? this.iModelChildren : undefined;\r\n if (canSkipThisTile && TileTreeLoadStatus.Loading === childrenLoadStatus) {\r\n args.markChildrenLoading();\r\n args.markUsed(this);\r\n }\r\n\r\n if (undefined !== children) {\r\n // If we are the root tile and we are not displayable, then we want to draw *any* currently available children in our place, or else we would draw nothing.\r\n // Otherwise, if we want to draw children in our place, we should wait for *all* of them to load, or else we would show missing chunks where not-yet-loaded children belong.\r\n const isUndisplayableRootTile = this.isUndisplayableRootTile;\r\n args.markUsed(this);\r\n let drawChildren = true;\r\n const initialSize = selected.length;\r\n for (const child of children) {\r\n // NB: We must continue iterating children so that they can be requested if missing.\r\n if (SelectParent.Yes === child.selectTiles(selected, args, numSkipped)) {\r\n if (child.loadStatus === TileLoadStatus.NotFound) {\r\n // At least one child we want to draw failed to load. e.g., we reached max depth of map tile tree. Draw parent instead.\r\n drawChildren = canSkipThisTile = false;\r\n } else {\r\n // At least one child we want to draw is not yet loaded. Wait for it to load before drawing it and its siblings, unless we have nothing to draw in their place.\r\n drawChildren = isUndisplayableRootTile;\r\n }\r\n }\r\n }\r\n\r\n if (drawChildren)\r\n return SelectParent.No;\r\n\r\n // Some types of tiles (like maps) allow the ready children to be drawn on top of the parent while other children are not yet loaded.\r\n if (args.parentsAndChildrenExclusive)\r\n selected.length = initialSize;\r\n }\r\n\r\n if (this.isReady) {\r\n if (this.hasGraphics) {\r\n selected.push(this);\r\n if (!canSkipThisTile) {\r\n // This tile is too coarse, but we require loading it before we can start loading higher-res children.\r\n args.markReady(this);\r\n }\r\n }\r\n\r\n return SelectParent.No;\r\n }\r\n\r\n // This tile is not ready to be drawn. Request it *only* if we cannot skip it.\r\n if (!canSkipThisTile)\r\n args.insertMissing(this);\r\n\r\n return this.isParentDisplayable ? SelectParent.Yes : SelectParent.No;\r\n }\r\n}\r\n"]}
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { GuidString, Id64Array, Id64String } from "@itwin/core-bentley";
5
5
  import { Range3d } from "@itwin/core-geometry";
6
- import { BatchType, ContentIdProvider, EdgeOptions, IModelTileTreeId, IModelTileTreeProps, TileProps } from "@itwin/core-common";
6
+ import { BatchType, ContentIdProvider, EdgeOptions, IModelTileTreeId, IModelTileTreeProps, RenderSchedule, TileProps } from "@itwin/core-common";
7
7
  import { IModelConnection } from "../IModelConnection";
8
8
  import { IModelTile, Tile, TileDrawArgs, TileLoadPriority, TileTree, TileTreeParams } from "./internal";
9
9
  /** @internal */
@@ -12,6 +12,7 @@ export interface IModelTileTreeOptions {
12
12
  readonly edges: EdgeOptions | false;
13
13
  readonly batchType: BatchType;
14
14
  readonly is3d: boolean;
15
+ readonly timeline: RenderSchedule.ModelTimeline | undefined;
15
16
  }
16
17
  /** Parameters used to construct an [[IModelTileTree]]
17
18
  * @internal
@@ -66,6 +67,7 @@ export declare class IModelTileTree extends TileTree {
66
67
  get viewFlagOverrides(): {};
67
68
  get batchType(): BatchType;
68
69
  get edgeOptions(): EdgeOptions | false;
70
+ get timeline(): RenderSchedule.ModelTimeline | undefined;
69
71
  get loadPriority(): TileLoadPriority;
70
72
  protected _selectTiles(args: TileDrawArgs): Tile[];
71
73
  draw(args: TileDrawArgs): void;
@@ -1 +1 @@
1
- {"version":3,"file":"IModelTileTree.d.ts","sourceRoot":"","sources":["../../../src/tile/IModelTileTree.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IModelTileTree.d.ts","sourceRoot":"","sources":["../../../src/tile/IModelTileTree.ts"],"names":[],"mappings":"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"}
@@ -272,6 +272,7 @@ export class IModelTileTree extends TileTree {
272
272
  get viewFlagOverrides() { return viewFlagOverrides; }
273
273
  get batchType() { return this._options.batchType; }
274
274
  get edgeOptions() { return this._options.edges; }
275
+ get timeline() { return this._options.timeline; }
275
276
  get loadPriority() {
276
277
  // If the model has been modified, we want to prioritize keeping its graphics up to date.
277
278
  return this.tileState === "dynamic" ? TileLoadPriority.Dynamic : super.loadPriority;