@itwin/core-frontend 3.2.0-dev.3 → 3.2.0-dev.30

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 (266) hide show
  1. package/CHANGELOG.md +48 -1
  2. package/lib/cjs/BriefcaseConnection.d.ts +35 -1
  3. package/lib/cjs/BriefcaseConnection.d.ts.map +1 -1
  4. package/lib/cjs/BriefcaseConnection.js +52 -1
  5. package/lib/cjs/BriefcaseConnection.js.map +1 -1
  6. package/lib/cjs/DisplayStyleState.d.ts.map +1 -1
  7. package/lib/cjs/DisplayStyleState.js +6 -4
  8. package/lib/cjs/DisplayStyleState.js.map +1 -1
  9. package/lib/cjs/IModelApp.d.ts +2 -0
  10. package/lib/cjs/IModelApp.d.ts.map +1 -1
  11. package/lib/cjs/IModelApp.js +6 -3
  12. package/lib/cjs/IModelApp.js.map +1 -1
  13. package/lib/cjs/IModelConnection.d.ts +5 -2
  14. package/lib/cjs/IModelConnection.d.ts.map +1 -1
  15. package/lib/cjs/IModelConnection.js +11 -3
  16. package/lib/cjs/IModelConnection.js.map +1 -1
  17. package/lib/cjs/ImageUtil.d.ts +4 -2
  18. package/lib/cjs/ImageUtil.d.ts.map +1 -1
  19. package/lib/cjs/ImageUtil.js +8 -4
  20. package/lib/cjs/ImageUtil.js.map +1 -1
  21. package/lib/cjs/ViewManager.d.ts.map +1 -1
  22. package/lib/cjs/ViewManager.js +1 -0
  23. package/lib/cjs/ViewManager.js.map +1 -1
  24. package/lib/cjs/Viewport.d.ts.map +1 -1
  25. package/lib/cjs/Viewport.js +5 -1
  26. package/lib/cjs/Viewport.js.map +1 -1
  27. package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
  28. package/lib/cjs/quantity-formatting/QuantityFormatter.js +2 -1
  29. package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
  30. package/lib/cjs/render/primitives/VertexTable.d.ts +1 -1
  31. package/lib/cjs/render/primitives/VertexTable.js +30 -2
  32. package/lib/cjs/render/primitives/VertexTable.js.map +1 -1
  33. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.d.ts.map +1 -1
  34. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js +7 -3
  35. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  36. package/lib/cjs/render/webgl/DrawCommand.d.ts.map +1 -1
  37. package/lib/cjs/render/webgl/DrawCommand.js +2 -1
  38. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  39. package/lib/cjs/render/webgl/RealityMesh.d.ts +1 -0
  40. package/lib/cjs/render/webgl/RealityMesh.d.ts.map +1 -1
  41. package/lib/cjs/render/webgl/RealityMesh.js +1 -0
  42. package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
  43. package/lib/cjs/render/webgl/ShaderBuilder.d.ts +5 -4
  44. package/lib/cjs/render/webgl/ShaderBuilder.d.ts.map +1 -1
  45. package/lib/cjs/render/webgl/ShaderBuilder.js +7 -6
  46. package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
  47. package/lib/cjs/render/webgl/Target.d.ts +3 -1
  48. package/lib/cjs/render/webgl/Target.d.ts.map +1 -1
  49. package/lib/cjs/render/webgl/Target.js +9 -0
  50. package/lib/cjs/render/webgl/Target.js.map +1 -1
  51. package/lib/cjs/render/webgl/Technique.d.ts +4 -2
  52. package/lib/cjs/render/webgl/Technique.d.ts.map +1 -1
  53. package/lib/cjs/render/webgl/Technique.js +148 -120
  54. package/lib/cjs/render/webgl/Technique.js.map +1 -1
  55. package/lib/cjs/render/webgl/TechniqueFlags.d.ts +7 -3
  56. package/lib/cjs/render/webgl/TechniqueFlags.d.ts.map +1 -1
  57. package/lib/cjs/render/webgl/TechniqueFlags.js +17 -4
  58. package/lib/cjs/render/webgl/TechniqueFlags.js.map +1 -1
  59. package/lib/cjs/render/webgl/glsl/Animation.d.ts.map +1 -1
  60. package/lib/cjs/render/webgl/glsl/Animation.js +2 -0
  61. package/lib/cjs/render/webgl/glsl/Animation.js.map +1 -1
  62. package/lib/cjs/render/webgl/glsl/Color.d.ts.map +1 -1
  63. package/lib/cjs/render/webgl/glsl/Color.js +8 -7
  64. package/lib/cjs/render/webgl/glsl/Color.js.map +1 -1
  65. package/lib/cjs/render/webgl/glsl/Decode.d.ts +2 -1
  66. package/lib/cjs/render/webgl/glsl/Decode.d.ts.map +1 -1
  67. package/lib/cjs/render/webgl/glsl/Decode.js +16 -2
  68. package/lib/cjs/render/webgl/glsl/Decode.js.map +1 -1
  69. package/lib/cjs/render/webgl/glsl/Edge.d.ts +2 -2
  70. package/lib/cjs/render/webgl/glsl/Edge.d.ts.map +1 -1
  71. package/lib/cjs/render/webgl/glsl/Edge.js +6 -19
  72. package/lib/cjs/render/webgl/glsl/Edge.js.map +1 -1
  73. package/lib/cjs/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
  74. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +0 -2
  75. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  76. package/lib/cjs/render/webgl/glsl/PointString.d.ts +3 -3
  77. package/lib/cjs/render/webgl/glsl/PointString.d.ts.map +1 -1
  78. package/lib/cjs/render/webgl/glsl/PointString.js +6 -6
  79. package/lib/cjs/render/webgl/glsl/PointString.js.map +1 -1
  80. package/lib/cjs/render/webgl/glsl/Polyline.d.ts +3 -3
  81. package/lib/cjs/render/webgl/glsl/Polyline.d.ts.map +1 -1
  82. package/lib/cjs/render/webgl/glsl/Polyline.js +6 -21
  83. package/lib/cjs/render/webgl/glsl/Polyline.js.map +1 -1
  84. package/lib/cjs/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  85. package/lib/cjs/render/webgl/glsl/RealityMesh.js +1 -3
  86. package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
  87. package/lib/cjs/render/webgl/glsl/Surface.d.ts +2 -2
  88. package/lib/cjs/render/webgl/glsl/Surface.d.ts.map +1 -1
  89. package/lib/cjs/render/webgl/glsl/Surface.js +50 -34
  90. package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
  91. package/lib/cjs/render/webgl/glsl/Vertex.d.ts +3 -3
  92. package/lib/cjs/render/webgl/glsl/Vertex.d.ts.map +1 -1
  93. package/lib/cjs/render/webgl/glsl/Vertex.js +143 -57
  94. package/lib/cjs/render/webgl/glsl/Vertex.js.map +1 -1
  95. package/lib/cjs/tile/IModelTileRequestChannels.d.ts +3 -3
  96. package/lib/cjs/tile/IModelTileRequestChannels.d.ts.map +1 -1
  97. package/lib/cjs/tile/IModelTileRequestChannels.js +7 -11
  98. package/lib/cjs/tile/IModelTileRequestChannels.js.map +1 -1
  99. package/lib/cjs/tile/OPCFormatInterpreter.d.ts.map +1 -1
  100. package/lib/cjs/tile/OPCFormatInterpreter.js +1 -2
  101. package/lib/cjs/tile/OPCFormatInterpreter.js.map +1 -1
  102. package/lib/cjs/tile/RealityTileLoader.d.ts +1 -1
  103. package/lib/cjs/tile/RealityTileLoader.d.ts.map +1 -1
  104. package/lib/cjs/tile/RealityTileLoader.js +29 -6
  105. package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
  106. package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
  107. package/lib/cjs/tile/TileAdmin.js +0 -5
  108. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  109. package/lib/cjs/tile/TileRequestChannels.d.ts +0 -4
  110. package/lib/cjs/tile/TileRequestChannels.d.ts.map +1 -1
  111. package/lib/cjs/tile/TileRequestChannels.js +1 -6
  112. package/lib/cjs/tile/TileRequestChannels.js.map +1 -1
  113. package/lib/cjs/tile/map/ArcGisUtilities.d.ts.map +1 -1
  114. package/lib/cjs/tile/map/ArcGisUtilities.js +13 -0
  115. package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
  116. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +0 -1
  117. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  118. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +12 -10
  119. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  120. package/lib/cjs/tile/map/MapTileTree.js +2 -2
  121. package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
  122. package/lib/cjs/tile/map/WmsCapabilities.d.ts +3 -2
  123. package/lib/cjs/tile/map/WmsCapabilities.d.ts.map +1 -1
  124. package/lib/cjs/tile/map/WmsCapabilities.js +11 -10
  125. package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
  126. package/lib/cjs/tools/PrimitiveTool.d.ts +3 -0
  127. package/lib/cjs/tools/PrimitiveTool.d.ts.map +1 -1
  128. package/lib/cjs/tools/PrimitiveTool.js +6 -0
  129. package/lib/cjs/tools/PrimitiveTool.js.map +1 -1
  130. package/lib/cjs/tools/ToolAdmin.d.ts +1 -21
  131. package/lib/cjs/tools/ToolAdmin.d.ts.map +1 -1
  132. package/lib/cjs/tools/ToolAdmin.js +0 -17
  133. package/lib/cjs/tools/ToolAdmin.js.map +1 -1
  134. package/lib/esm/BriefcaseConnection.d.ts +35 -1
  135. package/lib/esm/BriefcaseConnection.d.ts.map +1 -1
  136. package/lib/esm/BriefcaseConnection.js +50 -0
  137. package/lib/esm/BriefcaseConnection.js.map +1 -1
  138. package/lib/esm/DisplayStyleState.d.ts.map +1 -1
  139. package/lib/esm/DisplayStyleState.js +6 -4
  140. package/lib/esm/DisplayStyleState.js.map +1 -1
  141. package/lib/esm/IModelApp.d.ts +2 -0
  142. package/lib/esm/IModelApp.d.ts.map +1 -1
  143. package/lib/esm/IModelApp.js +5 -2
  144. package/lib/esm/IModelApp.js.map +1 -1
  145. package/lib/esm/IModelConnection.d.ts +5 -2
  146. package/lib/esm/IModelConnection.d.ts.map +1 -1
  147. package/lib/esm/IModelConnection.js +12 -4
  148. package/lib/esm/IModelConnection.js.map +1 -1
  149. package/lib/esm/ImageUtil.d.ts +4 -2
  150. package/lib/esm/ImageUtil.d.ts.map +1 -1
  151. package/lib/esm/ImageUtil.js +8 -4
  152. package/lib/esm/ImageUtil.js.map +1 -1
  153. package/lib/esm/ViewManager.d.ts.map +1 -1
  154. package/lib/esm/ViewManager.js +1 -0
  155. package/lib/esm/ViewManager.js.map +1 -1
  156. package/lib/esm/Viewport.d.ts.map +1 -1
  157. package/lib/esm/Viewport.js +5 -1
  158. package/lib/esm/Viewport.js.map +1 -1
  159. package/lib/esm/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
  160. package/lib/esm/quantity-formatting/QuantityFormatter.js +3 -2
  161. package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
  162. package/lib/esm/render/primitives/VertexTable.d.ts +1 -1
  163. package/lib/esm/render/primitives/VertexTable.js +30 -2
  164. package/lib/esm/render/primitives/VertexTable.js.map +1 -1
  165. package/lib/esm/render/primitives/geometry/GeometryAccumulator.d.ts.map +1 -1
  166. package/lib/esm/render/primitives/geometry/GeometryAccumulator.js +7 -3
  167. package/lib/esm/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  168. package/lib/esm/render/webgl/DrawCommand.d.ts.map +1 -1
  169. package/lib/esm/render/webgl/DrawCommand.js +2 -1
  170. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  171. package/lib/esm/render/webgl/RealityMesh.d.ts +1 -0
  172. package/lib/esm/render/webgl/RealityMesh.d.ts.map +1 -1
  173. package/lib/esm/render/webgl/RealityMesh.js +1 -0
  174. package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
  175. package/lib/esm/render/webgl/ShaderBuilder.d.ts +5 -4
  176. package/lib/esm/render/webgl/ShaderBuilder.d.ts.map +1 -1
  177. package/lib/esm/render/webgl/ShaderBuilder.js +7 -6
  178. package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
  179. package/lib/esm/render/webgl/Target.d.ts +3 -1
  180. package/lib/esm/render/webgl/Target.d.ts.map +1 -1
  181. package/lib/esm/render/webgl/Target.js +9 -0
  182. package/lib/esm/render/webgl/Target.js.map +1 -1
  183. package/lib/esm/render/webgl/Technique.d.ts +4 -2
  184. package/lib/esm/render/webgl/Technique.d.ts.map +1 -1
  185. package/lib/esm/render/webgl/Technique.js +148 -120
  186. package/lib/esm/render/webgl/Technique.js.map +1 -1
  187. package/lib/esm/render/webgl/TechniqueFlags.d.ts +7 -3
  188. package/lib/esm/render/webgl/TechniqueFlags.d.ts.map +1 -1
  189. package/lib/esm/render/webgl/TechniqueFlags.js +17 -4
  190. package/lib/esm/render/webgl/TechniqueFlags.js.map +1 -1
  191. package/lib/esm/render/webgl/glsl/Animation.d.ts.map +1 -1
  192. package/lib/esm/render/webgl/glsl/Animation.js +2 -0
  193. package/lib/esm/render/webgl/glsl/Animation.js.map +1 -1
  194. package/lib/esm/render/webgl/glsl/Color.d.ts.map +1 -1
  195. package/lib/esm/render/webgl/glsl/Color.js +8 -7
  196. package/lib/esm/render/webgl/glsl/Color.js.map +1 -1
  197. package/lib/esm/render/webgl/glsl/Decode.d.ts +2 -1
  198. package/lib/esm/render/webgl/glsl/Decode.d.ts.map +1 -1
  199. package/lib/esm/render/webgl/glsl/Decode.js +15 -1
  200. package/lib/esm/render/webgl/glsl/Decode.js.map +1 -1
  201. package/lib/esm/render/webgl/glsl/Edge.d.ts +2 -2
  202. package/lib/esm/render/webgl/glsl/Edge.d.ts.map +1 -1
  203. package/lib/esm/render/webgl/glsl/Edge.js +7 -20
  204. package/lib/esm/render/webgl/glsl/Edge.js.map +1 -1
  205. package/lib/esm/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
  206. package/lib/esm/render/webgl/glsl/FeatureSymbology.js +1 -3
  207. package/lib/esm/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  208. package/lib/esm/render/webgl/glsl/PointString.d.ts +3 -3
  209. package/lib/esm/render/webgl/glsl/PointString.d.ts.map +1 -1
  210. package/lib/esm/render/webgl/glsl/PointString.js +6 -6
  211. package/lib/esm/render/webgl/glsl/PointString.js.map +1 -1
  212. package/lib/esm/render/webgl/glsl/Polyline.d.ts +3 -3
  213. package/lib/esm/render/webgl/glsl/Polyline.d.ts.map +1 -1
  214. package/lib/esm/render/webgl/glsl/Polyline.js +7 -22
  215. package/lib/esm/render/webgl/glsl/Polyline.js.map +1 -1
  216. package/lib/esm/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  217. package/lib/esm/render/webgl/glsl/RealityMesh.js +1 -3
  218. package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
  219. package/lib/esm/render/webgl/glsl/Surface.d.ts +2 -2
  220. package/lib/esm/render/webgl/glsl/Surface.d.ts.map +1 -1
  221. package/lib/esm/render/webgl/glsl/Surface.js +51 -35
  222. package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
  223. package/lib/esm/render/webgl/glsl/Vertex.d.ts +3 -3
  224. package/lib/esm/render/webgl/glsl/Vertex.d.ts.map +1 -1
  225. package/lib/esm/render/webgl/glsl/Vertex.js +142 -56
  226. package/lib/esm/render/webgl/glsl/Vertex.js.map +1 -1
  227. package/lib/esm/tile/IModelTileRequestChannels.d.ts +3 -3
  228. package/lib/esm/tile/IModelTileRequestChannels.d.ts.map +1 -1
  229. package/lib/esm/tile/IModelTileRequestChannels.js +7 -11
  230. package/lib/esm/tile/IModelTileRequestChannels.js.map +1 -1
  231. package/lib/esm/tile/OPCFormatInterpreter.d.ts.map +1 -1
  232. package/lib/esm/tile/OPCFormatInterpreter.js +2 -3
  233. package/lib/esm/tile/OPCFormatInterpreter.js.map +1 -1
  234. package/lib/esm/tile/RealityTileLoader.d.ts +1 -1
  235. package/lib/esm/tile/RealityTileLoader.d.ts.map +1 -1
  236. package/lib/esm/tile/RealityTileLoader.js +30 -7
  237. package/lib/esm/tile/RealityTileLoader.js.map +1 -1
  238. package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
  239. package/lib/esm/tile/TileAdmin.js +0 -5
  240. package/lib/esm/tile/TileAdmin.js.map +1 -1
  241. package/lib/esm/tile/TileRequestChannels.d.ts +0 -4
  242. package/lib/esm/tile/TileRequestChannels.d.ts.map +1 -1
  243. package/lib/esm/tile/TileRequestChannels.js +1 -6
  244. package/lib/esm/tile/TileRequestChannels.js.map +1 -1
  245. package/lib/esm/tile/map/ArcGisUtilities.d.ts.map +1 -1
  246. package/lib/esm/tile/map/ArcGisUtilities.js +13 -0
  247. package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
  248. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +0 -1
  249. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  250. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +12 -10
  251. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  252. package/lib/esm/tile/map/MapTileTree.js +2 -2
  253. package/lib/esm/tile/map/MapTileTree.js.map +1 -1
  254. package/lib/esm/tile/map/WmsCapabilities.d.ts +3 -2
  255. package/lib/esm/tile/map/WmsCapabilities.d.ts.map +1 -1
  256. package/lib/esm/tile/map/WmsCapabilities.js +11 -10
  257. package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
  258. package/lib/esm/tools/PrimitiveTool.d.ts +3 -0
  259. package/lib/esm/tools/PrimitiveTool.d.ts.map +1 -1
  260. package/lib/esm/tools/PrimitiveTool.js +6 -0
  261. package/lib/esm/tools/PrimitiveTool.js.map +1 -1
  262. package/lib/esm/tools/ToolAdmin.d.ts +1 -21
  263. package/lib/esm/tools/ToolAdmin.d.ts.map +1 -1
  264. package/lib/esm/tools/ToolAdmin.js +0 -17
  265. package/lib/esm/tools/ToolAdmin.js.map +1 -1
  266. package/package.json +20 -21
