@itwin/core-frontend 4.3.0-dev.8 → 4.4.0-dev.1

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 (236) hide show
  1. package/CHANGELOG.md +57 -1
  2. package/lib/cjs/DrawingViewState.d.ts +4 -2
  3. package/lib/cjs/DrawingViewState.d.ts.map +1 -1
  4. package/lib/cjs/DrawingViewState.js +6 -3
  5. package/lib/cjs/DrawingViewState.js.map +1 -1
  6. package/lib/cjs/ModelState.d.ts.map +1 -1
  7. package/lib/cjs/ModelState.js +1 -1
  8. package/lib/cjs/ModelState.js.map +1 -1
  9. package/lib/cjs/SheetViewState.d.ts +5 -1
  10. package/lib/cjs/SheetViewState.d.ts.map +1 -1
  11. package/lib/cjs/SheetViewState.js +25 -5
  12. package/lib/cjs/SheetViewState.js.map +1 -1
  13. package/lib/cjs/SpatialViewState.d.ts.map +1 -1
  14. package/lib/cjs/SpatialViewState.js +1 -0
  15. package/lib/cjs/SpatialViewState.js.map +1 -1
  16. package/lib/cjs/Viewport.d.ts +3 -1
  17. package/lib/cjs/Viewport.d.ts.map +1 -1
  18. package/lib/cjs/Viewport.js +6 -0
  19. package/lib/cjs/Viewport.js.map +1 -1
  20. package/lib/cjs/common/render/primitives/VertexTableSplitter.d.ts.map +1 -1
  21. package/lib/cjs/common/render/primitives/VertexTableSplitter.js +13 -1
  22. package/lib/cjs/common/render/primitives/VertexTableSplitter.js.map +1 -1
  23. package/lib/cjs/extension/ExtensionRuntime.js +2 -0
  24. package/lib/cjs/extension/ExtensionRuntime.js.map +1 -1
  25. package/lib/cjs/render/webgl/BranchState.d.ts.map +1 -1
  26. package/lib/cjs/render/webgl/BranchState.js +10 -2
  27. package/lib/cjs/render/webgl/BranchState.js.map +1 -1
  28. package/lib/cjs/render/webgl/ClipStack.d.ts +11 -1
  29. package/lib/cjs/render/webgl/ClipStack.d.ts.map +1 -1
  30. package/lib/cjs/render/webgl/ClipStack.js +23 -0
  31. package/lib/cjs/render/webgl/ClipStack.js.map +1 -1
  32. package/lib/cjs/render/webgl/Graphic.d.ts.map +1 -1
  33. package/lib/cjs/render/webgl/Graphic.js +2 -0
  34. package/lib/cjs/render/webgl/Graphic.js.map +1 -1
  35. package/lib/cjs/render/webgl/ShaderBuilder.d.ts +2 -1
  36. package/lib/cjs/render/webgl/ShaderBuilder.d.ts.map +1 -1
  37. package/lib/cjs/render/webgl/ShaderBuilder.js +9 -3
  38. package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
  39. package/lib/cjs/render/webgl/SurfaceGeometry.d.ts.map +1 -1
  40. package/lib/cjs/render/webgl/SurfaceGeometry.js +28 -2
  41. package/lib/cjs/render/webgl/SurfaceGeometry.js.map +1 -1
  42. package/lib/cjs/render/webgl/ThematicUniforms.d.ts.map +1 -1
  43. package/lib/cjs/render/webgl/ThematicUniforms.js +6 -8
  44. package/lib/cjs/render/webgl/ThematicUniforms.js.map +1 -1
  45. package/lib/cjs/render/webgl/glsl/Clipping.d.ts.map +1 -1
  46. package/lib/cjs/render/webgl/glsl/Clipping.js +90 -33
  47. package/lib/cjs/render/webgl/glsl/Clipping.js.map +1 -1
  48. package/lib/cjs/render/webgl/glsl/Composite.d.ts.map +1 -1
  49. package/lib/cjs/render/webgl/glsl/Composite.js +8 -3
  50. package/lib/cjs/render/webgl/glsl/Composite.js.map +1 -1
  51. package/lib/cjs/render/webgl/glsl/FeatureSymbology.d.ts +1 -0
  52. package/lib/cjs/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
  53. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +2 -1
  54. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  55. package/lib/cjs/render/webgl/glsl/Surface.d.ts.map +1 -1
  56. package/lib/cjs/render/webgl/glsl/Surface.js +8 -12
  57. package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
  58. package/lib/cjs/render/webgl/glsl/Thematic.d.ts.map +1 -1
  59. package/lib/cjs/render/webgl/glsl/Thematic.js +10 -8
  60. package/lib/cjs/render/webgl/glsl/Thematic.js.map +1 -1
  61. package/lib/cjs/render/webgl/glsl/Translucency.d.ts +2 -0
  62. package/lib/cjs/render/webgl/glsl/Translucency.d.ts.map +1 -1
  63. package/lib/cjs/render/webgl/glsl/Translucency.js +6 -6
  64. package/lib/cjs/render/webgl/glsl/Translucency.js.map +1 -1
  65. package/lib/cjs/tile/PrimaryTileTree.d.ts +5 -0
  66. package/lib/cjs/tile/PrimaryTileTree.d.ts.map +1 -1
  67. package/lib/cjs/tile/PrimaryTileTree.js +15 -3
  68. package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
  69. package/lib/cjs/tile/RealityModelTileTree.js +1 -1
  70. package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
  71. package/lib/cjs/tile/map/ArcGISTileMap.d.ts +5 -3
  72. package/lib/cjs/tile/map/ArcGISTileMap.d.ts.map +1 -1
  73. package/lib/cjs/tile/map/ArcGISTileMap.js +4 -16
  74. package/lib/cjs/tile/map/ArcGISTileMap.js.map +1 -1
  75. package/lib/cjs/tile/map/ArcGisUtilities.d.ts +27 -12
  76. package/lib/cjs/tile/map/ArcGisUtilities.d.ts.map +1 -1
  77. package/lib/cjs/tile/map/ArcGisUtilities.js +25 -17
  78. package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
  79. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -1
  80. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js +6 -1
  81. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
  82. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  83. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +7 -3
  84. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  85. package/lib/cjs/tile/map/ImageryProviders/TileUrlImageryProvider.d.ts.map +1 -1
  86. package/lib/cjs/tile/map/ImageryProviders/TileUrlImageryProvider.js +2 -1
  87. package/lib/cjs/tile/map/ImageryProviders/TileUrlImageryProvider.js.map +1 -1
  88. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  89. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +4 -2
  90. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  91. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts.map +1 -1
  92. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +5 -4
  93. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  94. package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts +16 -2
  95. package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
  96. package/lib/cjs/tile/map/MapLayerFormatRegistry.js +34 -10
  97. package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
  98. package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts +3 -4
  99. package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
  100. package/lib/cjs/tile/map/MapLayerImageryFormats.js +32 -4
  101. package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
  102. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts +5 -0
  103. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  104. package/lib/cjs/tile/map/MapLayerImageryProvider.js +41 -0
  105. package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
  106. package/lib/cjs/tile/map/MapLayerSources.d.ts +26 -5
  107. package/lib/cjs/tile/map/MapLayerSources.d.ts.map +1 -1
  108. package/lib/cjs/tile/map/MapLayerSources.js +22 -4
  109. package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
  110. package/lib/cjs/tile/map/WmsCapabilities.d.ts +3 -1
  111. package/lib/cjs/tile/map/WmsCapabilities.d.ts.map +1 -1
  112. package/lib/cjs/tile/map/WmsCapabilities.js +11 -2
  113. package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
  114. package/lib/cjs/tile/map/WmtsCapabilities.d.ts +3 -1
  115. package/lib/cjs/tile/map/WmtsCapabilities.d.ts.map +1 -1
  116. package/lib/cjs/tile/map/WmtsCapabilities.js +11 -2
  117. package/lib/cjs/tile/map/WmtsCapabilities.js.map +1 -1
  118. package/lib/esm/DrawingViewState.d.ts +4 -2
  119. package/lib/esm/DrawingViewState.d.ts.map +1 -1
  120. package/lib/esm/DrawingViewState.js +6 -3
  121. package/lib/esm/DrawingViewState.js.map +1 -1
  122. package/lib/esm/ModelState.d.ts.map +1 -1
  123. package/lib/esm/ModelState.js +1 -1
  124. package/lib/esm/ModelState.js.map +1 -1
  125. package/lib/esm/SheetViewState.d.ts +5 -1
  126. package/lib/esm/SheetViewState.d.ts.map +1 -1
  127. package/lib/esm/SheetViewState.js +25 -5
  128. package/lib/esm/SheetViewState.js.map +1 -1
  129. package/lib/esm/SpatialViewState.d.ts.map +1 -1
  130. package/lib/esm/SpatialViewState.js +1 -0
  131. package/lib/esm/SpatialViewState.js.map +1 -1
  132. package/lib/esm/Viewport.d.ts +3 -1
  133. package/lib/esm/Viewport.d.ts.map +1 -1
  134. package/lib/esm/Viewport.js +6 -0
  135. package/lib/esm/Viewport.js.map +1 -1
  136. package/lib/esm/common/render/primitives/VertexTableSplitter.d.ts.map +1 -1
  137. package/lib/esm/common/render/primitives/VertexTableSplitter.js +13 -1
  138. package/lib/esm/common/render/primitives/VertexTableSplitter.js.map +1 -1
  139. package/lib/esm/extension/ExtensionRuntime.js +4 -2
  140. package/lib/esm/extension/ExtensionRuntime.js.map +1 -1
  141. package/lib/esm/render/webgl/BranchState.d.ts.map +1 -1
  142. package/lib/esm/render/webgl/BranchState.js +10 -2
  143. package/lib/esm/render/webgl/BranchState.js.map +1 -1
  144. package/lib/esm/render/webgl/ClipStack.d.ts +11 -1
  145. package/lib/esm/render/webgl/ClipStack.d.ts.map +1 -1
  146. package/lib/esm/render/webgl/ClipStack.js +23 -0
  147. package/lib/esm/render/webgl/ClipStack.js.map +1 -1
  148. package/lib/esm/render/webgl/Graphic.d.ts.map +1 -1
  149. package/lib/esm/render/webgl/Graphic.js +2 -0
  150. package/lib/esm/render/webgl/Graphic.js.map +1 -1
  151. package/lib/esm/render/webgl/ShaderBuilder.d.ts +2 -1
  152. package/lib/esm/render/webgl/ShaderBuilder.d.ts.map +1 -1
  153. package/lib/esm/render/webgl/ShaderBuilder.js +9 -3
  154. package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
  155. package/lib/esm/render/webgl/SurfaceGeometry.d.ts.map +1 -1
  156. package/lib/esm/render/webgl/SurfaceGeometry.js +29 -3
  157. package/lib/esm/render/webgl/SurfaceGeometry.js.map +1 -1
  158. package/lib/esm/render/webgl/ThematicUniforms.d.ts.map +1 -1
  159. package/lib/esm/render/webgl/ThematicUniforms.js +8 -10
  160. package/lib/esm/render/webgl/ThematicUniforms.js.map +1 -1
  161. package/lib/esm/render/webgl/glsl/Clipping.d.ts.map +1 -1
  162. package/lib/esm/render/webgl/glsl/Clipping.js +91 -34
  163. package/lib/esm/render/webgl/glsl/Clipping.js.map +1 -1
  164. package/lib/esm/render/webgl/glsl/Composite.d.ts.map +1 -1
  165. package/lib/esm/render/webgl/glsl/Composite.js +8 -3
  166. package/lib/esm/render/webgl/glsl/Composite.js.map +1 -1
  167. package/lib/esm/render/webgl/glsl/FeatureSymbology.d.ts +1 -0
  168. package/lib/esm/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
  169. package/lib/esm/render/webgl/glsl/FeatureSymbology.js +1 -1
  170. package/lib/esm/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  171. package/lib/esm/render/webgl/glsl/Surface.d.ts.map +1 -1
  172. package/lib/esm/render/webgl/glsl/Surface.js +8 -12
  173. package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
  174. package/lib/esm/render/webgl/glsl/Thematic.d.ts.map +1 -1
  175. package/lib/esm/render/webgl/glsl/Thematic.js +10 -8
  176. package/lib/esm/render/webgl/glsl/Thematic.js.map +1 -1
  177. package/lib/esm/render/webgl/glsl/Translucency.d.ts +2 -0
  178. package/lib/esm/render/webgl/glsl/Translucency.d.ts.map +1 -1
  179. package/lib/esm/render/webgl/glsl/Translucency.js +3 -3
  180. package/lib/esm/render/webgl/glsl/Translucency.js.map +1 -1
  181. package/lib/esm/tile/PrimaryTileTree.d.ts +5 -0
  182. package/lib/esm/tile/PrimaryTileTree.d.ts.map +1 -1
  183. package/lib/esm/tile/PrimaryTileTree.js +13 -2
  184. package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
  185. package/lib/esm/tile/RealityModelTileTree.js +1 -1
  186. package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
  187. package/lib/esm/tile/map/ArcGISTileMap.d.ts +5 -3
  188. package/lib/esm/tile/map/ArcGISTileMap.d.ts.map +1 -1
  189. package/lib/esm/tile/map/ArcGISTileMap.js +5 -17
  190. package/lib/esm/tile/map/ArcGISTileMap.js.map +1 -1
  191. package/lib/esm/tile/map/ArcGisUtilities.d.ts +27 -12
  192. package/lib/esm/tile/map/ArcGisUtilities.d.ts.map +1 -1
  193. package/lib/esm/tile/map/ArcGisUtilities.js +25 -17
  194. package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
  195. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -1
  196. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js +6 -1
  197. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
  198. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  199. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +7 -3
  200. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  201. package/lib/esm/tile/map/ImageryProviders/TileUrlImageryProvider.d.ts.map +1 -1
  202. package/lib/esm/tile/map/ImageryProviders/TileUrlImageryProvider.js +2 -1
  203. package/lib/esm/tile/map/ImageryProviders/TileUrlImageryProvider.js.map +1 -1
  204. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  205. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +4 -2
  206. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  207. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts.map +1 -1
  208. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +5 -4
  209. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  210. package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts +16 -2
  211. package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
  212. package/lib/esm/tile/map/MapLayerFormatRegistry.js +35 -11
  213. package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
  214. package/lib/esm/tile/map/MapLayerImageryFormats.d.ts +3 -4
  215. package/lib/esm/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
  216. package/lib/esm/tile/map/MapLayerImageryFormats.js +33 -5
  217. package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
  218. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts +5 -0
  219. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  220. package/lib/esm/tile/map/MapLayerImageryProvider.js +41 -0
  221. package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
  222. package/lib/esm/tile/map/MapLayerSources.d.ts +26 -5
  223. package/lib/esm/tile/map/MapLayerSources.d.ts.map +1 -1
  224. package/lib/esm/tile/map/MapLayerSources.js +22 -4
  225. package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
  226. package/lib/esm/tile/map/WmsCapabilities.d.ts +3 -1
  227. package/lib/esm/tile/map/WmsCapabilities.d.ts.map +1 -1
  228. package/lib/esm/tile/map/WmsCapabilities.js +11 -2
  229. package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
  230. package/lib/esm/tile/map/WmtsCapabilities.d.ts +3 -1
  231. package/lib/esm/tile/map/WmtsCapabilities.d.ts.map +1 -1
  232. package/lib/esm/tile/map/WmtsCapabilities.js +11 -2
  233. package/lib/esm/tile/map/WmtsCapabilities.js.map +1 -1
  234. package/lib/public/scripts/parse-imdl-worker.js +1 -1
  235. package/lib/workers/webpack/parse-imdl-worker.js +1 -1
  236. package/package.json +18 -19