@@ -7,7 +7,7 @@
7
7
  * @module WebGL
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.lateVertexDiscard = exports.vertexDiscard = exports.earlyVertexDiscard = exports.addFeatureAndMaterialLookup = exports.replaceLineCode = exports.addLineCode = exports.replaceLineWeight = exports.addLineWeight = exports.addAlpha = exports.addPosition = exports.addNormalMatrix = exports.addModelViewMatrix = exports.addInstancedRtcMatrix = exports.addProjectionMatrix = exports.addModelViewProjectionMatrix = exports.unquantizeVertexPosition = void 0;
10
+ exports.lateVertexDiscard = exports.vertexDiscard = exports.earlyVertexDiscard = exports.replaceLineCode = exports.addLineCode = exports.replaceLineWeight = exports.addLineWeight = exports.addAlpha = exports.addPosition = exports.addNormalMatrix = exports.addModelViewMatrix = exports.addInstancedRtcMatrix = exports.addProjectionMatrix = exports.addModelViewProjectionMatrix = exports.addSamplePosition = exports.unquantizePosition = void 0;
11
11
  const core_bentley_1 = require("@itwin/core-bentley");
12
12
  const Matrix_1 = require("../Matrix");
13
13
  const RenderFlags_1 = require("../RenderFlags");
@@ -19,27 +19,97 @@ const initializeVertLUTCoords = `
19
19
  g_vertexLUTIndex = decodeUInt24(qpos);
20
20
  g_vertexBaseCoords = compute_vert_coords(g_vertexLUTIndex);
21
21
  `;
22
- const unquantizePosition = `
22
+ /** @internal */
23
+ exports.unquantizePosition = `
23
24
  vec4 unquantizePosition(vec3 pos, vec3 origin, vec3 scale) { return vec4(origin + scale * pos, 1.0); }
24
25
  `;
25
- exports.unquantizeVertexPosition = `
26
- vec4 unquantizeVertexPosition(vec3 pos, vec3 origin, vec3 scale) { return unquantizePosition(pos, origin, scale); }
26
+ const computeQuantizedPosition = `
27
+ vec4 computeVertexPosition(vec3 pos) { return unquantizePosition(pos, u_qOrigin, u_qScale); }
27
28
  `;
28
29
  // Need to read 2 rgba values to obtain 6 16-bit integers for position
29
- const unquantizeVertexPositionFromLUT = `
30
- vec4 unquantizeVertexPosition(vec3 encodedIndex, vec3 origin, vec3 scale) {
31
- if (g_usesQuantizedPosition) {
32
- vec4 enc1 = g_vertLutData[0];
33
- vec4 enc2 = g_vertLutData[1];
34
- vec3 qpos = vec3(decodeUInt16(enc1.xy), decodeUInt16(enc1.zw), decodeUInt16(enc2.xy));
35
- return unquantizePosition(qpos, origin, scale);
36
- }
37
-
38
- return vec4(decodeFloat32(g_vertLutData[0]), decodeFloat32(g_vertLutData[1]), decodeFloat32(g_vertLutData[2]), 1.0);
30
+ const computeVertexPositionFromLUT = `
31
+ vec4 computeVertexPosition(vec3 encodedIndex) {
32
+ vec3 qpos = vec3(decodeUInt16(g_vertLutData0.xy), decodeUInt16(g_vertLutData0.zw), decodeUInt16(g_vertLutData1.xy));
33
+ g_featureAndMaterialIndex = g_vertLutData2;
34
+ return unquantizePosition(qpos, u_qOrigin, u_qScale);
35
+ }
36
+ `;
37
+ const computeUnquantizedPosition1 = `
38
+ vec4 computeVertexPosition(vec3 encodedIndex) {
39
+ vec3 pf[4];
40
+ pf[0] = g_vertLutData0.xyz;
41
+ g_featureAndMaterialIndex.x = g_vertLutData0.w;
42
+ pf[1] = g_vertLutData1.xyz;
43
+ g_featureAndMaterialIndex.y = g_vertLutData1.w;
44
+ pf[2] = g_vertLutData2.xyz;
45
+ g_featureAndMaterialIndex.z = g_vertLutData2.w;
46
+ pf[3] = g_vertLutData3.xyz;
47
+ g_featureAndMaterialIndex.w = g_vertLutData3.w;
48
+ return vec4(decode3Float32(pf), 1.0);
49
+ }
50
+ `;
51
+ const computeUnquantizedPosition2 = `
52
+ vec4 computeVertexPosition(vec3 encodedIndex) {
53
+ uvec3 vux = uvec3(g_vertLutData0.xyz);
54
+ g_featureAndMaterialIndex.x = g_vertLutData0.w;
55
+ uvec3 vuy = uvec3(g_vertLutData1.xyz);
56
+ g_featureAndMaterialIndex.y = g_vertLutData1.w;
57
+ uvec3 vuz = uvec3(g_vertLutData2.xyz);
58
+ g_featureAndMaterialIndex.z = g_vertLutData2.w;
59
+ uvec3 vuw = uvec3(g_vertLutData3.xyz);
60
+ g_featureAndMaterialIndex.w = g_vertLutData3.w;
61
+ uvec3 u = (vuw << 24) | (vuz << 16) | (vuy << 8) | vux;
62
+ return vec4(uintBitsToFloat(u), 1.0);
39
63
  }
40
64
  `;
41
65
  const computeLineWeight = "\nfloat computeLineWeight() { return g_lineWeight; }\n";
42
66
  const computeLineCode = "\nfloat computeLineCode() { return g_lineCode; }\n";
67
+ function addSamplePosition(vert) {
68
+ vert.addFunction(getSamplePosition(vert.positionType));
69
+ }
70
+ exports.addSamplePosition = addSamplePosition;
71
+ function getSamplePosition(type) {
72
+ const prelude = `
73
+ vec4 samplePosition(float index) {
74
+ vec2 tc = compute_vert_coords(index);`;
75
+ if ("quantized" === type) {
76
+ return `
77
+ ${prelude}
78
+ vec4 e0 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);
79
+ tc.x += g_vert_stepX;
80
+ vec4 e1 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);
81
+ vec3 qpos = vec3(decodeUInt16(e0.xy), decodeUInt16(e0.zw), decodeUInt16(e1.xy));
82
+ return unquantizePosition(qpos, u_qOrigin, u_qScale);
83
+ }
84
+ `;
85
+ }
86
+ if (System_1.System.instance.capabilities.isWebGL2) {
87
+ return `
88
+ ${prelude}
89
+ uvec3 vux = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));
90
+ tc.x += g_vert_stepX;
91
+ uvec3 vuy = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));
92
+ tc.x += g_vert_stepX;
93
+ uvec3 vuz = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));
94
+ tc.x += g_vert_stepX;
95
+ uvec3 vuw = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));
96
+ uvec3 u = (vuw << 24) | (vuz << 16) | (vuy << 8) | vux;
97
+ return vec4(uintBitsToFloat(u), 1.0);
98
+ }`;
99
+ }
100
+ return `
101
+ ${prelude}
102
+ vec3 pf[4];
103
+ pf[0] = floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5);
104
+ tc.x += g_vert_stepX;
105
+ pf[1] = floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5);
106
+ tc.x += g_vert_stepX;
107
+ pf[2] = floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5);
108
+ tc.x += g_vert_stepX;
109
+ pf[3] = floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5);
110
+ return vec4(decode3Float32(pf), 1.0);
111
+ }`;
112
+ }
43
113
  /** @internal */
44
114
  function addModelViewProjectionMatrix(vert) {
45
115
  if (vert.usesInstancedGeometry) {
@@ -144,14 +214,55 @@ function addNormalMatrix(vert, instanced) {
144
214
  }
145
215
  }
146
216
  exports.addNormalMatrix = addNormalMatrix;
217
+ function readVertexData(index) {
218
+ return `g_vertLutData${index} = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);`;
219
+ }
220
+ const nextVertexData = "tc.x += g_vert_stepX;";
221
+ function readNextVertexData(index) {
222
+ return `
223
+ ${nextVertexData}
224
+ ${readVertexData(index)}`;
225
+ }
226
+ const prereadVertexDataPrelude = `
227
+ vec2 tc = g_vertexBaseCoords;
228
+ ${readVertexData(0)}
229
+ ${readNextVertexData(1)}
230
+ ${readNextVertexData(2)}
231
+ `;
232
+ const prereadQuantizedVertexData = `${prereadVertexDataPrelude}
233
+ if (3.0 < u_vertParams.z) {
234
+ ${readNextVertexData(3)}
235
+ }
236
+ `;
237
+ const prereadUnquantizedVertexData = `${prereadVertexDataPrelude}
238
+ ${readNextVertexData(3)}
239
+ ${readNextVertexData(4)}
240
+ if (5.0 < u_vertParams.z) {
241
+ ${readNextVertexData(5)}
242
+ }
243
+ `;
147
244
  const scratchLutParams = new Float32Array(4);
148
245
  function addPositionFromLUT(vert) {
149
246
  vert.addGlobal("g_vertexLUTIndex", 2 /* Float */);
150
247
  vert.addGlobal("g_vertexBaseCoords", 3 /* Vec2 */);
248
+ const unquantized = "unquantized" === vert.positionType;
249
+ const maxRgbaPerVert = unquantized ? 6 : 4;
250
+ for (let i = 0; i < maxRgbaPerVert; i++)
251
+ vert.addGlobal(`g_vertLutData${i}`, 5 /* Vec4 */);
151
252
  vert.addFunction(Decode_1.decodeUint24);
152
253
  vert.addFunction(Decode_1.decodeUint16);
153
- vert.addFunction(Decode_1.decodeFloat32);
154
- vert.addFunction(unquantizeVertexPositionFromLUT);
254
+ if (unquantized) {
255
+ if (System_1.System.instance.capabilities.isWebGL2) {
256
+ vert.addFunction(computeUnquantizedPosition2);
257
+ }
258
+ else {
259
+ vert.addFunction(Decode_1.decode3Float32);
260
+ vert.addFunction(computeUnquantizedPosition1);
261
+ }
262
+ }
263
+ else {
264
+ vert.addFunction(computeVertexPositionFromLUT);
265
+ }
155
266
  vert.addUniform("u_vertLUT", 8 /* Sampler2D */, (prog) => {
156
267
  prog.addGraphicUniform("u_vertLUT", (uniform, params) => {
157
268
  (params.geometry.asLUT).lut.texture.bindSampler(uniform, RenderFlags_1.TextureUnit.VertexLUT);
@@ -171,40 +282,29 @@ function addPositionFromLUT(vert) {
171
282
  });
172
283
  (0, LookupTable_1.addLookupTable)(vert, "vert", "u_vertParams.z");
173
284
  vert.addInitializer(initializeVertLUTCoords);
174
- (0, core_bentley_1.assert)(undefined !== vert.maxRgbaPerVertex);
175
- const maxRgbaPerVertex = vert.maxRgbaPerVertex.toString();
176
- vert.addGlobal(`g_vertLutData[${maxRgbaPerVertex}]`, 5 /* Vec4 */);
177
- vert.addGlobal("g_usesQuantizedPosition", 0 /* Boolean */);
178
- // Read the vertex data from the vertex table up front. If using WebGL 2, only read the number of RGBA values we actually need for this vertex table.
179
- const loopStart = `for (int i = 0; i < ${System_1.System.instance.capabilities.isWebGL2 ? "int(u_vertParams.z)" : maxRgbaPerVertex}; i++)`;
180
- vert.addInitializer(`
181
- g_usesQuantizedPosition = u_qScale.x >= 0.0;
182
- vec2 tc = g_vertexBaseCoords;
183
- ${loopStart} {
184
- g_vertLutData[i] = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);
185
- tc.x += g_vert_stepX;
186
- }
187
- `);
285
+ vert.addGlobal("g_featureAndMaterialIndex", 5 /* Vec4 */);
286
+ // Read the vertex data from the vertex table up front. Yields a consistent (if unexplainable) small performance boost.
287
+ vert.addInitializer(unquantized ? prereadUnquantizedVertexData : prereadQuantizedVertexData);
188
288
  }
189
- // Shader tests u_qScale.x < 0 to determine that positions are not quantized.
190
- const unquantizedScale = new Float32Array([-1, -1, -1]);
191
289
  /** @internal */
192
290
  function addPosition(vert, fromLUT) {
193
- vert.addFunction(unquantizePosition);
194
- vert.addUniform("u_qScale", 4 /* Vec3 */, (prog) => {
195
- prog.addGraphicUniform("u_qScale", (uniform, params) => {
196
- uniform.setUniform3fv(params.geometry.usesQuantizedPositions ? params.geometry.qScale : unquantizedScale);
291
+ if (!fromLUT || "quantized" === vert.positionType) {
292
+ vert.addFunction(exports.unquantizePosition);
293
+ vert.addUniform("u_qScale", 4 /* Vec3 */, (prog) => {
294
+ prog.addGraphicUniform("u_qScale", (uniform, params) => {
295
+ (0, core_bentley_1.assert)(params.geometry.usesQuantizedPositions);
296
+ uniform.setUniform3fv(params.geometry.qScale);
297
+ });
197
298
  });
198
- });
199
- vert.addUniform("u_qOrigin", 4 /* Vec3 */, (prog) => {
200
- prog.addGraphicUniform("u_qOrigin", (uniform, params) => {
201
- // If positions aren't quantized, the shader doesn't use the origin - don't bother updating it.
202
- if (params.geometry.usesQuantizedPositions)
299
+ vert.addUniform("u_qOrigin", 4 /* Vec3 */, (prog) => {
300
+ prog.addGraphicUniform("u_qOrigin", (uniform, params) => {
301
+ (0, core_bentley_1.assert)(params.geometry.usesQuantizedPositions);
203
302
  uniform.setUniform3fv(params.geometry.qOrigin);
303
+ });
204
304
  });
205
- });
305
+ }
206
306
  if (!fromLUT) {
207
- vert.addFunction(exports.unquantizeVertexPosition);
307
+ vert.addFunction(computeQuantizedPosition);
208
308
  }
209
309
  else {
210
310
  addPositionFromLUT(vert);
@@ -266,20 +366,6 @@ function replaceLineCode(vert, func) {
266
366
  vert.replaceFunction(computeLineCode, func);
267
367
  }
268
368
  exports.replaceLineCode = replaceLineCode;
269
- /** @internal */
270
- function addFeatureAndMaterialLookup(vert) {
271
- if (undefined !== vert.find("g_featureAndMaterialIndex"))
272
- return;
273
- const computeFeatureAndMaterialIndex = `
274
- g_featureAndMaterialIndex = g_usesQuantizedPosition ? g_vertLutData[2] : g_vertLutData[3];
275
- `;
276
- vert.addGlobal("g_featureAndMaterialIndex", 5 /* Vec4 */);
277
- if (!vert.usesInstancedGeometry) {
278
- // Only needed for material atlas, and instanced geometry never uses material atlas.
279
- vert.addInitializer(computeFeatureAndMaterialIndex);
280
- }
281
- }
282
- exports.addFeatureAndMaterialLookup = addFeatureAndMaterialLookup;
283
369
  // This vertex belongs to a triangle which should not be rendered. Produce a degenerate triangle.
284
370
  // Also place it outside NDC range (for GL_POINTS)
285
371
  const discardVertex = ` {
@@ -1 +1 @@
1
- {"version":3,"file":"Vertex.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Vertex.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 { DrawParams } from \"../DrawCommand\";\r\nimport { UniformHandle } from \"../UniformHandle\";\r\nimport { Matrix4 } from \"../Matrix\";\r\nimport { Pass, TextureUnit } from \"../RenderFlags\";\r\nimport { IsInstanced } from \"../TechniqueFlags\";\r\nimport { VariableType, VertexShaderBuilder } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { decodeFloat32, decodeUint16, decodeUint24 } from \"./Decode\";\r\nimport { addInstanceOverrides } from \"./Instancing\";\r\nimport { addLookupTable } from \"./LookupTable\";\r\n\r\nconst initializeVertLUTCoords = `\r\n g_vertexLUTIndex = decodeUInt24(qpos);\r\n g_vertexBaseCoords = compute_vert_coords(g_vertexLUTIndex);\r\n`;\r\n\r\nconst unquantizePosition = `\r\nvec4 unquantizePosition(vec3 pos, vec3 origin, vec3 scale) { return vec4(origin + scale * pos, 1.0); }\r\n`;\r\n\r\nexport const unquantizeVertexPosition = `\r\nvec4 unquantizeVertexPosition(vec3 pos, vec3 origin, vec3 scale) { return unquantizePosition(pos, origin, scale); }\r\n`;\r\n\r\n// Need to read 2 rgba values to obtain 6 16-bit integers for position\r\nconst unquantizeVertexPositionFromLUT = `\r\nvec4 unquantizeVertexPosition(vec3 encodedIndex, vec3 origin, vec3 scale) {\r\n if (g_usesQuantizedPosition) {\r\n vec4 enc1 = g_vertLutData[0];\r\n vec4 enc2 = g_vertLutData[1];\r\n vec3 qpos = vec3(decodeUInt16(enc1.xy), decodeUInt16(enc1.zw), decodeUInt16(enc2.xy));\r\n return unquantizePosition(qpos, origin, scale);\r\n }\r\n\r\n return vec4(decodeFloat32(g_vertLutData[0]), decodeFloat32(g_vertLutData[1]), decodeFloat32(g_vertLutData[2]), 1.0);\r\n}\r\n`;\r\n\r\nconst computeLineWeight = \"\\nfloat computeLineWeight() { return g_lineWeight; }\\n\";\r\nconst computeLineCode = \"\\nfloat computeLineCode() { return g_lineCode; }\\n\";\r\n\r\n/** @internal */\r\nexport function addModelViewProjectionMatrix(vert: VertexShaderBuilder): void {\r\n if (vert.usesInstancedGeometry) {\r\n addModelViewMatrix(vert);\r\n addProjectionMatrix(vert);\r\n vert.addGlobal(\"g_mvp\", VariableType.Mat4);\r\n vert.addInitializer(\"g_mvp = u_proj * g_mv;\");\r\n } else {\r\n vert.addUniform(\"u_mvp\", VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(\"u_mvp\", (uniform, params) => {\r\n params.target.uniforms.branch.bindModelViewProjectionMatrix(uniform, params.geometry, params.isViewCoords);\r\n });\r\n });\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function addProjectionMatrix(vert: VertexShaderBuilder): void {\r\n vert.addUniform(\"u_proj\", VariableType.Mat4, (prog) => {\r\n prog.addProgramUniform(\"u_proj\", (uniform, params) => {\r\n params.bindProjectionMatrix(uniform);\r\n });\r\n });\r\n}\r\n\r\nconst computeInstancedRtcMatrix = `\r\n g_instancedRtcMatrix = u_instanced_rtc * g_modelMatrixRTC;\r\n`;\r\n\r\n/** @internal */\r\nexport function addInstancedRtcMatrix(vert: VertexShaderBuilder): void {\r\n if (!vert.usesInstancedGeometry)\r\n return;\r\n\r\n assert(undefined !== vert.find(\"g_modelMatrixRTC\")); // set up in VertexShaderBuilder constructor...\r\n vert.addUniform(\"u_instanced_rtc\", VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(\"u_instanced_rtc\", (uniform, params) => {\r\n const modelt = params.geometry.asInstanced!.getRtcOnlyTransform();\r\n uniform.setMatrix4(Matrix4.fromTransform(modelt));\r\n });\r\n });\r\n\r\n vert.addGlobal(\"g_instancedRtcMatrix\", VariableType.Mat4);\r\n vert.addInitializer(computeInstancedRtcMatrix);\r\n}\r\n\r\n/** @internal */\r\nexport function addModelViewMatrix(vert: VertexShaderBuilder): void {\r\n const bind = (uniform: UniformHandle, params: DrawParams) => {\r\n params.target.uniforms.branch.bindModelViewMatrix(uniform, params.geometry, params.isViewCoords);\r\n };\r\n\r\n if (vert.usesInstancedGeometry) {\r\n vert.addUniform(\"u_instanced_modelView\", VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(\"u_instanced_modelView\", bind);\r\n });\r\n\r\n vert.addGlobal(\"g_mv\", VariableType.Mat4);\r\n vert.addInitializer(\"g_mv = u_instanced_modelView * g_modelMatrixRTC;\");\r\n } else {\r\n vert.addUniform(\"u_mv\", VariableType.Mat4, (prog) => {\r\n // ###TODO: We only need 3 rows, not 4...\r\n prog.addGraphicUniform(\"u_mv\", bind);\r\n });\r\n }\r\n}\r\n\r\nconst computeNormalMatrix = `\r\n g_nmx = mat3(u_modelViewN);\r\n g_nmx[0][0] *= u_frustumScale.x;\r\n g_nmx[1][1] *= u_frustumScale.y;\r\n`;\r\n\r\nconst computeNormalMatrix2 = `\r\n g_nmx = transpose(inverse(mat3(MAT_MV)));\r\n g_nmx[0][0] *= u_frustumScale.x;\r\n g_nmx[1][1] *= u_frustumScale.y;\r\n`;\r\n\r\nconst computeNormalMatrix1Inst = `\r\n g_nmx = mat3(MAT_MV);\r\n g_nmx[0][0] *= u_frustumScale.x;\r\n g_nmx[1][1] *= u_frustumScale.y;\r\n`;\r\n\r\n/** @internal */\r\nexport function addNormalMatrix(vert: VertexShaderBuilder, instanced: IsInstanced) {\r\n vert.addGlobal(\"g_nmx\", VariableType.Mat3);\r\n vert.addUniform(\"u_frustumScale\", VariableType.Vec2, (prog) => {\r\n prog.addGraphicUniform(\"u_frustumScale\", (uniform, params) => {\r\n const scale = params.target.uniforms.branch.top.frustumScale;\r\n uniform.setUniform2fv([scale.x, scale.y]);\r\n });\r\n });\r\n\r\n if (System.instance.capabilities.isWebGL2) {\r\n vert.addInitializer(computeNormalMatrix2);\r\n } else if (IsInstanced.Yes === instanced) {\r\n vert.addInitializer(computeNormalMatrix1Inst);\r\n } else {\r\n vert.addUniform(\"u_modelViewN\", VariableType.Mat3, (prog) => {\r\n prog.addGraphicUniform(\"u_modelViewN\", (uniform, params) => {\r\n params.target.uniforms.branch.bindModelViewNTransform(uniform, params.geometry, false);\r\n });\r\n });\r\n vert.addInitializer(computeNormalMatrix);\r\n }\r\n}\r\n\r\nconst scratchLutParams = new Float32Array(4);\r\nfunction addPositionFromLUT(vert: VertexShaderBuilder) {\r\n vert.addGlobal(\"g_vertexLUTIndex\", VariableType.Float);\r\n vert.addGlobal(\"g_vertexBaseCoords\", VariableType.Vec2);\r\n\r\n vert.addFunction(decodeUint24);\r\n vert.addFunction(decodeUint16);\r\n vert.addFunction(decodeFloat32);\r\n vert.addFunction(unquantizeVertexPositionFromLUT);\r\n\r\n vert.addUniform(\"u_vertLUT\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_vertLUT\", (uniform, params) => {\r\n (params.geometry.asLUT!).lut.texture.bindSampler(uniform, TextureUnit.VertexLUT);\r\n });\r\n });\r\n\r\n vert.addUniform(\"u_vertParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_vertParams\", (uniform, params) => {\r\n assert(undefined !== params.geometry.asLUT);\r\n const lut = params.geometry.asLUT.lut;\r\n const lutParams = scratchLutParams;\r\n lutParams[0] = lut.texture.width;\r\n lutParams[1] = lut.texture.height;\r\n lutParams[2] = lut.numRgbaPerVertex;\r\n lutParams[3] = lut.numVertices;\r\n uniform.setUniform4fv(lutParams);\r\n });\r\n });\r\n\r\n addLookupTable(vert, \"vert\", \"u_vertParams.z\");\r\n vert.addInitializer(initializeVertLUTCoords);\r\n\r\n assert(undefined !== vert.maxRgbaPerVertex);\r\n const maxRgbaPerVertex = vert.maxRgbaPerVertex.toString();\r\n vert.addGlobal(`g_vertLutData[${maxRgbaPerVertex}]`, VariableType.Vec4);\r\n vert.addGlobal(\"g_usesQuantizedPosition\", VariableType.Boolean);\r\n\r\n // Read the vertex data from the vertex table up front. If using WebGL 2, only read the number of RGBA values we actually need for this vertex table.\r\n const loopStart = `for (int i = 0; i < ${System.instance.capabilities.isWebGL2 ? \"int(u_vertParams.z)\" : maxRgbaPerVertex}; i++)`;\r\n vert.addInitializer(`\r\n g_usesQuantizedPosition = u_qScale.x >= 0.0;\r\n vec2 tc = g_vertexBaseCoords;\r\n ${loopStart} {\r\n g_vertLutData[i] = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n tc.x += g_vert_stepX;\r\n }\r\n `);\r\n}\r\n\r\n// Shader tests u_qScale.x < 0 to determine that positions are not quantized.\r\nconst unquantizedScale = new Float32Array([-1, -1, -1]);\r\n\r\n/** @internal */\r\nexport function addPosition(vert: VertexShaderBuilder, fromLUT: boolean) {\r\n vert.addFunction(unquantizePosition);\r\n\r\n vert.addUniform(\"u_qScale\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_qScale\", (uniform, params) => {\r\n uniform.setUniform3fv(params.geometry.usesQuantizedPositions ? params.geometry.qScale : unquantizedScale);\r\n });\r\n });\r\n vert.addUniform(\"u_qOrigin\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_qOrigin\", (uniform, params) => {\r\n // If positions aren't quantized, the shader doesn't use the origin - don't bother updating it.\r\n if (params.geometry.usesQuantizedPositions)\r\n uniform.setUniform3fv(params.geometry.qOrigin);\r\n });\r\n });\r\n\r\n if (!fromLUT) {\r\n vert.addFunction(unquantizeVertexPosition);\r\n } else {\r\n addPositionFromLUT(vert);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function addAlpha(vert: VertexShaderBuilder): void {\r\n vert.addUniform(\"u_hasAlpha\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_hasAlpha\", (uniform, params) => {\r\n uniform.setUniform1f(Pass.rendersTranslucent(params.geometry.getPass(params.target)) ? 1 : 0);\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function addLineWeight(vert: VertexShaderBuilder): void {\r\n vert.addUniform(\"u_lineWeight\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_lineWeight\", (attr, params) => {\r\n attr.setUniform1f(params.geometry.getLineWeight(params.programParams));\r\n });\r\n });\r\n\r\n vert.addGlobal(\"g_lineWeight\", VariableType.Float);\r\n if (vert.usesInstancedGeometry) {\r\n addInstanceOverrides(vert);\r\n vert.addInitializer(\"g_lineWeight = mix(u_lineWeight, a_instanceOverrides.g, extractInstanceBit(kOvrBit_Weight));\");\r\n } else {\r\n vert.addInitializer(\"g_lineWeight = u_lineWeight;\");\r\n }\r\n\r\n vert.addFunction(computeLineWeight);\r\n}\r\n\r\n/** @internal */\r\nexport function replaceLineWeight(vert: VertexShaderBuilder, func: string): void {\r\n vert.replaceFunction(computeLineWeight, func);\r\n}\r\n\r\n/** @internal */\r\nexport function addLineCode(vert: VertexShaderBuilder): void {\r\n vert.addUniform(\"u_lineCode\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_lineCode\", (attr, params) => {\r\n attr.setUniform1f(params.geometry.getLineCode(params.programParams));\r\n });\r\n });\r\n\r\n vert.addGlobal(\"g_lineCode\", VariableType.Float);\r\n if (vert.usesInstancedGeometry) {\r\n addInstanceOverrides(vert);\r\n vert.addInitializer(\"g_lineCode = mix(u_lineCode, a_instanceOverrides.b, extractInstanceBit(kOvrBit_LineCode));\");\r\n } else {\r\n vert.addInitializer(\"g_lineCode = u_lineCode;\");\r\n }\r\n\r\n vert.addFunction(computeLineCode);\r\n}\r\n\r\n/** @internal */\r\nexport function replaceLineCode(vert: VertexShaderBuilder, func: string): void {\r\n vert.replaceFunction(computeLineCode, func);\r\n}\r\n\r\n/** @internal */\r\nexport function addFeatureAndMaterialLookup(vert: VertexShaderBuilder): void {\r\n if (undefined !== vert.find(\"g_featureAndMaterialIndex\"))\r\n return;\r\n\r\n const computeFeatureAndMaterialIndex = `\r\n g_featureAndMaterialIndex = g_usesQuantizedPosition ? g_vertLutData[2] : g_vertLutData[3];\r\n `;\r\n\r\n vert.addGlobal(\"g_featureAndMaterialIndex\", VariableType.Vec4);\r\n if (!vert.usesInstancedGeometry) {\r\n // Only needed for material atlas, and instanced geometry never uses material atlas.\r\n vert.addInitializer(computeFeatureAndMaterialIndex);\r\n }\r\n}\r\n\r\n// This vertex belongs to a triangle which should not be rendered. Produce a degenerate triangle.\r\n// Also place it outside NDC range (for GL_POINTS)\r\nconst discardVertex = ` {\r\n gl_Position = vec4(2.0, 2.0, 2.0, 1.0);\r\n return;\r\n }\r\n`;\r\n\r\n/** @internal */\r\nexport const earlyVertexDiscard = ` if (checkForEarlyDiscard(rawPosition))${discardVertex}`;\r\n/** @internal */\r\nexport const vertexDiscard = ` if (checkForDiscard())${discardVertex}`;\r\n/** @internal */\r\nexport const lateVertexDiscard = ` if (checkForLateDiscard())${discardVertex}`;\r\n"]}
1
+ {"version":3,"file":"Vertex.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Vertex.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 { DrawParams } from \"../DrawCommand\";\r\nimport { UniformHandle } from \"../UniformHandle\";\r\nimport { Matrix4 } from \"../Matrix\";\r\nimport { Pass, TextureUnit } from \"../RenderFlags\";\r\nimport { IsInstanced, PositionType } from \"../TechniqueFlags\";\r\nimport { VariableType, VertexShaderBuilder } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { decode3Float32, decodeUint16, decodeUint24 } from \"./Decode\";\r\nimport { addInstanceOverrides } from \"./Instancing\";\r\nimport { addLookupTable } from \"./LookupTable\";\r\n\r\nconst initializeVertLUTCoords = `\r\n g_vertexLUTIndex = decodeUInt24(qpos);\r\n g_vertexBaseCoords = compute_vert_coords(g_vertexLUTIndex);\r\n`;\r\n\r\n/** @internal */\r\nexport const unquantizePosition = `\r\nvec4 unquantizePosition(vec3 pos, vec3 origin, vec3 scale) { return vec4(origin + scale * pos, 1.0); }\r\n`;\r\n\r\nconst computeQuantizedPosition = `\r\nvec4 computeVertexPosition(vec3 pos) { return unquantizePosition(pos, u_qOrigin, u_qScale); }\r\n`;\r\n\r\n// Need to read 2 rgba values to obtain 6 16-bit integers for position\r\nconst computeVertexPositionFromLUT = `\r\nvec4 computeVertexPosition(vec3 encodedIndex) {\r\n vec3 qpos = vec3(decodeUInt16(g_vertLutData0.xy), decodeUInt16(g_vertLutData0.zw), decodeUInt16(g_vertLutData1.xy));\r\n g_featureAndMaterialIndex = g_vertLutData2;\r\n return unquantizePosition(qpos, u_qOrigin, u_qScale);\r\n}\r\n`;\r\n\r\nconst computeUnquantizedPosition1 = `\r\nvec4 computeVertexPosition(vec3 encodedIndex) {\r\n vec3 pf[4];\r\n pf[0] = g_vertLutData0.xyz;\r\n g_featureAndMaterialIndex.x = g_vertLutData0.w;\r\n pf[1] = g_vertLutData1.xyz;\r\n g_featureAndMaterialIndex.y = g_vertLutData1.w;\r\n pf[2] = g_vertLutData2.xyz;\r\n g_featureAndMaterialIndex.z = g_vertLutData2.w;\r\n pf[3] = g_vertLutData3.xyz;\r\n g_featureAndMaterialIndex.w = g_vertLutData3.w;\r\n return vec4(decode3Float32(pf), 1.0);\r\n}\r\n`;\r\n\r\nconst computeUnquantizedPosition2 = `\r\nvec4 computeVertexPosition(vec3 encodedIndex) {\r\n uvec3 vux = uvec3(g_vertLutData0.xyz);\r\n g_featureAndMaterialIndex.x = g_vertLutData0.w;\r\n uvec3 vuy = uvec3(g_vertLutData1.xyz);\r\n g_featureAndMaterialIndex.y = g_vertLutData1.w;\r\n uvec3 vuz = uvec3(g_vertLutData2.xyz);\r\n g_featureAndMaterialIndex.z = g_vertLutData2.w;\r\n uvec3 vuw = uvec3(g_vertLutData3.xyz);\r\n g_featureAndMaterialIndex.w = g_vertLutData3.w;\r\n uvec3 u = (vuw << 24) | (vuz << 16) | (vuy << 8) | vux;\r\n return vec4(uintBitsToFloat(u), 1.0);\r\n}\r\n`;\r\n\r\nconst computeLineWeight = \"\\nfloat computeLineWeight() { return g_lineWeight; }\\n\";\r\nconst computeLineCode = \"\\nfloat computeLineCode() { return g_lineCode; }\\n\";\r\n\r\nexport function addSamplePosition(vert: VertexShaderBuilder): void {\r\n vert.addFunction(getSamplePosition(vert.positionType));\r\n}\r\n\r\nfunction getSamplePosition(type: PositionType): string {\r\n const prelude = `\r\n vec4 samplePosition(float index) {\r\n vec2 tc = compute_vert_coords(index);`;\r\n\r\n if (\"quantized\" === type) {\r\n return `\r\n ${prelude}\r\n vec4 e0 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n tc.x += g_vert_stepX;\r\n vec4 e1 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n vec3 qpos = vec3(decodeUInt16(e0.xy), decodeUInt16(e0.zw), decodeUInt16(e1.xy));\r\n return unquantizePosition(qpos, u_qOrigin, u_qScale);\r\n }\r\n `;\r\n }\r\n\r\n if (System.instance.capabilities.isWebGL2) {\r\n return `\r\n ${prelude}\r\n uvec3 vux = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));\r\n tc.x += g_vert_stepX;\r\n uvec3 vuy = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));\r\n tc.x += g_vert_stepX;\r\n uvec3 vuz = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));\r\n tc.x += g_vert_stepX;\r\n uvec3 vuw = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));\r\n uvec3 u = (vuw << 24) | (vuz << 16) | (vuy << 8) | vux;\r\n return vec4(uintBitsToFloat(u), 1.0);\r\n }`;\r\n }\r\n\r\n return `\r\n ${prelude}\r\n vec3 pf[4];\r\n pf[0] = floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5);\r\n tc.x += g_vert_stepX;\r\n pf[1] = floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5);\r\n tc.x += g_vert_stepX;\r\n pf[2] = floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5);\r\n tc.x += g_vert_stepX;\r\n pf[3] = floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5);\r\n return vec4(decode3Float32(pf), 1.0);\r\n }`;\r\n}\r\n\r\n/** @internal */\r\nexport function addModelViewProjectionMatrix(vert: VertexShaderBuilder): void {\r\n if (vert.usesInstancedGeometry) {\r\n addModelViewMatrix(vert);\r\n addProjectionMatrix(vert);\r\n vert.addGlobal(\"g_mvp\", VariableType.Mat4);\r\n vert.addInitializer(\"g_mvp = u_proj * g_mv;\");\r\n } else {\r\n vert.addUniform(\"u_mvp\", VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(\"u_mvp\", (uniform, params) => {\r\n params.target.uniforms.branch.bindModelViewProjectionMatrix(uniform, params.geometry, params.isViewCoords);\r\n });\r\n });\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function addProjectionMatrix(vert: VertexShaderBuilder): void {\r\n vert.addUniform(\"u_proj\", VariableType.Mat4, (prog) => {\r\n prog.addProgramUniform(\"u_proj\", (uniform, params) => {\r\n params.bindProjectionMatrix(uniform);\r\n });\r\n });\r\n}\r\n\r\nconst computeInstancedRtcMatrix = `\r\n g_instancedRtcMatrix = u_instanced_rtc * g_modelMatrixRTC;\r\n`;\r\n\r\n/** @internal */\r\nexport function addInstancedRtcMatrix(vert: VertexShaderBuilder): void {\r\n if (!vert.usesInstancedGeometry)\r\n return;\r\n\r\n assert(undefined !== vert.find(\"g_modelMatrixRTC\")); // set up in VertexShaderBuilder constructor...\r\n vert.addUniform(\"u_instanced_rtc\", VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(\"u_instanced_rtc\", (uniform, params) => {\r\n const modelt = params.geometry.asInstanced!.getRtcOnlyTransform();\r\n uniform.setMatrix4(Matrix4.fromTransform(modelt));\r\n });\r\n });\r\n\r\n vert.addGlobal(\"g_instancedRtcMatrix\", VariableType.Mat4);\r\n vert.addInitializer(computeInstancedRtcMatrix);\r\n}\r\n\r\n/** @internal */\r\nexport function addModelViewMatrix(vert: VertexShaderBuilder): void {\r\n const bind = (uniform: UniformHandle, params: DrawParams) => {\r\n params.target.uniforms.branch.bindModelViewMatrix(uniform, params.geometry, params.isViewCoords);\r\n };\r\n\r\n if (vert.usesInstancedGeometry) {\r\n vert.addUniform(\"u_instanced_modelView\", VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(\"u_instanced_modelView\", bind);\r\n });\r\n\r\n vert.addGlobal(\"g_mv\", VariableType.Mat4);\r\n vert.addInitializer(\"g_mv = u_instanced_modelView * g_modelMatrixRTC;\");\r\n } else {\r\n vert.addUniform(\"u_mv\", VariableType.Mat4, (prog) => {\r\n // ###TODO: We only need 3 rows, not 4...\r\n prog.addGraphicUniform(\"u_mv\", bind);\r\n });\r\n }\r\n}\r\n\r\nconst computeNormalMatrix = `\r\n g_nmx = mat3(u_modelViewN);\r\n g_nmx[0][0] *= u_frustumScale.x;\r\n g_nmx[1][1] *= u_frustumScale.y;\r\n`;\r\n\r\nconst computeNormalMatrix2 = `\r\n g_nmx = transpose(inverse(mat3(MAT_MV)));\r\n g_nmx[0][0] *= u_frustumScale.x;\r\n g_nmx[1][1] *= u_frustumScale.y;\r\n`;\r\n\r\nconst computeNormalMatrix1Inst = `\r\n g_nmx = mat3(MAT_MV);\r\n g_nmx[0][0] *= u_frustumScale.x;\r\n g_nmx[1][1] *= u_frustumScale.y;\r\n`;\r\n\r\n/** @internal */\r\nexport function addNormalMatrix(vert: VertexShaderBuilder, instanced: IsInstanced) {\r\n vert.addGlobal(\"g_nmx\", VariableType.Mat3);\r\n vert.addUniform(\"u_frustumScale\", VariableType.Vec2, (prog) => {\r\n prog.addGraphicUniform(\"u_frustumScale\", (uniform, params) => {\r\n const scale = params.target.uniforms.branch.top.frustumScale;\r\n uniform.setUniform2fv([scale.x, scale.y]);\r\n });\r\n });\r\n\r\n if (System.instance.capabilities.isWebGL2) {\r\n vert.addInitializer(computeNormalMatrix2);\r\n } else if (IsInstanced.Yes === instanced) {\r\n vert.addInitializer(computeNormalMatrix1Inst);\r\n } else {\r\n vert.addUniform(\"u_modelViewN\", VariableType.Mat3, (prog) => {\r\n prog.addGraphicUniform(\"u_modelViewN\", (uniform, params) => {\r\n params.target.uniforms.branch.bindModelViewNTransform(uniform, params.geometry, false);\r\n });\r\n });\r\n vert.addInitializer(computeNormalMatrix);\r\n }\r\n}\r\n\r\nfunction readVertexData(index: number): string {\r\n return `g_vertLutData${index} = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);`;\r\n}\r\n\r\nconst nextVertexData = \"tc.x += g_vert_stepX;\";\r\n\r\nfunction readNextVertexData(index: number): string {\r\n return `\r\n ${nextVertexData}\r\n ${readVertexData(index)}`;\r\n}\r\n\r\nconst prereadVertexDataPrelude = `\r\n vec2 tc = g_vertexBaseCoords;\r\n ${readVertexData(0)}\r\n ${readNextVertexData(1)}\r\n ${readNextVertexData(2)}\r\n`;\r\n\r\nconst prereadQuantizedVertexData = `${prereadVertexDataPrelude}\r\n if (3.0 < u_vertParams.z) {\r\n ${readNextVertexData(3)}\r\n }\r\n`;\r\n\r\nconst prereadUnquantizedVertexData = `${prereadVertexDataPrelude}\r\n ${readNextVertexData(3)}\r\n ${readNextVertexData(4)}\r\n if (5.0 < u_vertParams.z) {\r\n ${readNextVertexData(5)}\r\n }\r\n`;\r\n\r\nconst scratchLutParams = new Float32Array(4);\r\nfunction addPositionFromLUT(vert: VertexShaderBuilder) {\r\n vert.addGlobal(\"g_vertexLUTIndex\", VariableType.Float);\r\n vert.addGlobal(\"g_vertexBaseCoords\", VariableType.Vec2);\r\n\r\n const unquantized = \"unquantized\" === vert.positionType;\r\n const maxRgbaPerVert = unquantized ? 6 : 4;\r\n for (let i = 0; i < maxRgbaPerVert; i++)\r\n vert.addGlobal(`g_vertLutData${i}`, VariableType.Vec4);\r\n\r\n vert.addFunction(decodeUint24);\r\n vert.addFunction(decodeUint16);\r\n\r\n if (unquantized) {\r\n if (System.instance.capabilities.isWebGL2) {\r\n vert.addFunction(computeUnquantizedPosition2);\r\n } else {\r\n vert.addFunction(decode3Float32);\r\n vert.addFunction(computeUnquantizedPosition1);\r\n }\r\n } else {\r\n vert.addFunction(computeVertexPositionFromLUT);\r\n }\r\n\r\n vert.addUniform(\"u_vertLUT\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_vertLUT\", (uniform, params) => {\r\n (params.geometry.asLUT!).lut.texture.bindSampler(uniform, TextureUnit.VertexLUT);\r\n });\r\n });\r\n\r\n vert.addUniform(\"u_vertParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_vertParams\", (uniform, params) => {\r\n assert(undefined !== params.geometry.asLUT);\r\n const lut = params.geometry.asLUT.lut;\r\n const lutParams = scratchLutParams;\r\n lutParams[0] = lut.texture.width;\r\n lutParams[1] = lut.texture.height;\r\n lutParams[2] = lut.numRgbaPerVertex;\r\n lutParams[3] = lut.numVertices;\r\n uniform.setUniform4fv(lutParams);\r\n });\r\n });\r\n\r\n addLookupTable(vert, \"vert\", \"u_vertParams.z\");\r\n vert.addInitializer(initializeVertLUTCoords);\r\n\r\n vert.addGlobal(\"g_featureAndMaterialIndex\", VariableType.Vec4);\r\n\r\n // Read the vertex data from the vertex table up front. Yields a consistent (if unexplainable) small performance boost.\r\n vert.addInitializer(unquantized ? prereadUnquantizedVertexData : prereadQuantizedVertexData);\r\n}\r\n\r\n/** @internal */\r\nexport function addPosition(vert: VertexShaderBuilder, fromLUT: boolean) {\r\n if (!fromLUT || \"quantized\" === vert.positionType) {\r\n vert.addFunction(unquantizePosition);\r\n vert.addUniform(\"u_qScale\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_qScale\", (uniform, params) => {\r\n assert(params.geometry.usesQuantizedPositions);\r\n uniform.setUniform3fv(params.geometry.qScale);\r\n });\r\n });\r\n vert.addUniform(\"u_qOrigin\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_qOrigin\", (uniform, params) => {\r\n assert(params.geometry.usesQuantizedPositions);\r\n uniform.setUniform3fv(params.geometry.qOrigin);\r\n });\r\n });\r\n }\r\n\r\n if (!fromLUT) {\r\n vert.addFunction(computeQuantizedPosition);\r\n } else {\r\n addPositionFromLUT(vert);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function addAlpha(vert: VertexShaderBuilder): void {\r\n vert.addUniform(\"u_hasAlpha\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_hasAlpha\", (uniform, params) => {\r\n uniform.setUniform1f(Pass.rendersTranslucent(params.geometry.getPass(params.target)) ? 1 : 0);\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function addLineWeight(vert: VertexShaderBuilder): void {\r\n vert.addUniform(\"u_lineWeight\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_lineWeight\", (attr, params) => {\r\n attr.setUniform1f(params.geometry.getLineWeight(params.programParams));\r\n });\r\n });\r\n\r\n vert.addGlobal(\"g_lineWeight\", VariableType.Float);\r\n if (vert.usesInstancedGeometry) {\r\n addInstanceOverrides(vert);\r\n vert.addInitializer(\"g_lineWeight = mix(u_lineWeight, a_instanceOverrides.g, extractInstanceBit(kOvrBit_Weight));\");\r\n } else {\r\n vert.addInitializer(\"g_lineWeight = u_lineWeight;\");\r\n }\r\n\r\n vert.addFunction(computeLineWeight);\r\n}\r\n\r\n/** @internal */\r\nexport function replaceLineWeight(vert: VertexShaderBuilder, func: string): void {\r\n vert.replaceFunction(computeLineWeight, func);\r\n}\r\n\r\n/** @internal */\r\nexport function addLineCode(vert: VertexShaderBuilder): void {\r\n vert.addUniform(\"u_lineCode\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_lineCode\", (attr, params) => {\r\n attr.setUniform1f(params.geometry.getLineCode(params.programParams));\r\n });\r\n });\r\n\r\n vert.addGlobal(\"g_lineCode\", VariableType.Float);\r\n if (vert.usesInstancedGeometry) {\r\n addInstanceOverrides(vert);\r\n vert.addInitializer(\"g_lineCode = mix(u_lineCode, a_instanceOverrides.b, extractInstanceBit(kOvrBit_LineCode));\");\r\n } else {\r\n vert.addInitializer(\"g_lineCode = u_lineCode;\");\r\n }\r\n\r\n vert.addFunction(computeLineCode);\r\n}\r\n\r\n/** @internal */\r\nexport function replaceLineCode(vert: VertexShaderBuilder, func: string): void {\r\n vert.replaceFunction(computeLineCode, func);\r\n}\r\n\r\n// This vertex belongs to a triangle which should not be rendered. Produce a degenerate triangle.\r\n// Also place it outside NDC range (for GL_POINTS)\r\nconst discardVertex = ` {\r\n gl_Position = vec4(2.0, 2.0, 2.0, 1.0);\r\n return;\r\n }\r\n`;\r\n\r\n/** @internal */\r\nexport const earlyVertexDiscard = ` if (checkForEarlyDiscard(rawPosition))${discardVertex}`;\r\n/** @internal */\r\nexport const vertexDiscard = ` if (checkForDiscard())${discardVertex}`;\r\n/** @internal */\r\nexport const lateVertexDiscard = ` if (checkForLateDiscard())${discardVertex}`;\r\n"]}
@@ -6,16 +6,16 @@ import { IModelTile, IModelTileContent, TileRequestChannel } from "./internal";
6
6
  * @internal