@@ -1 +1 @@
1
- {"version":3,"file":"ThematicUniforms.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/ThematicUniforms.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAA2B,eAAe,EAA6C,MAAM,oBAAoB,CAAC;AACzH,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAK5C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIlC;;GAEG;AACH,qBAAa,gBAAiB,YAAW,eAAe;IACtD,OAAO,CAAC,QAAQ,CAAC,CAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,CAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;IAC9C,OAAO,CAAC,SAAS,CAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;IAC7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAuB;IACrD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAuB;IACpD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAuB;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAuB;IACrD,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,kBAAkB,CAA2B;IACrD,OAAO,CAAC,gBAAgB,CAAC,CAAkB;IAEpC,OAAO,SAAK;IAEnB,OAAO,KAAK,eAAe,GAA4C;IAEvE,IAAW,eAAe,IAAI,eAAe,GAAG,SAAS,CAExD;IAED,IAAW,YAAY,IAAI,OAAO,CAIjC;IAED,IAAW,aAAa,IAAI,OAAO,CAElC;IAED,IAAW,iBAAiB,IAAI,OAAO,CAEtC;IAED,IAAW,uBAAuB,IAAI,OAAO,CAE5C;IAED,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED,OAAO,CAAC,cAAc,CAAkB;IAExC,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,mBAAmB;IASpB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAkE5B,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAKvC,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAKtC,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAK9C,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAK7C,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAK7C,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAK9C,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI;IAK5D,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAK5C,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAKhD,IAAW,UAAU,IAAI,OAAO,CAE/B;IAEM,OAAO;CAIf"}
1
+ {"version":3,"file":"ThematicUniforms.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/ThematicUniforms.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EACoB,eAAe,EACzC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAK5C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIlC;;GAEG;AACH,qBAAa,gBAAiB,YAAW,eAAe;IACtD,OAAO,CAAC,QAAQ,CAAC,CAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,CAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;IAC9C,OAAO,CAAC,SAAS,CAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;IAC7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAuB;IACrD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmB;IAChD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAuB;IACpD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAuB;IACrD,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,kBAAkB,CAA2B;IACrD,OAAO,CAAC,gBAAgB,CAAC,CAAkB;IAEpC,OAAO,SAAK;IAEnB,OAAO,KAAK,eAAe,GAA4C;IAEvE,IAAW,eAAe,IAAI,eAAe,GAAG,SAAS,CAExD;IAED,IAAW,YAAY,IAAI,OAAO,CAIjC;IAED,IAAW,aAAa,IAAI,OAAO,CAElC;IAED,IAAW,iBAAiB,IAAI,OAAO,CAEtC;IAED,IAAW,uBAAuB,IAAI,OAAO,CAE5C;IAED,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED,OAAO,CAAC,cAAc,CAAkB;IAExC,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,mBAAmB;IASpB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAgE5B,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAKvC,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAKtC,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAK9C,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAK7C,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAK7C,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAK9C,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI;IAK5D,cAAc,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAK5C,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAKhD,IAAW,UAAU,IAAI,OAAO,CAE/B;IAEM,OAAO;CAIf"}
@@ -6,14 +6,14 @@
6
6
  * @module WebGL
7
7
  */
8
8
  import { assert, dispose } from "@itwin/core-bentley";
9
- import { Gradient, RenderTexture, ThematicDisplayMode, ThematicGradientMode } from "@itwin/core-common";
9
+ import { Gradient, RenderTexture, ThematicDisplayMode, ThematicGradientMode, ThematicGradientTransparencyMode, } from "@itwin/core-common";
10
10
  import { TextureUnit } from "./RenderFlags";
11
11
  import { desync, sync } from "./Sync";
12
12
  import { TextureHandle } from "./Texture";
13
13
  import { ThematicSensors } from "./ThematicSensors";
14
14
  import { Angle, Range3d, Vector3d } from "@itwin/core-geometry";
15
15
  import { System } from "./System";
16
- import { FloatRgb } from "./FloatRGBA";
16
+ import { FloatRgba } from "./FloatRGBA";
17
17
  /** Maintains state for uniforms related to thematic display.
18
18
  * @internal
19
19
  */
@@ -23,9 +23,9 @@ export class ThematicUniforms {
23
23
  this._colorMix = 0.0;
24
24
  this._axis = new Float32Array(3);
25
25
  this._sunDirection = new Float32Array(3);
26
- this._marginColor = new Float32Array(3);
26
+ this._marginColor = new FloatRgba();
27
27
  this._displayMode = new Float32Array(1);
28
- this._fragSettings = new Float32Array(3); // gradientMode, distanceCutoff, stepCount
28
+ this._fragSettings = new Float32Array(4); // gradientMode, distanceCutoff, stepCount, > 0.0 if multiply gradient alpha
29
29
  this._numSensors = 0;
30
30
  this._gradientDimension = _getGradientDimension();
31
31
  this.syncKey = 0;
@@ -99,15 +99,13 @@ export class ThematicUniforms {
99
99
  this._updateAxis(this.thematicDisplay.axis, (ThematicDisplayMode.Slope === this.thematicDisplay.displayMode) ? target.uniforms.frustum.viewMatrix : undefined);
100
100
  if (ThematicDisplayMode.HillShade === this.thematicDisplay.displayMode)
101
101
  this._updateSunDirection(this.thematicDisplay.sunDirection, target.uniforms.frustum.viewMatrix);
102
- const marginRgb = FloatRgb.fromColorDef(this.thematicDisplay.gradientSettings.marginColor);
103
- this._marginColor[0] = marginRgb.red;
104
- this._marginColor[1] = marginRgb.green;
105
- this._marginColor[2] = marginRgb.blue;
102
+ this._marginColor.setColorDef(this.thematicDisplay.gradientSettings.marginColor);
106
103
  this._displayMode[0] = this.thematicDisplay.displayMode;
107
104
  this._fragSettings[0] = this.thematicDisplay.gradientSettings.mode;
108
105
  const sensorSettings = this.thematicDisplay.sensorSettings;
109
106
  this._fragSettings[1] = (undefined === sensorSettings) ? 0 : this.thematicDisplay.sensorSettings.distanceCutoff;
110
107
  this._fragSettings[2] = Math.min(this.thematicDisplay.gradientSettings.stepCount, this._gradientDimension);
108
+ this._fragSettings[3] = this.thematicDisplay.gradientSettings.transparencyMode === ThematicGradientTransparencyMode.SurfaceOnly ? 0.0 : 1.0;
111
109
  // If we want sensors and have no distance cutoff, then create a global shared sensor texture.
112
110
  if (target.wantThematicSensors && !(this._distanceCutoff > 0)) {
113
111
  this._numSensors = sensorSettings.sensors.length;
@@ -132,7 +130,7 @@ export class ThematicUniforms {
132
130
  }
133
131
  bindMarginColor(uniform) {
134
132
  if (!sync(this, uniform))
135
- uniform.setUniform3fv(this._marginColor);
133
+ this._marginColor.bind(uniform);
136
134
  }
137
135
  bindDisplayMode(uniform) {
138
136
  if (!sync(this, uniform))
@@ -140,7 +138,7 @@ export class ThematicUniforms {
140
138
  }
141
139
  bindFragSettings(uniform) {
142
140
  if (!sync(this, uniform))
143
- uniform.setUniform3fv(this._fragSettings);
141
+ uniform.setUniform4fv(this._fragSettings);
144
142
  }
145
143
  bindTexture(uniform, unit) {
146
144
  assert(undefined !== this._texture);
@@ -1 +1 @@
1
- {"version":3,"file":"ThematicUniforms.js","sourceRoot":"","sources":["../../../../src/render/webgl/ThematicUniforms.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAmB,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAGzH,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAa,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAE3E,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAA7B;QAGmB,WAAM,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;QACtC,cAAS,GAAG,GAAG,CAAC;QACP,UAAK,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;QAC5B,kBAAa,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;QACpC,iBAAY,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;QACnC,iBAAY,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;QACnC,kBAAa,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,0CAA0C;QACxF,gBAAW,GAAG,CAAC,CAAC;QAChB,uBAAkB,GAAG,qBAAqB,EAAE,CAAC;QAG9C,YAAO,GAAG,CAAC,CAAC;QA8BX,mBAAc,GAAG,IAAI,QAAQ,EAAE,CAAC;IA0I1C,CAAC;IAtKC,IAAY,eAAe,KAAa,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvE,IAAW,eAAe;QACxB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED,IAAW,YAAY;QACrB,IAAI,SAAS,KAAK,IAAI,CAAC,eAAe;YACpC,OAAO,mBAAmB,CAAC,MAAM,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,oBAAoB,CAAC,QAAQ,KAAK,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAC7I,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAW,aAAa;QACtB,OAAO,CAAC,SAAS,KAAK,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,KAAK,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC3G,CAAC;IAED,IAAW,iBAAiB;QAC1B,OAAO,CAAC,SAAS,KAAK,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,SAAS,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/G,CAAC;IAED,IAAW,uBAAuB;QAChC,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC;IAIO,WAAW,CAAC,IAAc,EAAE,UAAsB;QACxD,MAAM,KAAK,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACvG,KAAK,CAAC,gBAAgB,EAAE,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAC1B,CAAC;IAEO,mBAAmB,CAAC,MAAgB,EAAE,UAAqB;QACjE,UAAU,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACvD,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAChD,IAAI,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC;QACvC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IAChD,CAAC;IAEM,MAAM,CAAC,MAAc;QAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QAEzB,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;YACxG,IAAI,SAAS,KAAK,IAAI,CAAC,QAAQ;gBAC7B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAE3D,IAAI,mBAAmB,CAAC,KAAK,KAAK,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;gBAClE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBAChF,MAAM,CAAC,IAAI,CAAC,CAAC;aACd;iBAAM,IAAI,mBAAmB,CAAC,SAAS,KAAK,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;gBAC7E,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBAChG,MAAM,CAAC,IAAI,CAAC,CAAC;aACd;YAED,OAAO;SACR;QAED,MAAM,CAAC,IAAI,CAAC,CAAC;QAEb,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC;QACtC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,eAAe;YACvB,OAAO;QAET,IAAI,mBAAmB,CAAC,KAAK,KAAK,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE;YAClE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACxE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SAC1E;aAAM;YACL,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC;YAChD,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC;SAClD;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,QAAQ,CAAC;QAEhE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,mBAAmB,CAAC,KAAK,KAAK,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAE/J,IAAI,mBAAmB,CAAC,SAAS,KAAK,IAAI,CAAC,eAAe,CAAC,WAAW;YACpE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAElG,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAC3F,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC;QACrC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC;QACvC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC;QAEtC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC;QAExD,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAEnE,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC;QAC3D,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,KAAK,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,cAAc,CAAC;QAEhH,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAE3G,8FAA8F;QAC9F,IAAI,MAAM,CAAC,mBAAmB,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,EAAE;YAC7D,IAAI,CAAC,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;YACjD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvC,IAAI,CAAC,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;SACtE;QAED,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC;QACjF,MAAM,KAAK,GAAG,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACxE,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,oBAAoB,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACjG,CAAC;IAEM,SAAS,CAAC,OAAsB;QACrC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;YACtB,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAEM,QAAQ,CAAC,OAAsB;QACpC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;YACtB,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAEM,gBAAgB,CAAC,OAAsB;QAC5C,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;YACtB,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC9C,CAAC;IAEM,eAAe,CAAC,OAAsB;QAC3C,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;YACtB,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7C,CAAC;IAEM,eAAe,CAAC,OAAsB;QAC3C,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;YACtB,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7C,CAAC;IAEM,gBAAgB,CAAC,OAAsB;QAC5C,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;YACtB,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC9C,CAAC;IAEM,WAAW,CAAC,OAAsB,EAAE,IAAiB;QAC1D,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;IAEM,cAAc,CAAC,OAAsB;QAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;YACtB,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC;IAEM,WAAW,CAAC,OAAsB;QACvC,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC;IAC1E,CAAC;IAED,IAAW,UAAU;QACnB,OAAO,SAAS,KAAK,IAAI,CAAC,QAAQ,IAAI,SAAS,KAAK,IAAI,CAAC,QAAQ,CAAC;IACpE,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;CACF;AAED,SAAS,qBAAqB;IAC5B,MAAM,eAAe,GAAG,IAAI,CAAC;IAC7B,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC;IACpD,OAAO,CAAC,eAAe,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC;AAC3E,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert, dispose } from \"@itwin/core-bentley\";\r\nimport { Gradient, RenderTexture, ThematicDisplay, ThematicDisplayMode, ThematicGradientMode } from \"@itwin/core-common\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { UniformHandle } from \"./UniformHandle\";\r\nimport { TextureUnit } from \"./RenderFlags\";\r\nimport { desync, sync } from \"./Sync\";\r\nimport { TextureHandle } from \"./Texture\";\r\nimport { ThematicSensors } from \"./ThematicSensors\";\r\nimport { Angle, Range3d, Transform, Vector3d } from \"@itwin/core-geometry\";\r\nimport { Target } from \"./Target\";\r\nimport { System } from \"./System\";\r\nimport { FloatRgb } from \"./FloatRGBA\";\r\n\r\n/** Maintains state for uniforms related to thematic display.\r\n * @internal\r\n */\r\nexport class ThematicUniforms implements WebGLDisposable {\r\n private _sensors?: ThematicSensors; // NB: This is only used if no distance cutoff is applied (this is shared among all batches)\r\n private _texture?: TextureHandle;\r\n private readonly _range = new Float32Array(2);\r\n private _colorMix = 0.0;\r\n private readonly _axis = new Float32Array(3);\r\n private readonly _sunDirection = new Float32Array(3);\r\n private readonly _marginColor = new Float32Array(3);\r\n private readonly _displayMode = new Float32Array(1);\r\n private readonly _fragSettings = new Float32Array(3); // gradientMode, distanceCutoff, stepCount\r\n private _numSensors = 0;\r\n private _gradientDimension = _getGradientDimension();\r\n private _thematicDisplay?: ThematicDisplay;\r\n\r\n public syncKey = 0;\r\n\r\n private get _distanceCutoff(): number { return this._fragSettings[1]; }\r\n\r\n public get thematicDisplay(): ThematicDisplay | undefined {\r\n return this._thematicDisplay;\r\n }\r\n\r\n public get wantIsoLines(): boolean {\r\n if (undefined !== this.thematicDisplay)\r\n return ThematicDisplayMode.Height === this._displayMode[0] && ThematicGradientMode.IsoLines === this.thematicDisplay.gradientSettings.mode;\r\n return false;\r\n }\r\n\r\n public get wantSlopeMode(): boolean {\r\n return (undefined !== this.thematicDisplay) ? ThematicDisplayMode.Slope === this._displayMode[0] : false;\r\n }\r\n\r\n public get wantHillShadeMode(): boolean {\r\n return (undefined !== this.thematicDisplay) ? ThematicDisplayMode.HillShade === this._displayMode[0] : false;\r\n }\r\n\r\n public get wantGlobalSensorTexture(): boolean {\r\n return !(this._distanceCutoff > 0);\r\n }\r\n\r\n public get bytesUsed(): number {\r\n return this._sensors ? this._sensors.bytesUsed : 0;\r\n }\r\n\r\n private _scratchVector = new Vector3d();\r\n\r\n private _updateAxis(axis: Vector3d, viewMatrix?: Transform) {\r\n const tAxis = (viewMatrix !== undefined) ? viewMatrix.multiplyVector(axis, this._scratchVector) : axis;\r\n tAxis.normalizeInPlace();\r\n this._axis[0] = tAxis.x;\r\n this._axis[1] = tAxis.y;\r\n this._axis[2] = tAxis.z;\r\n }\r\n\r\n private _updateSunDirection(sunDir: Vector3d, viewMatrix: Transform) {\r\n viewMatrix.multiplyVector(sunDir, this._scratchVector);\r\n this._scratchVector.negate(this._scratchVector);\r\n this._scratchVector.normalizeInPlace();\r\n this._sunDirection[0] = this._scratchVector.x;\r\n this._sunDirection[1] = this._scratchVector.y;\r\n this._sunDirection[2] = this._scratchVector.z;\r\n }\r\n\r\n public update(target: Target): void {\r\n const plan = target.plan;\r\n\r\n if (this.thematicDisplay && plan.thematic && this.thematicDisplay.equals(plan.thematic) && this._texture) {\r\n if (undefined !== this._sensors)\r\n this._sensors.update(target.uniforms.frustum.viewMatrix);\r\n\r\n if (ThematicDisplayMode.Slope === this.thematicDisplay.displayMode) {\r\n this._updateAxis(this.thematicDisplay.axis, target.uniforms.frustum.viewMatrix);\r\n desync(this);\r\n } else if (ThematicDisplayMode.HillShade === this.thematicDisplay.displayMode) {\r\n this._updateSunDirection(this.thematicDisplay.sunDirection, target.uniforms.frustum.viewMatrix);\r\n desync(this);\r\n }\r\n\r\n return;\r\n }\r\n\r\n desync(this);\r\n\r\n this._thematicDisplay = plan.thematic;\r\n this._texture = dispose(this._texture);\r\n if (!this.thematicDisplay)\r\n return;\r\n\r\n if (ThematicDisplayMode.Slope === this.thematicDisplay.displayMode) {\r\n this._range[0] = Angle.degreesToRadians(this.thematicDisplay.range.low);\r\n this._range[1] = Angle.degreesToRadians(this.thematicDisplay.range.high);\r\n } else {\r\n this._range[0] = this.thematicDisplay.range.low;\r\n this._range[1] = this.thematicDisplay.range.high;\r\n }\r\n\r\n this._colorMix = this.thematicDisplay.gradientSettings.colorMix;\r\n\r\n this._updateAxis(this.thematicDisplay.axis, (ThematicDisplayMode.Slope === this.thematicDisplay.displayMode) ? target.uniforms.frustum.viewMatrix : undefined);\r\n\r\n if (ThematicDisplayMode.HillShade === this.thematicDisplay.displayMode)\r\n this._updateSunDirection(this.thematicDisplay.sunDirection, target.uniforms.frustum.viewMatrix);\r\n\r\n const marginRgb = FloatRgb.fromColorDef(this.thematicDisplay.gradientSettings.marginColor);\r\n this._marginColor[0] = marginRgb.red;\r\n this._marginColor[1] = marginRgb.green;\r\n this._marginColor[2] = marginRgb.blue;\r\n\r\n this._displayMode[0] = this.thematicDisplay.displayMode;\r\n\r\n this._fragSettings[0] = this.thematicDisplay.gradientSettings.mode;\r\n\r\n const sensorSettings = this.thematicDisplay.sensorSettings;\r\n this._fragSettings[1] = (undefined === sensorSettings) ? 0 : this.thematicDisplay.sensorSettings.distanceCutoff;\r\n\r\n this._fragSettings[2] = Math.min(this.thematicDisplay.gradientSettings.stepCount, this._gradientDimension);\r\n\r\n // If we want sensors and have no distance cutoff, then create a global shared sensor texture.\r\n if (target.wantThematicSensors && !(this._distanceCutoff > 0)) {\r\n this._numSensors = sensorSettings.sensors.length;\r\n this._sensors = dispose(this._sensors);\r\n this._sensors = ThematicSensors.create(target, Range3d.createNull());\r\n }\r\n\r\n const symb = Gradient.Symb.createThematic(this.thematicDisplay.gradientSettings);\r\n const image = symb.getThematicImageForRenderer(this._gradientDimension);\r\n this._texture = TextureHandle.createForImageBuffer(image, RenderTexture.Type.ThematicGradient);\r\n }\r\n\r\n public bindRange(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform2fv(this._range);\r\n }\r\n\r\n public bindAxis(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform3fv(this._axis);\r\n }\r\n\r\n public bindSunDirection(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform3fv(this._sunDirection);\r\n }\r\n\r\n public bindMarginColor(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform3fv(this._marginColor);\r\n }\r\n\r\n public bindDisplayMode(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform1fv(this._displayMode);\r\n }\r\n\r\n public bindFragSettings(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform3fv(this._fragSettings);\r\n }\r\n\r\n public bindTexture(uniform: UniformHandle, unit: TextureUnit): void {\r\n assert(undefined !== this._texture);\r\n this._texture.bindSampler(uniform, unit);\r\n }\r\n\r\n public bindNumSensors(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform1i(this._numSensors);\r\n }\r\n\r\n public bindSensors(uniform: UniformHandle): void {\r\n assert(undefined !== this._sensors);\r\n this._sensors.texture.bindSampler(uniform, TextureUnit.ThematicSensors);\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return undefined === this._texture && undefined === this._sensors;\r\n }\r\n\r\n public dispose() {\r\n this._texture = dispose(this._texture);\r\n this._sensors = dispose(this._sensors);\r\n }\r\n}\r\n\r\nfunction _getGradientDimension(): number {\r\n const preferDimension = 8192;\r\n const maxDimension = System.instance.maxTextureSize;\r\n return (preferDimension > maxDimension) ? maxDimension : preferDimension;\r\n}\r\n"]}
1
+ {"version":3,"file":"ThematicUniforms.js","sourceRoot":"","sources":["../../../../src/render/webgl/ThematicUniforms.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert, dispose } from \"@itwin/core-bentley\";\r\nimport {\r\n Gradient, RenderTexture, ThematicDisplay, ThematicDisplayMode, ThematicGradientMode, ThematicGradientTransparencyMode,\r\n} from \"@itwin/core-common\";\r\nimport { WebGLDisposable } from \"./Disposable\";\r\nimport { UniformHandle } from \"./UniformHandle\";\r\nimport { TextureUnit } from \"./RenderFlags\";\r\nimport { desync, sync } from \"./Sync\";\r\nimport { TextureHandle } from \"./Texture\";\r\nimport { ThematicSensors } from \"./ThematicSensors\";\r\nimport { Angle, Range3d, Transform, Vector3d } from \"@itwin/core-geometry\";\r\nimport { Target } from \"./Target\";\r\nimport { System } from \"./System\";\r\nimport { FloatRgba } from \"./FloatRGBA\";\r\n\r\n/** Maintains state for uniforms related to thematic display.\r\n * @internal\r\n */\r\nexport class ThematicUniforms implements WebGLDisposable {\r\n private _sensors?: ThematicSensors; // NB: This is only used if no distance cutoff is applied (this is shared among all batches)\r\n private _texture?: TextureHandle;\r\n private readonly _range = new Float32Array(2);\r\n private _colorMix = 0.0;\r\n private readonly _axis = new Float32Array(3);\r\n private readonly _sunDirection = new Float32Array(3);\r\n private readonly _marginColor = new FloatRgba();\r\n private readonly _displayMode = new Float32Array(1);\r\n private readonly _fragSettings = new Float32Array(4); // gradientMode, distanceCutoff, stepCount, > 0.0 if multiply gradient alpha\r\n private _numSensors = 0;\r\n private _gradientDimension = _getGradientDimension();\r\n private _thematicDisplay?: ThematicDisplay;\r\n\r\n public syncKey = 0;\r\n\r\n private get _distanceCutoff(): number { return this._fragSettings[1]; }\r\n\r\n public get thematicDisplay(): ThematicDisplay | undefined {\r\n return this._thematicDisplay;\r\n }\r\n\r\n public get wantIsoLines(): boolean {\r\n if (undefined !== this.thematicDisplay)\r\n return ThematicDisplayMode.Height === this._displayMode[0] && ThematicGradientMode.IsoLines === this.thematicDisplay.gradientSettings.mode;\r\n return false;\r\n }\r\n\r\n public get wantSlopeMode(): boolean {\r\n return (undefined !== this.thematicDisplay) ? ThematicDisplayMode.Slope === this._displayMode[0] : false;\r\n }\r\n\r\n public get wantHillShadeMode(): boolean {\r\n return (undefined !== this.thematicDisplay) ? ThematicDisplayMode.HillShade === this._displayMode[0] : false;\r\n }\r\n\r\n public get wantGlobalSensorTexture(): boolean {\r\n return !(this._distanceCutoff > 0);\r\n }\r\n\r\n public get bytesUsed(): number {\r\n return this._sensors ? this._sensors.bytesUsed : 0;\r\n }\r\n\r\n private _scratchVector = new Vector3d();\r\n\r\n private _updateAxis(axis: Vector3d, viewMatrix?: Transform) {\r\n const tAxis = (viewMatrix !== undefined) ? viewMatrix.multiplyVector(axis, this._scratchVector) : axis;\r\n tAxis.normalizeInPlace();\r\n this._axis[0] = tAxis.x;\r\n this._axis[1] = tAxis.y;\r\n this._axis[2] = tAxis.z;\r\n }\r\n\r\n private _updateSunDirection(sunDir: Vector3d, viewMatrix: Transform) {\r\n viewMatrix.multiplyVector(sunDir, this._scratchVector);\r\n this._scratchVector.negate(this._scratchVector);\r\n this._scratchVector.normalizeInPlace();\r\n this._sunDirection[0] = this._scratchVector.x;\r\n this._sunDirection[1] = this._scratchVector.y;\r\n this._sunDirection[2] = this._scratchVector.z;\r\n }\r\n\r\n public update(target: Target): void {\r\n const plan = target.plan;\r\n\r\n if (this.thematicDisplay && plan.thematic && this.thematicDisplay.equals(plan.thematic) && this._texture) {\r\n if (undefined !== this._sensors)\r\n this._sensors.update(target.uniforms.frustum.viewMatrix);\r\n\r\n if (ThematicDisplayMode.Slope === this.thematicDisplay.displayMode) {\r\n this._updateAxis(this.thematicDisplay.axis, target.uniforms.frustum.viewMatrix);\r\n desync(this);\r\n } else if (ThematicDisplayMode.HillShade === this.thematicDisplay.displayMode) {\r\n this._updateSunDirection(this.thematicDisplay.sunDirection, target.uniforms.frustum.viewMatrix);\r\n desync(this);\r\n }\r\n\r\n return;\r\n }\r\n\r\n desync(this);\r\n\r\n this._thematicDisplay = plan.thematic;\r\n this._texture = dispose(this._texture);\r\n if (!this.thematicDisplay)\r\n return;\r\n\r\n if (ThematicDisplayMode.Slope === this.thematicDisplay.displayMode) {\r\n this._range[0] = Angle.degreesToRadians(this.thematicDisplay.range.low);\r\n this._range[1] = Angle.degreesToRadians(this.thematicDisplay.range.high);\r\n } else {\r\n this._range[0] = this.thematicDisplay.range.low;\r\n this._range[1] = this.thematicDisplay.range.high;\r\n }\r\n\r\n this._colorMix = this.thematicDisplay.gradientSettings.colorMix;\r\n\r\n this._updateAxis(this.thematicDisplay.axis, (ThematicDisplayMode.Slope === this.thematicDisplay.displayMode) ? target.uniforms.frustum.viewMatrix : undefined);\r\n\r\n if (ThematicDisplayMode.HillShade === this.thematicDisplay.displayMode)\r\n this._updateSunDirection(this.thematicDisplay.sunDirection, target.uniforms.frustum.viewMatrix);\r\n\r\n this._marginColor.setColorDef(this.thematicDisplay.gradientSettings.marginColor);\r\n\r\n this._displayMode[0] = this.thematicDisplay.displayMode;\r\n\r\n this._fragSettings[0] = this.thematicDisplay.gradientSettings.mode;\r\n\r\n const sensorSettings = this.thematicDisplay.sensorSettings;\r\n this._fragSettings[1] = (undefined === sensorSettings) ? 0 : this.thematicDisplay.sensorSettings.distanceCutoff;\r\n\r\n this._fragSettings[2] = Math.min(this.thematicDisplay.gradientSettings.stepCount, this._gradientDimension);\r\n this._fragSettings[3] = this.thematicDisplay.gradientSettings.transparencyMode === ThematicGradientTransparencyMode.SurfaceOnly ? 0.0 : 1.0;\r\n\r\n // If we want sensors and have no distance cutoff, then create a global shared sensor texture.\r\n if (target.wantThematicSensors && !(this._distanceCutoff > 0)) {\r\n this._numSensors = sensorSettings.sensors.length;\r\n this._sensors = dispose(this._sensors);\r\n this._sensors = ThematicSensors.create(target, Range3d.createNull());\r\n }\r\n\r\n const symb = Gradient.Symb.createThematic(this.thematicDisplay.gradientSettings);\r\n const image = symb.getThematicImageForRenderer(this._gradientDimension);\r\n this._texture = TextureHandle.createForImageBuffer(image, RenderTexture.Type.ThematicGradient);\r\n }\r\n\r\n public bindRange(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform2fv(this._range);\r\n }\r\n\r\n public bindAxis(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform3fv(this._axis);\r\n }\r\n\r\n public bindSunDirection(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform3fv(this._sunDirection);\r\n }\r\n\r\n public bindMarginColor(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n this._marginColor.bind(uniform);\r\n }\r\n\r\n public bindDisplayMode(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform1fv(this._displayMode);\r\n }\r\n\r\n public bindFragSettings(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform4fv(this._fragSettings);\r\n }\r\n\r\n public bindTexture(uniform: UniformHandle, unit: TextureUnit): void {\r\n assert(undefined !== this._texture);\r\n this._texture.bindSampler(uniform, unit);\r\n }\r\n\r\n public bindNumSensors(uniform: UniformHandle): void {\r\n if (!sync(this, uniform))\r\n uniform.setUniform1i(this._numSensors);\r\n }\r\n\r\n public bindSensors(uniform: UniformHandle): void {\r\n assert(undefined !== this._sensors);\r\n this._sensors.texture.bindSampler(uniform, TextureUnit.ThematicSensors);\r\n }\r\n\r\n public get isDisposed(): boolean {\r\n return undefined === this._texture && undefined === this._sensors;\r\n }\r\n\r\n public dispose() {\r\n this._texture = dispose(this._texture);\r\n this._sensors = dispose(this._sensors);\r\n }\r\n}\r\n\r\nfunction _getGradientDimension(): number {\r\n const preferDimension = 8192;\r\n const maxDimension = System.instance.maxTextureSize;\r\n return (preferDimension > maxDimension) ? maxDimension : preferDimension;\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Clipping.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Clipping.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EAA2B,cAAc,EAAmC,MAAM,kBAAkB,CAAC;AAY5G,eAAO,MAAM,WAAW,wbAYvB,CAAC;AAwDF,gBAAgB;AAChB,wBAAgB,WAAW,CAAC,IAAI,EAAE,cAAc,QAkD/C"}
1
+ {"version":3,"file":"Clipping.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Clipping.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EAA2B,cAAc,EAAmC,MAAM,kBAAkB,CAAC;AAY5G,eAAO,MAAM,WAAW,wbAYvB,CAAC;AAoGF,gBAAgB;AAChB,wBAAgB,WAAW,CAAC,IAAI,EAAE,cAAc,QAwE/C"}
@@ -7,13 +7,13 @@
7
7
  */
8
8
  import { assert } from "@itwin/core-bentley";
9
9
  import { TextureUnit } from "../RenderFlags";
10
- import { addEyeSpace } from "./Common";
10
+ import { addEyeSpace, addFrustum } from "./Common";
11
+ import { addPixelWidthFactor } from "./FeatureSymbology";
12
+ import { computeAlphaWeight, computeOutputs } from "./Translucency";
11
13
  import { addModelViewMatrix } from "./Vertex";
12
14
  const getClipPlaneFloat = `
13
15
  vec4 getClipPlane(int index) {
14
- float x = 0.5;
15
- float y = (float(index) + 0.5) / float(u_clipParams[2]);
16
- return TEXTURE(s_clipSampler, vec2(x, y));
16
+ return texelFetch(s_clipSampler, ivec2(0, index), 0);
17
17
  }
18
18
  `;
19
19
  export const unpackFloat = `
@@ -34,57 +34,112 @@ float calcClipPlaneDist(vec3 camPos, vec4 plane) {
34
34
  return dot(vec4(camPos, 1.0), plane);
35
35
  }
36
36
  `;
37
+ const applyClipPlanesLoop = `
38
+ for (int i = u_clipParams[0]; i < u_clipParams[1]; i++) {
39
+ `;
40
+ const applyClipPlanesLoopBody = `
41
+ vec4 plane = getClipPlane(i);
42
+ if (plane.x == 2.0) { // indicates start of new UnionOfConvexClipPlaneSets
43
+ if (numSetsClippedBy + int(clippedByCurrentPlaneSet) == numPlaneSets)
44
+ break;
45
+
46
+ numPlaneSets = 1;
47
+ numSetsClippedBy = 0;
48
+ clippedByCurrentPlaneSet = false;
49
+ } else if (plane.xyz == vec3(0.0)) { // indicates start of new clip plane set
50
+ numPlaneSets = numPlaneSets + 1;
51
+ numSetsClippedBy += int(clippedByCurrentPlaneSet);
52
+ clippedByCurrentPlaneSet = false;
53
+ } else if (!clippedByCurrentPlaneSet && calcClipPlaneDist(v_eyeSpace, plane) < 0.0) {
54
+ clippedByCurrentPlaneSet = true;
55
+ }
56
+ `;
57
+ const applyClipPlanesIntersectionLoopBody = `
58
+ if ((i <= u_clipParams[1] - 2) && (!clippedByCurrentPlaneSet)) {
59
+
60
+ //Obtaining closest point on plane to current frag in eyespace
61
+ vec3 pointOnPlane = v_eyeSpace - (abs(calcClipPlaneDist(v_eyeSpace, plane)) * plane.xyz);
62
+
63
+ //determining whether to colorize
64
+ if (distance(v_eyeSpace, pointOnPlane) <= (kFrustumType_Perspective == u_frustum.z ? -pointOnPlane.z * widthFactor : widthFactor)) {
65
+ colorizeIntersection = true;
66
+ }
67
+ }
68
+ }
69
+
70
+ //Need to pull this condition out of the loop for when there are multiple clip planes defined
71
+ if (colorizeIntersection && !clippedByCurrentPlaneSet) {
72
+ g_clipColor = u_clipIntersection.rgb;
73
+ return bvec2(true, true);
74
+ }
75
+ `;
37
76
  const applyClipPlanesPrelude = `
38
77
  int numPlaneSets = 1;
39
78
  int numSetsClippedBy = 0;
40
79
  bool clippedByCurrentPlaneSet = false;
41
- `;
42
- const applyClipPlanesLoop = `
43
- for (int i = u_clipParams[0]; i < u_clipParams[1]; i++) {
80
+ bool colorizeIntersection = false;
81
+ if (u_colorizeIntersection) {
82
+ float widthFactor = u_pixelWidthFactor * 2.0 * u_clipIntersection.a;
83
+ ${applyClipPlanesLoop}${applyClipPlanesLoopBody}${applyClipPlanesIntersectionLoopBody}
84
+ } else {
85
+ ${applyClipPlanesLoop}${applyClipPlanesLoopBody} }\n
86
+ }
44
87
  `;
45
88
  const applyClipPlanesPostlude = `
46
- vec4 plane = getClipPlane(i);
47
- if (plane.x == 2.0) { // indicates start of new UnionOfConvexClipPlaneSets
48
- if (numSetsClippedBy + int(clippedByCurrentPlaneSet) == numPlaneSets)
49
- break;
50
-
51
- numPlaneSets = 1;
52
- numSetsClippedBy = 0;
53
- clippedByCurrentPlaneSet = false;
54
- } else if (plane.xyz == vec3(0.0)) { // indicates start of new clip plane set
55
- numPlaneSets = numPlaneSets + 1;
56
- numSetsClippedBy += int(clippedByCurrentPlaneSet);
57
- clippedByCurrentPlaneSet = false;
58
- } else if (!clippedByCurrentPlaneSet && calcClipPlaneDist(v_eyeSpace, plane) < 0.0) {
59
- clippedByCurrentPlaneSet = true;
60
- }
61
- }
62
89
 
63
90
  numSetsClippedBy += int(clippedByCurrentPlaneSet);
64
91
  if (numSetsClippedBy == numPlaneSets) {
65
92
  if (u_outsideRgba.a > 0.0) {
66
93
  g_clipColor = u_outsideRgba.rgb;
67
- return true;
94
+ return bvec2(true,false);
68
95
  } else {
69
96
  discard;
70
97
  }
71
98
  } else if (u_insideRgba.a > 0.0) {
72
99
  g_clipColor = u_insideRgba.rgb;
73
- return true;
100
+ return bvec2(true,false);
74
101
  }
75
102
 
76
- return false;
103
+ return bvec2(false,false);
104
+ `;
105
+ const assignFragData = `
106
+ if (g_hasClipColor.y) {
107
+ vec4 output0 = vec4(g_clipColor, 1.0);
108
+ vec4 output1 = vec4(1.0, 1.0, 0.0, 1.0);
109
+
110
+ FragColor0 = output0;
111
+ FragColor1 = output1;
112
+ } else {
113
+ ${computeOutputs}
114
+
115
+ FragColor0 = output0;
116
+ FragColor1 = output1;
117
+ }
77
118
  `;
78
- const applyClipPlanes = applyClipPlanesPrelude + applyClipPlanesLoop + applyClipPlanesPostlude;
119
+ const applyClipPlanes = applyClipPlanesPrelude + applyClipPlanesPostlude;
79
120
  const clipParams = new Int32Array(3);
80
121
  /** @internal */
81
122
  export function addClipping(prog) {
82
123
  const frag = prog.frag;
83
124
  const vert = prog.vert;
84
125
  addEyeSpace(prog);
126
+ prog.addUniform("u_outsideRgba", 5 /* VariableType.Vec4 */, (program) => {
127
+ program.addGraphicUniform("u_outsideRgba", (uniform, params) => {
128
+ params.target.uniforms.branch.clipStack.outsideColor.bind(uniform);
129
+ });
130
+ });
131
+ prog.addUniform("u_insideRgba", 5 /* VariableType.Vec4 */, (program) => {
132
+ program.addGraphicUniform("u_insideRgba", (uniform, params) => {
133
+ params.target.uniforms.branch.clipStack.insideColor.bind(uniform);
134
+ });
135
+ });
136
+ addFrustum(prog);
137
+ addPixelWidthFactor(frag);
138
+ addModelViewMatrix(vert);
85
139
  // [0] = index of first plane
86
140
  // [1] = index of last plane (one past the end)
87
141
  // [2] = texture height
142
+ prog.frag.addGlobal("g_hasClipColor", 11 /* VariableType.BVec2 */);
88
143
  prog.addUniformArray("u_clipParams", 1 /* VariableType.Int */, 3, (program) => {
89
144
  program.addGraphicUniform("u_clipParams", (uniform, params) => {
90
145
  // Set this to false to visualize pre-shader culling of geometry.
@@ -97,17 +152,16 @@ export function addClipping(prog) {
97
152
  uniform.setUniform1iv(clipParams);
98
153
  });
99
154
  });
100
- prog.addUniform("u_outsideRgba", 5 /* VariableType.Vec4 */, (program) => {
101
- program.addGraphicUniform("u_outsideRgba", (uniform, params) => {
102
- params.target.uniforms.branch.clipStack.outsideColor.bind(uniform);
155
+ prog.frag.addUniform("u_colorizeIntersection", 0 /* VariableType.Boolean */, (program) => {
156
+ program.addProgramUniform("u_colorizeIntersection", (uniform, params) => {
157
+ uniform.setUniform1i(params.target.uniforms.branch.clipStack.colorizeIntersection ? 1 : 0);
103
158
  });
104
159
  });
105
- prog.addUniform("u_insideRgba", 5 /* VariableType.Vec4 */, (program) => {
106
- program.addGraphicUniform("u_insideRgba", (uniform, params) => {
107
- params.target.uniforms.branch.clipStack.insideColor.bind(uniform);
160
+ prog.frag.addUniform("u_clipIntersection", 5 /* VariableType.Vec4 */, (program) => {
161
+ program.addGraphicUniform("u_clipIntersection", (uniform, params) => {
162
+ params.target.uniforms.branch.clipStack.intersectionStyle.bind(uniform);
108
163
  });
109
164
  });
110
- addModelViewMatrix(vert);
111
165
  frag.addFunction(getClipPlaneFloat);
112
166
  frag.addFunction(calcClipPlaneDist);
113
167
  frag.addUniform("s_clipSampler", 8 /* VariableType.Sampler2D */, (program) => {
@@ -119,5 +173,8 @@ export function addClipping(prog) {
119
173
  });
120
174
  }, 3 /* VariablePrecision.High */);
121
175
  frag.set(10 /* FragmentShaderComponent.ApplyClipping */, applyClipPlanes);
176
+ // modify translucent shaders
177
+ if (frag.findFunction(computeAlphaWeight))
178
+ frag.set(16 /* FragmentShaderComponent.AssignFragData */, assignFragData);
122
179
  }
123
180
  //# sourceMappingURL=Clipping.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Clipping.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Clipping.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 { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, VariablePrecision, VariableType } from \"../ShaderBuilder\";\r\nimport { addEyeSpace } from \"./Common\";\r\nimport { addModelViewMatrix } from \"./Vertex\";\r\n\r\nconst getClipPlaneFloat = `\r\nvec4 getClipPlane(int index) {\r\n float x = 0.5;\r\n float y = (float(index) + 0.5) / float(u_clipParams[2]);\r\n return TEXTURE(s_clipSampler, vec2(x, y));\r\n}\r\n`;\r\n\r\nexport const unpackFloat = `\r\nfloat unpackFloat(vec4 v) {\r\n const float bias = 38.0;\r\n v = floor(v * 255.0 + 0.5);\r\n float temp = v.w / 2.0;\r\n float exponent = floor(temp);\r\n float sign = (temp - exponent) * 2.0;\r\n exponent = exponent - bias;\r\n sign = -(sign * 2.0 - 1.0);\r\n float unpacked = dot(sign * v.xyz, vec3(1.0 / 256.0, 1.0 / 65536.0, 1.0 / 16777216.0)); // shift x right 8, y right 16 and z right 24\r\n return unpacked * pow(10.0, exponent);\r\n}\r\n`;\r\n\r\nconst calcClipPlaneDist = `\r\nfloat calcClipPlaneDist(vec3 camPos, vec4 plane) {\r\n return dot(vec4(camPos, 1.0), plane);\r\n}\r\n`;\r\n\r\nconst applyClipPlanesPrelude = `\r\n int numPlaneSets = 1;\r\n int numSetsClippedBy = 0;\r\n bool clippedByCurrentPlaneSet = false;\r\n`;\r\n\r\nconst applyClipPlanesLoop = `\r\n for (int i = u_clipParams[0]; i < u_clipParams[1]; i++) {\r\n`;\r\n\r\nconst applyClipPlanesPostlude = `\r\n vec4 plane = getClipPlane(i);\r\n if (plane.x == 2.0) { // indicates start of new UnionOfConvexClipPlaneSets\r\n if (numSetsClippedBy + int(clippedByCurrentPlaneSet) == numPlaneSets)\r\n break;\r\n\r\n numPlaneSets = 1;\r\n numSetsClippedBy = 0;\r\n clippedByCurrentPlaneSet = false;\r\n } else if (plane.xyz == vec3(0.0)) { // indicates start of new clip plane set\r\n numPlaneSets = numPlaneSets + 1;\r\n numSetsClippedBy += int(clippedByCurrentPlaneSet);\r\n clippedByCurrentPlaneSet = false;\r\n } else if (!clippedByCurrentPlaneSet && calcClipPlaneDist(v_eyeSpace, plane) < 0.0) {\r\n clippedByCurrentPlaneSet = true;\r\n }\r\n }\r\n\r\n numSetsClippedBy += int(clippedByCurrentPlaneSet);\r\n if (numSetsClippedBy == numPlaneSets) {\r\n if (u_outsideRgba.a > 0.0) {\r\n g_clipColor = u_outsideRgba.rgb;\r\n return true;\r\n } else {\r\n discard;\r\n }\r\n } else if (u_insideRgba.a > 0.0) {\r\n g_clipColor = u_insideRgba.rgb;\r\n return true;\r\n }\r\n\r\n return false;\r\n`;\r\n\r\nconst applyClipPlanes = applyClipPlanesPrelude + applyClipPlanesLoop + applyClipPlanesPostlude;\r\n\r\nconst clipParams = new Int32Array(3);\r\n\r\n/** @internal */\r\nexport function addClipping(prog: ProgramBuilder) {\r\n const frag = prog.frag;\r\n const vert = prog.vert;\r\n\r\n addEyeSpace(prog);\r\n\r\n // [0] = index of first plane\r\n // [1] = index of last plane (one past the end)\r\n // [2] = texture height\r\n prog.addUniformArray(\"u_clipParams\", VariableType.Int, 3, (program) => {\r\n program.addGraphicUniform(\"u_clipParams\", (uniform, params) => {\r\n // Set this to false to visualize pre-shader culling of geometry.\r\n const doClipping = true;\r\n\r\n const stack = params.target.uniforms.branch.clipStack;\r\n clipParams[0] = stack.startIndex;\r\n clipParams[1] = stack.endIndex;\r\n clipParams[2] = doClipping ? stack.textureHeight : 0;\r\n assert(clipParams[2] > 0 || !doClipping);\r\n uniform.setUniform1iv(clipParams);\r\n });\r\n });\r\n\r\n prog.addUniform(\"u_outsideRgba\", VariableType.Vec4, (program) => {\r\n program.addGraphicUniform(\"u_outsideRgba\", (uniform, params) => {\r\n params.target.uniforms.branch.clipStack.outsideColor.bind(uniform);\r\n });\r\n });\r\n\r\n prog.addUniform(\"u_insideRgba\", VariableType.Vec4, (program) => {\r\n program.addGraphicUniform(\"u_insideRgba\", (uniform, params) => {\r\n params.target.uniforms.branch.clipStack.insideColor.bind(uniform);\r\n });\r\n });\r\n\r\n addModelViewMatrix(vert);\r\n\r\n frag.addFunction(getClipPlaneFloat);\r\n\r\n frag.addFunction(calcClipPlaneDist);\r\n frag.addUniform(\"s_clipSampler\", VariableType.Sampler2D, (program) => {\r\n program.addGraphicUniform(\"s_clipSampler\", (uniform, params) => {\r\n const texture = params.target.uniforms.branch.clipStack.texture;\r\n assert(texture !== undefined);\r\n if (texture !== undefined)\r\n texture.bindSampler(uniform, TextureUnit.ClipVolume);\r\n });\r\n }, VariablePrecision.High);\r\n\r\n frag.set(FragmentShaderComponent.ApplyClipping, applyClipPlanes);\r\n}\r\n"]}
1
+ {"version":3,"file":"Clipping.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Clipping.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 { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderComponent, ProgramBuilder, VariablePrecision, VariableType } from \"../ShaderBuilder\";\r\nimport { addEyeSpace, addFrustum } from \"./Common\";\r\nimport { addPixelWidthFactor } from \"./FeatureSymbology\";\r\nimport { computeAlphaWeight, computeOutputs } from \"./Translucency\";\r\nimport { addModelViewMatrix } from \"./Vertex\";\r\n\r\nconst getClipPlaneFloat = `\r\nvec4 getClipPlane(int index) {\r\n return texelFetch(s_clipSampler, ivec2(0, index), 0);\r\n}\r\n`;\r\n\r\nexport const unpackFloat = `\r\nfloat unpackFloat(vec4 v) {\r\n const float bias = 38.0;\r\n v = floor(v * 255.0 + 0.5);\r\n float temp = v.w / 2.0;\r\n float exponent = floor(temp);\r\n float sign = (temp - exponent) * 2.0;\r\n exponent = exponent - bias;\r\n sign = -(sign * 2.0 - 1.0);\r\n float unpacked = dot(sign * v.xyz, vec3(1.0 / 256.0, 1.0 / 65536.0, 1.0 / 16777216.0)); // shift x right 8, y right 16 and z right 24\r\n return unpacked * pow(10.0, exponent);\r\n}\r\n`;\r\n\r\nconst calcClipPlaneDist = `\r\nfloat calcClipPlaneDist(vec3 camPos, vec4 plane) {\r\n return dot(vec4(camPos, 1.0), plane);\r\n}\r\n`;\r\n\r\nconst applyClipPlanesLoop = `\r\n for (int i = u_clipParams[0]; i < u_clipParams[1]; i++) {\r\n`;\r\n\r\nconst applyClipPlanesLoopBody = `\r\n vec4 plane = getClipPlane(i);\r\n if (plane.x == 2.0) { // indicates start of new UnionOfConvexClipPlaneSets\r\n if (numSetsClippedBy + int(clippedByCurrentPlaneSet) == numPlaneSets)\r\n break;\r\n\r\n numPlaneSets = 1;\r\n numSetsClippedBy = 0;\r\n clippedByCurrentPlaneSet = false;\r\n } else if (plane.xyz == vec3(0.0)) { // indicates start of new clip plane set\r\n numPlaneSets = numPlaneSets + 1;\r\n numSetsClippedBy += int(clippedByCurrentPlaneSet);\r\n clippedByCurrentPlaneSet = false;\r\n } else if (!clippedByCurrentPlaneSet && calcClipPlaneDist(v_eyeSpace, plane) < 0.0) {\r\n clippedByCurrentPlaneSet = true;\r\n }\r\n`;\r\n\r\nconst applyClipPlanesIntersectionLoopBody = `\r\n if ((i <= u_clipParams[1] - 2) && (!clippedByCurrentPlaneSet)) {\r\n\r\n //Obtaining closest point on plane to current frag in eyespace\r\n vec3 pointOnPlane = v_eyeSpace - (abs(calcClipPlaneDist(v_eyeSpace, plane)) * plane.xyz);\r\n\r\n //determining whether to colorize\r\n if (distance(v_eyeSpace, pointOnPlane) <= (kFrustumType_Perspective == u_frustum.z ? -pointOnPlane.z * widthFactor : widthFactor)) {\r\n colorizeIntersection = true;\r\n }\r\n }\r\n }\r\n\r\n //Need to pull this condition out of the loop for when there are multiple clip planes defined\r\n if (colorizeIntersection && !clippedByCurrentPlaneSet) {\r\n g_clipColor = u_clipIntersection.rgb;\r\n return bvec2(true, true);\r\n }\r\n`;\r\n\r\nconst applyClipPlanesPrelude = `\r\n int numPlaneSets = 1;\r\n int numSetsClippedBy = 0;\r\n bool clippedByCurrentPlaneSet = false;\r\n bool colorizeIntersection = false;\r\n if (u_colorizeIntersection) {\r\n float widthFactor = u_pixelWidthFactor * 2.0 * u_clipIntersection.a;\r\n ${applyClipPlanesLoop}${applyClipPlanesLoopBody}${applyClipPlanesIntersectionLoopBody}\r\n } else {\r\n ${applyClipPlanesLoop}${applyClipPlanesLoopBody} }\\n\r\n }\r\n`;\r\n\r\nconst applyClipPlanesPostlude = `\r\n\r\n numSetsClippedBy += int(clippedByCurrentPlaneSet);\r\n if (numSetsClippedBy == numPlaneSets) {\r\n if (u_outsideRgba.a > 0.0) {\r\n g_clipColor = u_outsideRgba.rgb;\r\n return bvec2(true,false);\r\n } else {\r\n discard;\r\n }\r\n } else if (u_insideRgba.a > 0.0) {\r\n g_clipColor = u_insideRgba.rgb;\r\n return bvec2(true,false);\r\n }\r\n\r\n return bvec2(false,false);\r\n`;\r\n\r\nconst assignFragData = `\r\n if (g_hasClipColor.y) {\r\n vec4 output0 = vec4(g_clipColor, 1.0);\r\n vec4 output1 = vec4(1.0, 1.0, 0.0, 1.0);\r\n\r\n FragColor0 = output0;\r\n FragColor1 = output1;\r\n } else {\r\n ${computeOutputs}\r\n\r\n FragColor0 = output0;\r\n FragColor1 = output1;\r\n }\r\n`;\r\n\r\nconst applyClipPlanes = applyClipPlanesPrelude + applyClipPlanesPostlude;\r\n\r\nconst clipParams = new Int32Array(3);\r\n\r\n/** @internal */\r\nexport function addClipping(prog: ProgramBuilder) {\r\n const frag = prog.frag;\r\n const vert = prog.vert;\r\n\r\n addEyeSpace(prog);\r\n\r\n prog.addUniform(\"u_outsideRgba\", VariableType.Vec4, (program) => {\r\n program.addGraphicUniform(\"u_outsideRgba\", (uniform, params) => {\r\n params.target.uniforms.branch.clipStack.outsideColor.bind(uniform);\r\n });\r\n });\r\n\r\n prog.addUniform(\"u_insideRgba\", VariableType.Vec4, (program) => {\r\n program.addGraphicUniform(\"u_insideRgba\", (uniform, params) => {\r\n params.target.uniforms.branch.clipStack.insideColor.bind(uniform);\r\n });\r\n });\r\n\r\n addFrustum(prog);\r\n addPixelWidthFactor(frag);\r\n\r\n addModelViewMatrix(vert);\r\n\r\n // [0] = index of first plane\r\n // [1] = index of last plane (one past the end)\r\n // [2] = texture height\r\n\r\n prog.frag.addGlobal(\"g_hasClipColor\", VariableType.BVec2);\r\n\r\n prog.addUniformArray(\"u_clipParams\", VariableType.Int, 3, (program) => {\r\n program.addGraphicUniform(\"u_clipParams\", (uniform, params) => {\r\n // Set this to false to visualize pre-shader culling of geometry.\r\n const doClipping = true;\r\n\r\n const stack = params.target.uniforms.branch.clipStack;\r\n clipParams[0] = stack.startIndex;\r\n clipParams[1] = stack.endIndex;\r\n clipParams[2] = doClipping ? stack.textureHeight : 0;\r\n assert(clipParams[2] > 0 || !doClipping);\r\n uniform.setUniform1iv(clipParams);\r\n });\r\n });\r\n\r\n prog.frag.addUniform(\"u_colorizeIntersection\", VariableType.Boolean, (program) => {\r\n program.addProgramUniform(\"u_colorizeIntersection\", (uniform, params) => {\r\n uniform.setUniform1i(params.target.uniforms.branch.clipStack.colorizeIntersection ? 1 : 0);\r\n });\r\n });\r\n\r\n prog.frag.addUniform(\"u_clipIntersection\", VariableType.Vec4, (program) => {\r\n program.addGraphicUniform(\"u_clipIntersection\", (uniform, params) => {\r\n params.target.uniforms.branch.clipStack.intersectionStyle.bind(uniform);\r\n });\r\n });\r\n\r\n frag.addFunction(getClipPlaneFloat);\r\n\r\n frag.addFunction(calcClipPlaneDist);\r\n frag.addUniform(\"s_clipSampler\", VariableType.Sampler2D, (program) => {\r\n program.addGraphicUniform(\"s_clipSampler\", (uniform, params) => {\r\n const texture = params.target.uniforms.branch.clipStack.texture;\r\n assert(texture !== undefined);\r\n if (texture !== undefined)\r\n texture.bindSampler(uniform, TextureUnit.ClipVolume);\r\n });\r\n }, VariablePrecision.High);\r\n\r\n frag.set(FragmentShaderComponent.ApplyClipping, applyClipPlanes);\r\n\r\n // modify translucent shaders\r\n if (frag.findFunction(computeAlphaWeight))\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragData);\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Composite.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Composite.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EAAE,cAAc,EAAe,MAAM,gBAAgB,CAAC;AAE7D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AA4GjD,gBAAgB;AAChB,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,sBAAsB,GAAG,aAAa,CAyE5G"}
1
+ {"version":3,"file":"Composite.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Composite.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EAAE,cAAc,EAAe,MAAM,gBAAgB,CAAC;AAE7D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AA4GjD,gBAAgB;AAChB,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,sBAAsB,GAAG,aAAa,CA+E5G"}
@@ -94,10 +94,10 @@ const computeTranslucentColor = `
94
94
  vec4 computeColor() {
95
95
  vec4 opaque = computeOpaqueColor();
96
96
  vec4 accum = TEXTURE(u_accumulation, v_texCoord);
97
- float r = TEXTURE(u_revealage, v_texCoord).r;
97
+ vec2 rg = TEXTURE(u_revealage, v_texCoord).rg;
98
98
 
99
- vec4 transparent = vec4(accum.rgb / clamp(r, 1e-4, 5e4), accum.a);
100
- vec4 col = (1.0 - transparent.a) * transparent + transparent.a * opaque;
99
+ vec4 transparent = vec4(accum.rgb / clamp(rg.r, 1e-4, 5e4), accum.a);
100
+ vec4 col = mix((1.0 - transparent.a) * transparent + transparent.a * opaque, vec4(u_clipIntersection.rgb, 1.0), rg.g);
101
101
  return col;
102
102
  }
103
103
  `;
@@ -145,6 +145,11 @@ export function createCompositeProgram(flags, context) {
145
145
  Texture2DHandle.bindSampler(uniform, params.geometry.reveal, TextureUnit.Two);
146
146
  });
147
147
  });
148
+ builder.frag.addUniform("u_clipIntersection", 5 /* VariableType.Vec4 */, (program) => {
149
+ program.addGraphicUniform("u_clipIntersection", (uniform, params) => {
150
+ params.target.uniforms.branch.clipStack.intersectionStyle.bind(uniform);
151
+ });
152
+ });
148
153
  frag.addFunction(computeTranslucentColor);
149
154
  if (!wantHilite) {
150
155
  frag.set(1 /* FragmentShaderComponent.ComputeBaseColor */, computeTranslucentBaseColor);
@@ -1 +1 @@
1
- {"version":3,"file":"Composite.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Composite.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 { CompositeGeometry } from \"../CachedGeometry\";\r\nimport { CompositeFlags, TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderBuilder, FragmentShaderComponent, VariableType } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { Texture2DHandle } from \"../Texture\";\r\nimport { addWindowToTexCoords, assignFragColor } from \"./Fragment\";\r\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\r\n\r\nfunction addHiliteSettings(frag: FragmentShaderBuilder): void {\r\n frag.addUniform(\"u_hilite_settings\", VariableType.Mat3, (prog) => {\r\n prog.addProgramUniform(\"u_hilite_settings\", (uniform, params) => {\r\n params.target.uniforms.hilite.bindCompositeSettings(uniform);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_hilite_width\", VariableType.Vec2, (prog) => {\r\n prog.addProgramUniform(\"u_hilite_width\", (uniform, params) => {\r\n params.target.uniforms.hilite.bindCompositeWidths(uniform);\r\n });\r\n });\r\n}\r\n\r\nconst readEdgePixel = `\r\nvec2 readEdgePixel(float xOffset, float yOffset) {\r\n vec2 t = windowCoordsToTexCoords(gl_FragCoord.xy + vec2(xOffset, yOffset));\r\n return TEXTURE(u_hilite, t).xy;\r\n}\r\n`;\r\n\r\nconst computeNearbyHilites = `\r\nvec2 computeNearbyHilites() {\r\n float hiliteWidth = u_hilite_width.x;\r\n float emphWidth = u_hilite_width.y;\r\n float maxWidth = max(hiliteWidth, emphWidth);\r\n if (0.0 == maxWidth)\r\n return vec2(0.0);\r\n\r\n vec2 nearest = vec2(0.0, 0.0);\r\n for (int x = -1; x <= 1; x++)\r\n for (int y = -1; y <= 1; y++)\r\n if (0 != x || 0 != y)\r\n nearest = nearest + readEdgePixel(float(x), float(y));\r\n\r\n nearest = nearest * vec2(float(hiliteWidth > 0.0), float(emphWidth > 0.0));\r\n\r\n if ((0.0 == nearest.x && hiliteWidth > 1.0) || (0.0 == nearest.y && emphWidth > 1.0)) {\r\n vec2 farthest = vec2(0.0, 0.0);\r\n for (int i = -2; i <= 2; i++) {\r\n float f = float(i);\r\n farthest = farthest + readEdgePixel(f, -2.0) + readEdgePixel(-2.0, f) + readEdgePixel(f, 2.0) + readEdgePixel(2.0, f);\r\n }\r\n\r\n farthest = farthest * vec2(float(hiliteWidth > 1.0), float(emphWidth > 1.0));\r\n nearest = nearest + farthest;\r\n }\r\n\r\n return nearest;\r\n}\r\n`;\r\n\r\nconst computeOpaqueColor = `\r\nvec4 computeOpaqueColor() {\r\n vec4 opaque = TEXTURE(u_opaque, v_texCoord);\r\n opaque.rgb *= computeAmbientOcclusion();\r\n return opaque;\r\n}\r\n`;\r\n\r\nconst computeDefaultAmbientOcclusion = `\\nfloat computeAmbientOcclusion() { return 1.0; }\\n`;\r\nconst computeAmbientOcclusion = `\\nfloat computeAmbientOcclusion() { return TEXTURE(u_occlusion, v_texCoord).r; }\\n`;\r\n\r\nconst computeHiliteColor = \"\\nvec4 computeColor() { return computeOpaqueColor(); }\\n\";\r\n\r\nconst computeHiliteBaseColor = `\r\n vec4 baseColor = computeColor();\r\n vec2 flags = TEXTURE(u_hilite, v_texCoord).rg;\r\n vec2 outline = computeNearbyHilites();\r\n if (u_hilite_width.y < u_hilite_width.x) { // check for emphasis outline first if it is thinner\r\n if (outline.y > 0.0 && flags.y == 0.0)\r\n return vec4(u_hilite_settings[1], 1.0);\r\n if (outline.x > 0.0 && flags.x == 0.0)\r\n return vec4(u_hilite_settings[0], 1.0);\r\n } else {\r\n if (outline.x > 0.0 && flags.x == 0.0)\r\n return vec4(u_hilite_settings[0], 1.0);\r\n if (outline.y > 0.0 && flags.y == 0.0)\r\n return vec4(u_hilite_settings[1], 1.0);\r\n }\r\n float hiliteMix = flags.x * u_hilite_settings[2][0];\r\n float emphasisMix = flags.y * u_hilite_settings[2][1];\r\n baseColor.rgb *= (1.0 - (hiliteMix + emphasisMix));\r\n baseColor.rgb += u_hilite_settings[0] * hiliteMix;\r\n baseColor.rgb += u_hilite_settings[1] * emphasisMix;\r\n return baseColor;\r\n`;\r\n\r\nconst computeTranslucentColor = `\r\nvec4 computeColor() {\r\n vec4 opaque = computeOpaqueColor();\r\n vec4 accum = TEXTURE(u_accumulation, v_texCoord);\r\n float r = TEXTURE(u_revealage, v_texCoord).r;\r\n\r\n vec4 transparent = vec4(accum.rgb / clamp(r, 1e-4, 5e4), accum.a);\r\n vec4 col = (1.0 - transparent.a) * transparent + transparent.a * opaque;\r\n return col;\r\n}\r\n`;\r\n\r\nconst computeTranslucentBaseColor = \"return computeColor();\";\r\nconst computeAmbientOcclusionBaseColor = \"return computeOpaqueColor();\";\r\n\r\n/** @internal */\r\nexport function createCompositeProgram(flags: CompositeFlags, context: WebGL2RenderingContext): ShaderProgram {\r\n assert(CompositeFlags.None !== flags);\r\n\r\n const wantHilite = CompositeFlags.None !== (flags & CompositeFlags.Hilite);\r\n const wantTranslucent = CompositeFlags.None !== (flags & CompositeFlags.Translucent);\r\n const wantOcclusion = CompositeFlags.None !== (flags & CompositeFlags.AmbientOcclusion);\r\n\r\n const builder = createViewportQuadBuilder(true);\r\n const frag = builder.frag;\r\n\r\n frag.addFunction(wantOcclusion ? computeAmbientOcclusion : computeDefaultAmbientOcclusion);\r\n frag.addFunction(computeOpaqueColor);\r\n\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n frag.addUniform(\"u_opaque\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_opaque\", (uniform, params) => {\r\n Texture2DHandle.bindSampler(uniform, (params.geometry as CompositeGeometry).opaque, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n if (wantHilite) {\r\n addHiliteSettings(frag);\r\n addWindowToTexCoords(frag);\r\n frag.addFunction(readEdgePixel);\r\n frag.addFunction(computeNearbyHilites);\r\n\r\n frag.addUniform(\"u_hilite\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_hilite\", (uniform, params) => {\r\n Texture2DHandle.bindSampler(uniform, (params.geometry as CompositeGeometry).hilite, TextureUnit.Three);\r\n });\r\n });\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeHiliteBaseColor);\r\n if (!wantTranslucent) {\r\n frag.addFunction(computeHiliteColor);\r\n }\r\n }\r\n\r\n if (wantTranslucent) {\r\n frag.addUniform(\"u_accumulation\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_accumulation\", (uniform, params) => {\r\n Texture2DHandle.bindSampler(uniform, (params.geometry as CompositeGeometry).accum, TextureUnit.One);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_revealage\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_revealage\", (uniform, params) => {\r\n Texture2DHandle.bindSampler(uniform, (params.geometry as CompositeGeometry).reveal, TextureUnit.Two);\r\n });\r\n });\r\n\r\n frag.addFunction(computeTranslucentColor);\r\n if (!wantHilite) {\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeTranslucentBaseColor);\r\n }\r\n }\r\n\r\n if (wantOcclusion) {\r\n frag.addUniform(\"u_occlusion\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_occlusion\", (uniform, params) => {\r\n Texture2DHandle.bindSampler(uniform, (params.geometry as CompositeGeometry).occlusion!, TextureUnit.Four);\r\n });\r\n });\r\n\r\n if (!wantHilite && !wantTranslucent)\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeAmbientOcclusionBaseColor);\r\n }\r\n\r\n const flagString = (wantHilite ? \"-Hilite\" : \"\") + (wantTranslucent ? \"-Translucent\" : \"\") + (wantOcclusion ? \"-Occlusion\" : \"\");\r\n builder.vert.headerComment = `//!V! CombineTextures${flagString}`;\r\n builder.frag.headerComment = `//!F! CombineTextures${flagString}`;\r\n\r\n return builder.buildProgram(context);\r\n}\r\n"]}
1
+ {"version":3,"file":"Composite.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Composite.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 { CompositeGeometry } from \"../CachedGeometry\";\r\nimport { CompositeFlags, TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderBuilder, FragmentShaderComponent, VariableType } from \"../ShaderBuilder\";\r\nimport { ShaderProgram } from \"../ShaderProgram\";\r\nimport { Texture2DHandle } from \"../Texture\";\r\nimport { addWindowToTexCoords, assignFragColor } from \"./Fragment\";\r\nimport { createViewportQuadBuilder } from \"./ViewportQuad\";\r\n\r\nfunction addHiliteSettings(frag: FragmentShaderBuilder): void {\r\n frag.addUniform(\"u_hilite_settings\", VariableType.Mat3, (prog) => {\r\n prog.addProgramUniform(\"u_hilite_settings\", (uniform, params) => {\r\n params.target.uniforms.hilite.bindCompositeSettings(uniform);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_hilite_width\", VariableType.Vec2, (prog) => {\r\n prog.addProgramUniform(\"u_hilite_width\", (uniform, params) => {\r\n params.target.uniforms.hilite.bindCompositeWidths(uniform);\r\n });\r\n });\r\n}\r\n\r\nconst readEdgePixel = `\r\nvec2 readEdgePixel(float xOffset, float yOffset) {\r\n vec2 t = windowCoordsToTexCoords(gl_FragCoord.xy + vec2(xOffset, yOffset));\r\n return TEXTURE(u_hilite, t).xy;\r\n}\r\n`;\r\n\r\nconst computeNearbyHilites = `\r\nvec2 computeNearbyHilites() {\r\n float hiliteWidth = u_hilite_width.x;\r\n float emphWidth = u_hilite_width.y;\r\n float maxWidth = max(hiliteWidth, emphWidth);\r\n if (0.0 == maxWidth)\r\n return vec2(0.0);\r\n\r\n vec2 nearest = vec2(0.0, 0.0);\r\n for (int x = -1; x <= 1; x++)\r\n for (int y = -1; y <= 1; y++)\r\n if (0 != x || 0 != y)\r\n nearest = nearest + readEdgePixel(float(x), float(y));\r\n\r\n nearest = nearest * vec2(float(hiliteWidth > 0.0), float(emphWidth > 0.0));\r\n\r\n if ((0.0 == nearest.x && hiliteWidth > 1.0) || (0.0 == nearest.y && emphWidth > 1.0)) {\r\n vec2 farthest = vec2(0.0, 0.0);\r\n for (int i = -2; i <= 2; i++) {\r\n float f = float(i);\r\n farthest = farthest + readEdgePixel(f, -2.0) + readEdgePixel(-2.0, f) + readEdgePixel(f, 2.0) + readEdgePixel(2.0, f);\r\n }\r\n\r\n farthest = farthest * vec2(float(hiliteWidth > 1.0), float(emphWidth > 1.0));\r\n nearest = nearest + farthest;\r\n }\r\n\r\n return nearest;\r\n}\r\n`;\r\n\r\nconst computeOpaqueColor = `\r\nvec4 computeOpaqueColor() {\r\n vec4 opaque = TEXTURE(u_opaque, v_texCoord);\r\n opaque.rgb *= computeAmbientOcclusion();\r\n return opaque;\r\n}\r\n`;\r\n\r\nconst computeDefaultAmbientOcclusion = `\\nfloat computeAmbientOcclusion() { return 1.0; }\\n`;\r\nconst computeAmbientOcclusion = `\\nfloat computeAmbientOcclusion() { return TEXTURE(u_occlusion, v_texCoord).r; }\\n`;\r\n\r\nconst computeHiliteColor = \"\\nvec4 computeColor() { return computeOpaqueColor(); }\\n\";\r\n\r\nconst computeHiliteBaseColor = `\r\n vec4 baseColor = computeColor();\r\n vec2 flags = TEXTURE(u_hilite, v_texCoord).rg;\r\n vec2 outline = computeNearbyHilites();\r\n if (u_hilite_width.y < u_hilite_width.x) { // check for emphasis outline first if it is thinner\r\n if (outline.y > 0.0 && flags.y == 0.0)\r\n return vec4(u_hilite_settings[1], 1.0);\r\n if (outline.x > 0.0 && flags.x == 0.0)\r\n return vec4(u_hilite_settings[0], 1.0);\r\n } else {\r\n if (outline.x > 0.0 && flags.x == 0.0)\r\n return vec4(u_hilite_settings[0], 1.0);\r\n if (outline.y > 0.0 && flags.y == 0.0)\r\n return vec4(u_hilite_settings[1], 1.0);\r\n }\r\n float hiliteMix = flags.x * u_hilite_settings[2][0];\r\n float emphasisMix = flags.y * u_hilite_settings[2][1];\r\n baseColor.rgb *= (1.0 - (hiliteMix + emphasisMix));\r\n baseColor.rgb += u_hilite_settings[0] * hiliteMix;\r\n baseColor.rgb += u_hilite_settings[1] * emphasisMix;\r\n return baseColor;\r\n`;\r\n\r\nconst computeTranslucentColor = `\r\nvec4 computeColor() {\r\n vec4 opaque = computeOpaqueColor();\r\n vec4 accum = TEXTURE(u_accumulation, v_texCoord);\r\n vec2 rg = TEXTURE(u_revealage, v_texCoord).rg;\r\n\r\n vec4 transparent = vec4(accum.rgb / clamp(rg.r, 1e-4, 5e4), accum.a);\r\n vec4 col = mix((1.0 - transparent.a) * transparent + transparent.a * opaque, vec4(u_clipIntersection.rgb, 1.0), rg.g);\r\n return col;\r\n}\r\n`;\r\n\r\nconst computeTranslucentBaseColor = \"return computeColor();\";\r\nconst computeAmbientOcclusionBaseColor = \"return computeOpaqueColor();\";\r\n\r\n/** @internal */\r\nexport function createCompositeProgram(flags: CompositeFlags, context: WebGL2RenderingContext): ShaderProgram {\r\n assert(CompositeFlags.None !== flags);\r\n\r\n const wantHilite = CompositeFlags.None !== (flags & CompositeFlags.Hilite);\r\n const wantTranslucent = CompositeFlags.None !== (flags & CompositeFlags.Translucent);\r\n const wantOcclusion = CompositeFlags.None !== (flags & CompositeFlags.AmbientOcclusion);\r\n\r\n const builder = createViewportQuadBuilder(true);\r\n const frag = builder.frag;\r\n\r\n frag.addFunction(wantOcclusion ? computeAmbientOcclusion : computeDefaultAmbientOcclusion);\r\n frag.addFunction(computeOpaqueColor);\r\n\r\n frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n frag.addUniform(\"u_opaque\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_opaque\", (uniform, params) => {\r\n Texture2DHandle.bindSampler(uniform, (params.geometry as CompositeGeometry).opaque, TextureUnit.Zero);\r\n });\r\n });\r\n\r\n if (wantHilite) {\r\n addHiliteSettings(frag);\r\n addWindowToTexCoords(frag);\r\n frag.addFunction(readEdgePixel);\r\n frag.addFunction(computeNearbyHilites);\r\n\r\n frag.addUniform(\"u_hilite\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_hilite\", (uniform, params) => {\r\n Texture2DHandle.bindSampler(uniform, (params.geometry as CompositeGeometry).hilite, TextureUnit.Three);\r\n });\r\n });\r\n\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeHiliteBaseColor);\r\n if (!wantTranslucent) {\r\n frag.addFunction(computeHiliteColor);\r\n }\r\n }\r\n\r\n if (wantTranslucent) {\r\n frag.addUniform(\"u_accumulation\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_accumulation\", (uniform, params) => {\r\n Texture2DHandle.bindSampler(uniform, (params.geometry as CompositeGeometry).accum, TextureUnit.One);\r\n });\r\n });\r\n\r\n frag.addUniform(\"u_revealage\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_revealage\", (uniform, params) => {\r\n Texture2DHandle.bindSampler(uniform, (params.geometry as CompositeGeometry).reveal, TextureUnit.Two);\r\n });\r\n });\r\n\r\n builder.frag.addUniform(\"u_clipIntersection\", VariableType.Vec4, (program) => {\r\n program.addGraphicUniform(\"u_clipIntersection\", (uniform, params) => {\r\n params.target.uniforms.branch.clipStack.intersectionStyle.bind(uniform);\r\n });\r\n });\r\n\r\n frag.addFunction(computeTranslucentColor);\r\n if (!wantHilite) {\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeTranslucentBaseColor);\r\n }\r\n }\r\n\r\n if (wantOcclusion) {\r\n frag.addUniform(\"u_occlusion\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_occlusion\", (uniform, params) => {\r\n Texture2DHandle.bindSampler(uniform, (params.geometry as CompositeGeometry).occlusion!, TextureUnit.Four);\r\n });\r\n });\r\n\r\n if (!wantHilite && !wantTranslucent)\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeAmbientOcclusionBaseColor);\r\n }\r\n\r\n const flagString = (wantHilite ? \"-Hilite\" : \"\") + (wantTranslucent ? \"-Translucent\" : \"\") + (wantOcclusion ? \"-Occlusion\" : \"\");\r\n builder.vert.headerComment = `//!V! CombineTextures${flagString}`;\r\n builder.frag.headerComment = `//!F! CombineTextures${flagString}`;\r\n\r\n return builder.buildProgram(context);\r\n}\r\n"]}
@@ -27,6 +27,7 @@ export declare const readDepthAndOrder = "\nvec2 readDepthAndOrder(vec2 tc) {\n
27
27
  export declare function addRenderOrderConstants(builder: ShaderBuilder): void;
28
28
  /** @internal */
29
29
  export declare function addRenderOrder(builder: ShaderBuilder): void;
30
+ export declare function addPixelWidthFactor(builder: ShaderBuilder): void;
30
31
  /** @internal */
31
32
  export declare function addFeatureId(builder: ProgramBuilder, computeInFrag: boolean): void;
32
33
  /** @internal */
@@ -1 +1 @@
1
- {"version":3,"file":"FeatureSymbology.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/FeatureSymbology.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EACL,qBAAqB,EAA2B,cAAc,EAAE,aAAa,EAE9E,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAUhE,gBAAgB;AAChB,0BAAkB,uBAAuB;IACvC,IAAI,IAAI;IACR,MAAM,IAAS;IACf,QAAQ,IAAS;IACjB,YAAY,IAAS;IACrB,KAAK,IAAS;IACd,KAAK,KAAS;IAEd,OAAO,KAA+B;IACtC,KAAK,KAAwC;IAC7C,MAAM,KAAmD;CAC1D;AAED,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAehE;AAmOD,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAIxD;AA6DD,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,GAAE,OAAe,GAAG,IAAI,CAG5F;AAED,gBAAgB;AAChB,wBAAgB,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,GAAE,OAAe,GAAG,IAAI,CAkBrF;AAkBD,gBAAgB;AAChB,eAAO,MAAM,iBAAiB,yLAM7B,CAAC;AAuEF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,aAAa,QAa7D;AAED,gBAAgB;AAChB,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,QAOpD;AAwBD,gBAAgB;AAChB,wBAAgB,YAAY,CAAC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,QAiB3E;AASD,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,QA4D/E;AA4DD,eAAO,MAAM,eAAe,sOAIzB,CAAC;AAwCJ,gBAAgB;AAChB,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI,CAIpE;AAoBD,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,uBAAuB,GAAG,IAAI,CAoBnH;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAW/D;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,OAAO,GAAG,IAAI,CA0ClG"}
1
+ {"version":3,"file":"FeatureSymbology.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/FeatureSymbology.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EACL,qBAAqB,EAA2B,cAAc,EAAE,aAAa,EAE9E,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAUhE,gBAAgB;AAChB,0BAAkB,uBAAuB;IACvC,IAAI,IAAI;IACR,MAAM,IAAS;IACf,QAAQ,IAAS;IACjB,YAAY,IAAS;IACrB,KAAK,IAAS;IACd,KAAK,KAAS;IAEd,OAAO,KAA+B;IACtC,KAAK,KAAwC;IAC7C,MAAM,KAAmD;CAC1D;AAED,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAehE;AAmOD,wBAAgB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAIxD;AA6DD,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,GAAE,OAAe,GAAG,IAAI,CAG5F;AAED,gBAAgB;AAChB,wBAAgB,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,GAAE,OAAe,GAAG,IAAI,CAkBrF;AAkBD,gBAAgB;AAChB,eAAO,MAAM,iBAAiB,yLAM7B,CAAC;AAuEF,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,aAAa,QAa7D;AAED,gBAAgB;AAChB,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,QAOpD;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,QAMzD;AAgBD,gBAAgB;AAChB,wBAAgB,YAAY,CAAC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,QAiB3E;AASD,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,QA4D/E;AA4DD,eAAO,MAAM,eAAe,sOAIzB,CAAC;AAwCJ,gBAAgB;AAChB,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI,CAIpE;AAoBD,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,uBAAuB,GAAG,IAAI,CAoBnH;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAW/D;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,OAAO,GAAG,IAAI,CA0ClG"}
@@ -408,7 +408,7 @@ export function addRenderOrder(builder) {
408
408
  });
409
409
  });
410
410
  }
411
- function addPixelWidthFactor(builder) {
411
+ export function addPixelWidthFactor(builder) {
412
412
  builder.addUniform("u_pixelWidthFactor", 2 /* VariableType.Float */, (prog) => {
413
413
  prog.addGraphicUniform("u_pixelWidthFactor", (uniform, params) => {
414
414
  params.target.uniforms.bindPixelWidthFactor(uniform);