7
7
  */
8
8
  export declare class IModelTileRequestChannels {
9
- private _cloudStorage?;
9
+ private _cloudStorage;
10
10
  private readonly _contentCache?;
11
11
  readonly rpc: TileRequestChannel;
12
12
  constructor(args: {
13
13
  concurrency: number;
14
14
  usesHttp: boolean;
15
15
  cacheMetadata: boolean;
16
+ cacheConcurrency: number;
16
17
  });
17
- get cloudStorage(): TileRequestChannel | undefined;
18
- enableCloudStorageCache(concurrency: number): TileRequestChannel;
18
+ get cloudStorage(): TileRequestChannel;
19
19
  [Symbol.iterator](): Iterator<TileRequestChannel>;
20
20
  setRpcConcurrency(concurrency: number): void;
21
21
  getChannelForTile(tile: IModelTile): TileRequestChannel;
@@ -1 +1 @@
1
- {"version":3,"file":"IModelTileRequestChannels.d.ts","sourceRoot":"","sources":["../../../src/tile/IModelTileRequestChannels.ts"],"names":[],"mappings":"AAIA;;GAEG;AAOH,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAqB,kBAAkB,EAAY,MAAM,YAAY,CAAC;AAoI5G;;GAEG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,aAAa,CAAC,CAAqB;IAC3C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAiC;IAChE,SAAgB,GAAG,EAAE,kBAAkB,CAAC;gBAErB,IAAI,EAAE;QACvB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,OAAO,CAAC;QAClB,aAAa,EAAE,OAAO,CAAC;KACxB;IAUD,IAAW,YAAY,IAAI,kBAAkB,GAAG,SAAS,CAExD;IAEM,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,kBAAkB;IAOhE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,kBAAkB,CAAC;IAWjD,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAI5C,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,kBAAkB;IAI9D,0BAA0B;IACnB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,iBAAiB,GAAG,SAAS;CAGzE"}
1
+ {"version":3,"file":"IModelTileRequestChannels.d.ts","sourceRoot":"","sources":["../../../src/tile/IModelTileRequestChannels.ts"],"names":[],"mappings":"AAIA;;GAEG;AAOH,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAqB,kBAAkB,EAAY,MAAM,YAAY,CAAC;AAoI5G;;GAEG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAiC;IAChE,SAAgB,GAAG,EAAE,kBAAkB,CAAC;gBAErB,IAAI,EAAE;QACvB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,OAAO,CAAC;QAClB,aAAa,EAAE,OAAO,CAAC;QACvB,gBAAgB,EAAE,MAAM,CAAC;KAC1B;IAaD,IAAW,YAAY,IAAI,kBAAkB,CAE5C;IAEM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,kBAAkB,CAAC;IAWjD,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAI5C,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,kBAAkB;IAI9D,0BAA0B;IACnB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,iBAAiB,GAAG,SAAS;CAGzE"}
@@ -126,23 +126,19 @@ class IModelTileMetadataCacheChannel extends internal_1.TileRequestChannel {
126
126
  */
127
127
  class IModelTileRequestChannels {
128
128
  constructor(args) {
129
+ var _a;
129
130
  const channelName = "itwinjs-tile-rpc";
130
131
  this.rpc = args.usesHttp ? new internal_1.TileRequestChannel(channelName, args.concurrency) : new IModelTileChannel(channelName, args.concurrency);
131
- if (!args.cacheMetadata)
132
- return;
133
- this._contentCache = new IModelTileMetadataCacheChannel();
134
- this._contentCache.registerChannel(this.rpc);
132
+ if (args.cacheMetadata) {
133
+ this._contentCache = new IModelTileMetadataCacheChannel();
134
+ this._contentCache.registerChannel(this.rpc);
135
+ }
136
+ this._cloudStorage = new CloudStorageCacheChannel("itwinjs-cloud-cache", args.cacheConcurrency);
137
+ (_a = this._contentCache) === null || _a === void 0 ? void 0 : _a.registerChannel(this._cloudStorage);
135
138
  }
136
139
  get cloudStorage() {
137
140
  return this._cloudStorage;
138
141
  }
139
- enableCloudStorageCache(concurrency) {
140
- var _a;
141
- (0, core_bentley_1.assert)(undefined === this._cloudStorage);
142
- this._cloudStorage = new CloudStorageCacheChannel("itwinjs-cloud-cache", concurrency);
143
- (_a = this._contentCache) === null || _a === void 0 ? void 0 : _a.registerChannel(this._cloudStorage);
144
- return this._cloudStorage;
145
- }
146
142
  [Symbol.iterator]() {
147
143
  const channels = [this.rpc];
148
144
  if (this._cloudStorage)
@@ -1 +1 @@
1
- {"version":3,"file":"IModelTileRequestChannels.js","sourceRoot":"","sources":["../../../src/tile/IModelTileRequestChannels.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, compareStrings, SortedArray } from \"@itwin/core-bentley\";\r\nimport { TileTreeContentIds } from \"@itwin/core-common\";\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { IpcApp } from \"../IpcApp\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { IModelTile, IModelTileContent, Tile, TileRequest, TileRequestChannel, TileTree } from \"./internal\";\r\n\r\n/** Handles requests to the cloud storage tile cache, if one is configured. If a tile's content is not found in the cache, subsequent requests for the same tile will\r\n * use the IModelTileChannel instead.\r\n */\r\nclass CloudStorageCacheChannel extends TileRequestChannel {\r\n public override async requestContent(tile: Tile): Promise<TileRequest.Response> {\r\n assert(tile instanceof IModelTile);\r\n return IModelApp.tileAdmin.requestCachedTileContent(tile);\r\n }\r\n\r\n public override onNoContent(request: TileRequest): boolean {\r\n assert(request.tile instanceof IModelTile);\r\n request.tile.requestChannel = IModelApp.tileAdmin.channels.iModelChannels.rpc;\r\n ++this._statistics.totalCacheMisses;\r\n return true;\r\n }\r\n}\r\n\r\n/** For an [[IpcApp]], allows backend tile generation requests in progress to be canceled. */\r\nclass IModelTileChannel extends TileRequestChannel {\r\n private readonly _canceled = new Map<IModelConnection, Map<string, Set<string>>>();\r\n\r\n public override onActiveRequestCanceled(request: TileRequest): void {\r\n const tree = request.tile.tree;\r\n let entry = this._canceled.get(tree.iModel);\r\n if (!entry)\r\n this._canceled.set(tree.iModel, entry = new Map<string, Set<string>>());\r\n\r\n let ids = entry.get(tree.id);\r\n if (!ids)\r\n entry.set(tree.id, ids = new Set<string>());\r\n\r\n ids.add(request.tile.contentId);\r\n }\r\n\r\n public override processCancellations(): void {\r\n for (const [imodel, entries] of this._canceled) {\r\n const treeContentIds: TileTreeContentIds[] = [];\r\n for (const [treeId, tileIds] of entries) {\r\n const contentIds = Array.from(tileIds);\r\n treeContentIds.push({ treeId, contentIds });\r\n this._statistics.totalAbortedRequests += contentIds.length;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n IpcApp.callIpcHost(\"cancelTileContentRequests\", imodel.getRpcProps(), treeContentIds);\r\n }\r\n\r\n this._canceled.clear();\r\n }\r\n\r\n public override onIModelClosed(imodel: IModelConnection): void {\r\n this._canceled.delete(imodel);\r\n }\r\n}\r\n\r\ninterface CachedContent extends Omit<IModelTileContent, \"graphic\"> {\r\n contentId: string;\r\n hasGraphic: boolean;\r\n}\r\n\r\n/** If TileAdmin.Props.cacheTileMetadata is true, then this is the first channel through which we request content for an IModelTile.\r\n * It serves a niche purpose: a tile pre-generation agent that wants to ensure that every tile selected during interaction with the application\r\n * has its tile generated and cached in cloud storage. This agent might request thousands of tiles in sequence, causing a given tile to be discarded\r\n * and reloaded many times. To avoid pointlessly reloading tiles whose contents have already been generated, this channel caches the metadata for each tile;\r\n * on subsequent requests for the same tile, it produces the metadata and an empty RenderGraphic.\r\n */\r\nclass IModelTileMetadataCacheChannel extends TileRequestChannel {\r\n private readonly _cacheByIModel = new Map<IModelConnection, Map<TileTree, SortedArray<CachedContent>>>();\r\n\r\n public constructor() {\r\n super(\"itwinjs-imodel-metadata-cache\", 100);\r\n }\r\n\r\n public override onNoContent(request: TileRequest): boolean {\r\n assert(request.tile instanceof IModelTile);\r\n const channels = IModelApp.tileAdmin.channels.iModelChannels;\r\n request.tile.requestChannel = channels.cloudStorage ?? channels.rpc;\r\n return true;\r\n }\r\n\r\n public override async requestContent(tile: Tile): Promise<TileRequest.Response> {\r\n assert(tile instanceof IModelTile);\r\n const content = this.getCachedContent(tile);\r\n return content ? { content } : undefined;\r\n }\r\n\r\n public getCachedContent(tile: IModelTile): IModelTileContent | undefined {\r\n const cached = this._cacheByIModel.get(tile.iModel)?.get(tile.tree)?.findEquivalent((x) => compareStrings(x.contentId, tile.contentId));\r\n if (!cached)\r\n return undefined;\r\n\r\n const content: IModelTileContent = {\r\n ...cached,\r\n graphic: cached.hasGraphic ? IModelApp.renderSystem.createGraphicList([]) : undefined,\r\n contentRange: cached.contentRange?.clone(),\r\n };\r\n\r\n return content;\r\n }\r\n\r\n public override onIModelClosed(imodel: IModelConnection): void {\r\n this._cacheByIModel.delete(imodel);\r\n }\r\n\r\n public registerChannel(channel: TileRequestChannel): void {\r\n channel.contentCallback = (tile, content) => this.cache(tile, content);\r\n }\r\n\r\n private cache(tile: Tile, content: IModelTileContent): void {\r\n assert(tile instanceof IModelTile);\r\n let trees = this._cacheByIModel.get(tile.iModel);\r\n if (!trees)\r\n this._cacheByIModel.set(tile.iModel, trees = new Map<TileTree, SortedArray<CachedContent>>());\r\n\r\n let list = trees.get(tile.tree);\r\n if (!list)\r\n trees.set(tile.tree, list = new SortedArray<CachedContent>((lhs, rhs) => compareStrings(lhs.contentId, rhs.contentId)));\r\n\r\n assert(undefined === list.findEquivalent((x) => compareStrings(x.contentId, tile.contentId)));\r\n list.insert({\r\n contentId: tile.contentId,\r\n hasGraphic: undefined !== content.graphic,\r\n contentRange: content.contentRange?.clone(),\r\n isLeaf: content.isLeaf,\r\n sizeMultiplier: content.sizeMultiplier,\r\n emptySubRangeMask: content.emptySubRangeMask,\r\n });\r\n }\r\n}\r\n\r\n/** TileRequestChannels used for requesting content for IModelTiles.\r\n * @internal\r\n */\r\nexport class IModelTileRequestChannels {\r\n private _cloudStorage?: TileRequestChannel;\r\n private readonly _contentCache?: IModelTileMetadataCacheChannel;\r\n public readonly rpc: TileRequestChannel;\r\n\r\n public constructor(args: {\r\n concurrency: number;\r\n usesHttp: boolean;\r\n cacheMetadata: boolean;\r\n }) {\r\n const channelName = \"itwinjs-tile-rpc\";\r\n this.rpc = args.usesHttp ? new TileRequestChannel(channelName, args.concurrency) : new IModelTileChannel(channelName, args.concurrency);\r\n if (!args.cacheMetadata)\r\n return;\r\n\r\n this._contentCache = new IModelTileMetadataCacheChannel();\r\n this._contentCache.registerChannel(this.rpc);\r\n }\r\n\r\n public get cloudStorage(): TileRequestChannel | undefined {\r\n return this._cloudStorage;\r\n }\r\n\r\n public enableCloudStorageCache(concurrency: number): TileRequestChannel {\r\n assert(undefined === this._cloudStorage);\r\n this._cloudStorage = new CloudStorageCacheChannel(\"itwinjs-cloud-cache\", concurrency);\r\n this._contentCache?.registerChannel(this._cloudStorage);\r\n return this._cloudStorage;\r\n }\r\n\r\n public [Symbol.iterator](): Iterator<TileRequestChannel> {\r\n const channels = [this.rpc];\r\n if (this._cloudStorage)\r\n channels.push(this._cloudStorage);\r\n\r\n if (this._contentCache)\r\n channels.push(this._contentCache);\r\n\r\n return channels[Symbol.iterator]();\r\n }\r\n\r\n public setRpcConcurrency(concurrency: number): void {\r\n this.rpc.concurrency = concurrency;\r\n }\r\n\r\n public getChannelForTile(tile: IModelTile): TileRequestChannel {\r\n return tile.requestChannel || this._contentCache || this._cloudStorage || this.rpc;\r\n }\r\n\r\n /** Strictly for tests. */\r\n public getCachedContent(tile: IModelTile): IModelTileContent | undefined {\r\n return this._contentCache?.getCachedContent(tile);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"IModelTileRequestChannels.js","sourceRoot":"","sources":["../../../src/tile/IModelTileRequestChannels.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAA0E;AAE1E,4CAAyC;AACzC,sCAAmC;AAEnC,yCAA4G;AAE5G;;GAEG;AACH,MAAM,wBAAyB,SAAQ,6BAAkB;IACvC,KAAK,CAAC,cAAc,CAAC,IAAU;QAC7C,IAAA,qBAAM,EAAC,IAAI,YAAY,qBAAU,CAAC,CAAC;QACnC,OAAO,qBAAS,CAAC,SAAS,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC;IAEe,WAAW,CAAC,OAAoB;QAC9C,IAAA,qBAAM,EAAC,OAAO,CAAC,IAAI,YAAY,qBAAU,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,cAAc,GAAG,qBAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC;QAC9E,EAAE,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,6FAA6F;AAC7F,MAAM,iBAAkB,SAAQ,6BAAkB;IAAlD;;QACmB,cAAS,GAAG,IAAI,GAAG,EAA8C,CAAC;IAkCrF,CAAC;IAhCiB,uBAAuB,CAAC,OAAoB;QAC1D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/B,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK;YACR,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAC,CAAC;QAE1E,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG;YACN,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC,CAAC;QAE9C,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAEe,oBAAoB;QAClC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;YAC9C,MAAM,cAAc,GAAyB,EAAE,CAAC;YAChD,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,OAAO,EAAE;gBACvC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvC,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;gBAC5C,IAAI,CAAC,WAAW,CAAC,oBAAoB,IAAI,UAAU,CAAC,MAAM,CAAC;aAC5D;YAED,mEAAmE;YACnE,eAAM,CAAC,WAAW,CAAC,2BAA2B,EAAE,MAAM,CAAC,WAAW,EAAE,EAAE,cAAc,CAAC,CAAC;SACvF;QAED,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAEe,cAAc,CAAC,MAAwB;QACrD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;CACF;AAOD;;;;;GAKG;AACH,MAAM,8BAA+B,SAAQ,6BAAkB;IAG7D;QACE,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAC;QAH7B,mBAAc,GAAG,IAAI,GAAG,EAA+D,CAAC;IAIzG,CAAC;IAEe,WAAW,CAAC,OAAoB;;QAC9C,IAAA,qBAAM,EAAC,OAAO,CAAC,IAAI,YAAY,qBAAU,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,qBAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,cAAc,GAAG,MAAA,QAAQ,CAAC,YAAY,mCAAI,QAAQ,CAAC,GAAG,CAAC;QACpE,OAAO,IAAI,CAAC;IACd,CAAC;IAEe,KAAK,CAAC,cAAc,CAAC,IAAU;QAC7C,IAAA,qBAAM,EAAC,IAAI,YAAY,qBAAU,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC5C,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3C,CAAC;IAEM,gBAAgB,CAAC,IAAgB;;QACtC,MAAM,MAAM,GAAG,MAAA,MAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,0CAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,0CAAE,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,6BAAc,EAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QACxI,IAAI,CAAC,MAAM;YACT,OAAO,SAAS,CAAC;QAEnB,MAAM,OAAO,GAAsB;YACjC,GAAG,MAAM;YACT,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,qBAAS,CAAC,YAAY,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;YACrF,YAAY,EAAE,MAAA,MAAM,CAAC,YAAY,0CAAE,KAAK,EAAE;SAC3C,CAAC;QAEF,OAAO,OAAO,CAAC;IACjB,CAAC;IAEe,cAAc,CAAC,MAAwB;QACrD,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAEM,eAAe,CAAC,OAA2B;QAChD,OAAO,CAAC,eAAe,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzE,CAAC;IAEO,KAAK,CAAC,IAAU,EAAE,OAA0B;;QAClD,IAAA,qBAAM,EAAC,IAAI,YAAY,qBAAU,CAAC,CAAC;QACnC,IAAI,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,KAAK;YACR,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,GAAG,EAAwC,CAAC,CAAC;QAEhG,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI;YACP,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,0BAAW,CAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,IAAA,6BAAc,EAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAE1H,IAAA,qBAAM,EAAC,SAAS,KAAK,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,6BAAc,EAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC9F,IAAI,CAAC,MAAM,CAAC;YACV,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE,SAAS,KAAK,OAAO,CAAC,OAAO;YACzC,YAAY,EAAE,MAAA,OAAO,CAAC,YAAY,0CAAE,KAAK,EAAE;YAC3C,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;SAC7C,CAAC,CAAC;IACL,CAAC;CACF;AAED;;GAEG;AACH,MAAa,yBAAyB;IAKpC,YAAmB,IAKlB;;QACC,MAAM,WAAW,GAAG,kBAAkB,CAAC;QACvC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,6BAAkB,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAExI,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,aAAa,GAAG,IAAI,8BAA8B,EAAE,CAAC;YAC1D,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC9C;QAED,IAAI,CAAC,aAAa,GAAG,IAAI,wBAAwB,CAAC,qBAAqB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAChG,MAAA,IAAI,CAAC,aAAa,0CAAE,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC1D,CAAC;IAED,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAEM,CAAC,MAAM,CAAC,QAAQ,CAAC;QACtB,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,IAAI,CAAC,aAAa;YACpB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEpC,IAAI,IAAI,CAAC,aAAa;YACpB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEpC,OAAO,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;IACrC,CAAC;IAEM,iBAAiB,CAAC,WAAmB;QAC1C,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC;IACrC,CAAC;IAEM,iBAAiB,CAAC,IAAgB;QACvC,OAAO,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,GAAG,CAAC;IACrF,CAAC;IAED,0BAA0B;IACnB,gBAAgB,CAAC,IAAgB;;QACtC,OAAO,MAAA,IAAI,CAAC,aAAa,0CAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC;CACF;AAlDD,8DAkDC","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, compareStrings, SortedArray } from \"@itwin/core-bentley\";\r\nimport { TileTreeContentIds } from \"@itwin/core-common\";\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { IpcApp } from \"../IpcApp\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { IModelTile, IModelTileContent, Tile, TileRequest, TileRequestChannel, TileTree } from \"./internal\";\r\n\r\n/** Handles requests to the cloud storage tile cache, if one is configured. If a tile's content is not found in the cache, subsequent requests for the same tile will\r\n * use the IModelTileChannel instead.\r\n */\r\nclass CloudStorageCacheChannel extends TileRequestChannel {\r\n public override async requestContent(tile: Tile): Promise<TileRequest.Response> {\r\n assert(tile instanceof IModelTile);\r\n return IModelApp.tileAdmin.requestCachedTileContent(tile);\r\n }\r\n\r\n public override onNoContent(request: TileRequest): boolean {\r\n assert(request.tile instanceof IModelTile);\r\n request.tile.requestChannel = IModelApp.tileAdmin.channels.iModelChannels.rpc;\r\n ++this._statistics.totalCacheMisses;\r\n return true;\r\n }\r\n}\r\n\r\n/** For an [[IpcApp]], allows backend tile generation requests in progress to be canceled. */\r\nclass IModelTileChannel extends TileRequestChannel {\r\n private readonly _canceled = new Map<IModelConnection, Map<string, Set<string>>>();\r\n\r\n public override onActiveRequestCanceled(request: TileRequest): void {\r\n const tree = request.tile.tree;\r\n let entry = this._canceled.get(tree.iModel);\r\n if (!entry)\r\n this._canceled.set(tree.iModel, entry = new Map<string, Set<string>>());\r\n\r\n let ids = entry.get(tree.id);\r\n if (!ids)\r\n entry.set(tree.id, ids = new Set<string>());\r\n\r\n ids.add(request.tile.contentId);\r\n }\r\n\r\n public override processCancellations(): void {\r\n for (const [imodel, entries] of this._canceled) {\r\n const treeContentIds: TileTreeContentIds[] = [];\r\n for (const [treeId, tileIds] of entries) {\r\n const contentIds = Array.from(tileIds);\r\n treeContentIds.push({ treeId, contentIds });\r\n this._statistics.totalAbortedRequests += contentIds.length;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n IpcApp.callIpcHost(\"cancelTileContentRequests\", imodel.getRpcProps(), treeContentIds);\r\n }\r\n\r\n this._canceled.clear();\r\n }\r\n\r\n public override onIModelClosed(imodel: IModelConnection): void {\r\n this._canceled.delete(imodel);\r\n }\r\n}\r\n\r\ninterface CachedContent extends Omit<IModelTileContent, \"graphic\"> {\r\n contentId: string;\r\n hasGraphic: boolean;\r\n}\r\n\r\n/** If TileAdmin.Props.cacheTileMetadata is true, then this is the first channel through which we request content for an IModelTile.\r\n * It serves a niche purpose: a tile pre-generation agent that wants to ensure that every tile selected during interaction with the application\r\n * has its tile generated and cached in cloud storage. This agent might request thousands of tiles in sequence, causing a given tile to be discarded\r\n * and reloaded many times. To avoid pointlessly reloading tiles whose contents have already been generated, this channel caches the metadata for each tile;\r\n * on subsequent requests for the same tile, it produces the metadata and an empty RenderGraphic.\r\n */\r\nclass IModelTileMetadataCacheChannel extends TileRequestChannel {\r\n private readonly _cacheByIModel = new Map<IModelConnection, Map<TileTree, SortedArray<CachedContent>>>();\r\n\r\n public constructor() {\r\n super(\"itwinjs-imodel-metadata-cache\", 100);\r\n }\r\n\r\n public override onNoContent(request: TileRequest): boolean {\r\n assert(request.tile instanceof IModelTile);\r\n const channels = IModelApp.tileAdmin.channels.iModelChannels;\r\n request.tile.requestChannel = channels.cloudStorage ?? channels.rpc;\r\n return true;\r\n }\r\n\r\n public override async requestContent(tile: Tile): Promise<TileRequest.Response> {\r\n assert(tile instanceof IModelTile);\r\n const content = this.getCachedContent(tile);\r\n return content ? { content } : undefined;\r\n }\r\n\r\n public getCachedContent(tile: IModelTile): IModelTileContent | undefined {\r\n const cached = this._cacheByIModel.get(tile.iModel)?.get(tile.tree)?.findEquivalent((x) => compareStrings(x.contentId, tile.contentId));\r\n if (!cached)\r\n return undefined;\r\n\r\n const content: IModelTileContent = {\r\n ...cached,\r\n graphic: cached.hasGraphic ? IModelApp.renderSystem.createGraphicList([]) : undefined,\r\n contentRange: cached.contentRange?.clone(),\r\n };\r\n\r\n return content;\r\n }\r\n\r\n public override onIModelClosed(imodel: IModelConnection): void {\r\n this._cacheByIModel.delete(imodel);\r\n }\r\n\r\n public registerChannel(channel: TileRequestChannel): void {\r\n channel.contentCallback = (tile, content) => this.cache(tile, content);\r\n }\r\n\r\n private cache(tile: Tile, content: IModelTileContent): void {\r\n assert(tile instanceof IModelTile);\r\n let trees = this._cacheByIModel.get(tile.iModel);\r\n if (!trees)\r\n this._cacheByIModel.set(tile.iModel, trees = new Map<TileTree, SortedArray<CachedContent>>());\r\n\r\n let list = trees.get(tile.tree);\r\n if (!list)\r\n trees.set(tile.tree, list = new SortedArray<CachedContent>((lhs, rhs) => compareStrings(lhs.contentId, rhs.contentId)));\r\n\r\n assert(undefined === list.findEquivalent((x) => compareStrings(x.contentId, tile.contentId)));\r\n list.insert({\r\n contentId: tile.contentId,\r\n hasGraphic: undefined !== content.graphic,\r\n contentRange: content.contentRange?.clone(),\r\n isLeaf: content.isLeaf,\r\n sizeMultiplier: content.sizeMultiplier,\r\n emptySubRangeMask: content.emptySubRangeMask,\r\n });\r\n }\r\n}\r\n\r\n/** TileRequestChannels used for requesting content for IModelTiles.\r\n * @internal\r\n */\r\nexport class IModelTileRequestChannels {\r\n private _cloudStorage: TileRequestChannel;\r\n private readonly _contentCache?: IModelTileMetadataCacheChannel;\r\n public readonly rpc: TileRequestChannel;\r\n\r\n public constructor(args: {\r\n concurrency: number;\r\n usesHttp: boolean;\r\n cacheMetadata: boolean;\r\n cacheConcurrency: number;\r\n }) {\r\n const channelName = \"itwinjs-tile-rpc\";\r\n this.rpc = args.usesHttp ? new TileRequestChannel(channelName, args.concurrency) : new IModelTileChannel(channelName, args.concurrency);\r\n\r\n if (args.cacheMetadata) {\r\n this._contentCache = new IModelTileMetadataCacheChannel();\r\n this._contentCache.registerChannel(this.rpc);\r\n }\r\n\r\n this._cloudStorage = new CloudStorageCacheChannel(\"itwinjs-cloud-cache\", args.cacheConcurrency);\r\n this._contentCache?.registerChannel(this._cloudStorage);\r\n }\r\n\r\n public get cloudStorage(): TileRequestChannel {\r\n return this._cloudStorage;\r\n }\r\n\r\n public [Symbol.iterator](): Iterator<TileRequestChannel> {\r\n const channels = [this.rpc];\r\n if (this._cloudStorage)\r\n channels.push(this._cloudStorage);\r\n\r\n if (this._contentCache)\r\n channels.push(this._contentCache);\r\n\r\n return channels[Symbol.iterator]();\r\n }\r\n\r\n public setRpcConcurrency(concurrency: number): void {\r\n this.rpc.concurrency = concurrency;\r\n }\r\n\r\n public getChannelForTile(tile: IModelTile): TileRequestChannel {\r\n return tile.requestChannel || this._contentCache || this._cloudStorage || this.rpc;\r\n }\r\n\r\n /** Strictly for tests. */\r\n public getCachedContent(tile: IModelTile): IModelTileContent | undefined {\r\n return this._contentCache?.getCachedContent(tile);\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"OPCFormatInterpreter.d.ts","sourceRoot":"","sources":["../../../src/tile/OPCFormatInterpreter.ts"],"names":[],"mappings":"AAOA,OAAO,EAAyF,gBAAgB,EAAS,MAAM,qBAAqB,CAAC;AAIrJ,OAAO,EAAoB,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAInF;;;GAGG;AACH,qBAAa,oBAAoB;IAC/B;;;;OAIG;WACiB,4BAA4B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAiBhG;;;;;OAKG;WACiB,4BAA4B,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,yBAAyB,CAAC;CA2CnH"}
1
+ {"version":3,"file":"OPCFormatInterpreter.d.ts","sourceRoot":"","sources":["../../../src/tile/OPCFormatInterpreter.ts"],"names":[],"mappings":"AAOA,OAAO,EAAwG,gBAAgB,EAAS,MAAM,qBAAqB,CAAC;AAGpK,OAAO,EAAoB,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAInF;;;GAGG;AACH,qBAAa,oBAAoB;IAC/B;;;;OAIG;WACiB,4BAA4B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAiBhG;;;;;OAKG;WACiB,4BAA4B,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,yBAAyB,CAAC;CA2CnH"}
@@ -9,7 +9,6 @@ const core_common_1 = require("@itwin/core-common");
9
9
  const core_geometry_1 = require("@itwin/core-geometry");
10
10
  const core_orbitgt_1 = require("@itwin/core-orbitgt");
11
11
  const FrontendLoggerCategory_1 = require("../FrontendLoggerCategory");
12
- const DownloaderNode_1 = require("@itwin/core-orbitgt/lib/cjs/system/runtime/DownloaderNode");
13
12
  const core_bentley_1 = require("@itwin/core-bentley");
14
13
  const RealityDataSource_1 = require("../RealityDataSource");
15
14
  const loggerCategory = FrontendLoggerCategory_1.FrontendLoggerCategory.RealityData;
@@ -25,7 +24,7 @@ class OPCFormatInterpreter {
25
24
  */
26
25
  static async getFileReaderFromBlobFileURL(blobFileURL) {
27
26
  if (core_orbitgt_1.Downloader.INSTANCE == null)
28
- core_orbitgt_1.Downloader.INSTANCE = new DownloaderNode_1.DownloaderNode();
27
+ core_orbitgt_1.Downloader.INSTANCE = new core_orbitgt_1.DownloaderXhr();
29
28
  if (core_orbitgt_1.CRSManager.ENGINE == null)
30
29
  core_orbitgt_1.CRSManager.ENGINE = await core_orbitgt_1.OnlineEngine.create();
31
30
  // let blobFileURL: string = rdUrl;
@@ -1 +1 @@
1
- {"version":3,"file":"OPCFormatInterpreter.js","sourceRoot":"","sources":["../../../src/tile/OPCFormatInterpreter.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Cartographic, EcefLocation } from \"@itwin/core-common\";\r\nimport { Range3d } from \"@itwin/core-geometry\";\r\nimport { ALong, CRSManager, Downloader, OnlineEngine, OPCReader, OrbitGtBounds, PageCachedFile, PointCloudReader, UrlFS } from \"@itwin/core-orbitgt\";\r\nimport { FrontendLoggerCategory } from \"../FrontendLoggerCategory\";\r\nimport { DownloaderNode } from \"@itwin/core-orbitgt/lib/cjs/system/runtime/DownloaderNode\";\r\nimport { BentleyError, Logger, LoggingMetaData, RealityDataStatus } from \"@itwin/core-bentley\";\r\nimport { RealityDataError, SpatialLocationAndExtents } from \"../RealityDataSource\";\r\n\r\nconst loggerCategory: string = FrontendLoggerCategory.RealityData;\r\n\r\n/**\r\n * This class provide methods used to interpret Orbit Point Cloud (OPC) format\r\n * @internal\r\n */\r\nexport class OPCFormatInterpreter {\r\n /** Gets an OPC file reader from a blobFileUrl\r\n * @param blobFileURL the name of the file.\r\n * @returns return a file reader open to read provided blob file\r\n * @internal\r\n */\r\n public static async getFileReaderFromBlobFileURL(blobFileURL: string): Promise<PointCloudReader> {\r\n if (Downloader.INSTANCE == null)\r\n Downloader.INSTANCE = new DownloaderNode();\r\n if (CRSManager.ENGINE == null)\r\n CRSManager.ENGINE = await OnlineEngine.create();\r\n\r\n // let blobFileURL: string = rdUrl;\r\n // if (accountName.length > 0) blobFileURL = UrlFS.getAzureBlobSasUrl(opcConfig.accountName, opcConfig.containerName, opcConfig.blobFileName, opcConfig.sasToken);\r\n const urlFS: UrlFS = new UrlFS();\r\n // wrap a caching layer (16 MB) around the blob file\r\n const blobFileSize: ALong = await urlFS.getFileLength(blobFileURL);\r\n Logger.logTrace(loggerCategory, `OPC File Size is ${blobFileSize}`);\r\n const blobFile: PageCachedFile = new PageCachedFile(urlFS, blobFileURL, blobFileSize, 128 * 1024 /* pageSize */, 128 /* maxPageCount */);\r\n const fileReader: PointCloudReader = await OPCReader.openFile(blobFile, blobFileURL, true/* lazyLoading */);\r\n return fileReader;\r\n }\r\n\r\n /** Gets reality data spatial location and extents\r\n * @param fileReader a file reader instance obtains from call to getFileReaderFromBlobFileURL\r\n * @returns spatial location and volume of interest, in meters, centered around `spatial location`\r\n * @throws [[RealityDataError]] if source is invalid or cannot be read\r\n * @internal\r\n */\r\n public static async getSpatialLocationAndExtents(fileReader: PointCloudReader): Promise<SpatialLocationAndExtents> {\r\n let worldRange = new Range3d();\r\n let location: Cartographic | EcefLocation;\r\n let isGeolocated = true;\r\n\r\n const bounds = fileReader.getFileBounds();\r\n worldRange = Range3d.createXYZXYZ(bounds.getMinX(), bounds.getMinY(), bounds.getMinZ(), bounds.getMaxX(), bounds.getMaxY(), bounds.getMaxZ());\r\n isGeolocated = false;\r\n const fileCrs = fileReader.getFileCRS();\r\n if (fileCrs) {\r\n try {\r\n await CRSManager.ENGINE.prepareForArea(fileCrs, bounds);\r\n const wgs84ECEFCrs = \"4978\";\r\n await CRSManager.ENGINE.prepareForArea(wgs84ECEFCrs, new OrbitGtBounds());\r\n\r\n const ecefBounds = CRSManager.transformBounds(bounds, fileCrs, wgs84ECEFCrs);\r\n const ecefRange = Range3d.createXYZXYZ(ecefBounds.getMinX(), ecefBounds.getMinY(), ecefBounds.getMinZ(), ecefBounds.getMaxX(), ecefBounds.getMaxY(), ecefBounds.getMaxZ());\r\n const ecefCenter = ecefRange.localXYZToWorld(.5, .5, .5)!;\r\n const cartoCenter = Cartographic.fromEcef(ecefCenter)!;\r\n cartoCenter.height = 0;\r\n const ecefLocation = EcefLocation.createFromCartographicOrigin(cartoCenter);\r\n location = ecefLocation;\r\n // this.iModelDb.setEcefLocation(ecefLocation);\r\n const ecefToWorld = ecefLocation.getTransform().inverse()!;\r\n worldRange = ecefToWorld.multiplyRange(ecefRange);\r\n isGeolocated = true;\r\n } catch (e) {\r\n Logger.logWarning(loggerCategory, `Error getSpatialLocationAndExtents - cannot interpret point cloud`);\r\n const errorProps = BentleyError.getErrorProps(e);\r\n const getMetaData: LoggingMetaData = () => {return { errorProps };};\r\n const error = new RealityDataError(RealityDataStatus.InvalidData, \"Invalid or unknown data\", getMetaData);\r\n throw error;\r\n }\r\n } else {\r\n // NoGCS case\r\n isGeolocated = false;\r\n const centerOfEarth = new EcefLocation({ origin: { x: 0.0, y: 0.0, z: 0.0 }, orientation: { yaw: 0.0, pitch: 0.0, roll: 0.0 } });\r\n location = centerOfEarth;\r\n Logger.logTrace(loggerCategory, \"OPC RealityData NOT Geolocated\", () => ({ ...location }));\r\n }\r\n const spatialLocation: SpatialLocationAndExtents = { location, worldRange, isGeolocated };\r\n return spatialLocation;\r\n }\r\n}\r\n\r\n"]}
1
+ {"version":3,"file":"OPCFormatInterpreter.js","sourceRoot":"","sources":["../../../src/tile/OPCFormatInterpreter.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Cartographic, EcefLocation } from \"@itwin/core-common\";\r\nimport { Range3d } from \"@itwin/core-geometry\";\r\nimport { ALong, CRSManager, Downloader, DownloaderXhr, OnlineEngine, OPCReader, OrbitGtBounds, PageCachedFile, PointCloudReader, UrlFS } from \"@itwin/core-orbitgt\";\r\nimport { FrontendLoggerCategory } from \"../FrontendLoggerCategory\";\r\nimport { BentleyError, Logger, LoggingMetaData, RealityDataStatus } from \"@itwin/core-bentley\";\r\nimport { RealityDataError, SpatialLocationAndExtents } from \"../RealityDataSource\";\r\n\r\nconst loggerCategory: string = FrontendLoggerCategory.RealityData;\r\n\r\n/**\r\n * This class provide methods used to interpret Orbit Point Cloud (OPC) format\r\n * @internal\r\n */\r\nexport class OPCFormatInterpreter {\r\n /** Gets an OPC file reader from a blobFileUrl\r\n * @param blobFileURL the name of the file.\r\n * @returns return a file reader open to read provided blob file\r\n * @internal\r\n */\r\n public static async getFileReaderFromBlobFileURL(blobFileURL: string): Promise<PointCloudReader> {\r\n if (Downloader.INSTANCE == null)\r\n Downloader.INSTANCE = new DownloaderXhr();\r\n if (CRSManager.ENGINE == null)\r\n CRSManager.ENGINE = await OnlineEngine.create();\r\n\r\n // let blobFileURL: string = rdUrl;\r\n // if (accountName.length > 0) blobFileURL = UrlFS.getAzureBlobSasUrl(opcConfig.accountName, opcConfig.containerName, opcConfig.blobFileName, opcConfig.sasToken);\r\n const urlFS: UrlFS = new UrlFS();\r\n // wrap a caching layer (16 MB) around the blob file\r\n const blobFileSize: ALong = await urlFS.getFileLength(blobFileURL);\r\n Logger.logTrace(loggerCategory, `OPC File Size is ${blobFileSize}`);\r\n const blobFile: PageCachedFile = new PageCachedFile(urlFS, blobFileURL, blobFileSize, 128 * 1024 /* pageSize */, 128 /* maxPageCount */);\r\n const fileReader: PointCloudReader = await OPCReader.openFile(blobFile, blobFileURL, true/* lazyLoading */);\r\n return fileReader;\r\n }\r\n\r\n /** Gets reality data spatial location and extents\r\n * @param fileReader a file reader instance obtains from call to getFileReaderFromBlobFileURL\r\n * @returns spatial location and volume of interest, in meters, centered around `spatial location`\r\n * @throws [[RealityDataError]] if source is invalid or cannot be read\r\n * @internal\r\n */\r\n public static async getSpatialLocationAndExtents(fileReader: PointCloudReader): Promise<SpatialLocationAndExtents> {\r\n let worldRange = new Range3d();\r\n let location: Cartographic | EcefLocation;\r\n let isGeolocated = true;\r\n\r\n const bounds = fileReader.getFileBounds();\r\n worldRange = Range3d.createXYZXYZ(bounds.getMinX(), bounds.getMinY(), bounds.getMinZ(), bounds.getMaxX(), bounds.getMaxY(), bounds.getMaxZ());\r\n isGeolocated = false;\r\n const fileCrs = fileReader.getFileCRS();\r\n if (fileCrs) {\r\n try {\r\n await CRSManager.ENGINE.prepareForArea(fileCrs, bounds);\r\n const wgs84ECEFCrs = \"4978\";\r\n await CRSManager.ENGINE.prepareForArea(wgs84ECEFCrs, new OrbitGtBounds());\r\n\r\n const ecefBounds = CRSManager.transformBounds(bounds, fileCrs, wgs84ECEFCrs);\r\n const ecefRange = Range3d.createXYZXYZ(ecefBounds.getMinX(), ecefBounds.getMinY(), ecefBounds.getMinZ(), ecefBounds.getMaxX(), ecefBounds.getMaxY(), ecefBounds.getMaxZ());\r\n const ecefCenter = ecefRange.localXYZToWorld(.5, .5, .5)!;\r\n const cartoCenter = Cartographic.fromEcef(ecefCenter)!;\r\n cartoCenter.height = 0;\r\n const ecefLocation = EcefLocation.createFromCartographicOrigin(cartoCenter);\r\n location = ecefLocation;\r\n // this.iModelDb.setEcefLocation(ecefLocation);\r\n const ecefToWorld = ecefLocation.getTransform().inverse()!;\r\n worldRange = ecefToWorld.multiplyRange(ecefRange);\r\n isGeolocated = true;\r\n } catch (e) {\r\n Logger.logWarning(loggerCategory, `Error getSpatialLocationAndExtents - cannot interpret point cloud`);\r\n const errorProps = BentleyError.getErrorProps(e);\r\n const getMetaData: LoggingMetaData = () => {return { errorProps };};\r\n const error = new RealityDataError(RealityDataStatus.InvalidData, \"Invalid or unknown data\", getMetaData);\r\n throw error;\r\n }\r\n } else {\r\n // NoGCS case\r\n isGeolocated = false;\r\n const centerOfEarth = new EcefLocation({ origin: { x: 0.0, y: 0.0, z: 0.0 }, orientation: { yaw: 0.0, pitch: 0.0, roll: 0.0 } });\r\n location = centerOfEarth;\r\n Logger.logTrace(loggerCategory, \"OPC RealityData NOT Geolocated\", () => ({ ...location }));\r\n }\r\n const spatialLocation: SpatialLocationAndExtents = { location, worldRange, isGeolocated };\r\n return spatialLocation;\r\n }\r\n}\r\n\r\n"]}
@@ -37,6 +37,6 @@ export declare abstract class RealityTileLoader {
37
37
  loadGeometryFromStream(tile: RealityTile, streamBuffer: ByteStream, system: RenderSystem): Promise<RealityTileContent>;
38
38
  private loadGraphicsFromStream;
39
39
  get viewFlagOverrides(): ViewFlagOverrides;
40
- static computeTileClosestToEyePriority(tile: Tile, viewports: Iterable<Viewport>, location: Transform): number;
40
+ static computeTileLocationPriority(tile: Tile, viewports: Iterable<Viewport>, location: Transform): number;
41
41
  }
42
42
  //# sourceMappingURL=RealityTileLoader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RealityTileLoader.d.ts","sourceRoot":"","sources":["../../../src/tile/RealityTileLoader.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAU,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAW,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAmC,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAGnG,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EACO,gBAAgB,EAAqF,WAAW,EAAE,kBAAkB,EAAE,IAAI,EACtJ,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,QAAQ,EAC1E,MAAM,YAAY,CAAC;AAOpB;;GAEG;AACH,8BAAsB,iBAAiB;IAKlB,OAAO,CAAC,gBAAgB,CAAC;IAJ5C,OAAO,CAAC,oBAAoB,CAAS;IACrC,SAAgB,yBAAyB,EAAE,MAAM,CAAC;IAClD,SAAgB,wBAAwB,EAAE,MAAM,CAAC;gBAEtB,gBAAgB,CAAC,qBAAS;IAK9C,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,MAAM;aAKzF,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC;aAC5D,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,kBAAkB;aACjD,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;IACxG,IAAW,wBAAwB,IAAI,OAAO,CAAkB;IAChE,aAAoB,QAAQ,IAAI,MAAM,CAAC;IACvC,aAAoB,QAAQ,IAAI,MAAM,CAAC;IACvC,aAAoB,QAAQ,IAAI,gBAAgB,CAAC;IACjD,SAAS,KAAK,UAAU,IAAI,SAAS,CAA8B;IACnE,SAAS,KAAK,UAAU,IAAI,OAAO,CAAiB;IAC7C,aAAa,IAAI,gBAAgB,GAAG,SAAS;IACpD,IAAW,kBAAkB,IAAI,OAAO,CAAkB;IAC1D,IAAW,mBAAmB,IAAI,OAAO,CAAsC;IAC/E,IAAW,2BAA2B,IAAI,OAAO,CAAiB;IAC3D,aAAa,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO;IAEnC,oBAAoB,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,EAAE;IAG7D,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAQvJ,OAAO,CAAC,UAAU;IAQL,sBAAsB,CAAC,IAAI,EAAE,WAAW,EAAG,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC;YAUtH,sBAAsB;IA2DpC,IAAW,iBAAiB,IAAI,iBAAiB,CAAqC;WAExE,+BAA+B,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,SAAS,GAAG,MAAM;CAatH"}
1
+ {"version":3,"file":"RealityTileLoader.d.ts","sourceRoot":"","sources":["../../../src/tile/RealityTileLoader.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAU,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAoB,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAmC,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAGnG,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAkB,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EACO,gBAAgB,EAAqF,WAAW,EAAE,kBAAkB,EAAE,IAAI,EACtJ,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,QAAQ,EAC1E,MAAM,YAAY,CAAC;AAOpB;;GAEG;AACH,8BAAsB,iBAAiB;IAKlB,OAAO,CAAC,gBAAgB,CAAC;IAJ5C,OAAO,CAAC,oBAAoB,CAAS;IACrC,SAAgB,yBAAyB,EAAE,MAAM,CAAC;IAClD,SAAgB,wBAAwB,EAAE,MAAM,CAAC;gBAEtB,gBAAgB,CAAC,qBAAS;IAK9C,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,MAAM;aAKzF,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC;aAC5D,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,kBAAkB;aACjD,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;IACxG,IAAW,wBAAwB,IAAI,OAAO,CAAkB;IAChE,aAAoB,QAAQ,IAAI,MAAM,CAAC;IACvC,aAAoB,QAAQ,IAAI,MAAM,CAAC;IACvC,aAAoB,QAAQ,IAAI,gBAAgB,CAAC;IACjD,SAAS,KAAK,UAAU,IAAI,SAAS,CAA8B;IACnE,SAAS,KAAK,UAAU,IAAI,OAAO,CAAiB;IAC7C,aAAa,IAAI,gBAAgB,GAAG,SAAS;IACpD,IAAW,kBAAkB,IAAI,OAAO,CAAkB;IAC1D,IAAW,mBAAmB,IAAI,OAAO,CAAsC;IAC/E,IAAW,2BAA2B,IAAI,OAAO,CAAiB;IAC3D,aAAa,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO;IAEnC,oBAAoB,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,EAAE;IAG7D,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAQvJ,OAAO,CAAC,UAAU;IAQL,sBAAsB,CAAC,IAAI,EAAE,WAAW,EAAG,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC;YAUtH,sBAAsB;IA2DpC,IAAW,iBAAiB,IAAI,iBAAiB,CAAqC;WAExE,2BAA2B,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,SAAS,GAAG,MAAM;CA4ClH"}