@itwin/core-frontend 3.6.0-dev.8 → 4.0.0-dev.10

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 (838) hide show
  1. package/CHANGELOG.md +35 -1
  2. package/LICENSE.md +1 -1
  3. package/lib/cjs/AccuDraw.js +1 -1
  4. package/lib/cjs/AccuDraw.js.map +1 -1
  5. package/lib/cjs/BriefcaseConnection.d.ts +23 -3
  6. package/lib/cjs/BriefcaseConnection.d.ts.map +1 -1
  7. package/lib/cjs/BriefcaseConnection.js +11 -3
  8. package/lib/cjs/BriefcaseConnection.js.map +1 -1
  9. package/lib/cjs/CheckpointConnection.js +1 -1
  10. package/lib/cjs/CheckpointConnection.js.map +1 -1
  11. package/lib/cjs/DisplayStyleState.d.ts +2 -2
  12. package/lib/cjs/DisplayStyleState.d.ts.map +1 -1
  13. package/lib/cjs/DisplayStyleState.js +12 -4
  14. package/lib/cjs/DisplayStyleState.js.map +1 -1
  15. package/lib/cjs/IModelApp.d.ts +4 -3
  16. package/lib/cjs/IModelApp.d.ts.map +1 -1
  17. package/lib/cjs/IModelApp.js +4 -6
  18. package/lib/cjs/IModelApp.js.map +1 -1
  19. package/lib/cjs/IModelConnection.d.ts +4 -6
  20. package/lib/cjs/IModelConnection.d.ts.map +1 -1
  21. package/lib/cjs/IModelConnection.js +6 -7
  22. package/lib/cjs/IModelConnection.js.map +1 -1
  23. package/lib/cjs/IpcApp.d.ts +1 -1
  24. package/lib/cjs/IpcApp.d.ts.map +1 -1
  25. package/lib/cjs/IpcApp.js +1 -1
  26. package/lib/cjs/IpcApp.js.map +1 -1
  27. package/lib/cjs/NativeApp.d.ts +8 -1
  28. package/lib/cjs/NativeApp.d.ts.map +1 -1
  29. package/lib/cjs/NativeApp.js +10 -6
  30. package/lib/cjs/NativeApp.js.map +1 -1
  31. package/lib/cjs/NoRenderApp.d.ts.map +1 -1
  32. package/lib/cjs/NoRenderApp.js +3 -0
  33. package/lib/cjs/NoRenderApp.js.map +1 -1
  34. package/lib/cjs/SpatialViewState.d.ts +4 -1
  35. package/lib/cjs/SpatialViewState.d.ts.map +1 -1
  36. package/lib/cjs/SpatialViewState.js +19 -5
  37. package/lib/cjs/SpatialViewState.js.map +1 -1
  38. package/lib/cjs/SubCategoriesCache.d.ts.map +1 -1
  39. package/lib/cjs/SubCategoriesCache.js +0 -1
  40. package/lib/cjs/SubCategoriesCache.js.map +1 -1
  41. package/lib/cjs/Tiles.d.ts +4 -0
  42. package/lib/cjs/Tiles.d.ts.map +1 -1
  43. package/lib/cjs/Tiles.js +11 -0
  44. package/lib/cjs/Tiles.js.map +1 -1
  45. package/lib/cjs/ViewContext.js +1 -1
  46. package/lib/cjs/ViewContext.js.map +1 -1
  47. package/lib/cjs/ViewManager.d.ts.map +1 -1
  48. package/lib/cjs/ViewManager.js +2 -3
  49. package/lib/cjs/ViewManager.js.map +1 -1
  50. package/lib/cjs/ViewState.d.ts +4 -5
  51. package/lib/cjs/ViewState.d.ts.map +1 -1
  52. package/lib/cjs/ViewState.js +0 -1
  53. package/lib/cjs/ViewState.js.map +1 -1
  54. package/lib/cjs/Viewport.d.ts +53 -4
  55. package/lib/cjs/Viewport.d.ts.map +1 -1
  56. package/lib/cjs/Viewport.js +82 -34
  57. package/lib/cjs/Viewport.js.map +1 -1
  58. package/lib/cjs/extension/ExtensionImpl.js +2 -2
  59. package/lib/cjs/extension/ExtensionImpl.js.map +1 -1
  60. package/lib/cjs/extension/ExtensionRuntime.js +3 -0
  61. package/lib/cjs/extension/ExtensionRuntime.js.map +1 -1
  62. package/lib/cjs/render/GraphicBranch.d.ts +3 -0
  63. package/lib/cjs/render/GraphicBranch.d.ts.map +1 -1
  64. package/lib/cjs/render/GraphicBranch.js.map +1 -1
  65. package/lib/cjs/render/GraphicBuilder.d.ts +1 -1
  66. package/lib/cjs/render/GraphicBuilder.js +1 -1
  67. package/lib/cjs/render/GraphicBuilder.js.map +1 -1
  68. package/lib/cjs/render/MockRender.d.ts.map +1 -1
  69. package/lib/cjs/render/MockRender.js +3 -0
  70. package/lib/cjs/render/MockRender.js.map +1 -1
  71. package/lib/cjs/render/RealityMeshParams.d.ts +7 -5
  72. package/lib/cjs/render/RealityMeshParams.d.ts.map +1 -1
  73. package/lib/cjs/render/RealityMeshParams.js +23 -9
  74. package/lib/cjs/render/RealityMeshParams.js.map +1 -1
  75. package/lib/cjs/render/RenderMaterial.d.ts +1 -1
  76. package/lib/cjs/render/RenderMaterial.d.ts.map +1 -1
  77. package/lib/cjs/render/RenderMaterial.js.map +1 -1
  78. package/lib/cjs/render/RenderSystem.d.ts +9 -20
  79. package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
  80. package/lib/cjs/render/RenderSystem.js +4 -10
  81. package/lib/cjs/render/RenderSystem.js.map +1 -1
  82. package/lib/cjs/render/RenderTarget.d.ts +1 -1
  83. package/lib/cjs/render/RenderTarget.d.ts.map +1 -1
  84. package/lib/cjs/render/RenderTarget.js +1 -1
  85. package/lib/cjs/render/RenderTarget.js.map +1 -1
  86. package/lib/cjs/render/ScreenSpaceEffectBuilder.d.ts +3 -4
  87. package/lib/cjs/render/ScreenSpaceEffectBuilder.d.ts.map +1 -1
  88. package/lib/cjs/render/ScreenSpaceEffectBuilder.js.map +1 -1
  89. package/lib/cjs/render/VisibleFeature.d.ts +5 -5
  90. package/lib/cjs/render/VisibleFeature.js.map +1 -1
  91. package/lib/cjs/render/primitives/DisplayParams.d.ts.map +1 -1
  92. package/lib/cjs/render/primitives/DisplayParams.js +2 -1
  93. package/lib/cjs/render/primitives/DisplayParams.js.map +1 -1
  94. package/lib/cjs/render/webgl/AttributeBuffers.d.ts +9 -79
  95. package/lib/cjs/render/webgl/AttributeBuffers.d.ts.map +1 -1
  96. package/lib/cjs/render/webgl/AttributeBuffers.js +19 -152
  97. package/lib/cjs/render/webgl/AttributeBuffers.js.map +1 -1
  98. package/lib/cjs/render/webgl/BackgroundMapDrape.d.ts.map +1 -1
  99. package/lib/cjs/render/webgl/BackgroundMapDrape.js +3 -6
  100. package/lib/cjs/render/webgl/BackgroundMapDrape.js.map +1 -1
  101. package/lib/cjs/render/webgl/BranchState.d.ts +3 -0
  102. package/lib/cjs/render/webgl/BranchState.d.ts.map +1 -1
  103. package/lib/cjs/render/webgl/BranchState.js +5 -0
  104. package/lib/cjs/render/webgl/BranchState.js.map +1 -1
  105. package/lib/cjs/render/webgl/BranchUniforms.d.ts.map +1 -1
  106. package/lib/cjs/render/webgl/BranchUniforms.js +0 -8
  107. package/lib/cjs/render/webgl/BranchUniforms.js.map +1 -1
  108. package/lib/cjs/render/webgl/CachedGeometry.d.ts +32 -0
  109. package/lib/cjs/render/webgl/CachedGeometry.d.ts.map +1 -1
  110. package/lib/cjs/render/webgl/CachedGeometry.js +74 -1
  111. package/lib/cjs/render/webgl/CachedGeometry.js.map +1 -1
  112. package/lib/cjs/render/webgl/ClipStack.d.ts +0 -1
  113. package/lib/cjs/render/webgl/ClipStack.d.ts.map +1 -1
  114. package/lib/cjs/render/webgl/ClipStack.js +2 -6
  115. package/lib/cjs/render/webgl/ClipStack.js.map +1 -1
  116. package/lib/cjs/render/webgl/ClipVolume.d.ts.map +1 -1
  117. package/lib/cjs/render/webgl/ClipVolume.js +1 -5
  118. package/lib/cjs/render/webgl/ClipVolume.js.map +1 -1
  119. package/lib/cjs/render/webgl/ClippingProgram.d.ts +3 -2
  120. package/lib/cjs/render/webgl/ClippingProgram.d.ts.map +1 -1
  121. package/lib/cjs/render/webgl/ClippingProgram.js +10 -37
  122. package/lib/cjs/render/webgl/ClippingProgram.js.map +1 -1
  123. package/lib/cjs/render/webgl/DrawCommand.d.ts +2 -2
  124. package/lib/cjs/render/webgl/DrawCommand.d.ts.map +1 -1
  125. package/lib/cjs/render/webgl/DrawCommand.js +7 -5
  126. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  127. package/lib/cjs/render/webgl/EDL.d.ts +40 -0
  128. package/lib/cjs/render/webgl/EDL.d.ts.map +1 -0
  129. package/lib/cjs/render/webgl/EDL.js +264 -0
  130. package/lib/cjs/render/webgl/EDL.js.map +1 -0
  131. package/lib/cjs/render/webgl/EdgeSettings.js +2 -2
  132. package/lib/cjs/render/webgl/FeatureOverrides.js +1 -1
  133. package/lib/cjs/render/webgl/FeatureOverrides.js.map +1 -1
  134. package/lib/cjs/render/webgl/FloatRGBA.d.ts.map +1 -1
  135. package/lib/cjs/render/webgl/FloatRGBA.js +0 -4
  136. package/lib/cjs/render/webgl/FloatRGBA.js.map +1 -1
  137. package/lib/cjs/render/webgl/FrameBuffer.d.ts +4 -0
  138. package/lib/cjs/render/webgl/FrameBuffer.d.ts.map +1 -1
  139. package/lib/cjs/render/webgl/FrameBuffer.js +9 -0
  140. package/lib/cjs/render/webgl/FrameBuffer.js.map +1 -1
  141. package/lib/cjs/render/webgl/FrustumUniforms.d.ts +7 -0
  142. package/lib/cjs/render/webgl/FrustumUniforms.d.ts.map +1 -1
  143. package/lib/cjs/render/webgl/FrustumUniforms.js.map +1 -1
  144. package/lib/cjs/render/webgl/GLTimer.d.ts.map +1 -1
  145. package/lib/cjs/render/webgl/GLTimer.js +2 -35
  146. package/lib/cjs/render/webgl/GLTimer.js.map +1 -1
  147. package/lib/cjs/render/webgl/Layer.js +2 -2
  148. package/lib/cjs/render/webgl/LayerCommands.js +2 -2
  149. package/lib/cjs/render/webgl/PlanarClassifier.d.ts.map +1 -1
  150. package/lib/cjs/render/webgl/PlanarClassifier.js +20 -77
  151. package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
  152. package/lib/cjs/render/webgl/PlanarTextureProjection.js +1 -1
  153. package/lib/cjs/render/webgl/PlanarTextureProjection.js.map +1 -1
  154. package/lib/cjs/render/webgl/PointCloud.d.ts +2 -2
  155. package/lib/cjs/render/webgl/PointCloud.d.ts.map +1 -1
  156. package/lib/cjs/render/webgl/PointCloud.js +1 -1
  157. package/lib/cjs/render/webgl/PointCloud.js.map +1 -1
  158. package/lib/cjs/render/webgl/RealityMesh.d.ts +3 -1
  159. package/lib/cjs/render/webgl/RealityMesh.d.ts.map +1 -1
  160. package/lib/cjs/render/webgl/RealityMesh.js +8 -3
  161. package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
  162. package/lib/cjs/render/webgl/RealityModelUniforms.d.ts +9 -0
  163. package/lib/cjs/render/webgl/RealityModelUniforms.d.ts.map +1 -1
  164. package/lib/cjs/render/webgl/RealityModelUniforms.js +50 -0
  165. package/lib/cjs/render/webgl/RealityModelUniforms.js.map +1 -1
  166. package/lib/cjs/render/webgl/RenderBuffer.d.ts +1 -1
  167. package/lib/cjs/render/webgl/RenderBuffer.d.ts.map +1 -1
  168. package/lib/cjs/render/webgl/RenderBuffer.js +2 -3
  169. package/lib/cjs/render/webgl/RenderBuffer.js.map +1 -1
  170. package/lib/cjs/render/webgl/RenderCommands.d.ts +2 -1
  171. package/lib/cjs/render/webgl/RenderCommands.d.ts.map +1 -1
  172. package/lib/cjs/render/webgl/RenderCommands.js +46 -38
  173. package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
  174. package/lib/cjs/render/webgl/RenderFlags.d.ts +20 -19
  175. package/lib/cjs/render/webgl/RenderFlags.d.ts.map +1 -1
  176. package/lib/cjs/render/webgl/RenderFlags.js +12 -12
  177. package/lib/cjs/render/webgl/RenderFlags.js.map +1 -1
  178. package/lib/cjs/render/webgl/SceneCompositor.d.ts +6 -3
  179. package/lib/cjs/render/webgl/SceneCompositor.d.ts.map +1 -1
  180. package/lib/cjs/render/webgl/SceneCompositor.js +626 -888
  181. package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
  182. package/lib/cjs/render/webgl/ScreenSpaceEffect.js +1 -1
  183. package/lib/cjs/render/webgl/ScreenSpaceEffect.js.map +1 -1
  184. package/lib/cjs/render/webgl/ShaderBuilder.d.ts +1 -2
  185. package/lib/cjs/render/webgl/ShaderBuilder.d.ts.map +1 -1
  186. package/lib/cjs/render/webgl/ShaderBuilder.js +13 -48
  187. package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
  188. package/lib/cjs/render/webgl/ShaderProgram.d.ts +1 -2
  189. package/lib/cjs/render/webgl/ShaderProgram.d.ts.map +1 -1
  190. package/lib/cjs/render/webgl/ShaderProgram.js.map +1 -1
  191. package/lib/cjs/render/webgl/SolarShadowMap.d.ts.map +1 -1
  192. package/lib/cjs/render/webgl/SolarShadowMap.js +8 -29
  193. package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
  194. package/lib/cjs/render/webgl/SurfaceGeometry.js +5 -5
  195. package/lib/cjs/render/webgl/System.d.ts +10 -10
  196. package/lib/cjs/render/webgl/System.d.ts.map +1 -1
  197. package/lib/cjs/render/webgl/System.js +39 -122
  198. package/lib/cjs/render/webgl/System.js.map +1 -1
  199. package/lib/cjs/render/webgl/Target.js +7 -7
  200. package/lib/cjs/render/webgl/Target.js.map +1 -1
  201. package/lib/cjs/render/webgl/Technique.d.ts +4 -5
  202. package/lib/cjs/render/webgl/Technique.d.ts.map +1 -1
  203. package/lib/cjs/render/webgl/Technique.js +16 -25
  204. package/lib/cjs/render/webgl/Technique.js.map +1 -1
  205. package/lib/cjs/render/webgl/TechniqueFlags.js +4 -4
  206. package/lib/cjs/render/webgl/TechniqueFlags.js.map +1 -1
  207. package/lib/cjs/render/webgl/TechniqueId.d.ts +6 -2
  208. package/lib/cjs/render/webgl/TechniqueId.d.ts.map +1 -1
  209. package/lib/cjs/render/webgl/TechniqueId.js.map +1 -1
  210. package/lib/cjs/render/webgl/Texture.d.ts.map +1 -1
  211. package/lib/cjs/render/webgl/Texture.js +14 -18
  212. package/lib/cjs/render/webgl/Texture.js.map +1 -1
  213. package/lib/cjs/render/webgl/ThematicSensors.d.ts +4 -3
  214. package/lib/cjs/render/webgl/ThematicSensors.d.ts.map +1 -1
  215. package/lib/cjs/render/webgl/ThematicSensors.js +9 -50
  216. package/lib/cjs/render/webgl/ThematicSensors.js.map +1 -1
  217. package/lib/cjs/render/webgl/ThematicUniforms.js +1 -1
  218. package/lib/cjs/render/webgl/ThematicUniforms.js.map +1 -1
  219. package/lib/cjs/render/webgl/UniformHandle.d.ts.map +1 -1
  220. package/lib/cjs/render/webgl/UniformHandle.js +2 -6
  221. package/lib/cjs/render/webgl/UniformHandle.js.map +1 -1
  222. package/lib/cjs/render/webgl/VisibleTileFeatures.js +5 -5
  223. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.d.ts +1 -2
  224. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.d.ts.map +1 -1
  225. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js +1 -1
  226. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js.map +1 -1
  227. package/lib/cjs/render/webgl/glsl/Animation.d.ts +1 -2
  228. package/lib/cjs/render/webgl/glsl/Animation.d.ts.map +1 -1
  229. package/lib/cjs/render/webgl/glsl/Animation.js +23 -26
  230. package/lib/cjs/render/webgl/glsl/Animation.js.map +1 -1
  231. package/lib/cjs/render/webgl/glsl/Blur.d.ts +1 -2
  232. package/lib/cjs/render/webgl/glsl/Blur.d.ts.map +1 -1
  233. package/lib/cjs/render/webgl/glsl/Blur.js.map +1 -1
  234. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.d.ts +1 -2
  235. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.d.ts.map +1 -1
  236. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.js +2 -9
  237. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
  238. package/lib/cjs/render/webgl/glsl/ClearTranslucent.d.ts +1 -2
  239. package/lib/cjs/render/webgl/glsl/ClearTranslucent.d.ts.map +1 -1
  240. package/lib/cjs/render/webgl/glsl/ClearTranslucent.js +2 -10
  241. package/lib/cjs/render/webgl/glsl/ClearTranslucent.js.map +1 -1
  242. package/lib/cjs/render/webgl/glsl/Clipping.d.ts +1 -1
  243. package/lib/cjs/render/webgl/glsl/Clipping.d.ts.map +1 -1
  244. package/lib/cjs/render/webgl/glsl/Clipping.js +5 -36
  245. package/lib/cjs/render/webgl/glsl/Clipping.js.map +1 -1
  246. package/lib/cjs/render/webgl/glsl/Combine3Textures.d.ts +1 -2
  247. package/lib/cjs/render/webgl/glsl/Combine3Textures.d.ts.map +1 -1
  248. package/lib/cjs/render/webgl/glsl/Combine3Textures.js.map +1 -1
  249. package/lib/cjs/render/webgl/glsl/CombineTextures.d.ts +1 -2
  250. package/lib/cjs/render/webgl/glsl/CombineTextures.d.ts.map +1 -1
  251. package/lib/cjs/render/webgl/glsl/CombineTextures.js.map +1 -1
  252. package/lib/cjs/render/webgl/glsl/Common.d.ts.map +1 -1
  253. package/lib/cjs/render/webgl/glsl/Common.js +9 -55
  254. package/lib/cjs/render/webgl/glsl/Common.js.map +1 -1
  255. package/lib/cjs/render/webgl/glsl/Composite.d.ts +1 -2
  256. package/lib/cjs/render/webgl/glsl/Composite.d.ts.map +1 -1
  257. package/lib/cjs/render/webgl/glsl/Composite.js.map +1 -1
  258. package/lib/cjs/render/webgl/glsl/CopyColor.d.ts +1 -2
  259. package/lib/cjs/render/webgl/glsl/CopyColor.d.ts.map +1 -1
  260. package/lib/cjs/render/webgl/glsl/CopyColor.js.map +1 -1
  261. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.d.ts +1 -2
  262. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.d.ts.map +1 -1
  263. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.js +12 -19
  264. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.js.map +1 -1
  265. package/lib/cjs/render/webgl/glsl/CopyStencil.d.ts +4 -7
  266. package/lib/cjs/render/webgl/glsl/CopyStencil.d.ts.map +1 -1
  267. package/lib/cjs/render/webgl/glsl/CopyStencil.js +2 -39
  268. package/lib/cjs/render/webgl/glsl/CopyStencil.js.map +1 -1
  269. package/lib/cjs/render/webgl/glsl/EDL.d.ts +13 -0
  270. package/lib/cjs/render/webgl/glsl/EDL.d.ts.map +1 -0
  271. package/lib/cjs/render/webgl/glsl/EDL.js +260 -0
  272. package/lib/cjs/render/webgl/glsl/EDL.js.map +1 -0
  273. package/lib/cjs/render/webgl/glsl/EVSMFromDepth.d.ts +1 -2
  274. package/lib/cjs/render/webgl/glsl/EVSMFromDepth.d.ts.map +1 -1
  275. package/lib/cjs/render/webgl/glsl/EVSMFromDepth.js.map +1 -1
  276. package/lib/cjs/render/webgl/glsl/Edge.d.ts.map +1 -1
  277. package/lib/cjs/render/webgl/glsl/Edge.js +2 -2
  278. package/lib/cjs/render/webgl/glsl/Edge.js.map +1 -1
  279. package/lib/cjs/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
  280. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +3 -24
  281. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  282. package/lib/cjs/render/webgl/glsl/Fragment.d.ts +0 -7
  283. package/lib/cjs/render/webgl/glsl/Fragment.d.ts.map +1 -1
  284. package/lib/cjs/render/webgl/glsl/Fragment.js +5 -40
  285. package/lib/cjs/render/webgl/glsl/Fragment.js.map +1 -1
  286. package/lib/cjs/render/webgl/glsl/Instancing.d.ts.map +1 -1
  287. package/lib/cjs/render/webgl/glsl/Instancing.js +1 -5
  288. package/lib/cjs/render/webgl/glsl/Instancing.js.map +1 -1
  289. package/lib/cjs/render/webgl/glsl/LogarithmicDepthBuffer.d.ts.map +1 -1
  290. package/lib/cjs/render/webgl/glsl/LogarithmicDepthBuffer.js +0 -2
  291. package/lib/cjs/render/webgl/glsl/LogarithmicDepthBuffer.js.map +1 -1
  292. package/lib/cjs/render/webgl/glsl/PlanarGrid.d.ts +1 -2
  293. package/lib/cjs/render/webgl/glsl/PlanarGrid.d.ts.map +1 -1
  294. package/lib/cjs/render/webgl/glsl/PlanarGrid.js +2 -12
  295. package/lib/cjs/render/webgl/glsl/PlanarGrid.js.map +1 -1
  296. package/lib/cjs/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  297. package/lib/cjs/render/webgl/glsl/RealityMesh.js +3 -8
  298. package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
  299. package/lib/cjs/render/webgl/glsl/RenderPass.js +12 -12
  300. package/lib/cjs/render/webgl/glsl/RenderPass.js.map +1 -1
  301. package/lib/cjs/render/webgl/glsl/SkyBox.d.ts +1 -2
  302. package/lib/cjs/render/webgl/glsl/SkyBox.d.ts.map +1 -1
  303. package/lib/cjs/render/webgl/glsl/SkyBox.js.map +1 -1
  304. package/lib/cjs/render/webgl/glsl/SkySphere.d.ts +1 -2
  305. package/lib/cjs/render/webgl/glsl/SkySphere.d.ts.map +1 -1
  306. package/lib/cjs/render/webgl/glsl/SkySphere.js.map +1 -1
  307. package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js +1 -1
  308. package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js.map +1 -1
  309. package/lib/cjs/render/webgl/glsl/Surface.d.ts.map +1 -1
  310. package/lib/cjs/render/webgl/glsl/Surface.js +33 -57
  311. package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
  312. package/lib/cjs/render/webgl/glsl/Thematic.d.ts.map +1 -1
  313. package/lib/cjs/render/webgl/glsl/Thematic.js +3 -36
  314. package/lib/cjs/render/webgl/glsl/Thematic.js.map +1 -1
  315. package/lib/cjs/render/webgl/glsl/Translucency.d.ts.map +1 -1
  316. package/lib/cjs/render/webgl/glsl/Translucency.js +2 -12
  317. package/lib/cjs/render/webgl/glsl/Translucency.js.map +1 -1
  318. package/lib/cjs/render/webgl/glsl/Vertex.d.ts +1 -2
  319. package/lib/cjs/render/webgl/glsl/Vertex.d.ts.map +1 -1
  320. package/lib/cjs/render/webgl/glsl/Vertex.js +15 -78
  321. package/lib/cjs/render/webgl/glsl/Vertex.js.map +1 -1
  322. package/lib/cjs/render/webgl/glsl/Wiremesh.d.ts.map +1 -1
  323. package/lib/cjs/render/webgl/glsl/Wiremesh.js +2 -5
  324. package/lib/cjs/render/webgl/glsl/Wiremesh.js.map +1 -1
  325. package/lib/cjs/tile/BatchedTileIdMap.js +1 -1
  326. package/lib/cjs/tile/BatchedTileIdMap.js.map +1 -1
  327. package/lib/cjs/tile/DynamicIModelTile.js +1 -1
  328. package/lib/cjs/tile/DynamicIModelTile.js.map +1 -1
  329. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  330. package/lib/cjs/tile/GltfReader.js +4 -2
  331. package/lib/cjs/tile/GltfReader.js.map +1 -1
  332. package/lib/cjs/tile/IModelTile.js +1 -1
  333. package/lib/cjs/tile/IModelTile.js.map +1 -1
  334. package/lib/cjs/tile/ImdlReader.d.ts +6 -0
  335. package/lib/cjs/tile/ImdlReader.d.ts.map +1 -1
  336. package/lib/cjs/tile/ImdlReader.js +20 -7
  337. package/lib/cjs/tile/ImdlReader.js.map +1 -1
  338. package/lib/cjs/tile/OrbitGtTileTree.d.ts +14 -1
  339. package/lib/cjs/tile/OrbitGtTileTree.d.ts.map +1 -1
  340. package/lib/cjs/tile/OrbitGtTileTree.js +30 -11
  341. package/lib/cjs/tile/OrbitGtTileTree.js.map +1 -1
  342. package/lib/cjs/tile/PrimaryTileTree.d.ts +0 -3
  343. package/lib/cjs/tile/PrimaryTileTree.d.ts.map +1 -1
  344. package/lib/cjs/tile/PrimaryTileTree.js +6 -28
  345. package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
  346. package/lib/cjs/tile/RealityModelTileTree.d.ts +4 -3
  347. package/lib/cjs/tile/RealityModelTileTree.d.ts.map +1 -1
  348. package/lib/cjs/tile/RealityModelTileTree.js +61 -53
  349. package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
  350. package/lib/cjs/tile/RealityTileLoader.js +2 -2
  351. package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
  352. package/lib/cjs/tile/RealityTileTree.d.ts +5 -0
  353. package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
  354. package/lib/cjs/tile/RealityTileTree.js +8 -4
  355. package/lib/cjs/tile/RealityTileTree.js.map +1 -1
  356. package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
  357. package/lib/cjs/tile/TileAdmin.js +17 -9
  358. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  359. package/lib/cjs/tile/TileDrawArgs.js +1 -1
  360. package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
  361. package/lib/cjs/tile/TileTreeReference.d.ts +3 -0
  362. package/lib/cjs/tile/TileTreeReference.d.ts.map +1 -1
  363. package/lib/cjs/tile/TileTreeReference.js +3 -0
  364. package/lib/cjs/tile/TileTreeReference.js.map +1 -1
  365. package/lib/cjs/tile/map/ArcGisUtilities.d.ts +14 -1
  366. package/lib/cjs/tile/map/ArcGisUtilities.d.ts.map +1 -1
  367. package/lib/cjs/tile/map/ArcGisUtilities.js +57 -27
  368. package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
  369. package/lib/cjs/tile/map/CesiumTerrainProvider.js +9 -9
  370. package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
  371. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts +14 -2
  372. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -1
  373. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js +77 -37
  374. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
  375. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +2 -1
  376. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  377. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +65 -52
  378. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  379. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +1 -0
  380. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  381. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +2 -0
  382. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  383. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +1 -1
  384. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  385. package/lib/cjs/tile/map/ImageryTileTree.d.ts +28 -3
  386. package/lib/cjs/tile/map/ImageryTileTree.d.ts.map +1 -1
  387. package/lib/cjs/tile/map/ImageryTileTree.js +63 -8
  388. package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
  389. package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
  390. package/lib/cjs/tile/map/MapLayerImageryFormats.js +3 -2
  391. package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
  392. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts +12 -2
  393. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  394. package/lib/cjs/tile/map/MapLayerImageryProvider.js +16 -4
  395. package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
  396. package/lib/cjs/tile/map/MapLayerSources.d.ts +3 -1
  397. package/lib/cjs/tile/map/MapLayerSources.d.ts.map +1 -1
  398. package/lib/cjs/tile/map/MapLayerSources.js +2 -0
  399. package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
  400. package/lib/cjs/tile/map/MapTile.d.ts +13 -0
  401. package/lib/cjs/tile/map/MapTile.d.ts.map +1 -1
  402. package/lib/cjs/tile/map/MapTile.js +57 -14
  403. package/lib/cjs/tile/map/MapTile.js.map +1 -1
  404. package/lib/cjs/tile/map/MapTileTree.d.ts +44 -4
  405. package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
  406. package/lib/cjs/tile/map/MapTileTree.js +131 -11
  407. package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
  408. package/lib/cjs/tile/map/MapTiledGraphicsProvider.d.ts +17 -0
  409. package/lib/cjs/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
  410. package/lib/cjs/tile/map/MapTiledGraphicsProvider.js +26 -0
  411. package/lib/cjs/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  412. package/lib/cjs/tile/map/WmtsCapabilities.d.ts +23 -68
  413. package/lib/cjs/tile/map/WmtsCapabilities.d.ts.map +1 -1
  414. package/lib/cjs/tile/map/WmtsCapabilities.js +269 -260
  415. package/lib/cjs/tile/map/WmtsCapabilities.js.map +1 -1
  416. package/lib/cjs/tools/ClipViewTool.js +2 -2
  417. package/lib/cjs/tools/ClipViewTool.js.map +1 -1
  418. package/lib/cjs/tools/MeasureTool.js +2 -2
  419. package/lib/cjs/tools/MeasureTool.js.map +1 -1
  420. package/lib/esm/AccuDraw.js +1 -1
  421. package/lib/esm/AccuDraw.js.map +1 -1
  422. package/lib/esm/BriefcaseConnection.d.ts +23 -3
  423. package/lib/esm/BriefcaseConnection.d.ts.map +1 -1
  424. package/lib/esm/BriefcaseConnection.js +11 -3
  425. package/lib/esm/BriefcaseConnection.js.map +1 -1
  426. package/lib/esm/CheckpointConnection.js +1 -1
  427. package/lib/esm/CheckpointConnection.js.map +1 -1
  428. package/lib/esm/DisplayStyleState.d.ts +2 -2
  429. package/lib/esm/DisplayStyleState.d.ts.map +1 -1
  430. package/lib/esm/DisplayStyleState.js +12 -4
  431. package/lib/esm/DisplayStyleState.js.map +1 -1
  432. package/lib/esm/IModelApp.d.ts +4 -3
  433. package/lib/esm/IModelApp.d.ts.map +1 -1
  434. package/lib/esm/IModelApp.js +4 -6
  435. package/lib/esm/IModelApp.js.map +1 -1
  436. package/lib/esm/IModelConnection.d.ts +4 -6
  437. package/lib/esm/IModelConnection.d.ts.map +1 -1
  438. package/lib/esm/IModelConnection.js +6 -7
  439. package/lib/esm/IModelConnection.js.map +1 -1
  440. package/lib/esm/IpcApp.d.ts +1 -1
  441. package/lib/esm/IpcApp.d.ts.map +1 -1
  442. package/lib/esm/IpcApp.js +1 -1
  443. package/lib/esm/IpcApp.js.map +1 -1
  444. package/lib/esm/NativeApp.d.ts +8 -1
  445. package/lib/esm/NativeApp.d.ts.map +1 -1
  446. package/lib/esm/NativeApp.js +10 -6
  447. package/lib/esm/NativeApp.js.map +1 -1
  448. package/lib/esm/NoRenderApp.d.ts.map +1 -1
  449. package/lib/esm/NoRenderApp.js +3 -0
  450. package/lib/esm/NoRenderApp.js.map +1 -1
  451. package/lib/esm/SpatialViewState.d.ts +4 -1
  452. package/lib/esm/SpatialViewState.d.ts.map +1 -1
  453. package/lib/esm/SpatialViewState.js +19 -5
  454. package/lib/esm/SpatialViewState.js.map +1 -1
  455. package/lib/esm/SubCategoriesCache.d.ts.map +1 -1
  456. package/lib/esm/SubCategoriesCache.js +0 -1
  457. package/lib/esm/SubCategoriesCache.js.map +1 -1
  458. package/lib/esm/Tiles.d.ts +4 -0
  459. package/lib/esm/Tiles.d.ts.map +1 -1
  460. package/lib/esm/Tiles.js +11 -0
  461. package/lib/esm/Tiles.js.map +1 -1
  462. package/lib/esm/ViewContext.js +1 -1
  463. package/lib/esm/ViewContext.js.map +1 -1
  464. package/lib/esm/ViewManager.d.ts.map +1 -1
  465. package/lib/esm/ViewManager.js +2 -3
  466. package/lib/esm/ViewManager.js.map +1 -1
  467. package/lib/esm/ViewState.d.ts +4 -5
  468. package/lib/esm/ViewState.d.ts.map +1 -1
  469. package/lib/esm/ViewState.js +0 -1
  470. package/lib/esm/ViewState.js.map +1 -1
  471. package/lib/esm/Viewport.d.ts +53 -4
  472. package/lib/esm/Viewport.d.ts.map +1 -1
  473. package/lib/esm/Viewport.js +83 -35
  474. package/lib/esm/Viewport.js.map +1 -1
  475. package/lib/esm/extension/ExtensionImpl.js +2 -2
  476. package/lib/esm/extension/ExtensionImpl.js.map +1 -1
  477. package/lib/esm/extension/ExtensionRuntime.js +5 -2
  478. package/lib/esm/extension/ExtensionRuntime.js.map +1 -1
  479. package/lib/esm/render/GraphicBranch.d.ts +3 -0
  480. package/lib/esm/render/GraphicBranch.d.ts.map +1 -1
  481. package/lib/esm/render/GraphicBranch.js.map +1 -1
  482. package/lib/esm/render/GraphicBuilder.d.ts +1 -1
  483. package/lib/esm/render/GraphicBuilder.js +1 -1
  484. package/lib/esm/render/GraphicBuilder.js.map +1 -1
  485. package/lib/esm/render/MockRender.d.ts.map +1 -1
  486. package/lib/esm/render/MockRender.js +3 -0
  487. package/lib/esm/render/MockRender.js.map +1 -1
  488. package/lib/esm/render/RealityMeshParams.d.ts +7 -5
  489. package/lib/esm/render/RealityMeshParams.d.ts.map +1 -1
  490. package/lib/esm/render/RealityMeshParams.js +24 -10
  491. package/lib/esm/render/RealityMeshParams.js.map +1 -1
  492. package/lib/esm/render/RenderMaterial.d.ts +1 -1
  493. package/lib/esm/render/RenderMaterial.d.ts.map +1 -1
  494. package/lib/esm/render/RenderMaterial.js.map +1 -1
  495. package/lib/esm/render/RenderSystem.d.ts +9 -20
  496. package/lib/esm/render/RenderSystem.d.ts.map +1 -1
  497. package/lib/esm/render/RenderSystem.js +4 -10
  498. package/lib/esm/render/RenderSystem.js.map +1 -1
  499. package/lib/esm/render/RenderTarget.d.ts +1 -1
  500. package/lib/esm/render/RenderTarget.d.ts.map +1 -1
  501. package/lib/esm/render/RenderTarget.js +1 -1
  502. package/lib/esm/render/RenderTarget.js.map +1 -1
  503. package/lib/esm/render/ScreenSpaceEffectBuilder.d.ts +3 -4
  504. package/lib/esm/render/ScreenSpaceEffectBuilder.d.ts.map +1 -1
  505. package/lib/esm/render/ScreenSpaceEffectBuilder.js.map +1 -1
  506. package/lib/esm/render/VisibleFeature.d.ts +5 -5
  507. package/lib/esm/render/VisibleFeature.js.map +1 -1
  508. package/lib/esm/render/primitives/DisplayParams.d.ts.map +1 -1
  509. package/lib/esm/render/primitives/DisplayParams.js +2 -1
  510. package/lib/esm/render/primitives/DisplayParams.js.map +1 -1
  511. package/lib/esm/render/webgl/AttributeBuffers.d.ts +9 -79
  512. package/lib/esm/render/webgl/AttributeBuffers.d.ts.map +1 -1
  513. package/lib/esm/render/webgl/AttributeBuffers.js +16 -144
  514. package/lib/esm/render/webgl/AttributeBuffers.js.map +1 -1
  515. package/lib/esm/render/webgl/BackgroundMapDrape.d.ts.map +1 -1
  516. package/lib/esm/render/webgl/BackgroundMapDrape.js +3 -6
  517. package/lib/esm/render/webgl/BackgroundMapDrape.js.map +1 -1
  518. package/lib/esm/render/webgl/BranchState.d.ts +3 -0
  519. package/lib/esm/render/webgl/BranchState.d.ts.map +1 -1
  520. package/lib/esm/render/webgl/BranchState.js +5 -0
  521. package/lib/esm/render/webgl/BranchState.js.map +1 -1
  522. package/lib/esm/render/webgl/BranchUniforms.d.ts.map +1 -1
  523. package/lib/esm/render/webgl/BranchUniforms.js +0 -8
  524. package/lib/esm/render/webgl/BranchUniforms.js.map +1 -1
  525. package/lib/esm/render/webgl/CachedGeometry.d.ts +32 -0
  526. package/lib/esm/render/webgl/CachedGeometry.d.ts.map +1 -1
  527. package/lib/esm/render/webgl/CachedGeometry.js +69 -0
  528. package/lib/esm/render/webgl/CachedGeometry.js.map +1 -1
  529. package/lib/esm/render/webgl/ClipStack.d.ts +0 -1
  530. package/lib/esm/render/webgl/ClipStack.d.ts.map +1 -1
  531. package/lib/esm/render/webgl/ClipStack.js +2 -6
  532. package/lib/esm/render/webgl/ClipStack.js.map +1 -1
  533. package/lib/esm/render/webgl/ClipVolume.d.ts.map +1 -1
  534. package/lib/esm/render/webgl/ClipVolume.js +1 -5
  535. package/lib/esm/render/webgl/ClipVolume.js.map +1 -1
  536. package/lib/esm/render/webgl/ClippingProgram.d.ts +3 -2
  537. package/lib/esm/render/webgl/ClippingProgram.d.ts.map +1 -1
  538. package/lib/esm/render/webgl/ClippingProgram.js +10 -37
  539. package/lib/esm/render/webgl/ClippingProgram.js.map +1 -1
  540. package/lib/esm/render/webgl/DrawCommand.d.ts +2 -2
  541. package/lib/esm/render/webgl/DrawCommand.d.ts.map +1 -1
  542. package/lib/esm/render/webgl/DrawCommand.js +7 -5
  543. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  544. package/lib/esm/render/webgl/EDL.d.ts +40 -0
  545. package/lib/esm/render/webgl/EDL.d.ts.map +1 -0
  546. package/lib/esm/render/webgl/EDL.js +260 -0
  547. package/lib/esm/render/webgl/EDL.js.map +1 -0
  548. package/lib/esm/render/webgl/EdgeSettings.js +2 -2
  549. package/lib/esm/render/webgl/FeatureOverrides.js +1 -1
  550. package/lib/esm/render/webgl/FeatureOverrides.js.map +1 -1
  551. package/lib/esm/render/webgl/FloatRGBA.d.ts.map +1 -1
  552. package/lib/esm/render/webgl/FloatRGBA.js +0 -4
  553. package/lib/esm/render/webgl/FloatRGBA.js.map +1 -1
  554. package/lib/esm/render/webgl/FrameBuffer.d.ts +4 -0
  555. package/lib/esm/render/webgl/FrameBuffer.d.ts.map +1 -1
  556. package/lib/esm/render/webgl/FrameBuffer.js +9 -0
  557. package/lib/esm/render/webgl/FrameBuffer.js.map +1 -1
  558. package/lib/esm/render/webgl/FrustumUniforms.d.ts +7 -0
  559. package/lib/esm/render/webgl/FrustumUniforms.d.ts.map +1 -1
  560. package/lib/esm/render/webgl/FrustumUniforms.js.map +1 -1
  561. package/lib/esm/render/webgl/GLTimer.d.ts.map +1 -1
  562. package/lib/esm/render/webgl/GLTimer.js +2 -35
  563. package/lib/esm/render/webgl/GLTimer.js.map +1 -1
  564. package/lib/esm/render/webgl/Layer.js +2 -2
  565. package/lib/esm/render/webgl/LayerCommands.js +2 -2
  566. package/lib/esm/render/webgl/PlanarClassifier.d.ts.map +1 -1
  567. package/lib/esm/render/webgl/PlanarClassifier.js +20 -77
  568. package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
  569. package/lib/esm/render/webgl/PlanarTextureProjection.js +1 -1
  570. package/lib/esm/render/webgl/PlanarTextureProjection.js.map +1 -1
  571. package/lib/esm/render/webgl/PointCloud.d.ts +2 -2
  572. package/lib/esm/render/webgl/PointCloud.d.ts.map +1 -1
  573. package/lib/esm/render/webgl/PointCloud.js +1 -1
  574. package/lib/esm/render/webgl/PointCloud.js.map +1 -1
  575. package/lib/esm/render/webgl/RealityMesh.d.ts +3 -1
  576. package/lib/esm/render/webgl/RealityMesh.d.ts.map +1 -1
  577. package/lib/esm/render/webgl/RealityMesh.js +8 -3
  578. package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
  579. package/lib/esm/render/webgl/RealityModelUniforms.d.ts +9 -0
  580. package/lib/esm/render/webgl/RealityModelUniforms.d.ts.map +1 -1
  581. package/lib/esm/render/webgl/RealityModelUniforms.js +50 -0
  582. package/lib/esm/render/webgl/RealityModelUniforms.js.map +1 -1
  583. package/lib/esm/render/webgl/RenderBuffer.d.ts +1 -1
  584. package/lib/esm/render/webgl/RenderBuffer.d.ts.map +1 -1
  585. package/lib/esm/render/webgl/RenderBuffer.js +2 -3
  586. package/lib/esm/render/webgl/RenderBuffer.js.map +1 -1
  587. package/lib/esm/render/webgl/RenderCommands.d.ts +2 -1
  588. package/lib/esm/render/webgl/RenderCommands.d.ts.map +1 -1
  589. package/lib/esm/render/webgl/RenderCommands.js +46 -38
  590. package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
  591. package/lib/esm/render/webgl/RenderFlags.d.ts +20 -19
  592. package/lib/esm/render/webgl/RenderFlags.d.ts.map +1 -1
  593. package/lib/esm/render/webgl/RenderFlags.js +12 -12
  594. package/lib/esm/render/webgl/RenderFlags.js.map +1 -1
  595. package/lib/esm/render/webgl/SceneCompositor.d.ts +6 -3
  596. package/lib/esm/render/webgl/SceneCompositor.d.ts.map +1 -1
  597. package/lib/esm/render/webgl/SceneCompositor.js +627 -891
  598. package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
  599. package/lib/esm/render/webgl/ScreenSpaceEffect.js +1 -1
  600. package/lib/esm/render/webgl/ScreenSpaceEffect.js.map +1 -1
  601. package/lib/esm/render/webgl/ShaderBuilder.d.ts +1 -2
  602. package/lib/esm/render/webgl/ShaderBuilder.d.ts.map +1 -1
  603. package/lib/esm/render/webgl/ShaderBuilder.js +13 -48
  604. package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
  605. package/lib/esm/render/webgl/ShaderProgram.d.ts +1 -2
  606. package/lib/esm/render/webgl/ShaderProgram.d.ts.map +1 -1
  607. package/lib/esm/render/webgl/ShaderProgram.js.map +1 -1
  608. package/lib/esm/render/webgl/SolarShadowMap.d.ts.map +1 -1
  609. package/lib/esm/render/webgl/SolarShadowMap.js +8 -29
  610. package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
  611. package/lib/esm/render/webgl/SurfaceGeometry.js +5 -5
  612. package/lib/esm/render/webgl/System.d.ts +10 -10
  613. package/lib/esm/render/webgl/System.d.ts.map +1 -1
  614. package/lib/esm/render/webgl/System.js +41 -124
  615. package/lib/esm/render/webgl/System.js.map +1 -1
  616. package/lib/esm/render/webgl/Target.js +7 -7
  617. package/lib/esm/render/webgl/Target.js.map +1 -1
  618. package/lib/esm/render/webgl/Technique.d.ts +4 -5
  619. package/lib/esm/render/webgl/Technique.d.ts.map +1 -1
  620. package/lib/esm/render/webgl/Technique.js +17 -26
  621. package/lib/esm/render/webgl/Technique.js.map +1 -1
  622. package/lib/esm/render/webgl/TechniqueFlags.js +4 -4
  623. package/lib/esm/render/webgl/TechniqueFlags.js.map +1 -1
  624. package/lib/esm/render/webgl/TechniqueId.d.ts +6 -2
  625. package/lib/esm/render/webgl/TechniqueId.d.ts.map +1 -1
  626. package/lib/esm/render/webgl/TechniqueId.js.map +1 -1
  627. package/lib/esm/render/webgl/Texture.d.ts.map +1 -1
  628. package/lib/esm/render/webgl/Texture.js +14 -18
  629. package/lib/esm/render/webgl/Texture.js.map +1 -1
  630. package/lib/esm/render/webgl/ThematicSensors.d.ts +4 -3
  631. package/lib/esm/render/webgl/ThematicSensors.d.ts.map +1 -1
  632. package/lib/esm/render/webgl/ThematicSensors.js +9 -50
  633. package/lib/esm/render/webgl/ThematicSensors.js.map +1 -1
  634. package/lib/esm/render/webgl/ThematicUniforms.js +1 -1
  635. package/lib/esm/render/webgl/ThematicUniforms.js.map +1 -1
  636. package/lib/esm/render/webgl/UniformHandle.d.ts.map +1 -1
  637. package/lib/esm/render/webgl/UniformHandle.js +2 -6
  638. package/lib/esm/render/webgl/UniformHandle.js.map +1 -1
  639. package/lib/esm/render/webgl/VisibleTileFeatures.js +5 -5
  640. package/lib/esm/render/webgl/glsl/AmbientOcclusion.d.ts +1 -2
  641. package/lib/esm/render/webgl/glsl/AmbientOcclusion.d.ts.map +1 -1
  642. package/lib/esm/render/webgl/glsl/AmbientOcclusion.js +1 -1
  643. package/lib/esm/render/webgl/glsl/AmbientOcclusion.js.map +1 -1
  644. package/lib/esm/render/webgl/glsl/Animation.d.ts +1 -2
  645. package/lib/esm/render/webgl/glsl/Animation.d.ts.map +1 -1
  646. package/lib/esm/render/webgl/glsl/Animation.js +23 -26
  647. package/lib/esm/render/webgl/glsl/Animation.js.map +1 -1
  648. package/lib/esm/render/webgl/glsl/Blur.d.ts +1 -2
  649. package/lib/esm/render/webgl/glsl/Blur.d.ts.map +1 -1
  650. package/lib/esm/render/webgl/glsl/Blur.js.map +1 -1
  651. package/lib/esm/render/webgl/glsl/ClearPickAndColor.d.ts +1 -2
  652. package/lib/esm/render/webgl/glsl/ClearPickAndColor.d.ts.map +1 -1
  653. package/lib/esm/render/webgl/glsl/ClearPickAndColor.js +2 -9
  654. package/lib/esm/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
  655. package/lib/esm/render/webgl/glsl/ClearTranslucent.d.ts +1 -2
  656. package/lib/esm/render/webgl/glsl/ClearTranslucent.d.ts.map +1 -1
  657. package/lib/esm/render/webgl/glsl/ClearTranslucent.js +2 -10
  658. package/lib/esm/render/webgl/glsl/ClearTranslucent.js.map +1 -1
  659. package/lib/esm/render/webgl/glsl/Clipping.d.ts +1 -1
  660. package/lib/esm/render/webgl/glsl/Clipping.d.ts.map +1 -1
  661. package/lib/esm/render/webgl/glsl/Clipping.js +5 -36
  662. package/lib/esm/render/webgl/glsl/Clipping.js.map +1 -1
  663. package/lib/esm/render/webgl/glsl/Combine3Textures.d.ts +1 -2
  664. package/lib/esm/render/webgl/glsl/Combine3Textures.d.ts.map +1 -1
  665. package/lib/esm/render/webgl/glsl/Combine3Textures.js.map +1 -1
  666. package/lib/esm/render/webgl/glsl/CombineTextures.d.ts +1 -2
  667. package/lib/esm/render/webgl/glsl/CombineTextures.d.ts.map +1 -1
  668. package/lib/esm/render/webgl/glsl/CombineTextures.js.map +1 -1
  669. package/lib/esm/render/webgl/glsl/Common.d.ts.map +1 -1
  670. package/lib/esm/render/webgl/glsl/Common.js +9 -55
  671. package/lib/esm/render/webgl/glsl/Common.js.map +1 -1
  672. package/lib/esm/render/webgl/glsl/Composite.d.ts +1 -2
  673. package/lib/esm/render/webgl/glsl/Composite.d.ts.map +1 -1
  674. package/lib/esm/render/webgl/glsl/Composite.js.map +1 -1
  675. package/lib/esm/render/webgl/glsl/CopyColor.d.ts +1 -2
  676. package/lib/esm/render/webgl/glsl/CopyColor.d.ts.map +1 -1
  677. package/lib/esm/render/webgl/glsl/CopyColor.js.map +1 -1
  678. package/lib/esm/render/webgl/glsl/CopyPickBuffers.d.ts +1 -2
  679. package/lib/esm/render/webgl/glsl/CopyPickBuffers.d.ts.map +1 -1
  680. package/lib/esm/render/webgl/glsl/CopyPickBuffers.js +12 -19
  681. package/lib/esm/render/webgl/glsl/CopyPickBuffers.js.map +1 -1
  682. package/lib/esm/render/webgl/glsl/CopyStencil.d.ts +4 -7
  683. package/lib/esm/render/webgl/glsl/CopyStencil.d.ts.map +1 -1
  684. package/lib/esm/render/webgl/glsl/CopyStencil.js +1 -37
  685. package/lib/esm/render/webgl/glsl/CopyStencil.js.map +1 -1
  686. package/lib/esm/render/webgl/glsl/EDL.d.ts +13 -0
  687. package/lib/esm/render/webgl/glsl/EDL.d.ts.map +1 -0
  688. package/lib/esm/render/webgl/glsl/EDL.js +253 -0
  689. package/lib/esm/render/webgl/glsl/EDL.js.map +1 -0
  690. package/lib/esm/render/webgl/glsl/EVSMFromDepth.d.ts +1 -2
  691. package/lib/esm/render/webgl/glsl/EVSMFromDepth.d.ts.map +1 -1
  692. package/lib/esm/render/webgl/glsl/EVSMFromDepth.js.map +1 -1
  693. package/lib/esm/render/webgl/glsl/Edge.d.ts.map +1 -1
  694. package/lib/esm/render/webgl/glsl/Edge.js +2 -2
  695. package/lib/esm/render/webgl/glsl/Edge.js.map +1 -1
  696. package/lib/esm/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
  697. package/lib/esm/render/webgl/glsl/FeatureSymbology.js +3 -24
  698. package/lib/esm/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  699. package/lib/esm/render/webgl/glsl/Fragment.d.ts +0 -7
  700. package/lib/esm/render/webgl/glsl/Fragment.d.ts.map +1 -1
  701. package/lib/esm/render/webgl/glsl/Fragment.js +4 -38
  702. package/lib/esm/render/webgl/glsl/Fragment.js.map +1 -1
  703. package/lib/esm/render/webgl/glsl/Instancing.d.ts.map +1 -1
  704. package/lib/esm/render/webgl/glsl/Instancing.js +1 -5
  705. package/lib/esm/render/webgl/glsl/Instancing.js.map +1 -1
  706. package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.d.ts.map +1 -1
  707. package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.js +0 -2
  708. package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.js.map +1 -1
  709. package/lib/esm/render/webgl/glsl/PlanarGrid.d.ts +1 -2
  710. package/lib/esm/render/webgl/glsl/PlanarGrid.d.ts.map +1 -1
  711. package/lib/esm/render/webgl/glsl/PlanarGrid.js +2 -12
  712. package/lib/esm/render/webgl/glsl/PlanarGrid.js.map +1 -1
  713. package/lib/esm/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  714. package/lib/esm/render/webgl/glsl/RealityMesh.js +3 -8
  715. package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
  716. package/lib/esm/render/webgl/glsl/RenderPass.js +12 -12
  717. package/lib/esm/render/webgl/glsl/RenderPass.js.map +1 -1
  718. package/lib/esm/render/webgl/glsl/SkyBox.d.ts +1 -2
  719. package/lib/esm/render/webgl/glsl/SkyBox.d.ts.map +1 -1
  720. package/lib/esm/render/webgl/glsl/SkyBox.js.map +1 -1
  721. package/lib/esm/render/webgl/glsl/SkySphere.d.ts +1 -2
  722. package/lib/esm/render/webgl/glsl/SkySphere.d.ts.map +1 -1
  723. package/lib/esm/render/webgl/glsl/SkySphere.js.map +1 -1
  724. package/lib/esm/render/webgl/glsl/SolarShadowMapping.js +1 -1
  725. package/lib/esm/render/webgl/glsl/SolarShadowMapping.js.map +1 -1
  726. package/lib/esm/render/webgl/glsl/Surface.d.ts.map +1 -1
  727. package/lib/esm/render/webgl/glsl/Surface.js +33 -57
  728. package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
  729. package/lib/esm/render/webgl/glsl/Thematic.d.ts.map +1 -1
  730. package/lib/esm/render/webgl/glsl/Thematic.js +3 -36
  731. package/lib/esm/render/webgl/glsl/Thematic.js.map +1 -1
  732. package/lib/esm/render/webgl/glsl/Translucency.d.ts.map +1 -1
  733. package/lib/esm/render/webgl/glsl/Translucency.js +3 -13
  734. package/lib/esm/render/webgl/glsl/Translucency.js.map +1 -1
  735. package/lib/esm/render/webgl/glsl/Vertex.d.ts +1 -2
  736. package/lib/esm/render/webgl/glsl/Vertex.d.ts.map +1 -1
  737. package/lib/esm/render/webgl/glsl/Vertex.js +16 -79
  738. package/lib/esm/render/webgl/glsl/Vertex.js.map +1 -1
  739. package/lib/esm/render/webgl/glsl/Wiremesh.d.ts.map +1 -1
  740. package/lib/esm/render/webgl/glsl/Wiremesh.js +2 -5
  741. package/lib/esm/render/webgl/glsl/Wiremesh.js.map +1 -1
  742. package/lib/esm/tile/BatchedTileIdMap.js +1 -1
  743. package/lib/esm/tile/BatchedTileIdMap.js.map +1 -1
  744. package/lib/esm/tile/DynamicIModelTile.js +1 -1
  745. package/lib/esm/tile/DynamicIModelTile.js.map +1 -1
  746. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  747. package/lib/esm/tile/GltfReader.js +4 -2
  748. package/lib/esm/tile/GltfReader.js.map +1 -1
  749. package/lib/esm/tile/IModelTile.js +1 -1
  750. package/lib/esm/tile/IModelTile.js.map +1 -1
  751. package/lib/esm/tile/ImdlReader.d.ts +6 -0
  752. package/lib/esm/tile/ImdlReader.d.ts.map +1 -1
  753. package/lib/esm/tile/ImdlReader.js +20 -7
  754. package/lib/esm/tile/ImdlReader.js.map +1 -1
  755. package/lib/esm/tile/OrbitGtTileTree.d.ts +14 -1
  756. package/lib/esm/tile/OrbitGtTileTree.d.ts.map +1 -1
  757. package/lib/esm/tile/OrbitGtTileTree.js +30 -12
  758. package/lib/esm/tile/OrbitGtTileTree.js.map +1 -1
  759. package/lib/esm/tile/PrimaryTileTree.d.ts +0 -3
  760. package/lib/esm/tile/PrimaryTileTree.d.ts.map +1 -1
  761. package/lib/esm/tile/PrimaryTileTree.js +8 -30
  762. package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
  763. package/lib/esm/tile/RealityModelTileTree.d.ts +4 -3
  764. package/lib/esm/tile/RealityModelTileTree.d.ts.map +1 -1
  765. package/lib/esm/tile/RealityModelTileTree.js +62 -54
  766. package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
  767. package/lib/esm/tile/RealityTileLoader.js +2 -2
  768. package/lib/esm/tile/RealityTileLoader.js.map +1 -1
  769. package/lib/esm/tile/RealityTileTree.d.ts +5 -0
  770. package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
  771. package/lib/esm/tile/RealityTileTree.js +8 -4
  772. package/lib/esm/tile/RealityTileTree.js.map +1 -1
  773. package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
  774. package/lib/esm/tile/TileAdmin.js +17 -9
  775. package/lib/esm/tile/TileAdmin.js.map +1 -1
  776. package/lib/esm/tile/TileDrawArgs.js +1 -1
  777. package/lib/esm/tile/TileDrawArgs.js.map +1 -1
  778. package/lib/esm/tile/TileTreeReference.d.ts +3 -0
  779. package/lib/esm/tile/TileTreeReference.d.ts.map +1 -1
  780. package/lib/esm/tile/TileTreeReference.js +3 -0
  781. package/lib/esm/tile/TileTreeReference.js.map +1 -1
  782. package/lib/esm/tile/map/ArcGisUtilities.d.ts +14 -1
  783. package/lib/esm/tile/map/ArcGisUtilities.d.ts.map +1 -1
  784. package/lib/esm/tile/map/ArcGisUtilities.js +57 -27
  785. package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
  786. package/lib/esm/tile/map/CesiumTerrainProvider.js +9 -9
  787. package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
  788. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts +14 -2
  789. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -1
  790. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js +77 -37
  791. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
  792. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +2 -1
  793. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  794. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +65 -52
  795. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  796. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +1 -0
  797. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  798. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +2 -0
  799. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  800. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +2 -2
  801. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  802. package/lib/esm/tile/map/ImageryTileTree.d.ts +28 -3
  803. package/lib/esm/tile/map/ImageryTileTree.d.ts.map +1 -1
  804. package/lib/esm/tile/map/ImageryTileTree.js +62 -8
  805. package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
  806. package/lib/esm/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
  807. package/lib/esm/tile/map/MapLayerImageryFormats.js +3 -2
  808. package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
  809. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts +12 -2
  810. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  811. package/lib/esm/tile/map/MapLayerImageryProvider.js +16 -4
  812. package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
  813. package/lib/esm/tile/map/MapLayerSources.d.ts +3 -1
  814. package/lib/esm/tile/map/MapLayerSources.d.ts.map +1 -1
  815. package/lib/esm/tile/map/MapLayerSources.js +2 -0
  816. package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
  817. package/lib/esm/tile/map/MapTile.d.ts +13 -0
  818. package/lib/esm/tile/map/MapTile.d.ts.map +1 -1
  819. package/lib/esm/tile/map/MapTile.js +57 -14
  820. package/lib/esm/tile/map/MapTile.js.map +1 -1
  821. package/lib/esm/tile/map/MapTileTree.d.ts +44 -4
  822. package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
  823. package/lib/esm/tile/map/MapTileTree.js +131 -11
  824. package/lib/esm/tile/map/MapTileTree.js.map +1 -1
  825. package/lib/esm/tile/map/MapTiledGraphicsProvider.d.ts +17 -0
  826. package/lib/esm/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
  827. package/lib/esm/tile/map/MapTiledGraphicsProvider.js +26 -0
  828. package/lib/esm/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  829. package/lib/esm/tile/map/WmtsCapabilities.d.ts +23 -68
  830. package/lib/esm/tile/map/WmtsCapabilities.d.ts.map +1 -1
  831. package/lib/esm/tile/map/WmtsCapabilities.js +268 -259
  832. package/lib/esm/tile/map/WmtsCapabilities.js.map +1 -1
  833. package/lib/esm/tools/ClipViewTool.js +2 -2
  834. package/lib/esm/tools/ClipViewTool.js.map +1 -1
  835. package/lib/esm/tools/MeasureTool.js +2 -2
  836. package/lib/esm/tools/MeasureTool.js.map +1 -1
  837. package/lib/public/locales/en/iModelJs.json +2 -2
  838. package/package.json +20 -21
@@ -133,10 +133,7 @@ function addMaterial(builder, instanced) {
133
133
  vert.addGlobal("mat_rgb", 5 /* Vec4 */); // a = 0 if not overridden, else 1
134
134
  vert.addGlobal("mat_alpha", 3 /* Vec2 */); // a = 0 if not overridden, else 1
135
135
  vert.addGlobal("use_material", 0 /* Boolean */);
136
- if (System.instance.capabilities.isWebGL2)
137
- vert.addInitializer("use_material = (0u == (surfaceFlags & kSurfaceBit_IgnoreMaterial));");
138
- else
139
- vert.addInitializer("use_material = !nthBitSet(surfaceFlags, kSurfaceBit_IgnoreMaterial);");
136
+ vert.addInitializer("use_material = (0u == (surfaceFlags & kSurfaceBit_IgnoreMaterial));");
140
137
  // Uniform material
141
138
  vert.addFunction(decodeMaterialColor);
142
139
  vert.addUniform("u_materialColor", 5 /* Vec4 */, (prog) => {
@@ -187,13 +184,13 @@ const adjustEyeSpace = `
187
184
  const computePositionPostlude = `
188
185
  return u_proj * pos;
189
186
  `;
190
- function createCommon(isInstanced, animated, shadowable, isThematic, isHiliter, positionType) {
187
+ function createCommon(isInstanced, animated, shadowable, isHiliter, positionType) {
191
188
  const instanced = 1 /* Yes */ === isInstanced;
192
189
  const attrMap = AttributeMap.findAttributeMap(0 /* Surface */, instanced);
193
190
  const builder = new ProgramBuilder(attrMap, { positionType, instanced });
194
191
  const vert = builder.vert;
195
192
  if (animated)
196
- addAnimation(vert, true, isThematic);
193
+ addAnimation(vert, true);
197
194
  if (shadowable)
198
195
  addSolarShadowMap(builder);
199
196
  addProjectionMatrix(vert);
@@ -214,7 +211,7 @@ function createCommon(isInstanced, animated, shadowable, isThematic, isHiliter,
214
211
  }
215
212
  /** @internal */
216
213
  export function createSurfaceHiliter(instanced, classified, posType) {
217
- const builder = createCommon(instanced, 0 /* No */, 0 /* No */, 0 /* No */, true, posType);
214
+ const builder = createCommon(instanced, 0 /* No */, 0 /* No */, true, posType);
218
215
  addSurfaceFlags(builder, true, false);
219
216
  addTexture(builder, 0 /* No */, 0 /* No */, false, true);
220
217
  if (classified) {
@@ -228,9 +225,6 @@ export function createSurfaceHiliter(instanced, classified, posType) {
228
225
  return builder;
229
226
  }
230
227
  const isSurfaceBitSet = `
231
- bool isSurfaceBitSet(float flag) { return nthBitSet(surfaceFlags, flag); }
232
- `;
233
- const isSurfaceBitSet2 = `
234
228
  bool isSurfaceBitSet(uint flag) { return 0u != (surfaceFlags & flag); }
235
229
  `;
236
230
  /** @internal */
@@ -252,29 +246,17 @@ function addSurfaceFlagsLookup(builder) {
252
246
  builder.addBitFlagConstant("kSurfaceBit_OverrideRgb", 7 /* OverrideRgb */);
253
247
  builder.addBitFlagConstant("kSurfaceBit_HasNormalMap", 8 /* HasNormalMap */);
254
248
  // Only need masks for flags modified in vertex shader
255
- const suffix = System.instance.capabilities.isWebGL2 ? "u" : ".0";
256
- const type = System.instance.capabilities.isWebGL2 ? 10 /* Uint */ : 2 /* Float */;
249
+ const suffix = "u";
250
+ const type = 10 /* Uint */;
257
251
  builder.addConstant("kSurfaceMask_HasTexture", type, 1 /* HasTexture */.toString() + suffix);
258
252
  builder.addConstant("kSurfaceMask_IgnoreMaterial", type, 8 /* IgnoreMaterial */.toString() + suffix);
259
253
  builder.addConstant("kSurfaceMask_OverrideRgb", type, 128 /* OverrideRgb */.toString() + suffix);
260
254
  builder.addConstant("kSurfaceMask_HasNormalMap", type, 256 /* HasNormalMap */.toString() + suffix);
261
255
  addExtractNthBit(builder);
262
- if (System.instance.capabilities.isWebGL2) {
263
- builder.addFunction(isSurfaceBitSet2);
264
- builder.addGlobal("surfaceFlags", 10 /* Uint */);
265
- }
266
- else {
267
- builder.addFunction(isSurfaceBitSet);
268
- builder.addGlobal("surfaceFlags", 2 /* Float */);
269
- }
256
+ builder.addFunction(isSurfaceBitSet);
257
+ builder.addGlobal("surfaceFlags", 10 /* Uint */);
270
258
  }
271
259
  const initSurfaceFlags = `
272
- surfaceFlags = u_surfaceFlags[kSurfaceBitIndex_HasTexture] ? kSurfaceMask_HasTexture : 0.0;
273
- surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_IgnoreMaterial] ? kSurfaceMask_IgnoreMaterial : 0.0;
274
- surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_OverrideRgb] ? kSurfaceMask_OverrideRgb : 0.0;
275
- surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_HasNormalMap] ? kSurfaceMask_HasNormalMap : 0.0;
276
- `;
277
- const initSurfaceFlags2 = `
278
260
  surfaceFlags = u_surfaceFlags[kSurfaceBitIndex_HasTexture] ? kSurfaceMask_HasTexture : 0u;
279
261
  surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_IgnoreMaterial] ? kSurfaceMask_IgnoreMaterial : 0u;
280
262
  surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_OverrideRgb] ? kSurfaceMask_OverrideRgb : 0u;
@@ -295,8 +277,7 @@ const computeColorSurfaceFlags = `
295
277
  if (feature_rgb.r >= 0.0)
296
278
  surfaceFlags += kSurfaceMask_OverrideRgb;
297
279
  `;
298
- const returnSurfaceFlags = " return surfaceFlags;\n";
299
- const returnSurfaceFlags2 = " return float(surfaceFlags);\n";
280
+ const returnSurfaceFlags = " return float(surfaceFlags);\n";
300
281
  const computeSurfaceFlags = computeBaseSurfaceFlags;
301
282
  const computeSurfaceFlagsWithColor = computeBaseSurfaceFlags + computeColorSurfaceFlags;
302
283
  /** @internal */
@@ -411,15 +392,12 @@ const surfaceFlagArray = new Int32Array(10 /* Count */);
411
392
  export function addSurfaceFlags(builder, withFeatureOverrides, withFeatureColor) {
412
393
  addSurfaceFlagsLookup(builder.vert);
413
394
  addSurfaceFlagsLookup(builder.frag);
414
- let compute = (System.instance.capabilities.isWebGL2 ? initSurfaceFlags2 : initSurfaceFlags);
395
+ let compute = initSurfaceFlags;
415
396
  if (withFeatureOverrides)
416
397
  compute += `${withFeatureColor ? computeSurfaceFlagsWithColor : computeSurfaceFlags}\n`;
417
- compute += (System.instance.capabilities.isWebGL2 ? returnSurfaceFlags2 : returnSurfaceFlags);
398
+ compute += returnSurfaceFlags;
418
399
  builder.addFunctionComputedVarying("v_surfaceFlags", 2 /* Float */, "computeSurfaceFlags", compute);
419
- if (System.instance.capabilities.isWebGL2)
420
- builder.frag.addInitializer("surfaceFlags = uint(floor(v_surfaceFlags + 0.5));");
421
- else
422
- builder.frag.addInitializer("surfaceFlags = floor(v_surfaceFlags + 0.5);");
400
+ builder.frag.addInitializer("surfaceFlags = uint(floor(v_surfaceFlags + 0.5));");
423
401
  builder.addUniformArray("u_surfaceFlags", 0 /* Boolean */, 10 /* Count */, (prog) => {
424
402
  prog.addGraphicUniform("u_surfaceFlags", (uniform, params) => {
425
403
  assert(undefined !== params.geometry.asSurface);
@@ -429,31 +407,29 @@ export function addSurfaceFlags(builder, withFeatureOverrides, withFeatureColor)
429
407
  });
430
408
  });
431
409
  }
432
- function addNormal(builder, instanced, animated) {
433
- addNormalMatrix(builder.vert, instanced);
410
+ function addNormal(builder, animated) {
411
+ addNormalMatrix(builder.vert);
434
412
  const quantized = "quantized" === builder.vert.positionType;
435
413
  builder.vert.addFunction(octDecodeNormal);
436
414
  builder.vert.addFunction("vec3 computeSurfaceNormal()", getComputeNormal(quantized));
437
415
  builder.addFunctionComputedVarying("v_n", 4 /* Vec3 */, "computeLightingNormal", animated ? getComputeAnimatedNormal(quantized) : "return computeSurfaceNormal();");
438
416
  builder.frag.addGlobal("g_normal", 4 /* Vec3 */);
439
417
  let finalizeNormal = finalizeNormalPrelude;
440
- if (System.instance.capabilities.isWebGL2) {
441
- finalizeNormal += finalizeNormalNormalMap;
442
- builder.frag.addUniform("u_normalMapScale", 2 /* Float */, (prog) => {
443
- prog.addGraphicUniform("u_normalMapScale", (uniform, params) => {
444
- var _a;
445
- let normalMapScale = 1.0;
446
- if (undefined !== params.geometry.materialInfo && !params.geometry.materialInfo.isAtlas &&
447
- undefined !== params.geometry.materialInfo.textureMapping &&
448
- undefined !== params.geometry.materialInfo.textureMapping.normalMapParams) {
449
- normalMapScale = (_a = params.geometry.materialInfo.textureMapping.normalMapParams.scale) !== null && _a !== void 0 ? _a : 1.0;
450
- if (!params.geometry.materialInfo.textureMapping.normalMapParams.greenDown)
451
- normalMapScale = -normalMapScale;
452
- }
453
- uniform.setUniform1f(normalMapScale);
454
- });
418
+ finalizeNormal += finalizeNormalNormalMap;
419
+ builder.frag.addUniform("u_normalMapScale", 2 /* Float */, (prog) => {
420
+ prog.addGraphicUniform("u_normalMapScale", (uniform, params) => {
421
+ var _a;
422
+ let normalMapScale = 1.0;
423
+ if (undefined !== params.geometry.materialInfo && !params.geometry.materialInfo.isAtlas &&
424
+ undefined !== params.geometry.materialInfo.textureMapping &&
425
+ undefined !== params.geometry.materialInfo.textureMapping.normalMapParams) {
426
+ normalMapScale = (_a = params.geometry.materialInfo.textureMapping.normalMapParams.scale) !== null && _a !== void 0 ? _a : 1.0;
427
+ if (params.geometry.materialInfo.textureMapping.normalMapParams.greenUp)
428
+ normalMapScale = -normalMapScale;
429
+ }
430
+ uniform.setUniform1f(normalMapScale);
455
431
  });
456
- }
432
+ });
457
433
  finalizeNormal += finalizeNormalPostlude;
458
434
  builder.frag.set(21 /* FinalizeNormal */, finalizeNormal);
459
435
  // Set to true to colorize surfaces based on normals (in world space).
@@ -470,8 +446,8 @@ export function addTexture(builder, animated, isThematic, isPointCloud, isHilite
470
446
  builder.addInlineComputedVarying("v_thematicIndex", 2 /* Float */, getComputeThematicIndex(builder.vert.usesInstancedGeometry, isPointCloud, true));
471
447
  }
472
448
  // Point clouds do not need to compute texture coordinates since the only texture they use is the thematic gradient.
473
- // Surfaces now need texture coordinates even for thematic in case they have a normal map (except for webgl1 which does not have normal maps).
474
- if (!isPointCloud && (System.instance.capabilities.isWebGL2 || !isThematic)) {
449
+ // Surfaces now need texture coordinates even for thematic in case they have a normal map.
450
+ if (!isPointCloud) {
475
451
  builder.vert.addFunction(unquantize2d);
476
452
  addChooseVec2WithBitFlagsFunction(builder.vert);
477
453
  const quantized = "quantized" === builder.vert.positionType;
@@ -505,7 +481,7 @@ export function addTexture(builder, animated, isThematic, isPointCloud, isHilite
505
481
  }
506
482
  });
507
483
  });
508
- if (!isHilite && !isPointCloud && System.instance.capabilities.isWebGL2) {
484
+ if (!isHilite && !isPointCloud) {
509
485
  builder.frag.addUniform("s_normalMap", 8 /* Sampler2D */, (prog) => {
510
486
  prog.addGraphicUniform("s_normalMap", (uniform, params) => {
511
487
  const surfGeom = params.geometry.asSurface;
@@ -558,7 +534,7 @@ function addTransparencyDiscard(frag) {
558
534
  }
559
535
  /** @internal */
560
536
  export function createSurfaceBuilder(flags) {
561
- const builder = createCommon(flags.isInstanced, flags.isAnimated, flags.isShadowable, flags.isThematic, false, flags.positionType);
537
+ const builder = createCommon(flags.isInstanced, flags.isAnimated, flags.isShadowable, false, flags.positionType);
562
538
  addShaderFlags(builder);
563
539
  const feat = flags.featureMode;
564
540
  let opts = 2 /* Overrides */ === feat ? 28 /* Surface */ : 0 /* None */;
@@ -571,7 +547,7 @@ export function createSurfaceBuilder(flags) {
571
547
  addFeatureSymbology(builder, feat, opts);
572
548
  addSurfaceFlags(builder, 2 /* Overrides */ === feat, true);
573
549
  addSurfaceDiscard(builder, flags);
574
- addNormal(builder, flags.isInstanced, flags.isAnimated);
550
+ addNormal(builder, flags.isAnimated);
575
551
  // In HiddenLine mode, we must compute the base color (plus feature overrides etc) in order to get the alpha, then replace with background color (preserving alpha for the transparency threshold test).
576
552
  builder.frag.set(3 /* FinalizeBaseColor */, applyBackgroundColor);
577
553
  builder.frag.addUniform("u_bgColor", 4 /* Vec3 */, (prog) => {
@@ -1 +1 @@
1
- {"version":3,"file":"Surface.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Surface.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 { AttributeMap } from \"../AttributeMap\";\r\nimport { Material } from \"../Material\";\r\nimport { Pass, SurfaceBitIndex, SurfaceFlags, TextureUnit } from \"../RenderFlags\";\r\nimport {\r\n FragmentShaderBuilder, FragmentShaderComponent, ProgramBuilder, ShaderBuilder, VariableType, VertexShaderComponent,\r\n} from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport {\r\n FeatureMode, IsAnimated, IsClassified, IsInstanced, IsShadowable, IsThematic, PositionType, TechniqueFlags,\r\n} from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { Texture } from \"../Texture\";\r\nimport { addAnimation } from \"./Animation\";\r\nimport { unpackFloat } from \"./Clipping\";\r\nimport { addColor } from \"./Color\";\r\nimport { addChooseVec2WithBitFlagsFunction, addChooseVec3WithBitFlagFunction, addExtractNthBit, addFrustum, addShaderFlags } from \"./Common\";\r\nimport { addUnpackAndNormalize2Bytes, decodeDepthRgb, unquantize2d } from \"./Decode\";\r\nimport {\r\n addFeatureSymbology, addMaxAlpha, addRenderOrder, addRenderOrderConstants, addSurfaceDiscard, addSurfaceHiliter, FeatureSymbologyOptions,\r\n} from \"./FeatureSymbology\";\r\nimport {\r\n addAltPickBufferOutputs, addFragColorWithPreMultipliedAlpha, addPickBufferOutputs, addWhiteOnWhiteReversal, assignFragColor,\r\n} from \"./Fragment\";\r\nimport { addLighting } from \"./Lighting\";\r\nimport { addSurfaceMonochrome } from \"./Monochrome\";\r\nimport { addColorPlanarClassifier, addFeaturePlanarClassifier, addHilitePlanarClassifier, addOverrideClassifierColor } from \"./PlanarClassification\";\r\nimport { addRenderPass } from \"./RenderPass\";\r\nimport { addSolarShadowMap } from \"./SolarShadowMapping\";\r\nimport { addThematicDisplay, getComputeThematicIndex } from \"./Thematic\";\r\nimport { addTranslucency } from \"./Translucency\";\r\nimport { addModelViewMatrix, addNormalMatrix, addProjectionMatrix } from \"./Vertex\";\r\nimport { wantMaterials } from \"../SurfaceGeometry\";\r\nimport { addWiremesh } from \"./Wiremesh\";\r\n\r\n// NB: Textures do not contain pre-multiplied alpha.\r\nconst sampleSurfaceTexture = `\r\nvec4 sampleSurfaceTexture() {\r\n return TEXTURE(s_texture, v_texCoord);\r\n}\r\n`;\r\n\r\nconst applyMaterialColor = `\r\n float useMatColor = float(use_material);\r\n vec3 rgb = mix(baseColor.rgb, mat_rgb.rgb, useMatColor * mat_rgb.a);\r\n float a = mix(baseColor.a, mat_alpha.x, useMatColor * mat_alpha.y);\r\n return vec4(rgb, a);\r\n`;\r\n\r\n// if this is a raster glyph, the sampled color has already been modified - do not modify further.\r\n// Mix diffuse color with texel based on texture weight.\r\n// Replace with diffuse RGB if RGB overridden.\r\n// Replace with diffuse alpha if alpha overridden.\r\n// Multiply texel alpha with diffuse alpha if specified.\r\nconst applyTextureWeight = `\r\n bool applyTexture = !u_applyGlyphTex && isSurfaceBitSet(kSurfaceBit_HasTexture);\r\n float textureWeight = applyTexture ? mat_texture_weight : 0.0;\r\n vec3 rgb = mix(baseColor.rgb, g_surfaceTexel.rgb, textureWeight);\r\n rgb = chooseVec3WithBitFlag(rgb, baseColor.rgb, surfaceFlags, kSurfaceBit_OverrideRgb);\r\n\r\n float a = applyTexture ? baseColor.a * g_surfaceTexel.a : baseColor.a;\r\n\r\n return vec4(rgb, a);\r\n`;\r\n\r\nconst decodeFragMaterialParams = `\r\nvoid decodeMaterialParams(vec4 params) {\r\n mat_weights = unpackAndNormalize2Bytes(params.x);\r\n\r\n vec2 texAndSpecR = unpackAndNormalize2Bytes(params.y);\r\n mat_texture_weight = texAndSpecR.x;\r\n\r\n vec2 specGB = unpackAndNormalize2Bytes(params.z);\r\n mat_specular = vec4(texAndSpecR.y, specGB, params.w);\r\n}\r\n`;\r\n\r\nconst decodeMaterialColor = `\r\nvoid decodeMaterialColor(vec4 rgba) {\r\n mat_rgb = vec4(rgba.rgb, float(rgba.r >= 0.0));\r\n mat_alpha = vec2(rgba.a, float(rgba.a >= 0.0));\r\n}\r\n`;\r\n\r\n// defaults: (0x6699, 0xffff, 0xffff, 13.5)\r\nconst computeMaterialParams = `\r\n const vec4 defaults = vec4(26265.0, 65535.0, 65535.0, 13.5);\r\n return use_material ? g_materialParams : defaults;\r\n`;\r\n\r\n// The 8-bit material index is stored with the 24-bit feature index, in the high byte.\r\nconst readMaterialAtlas = `\r\nvoid readMaterialAtlas() {\r\n float materialAtlasStart = u_vertParams.z * u_vertParams.w + u_numColors;\r\n float materialIndex = g_featureAndMaterialIndex.w * 4.0 + materialAtlasStart;\r\n\r\n vec2 tc = computeLUTCoords(materialIndex, u_vertParams.xy, g_vert_center, 1.0);\r\n vec4 rgba = TEXTURE(u_vertLUT, tc);\r\n\r\n tc = computeLUTCoords(materialIndex + 1.0, u_vertParams.xy, g_vert_center, 1.0);\r\n vec4 weightsAndFlags = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n\r\n tc = computeLUTCoords(materialIndex + 2.0, u_vertParams.xy, g_vert_center, 1.0);\r\n vec3 specularRgb = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5).rgb;\r\n\r\n tc = computeLUTCoords(materialIndex + 3.0, u_vertParams.xy, g_vert_center, 1.0);\r\n vec4 packedSpecularExponent = TEXTURE(u_vertLUT, tc);\r\n\r\n float flags = weightsAndFlags.w;\r\n mat_rgb = vec4(rgba.rgb, float(flags == 1.0 || flags == 3.0));\r\n mat_alpha = vec2(rgba.a, float(flags == 2.0 || flags == 3.0));\r\n\r\n float specularExponent = unpackFloat(packedSpecularExponent);\r\n g_materialParams.x = weightsAndFlags.y + weightsAndFlags.z * 256.0;\r\n g_materialParams.y = 255.0 + specularRgb.r * 256.0;\r\n g_materialParams.z = specularRgb.g + specularRgb.b * 256.0;\r\n g_materialParams.w = specularExponent;\r\n}\r\n`;\r\n\r\nconst computeMaterial = `\r\n if (u_surfaceFlags[kSurfaceBitIndex_HasMaterialAtlas]) {\r\n readMaterialAtlas();\r\n } else {\r\n decodeMaterialColor(u_materialColor);\r\n g_materialParams = u_materialParams;\r\n }\r\n`;\r\n\r\nconst computeMaterialInstanced = `\r\n decodeMaterialColor(u_materialColor);\r\n g_materialParams = u_materialParams;\r\n`;\r\n\r\nfunction addMaterial(builder: ProgramBuilder, instanced: boolean): void {\r\n const frag = builder.frag;\r\n assert(undefined !== frag.find(\"v_surfaceFlags\"));\r\n\r\n frag.addGlobal(\"mat_texture_weight\", VariableType.Float);\r\n frag.addGlobal(\"mat_weights\", VariableType.Vec2); // diffuse, specular\r\n frag.addGlobal(\"mat_specular\", VariableType.Vec4); // rgb, exponent\r\n\r\n addUnpackAndNormalize2Bytes(frag);\r\n frag.addFunction(decodeFragMaterialParams);\r\n frag.addInitializer(\"decodeMaterialParams(v_materialParams);\");\r\n\r\n addChooseVec3WithBitFlagFunction(frag);\r\n frag.set(FragmentShaderComponent.ApplyMaterialOverrides, applyTextureWeight);\r\n\r\n const vert = builder.vert;\r\n vert.addGlobal(\"mat_rgb\", VariableType.Vec4); // a = 0 if not overridden, else 1\r\n vert.addGlobal(\"mat_alpha\", VariableType.Vec2); // a = 0 if not overridden, else 1\r\n vert.addGlobal(\"use_material\", VariableType.Boolean);\r\n if (System.instance.capabilities.isWebGL2)\r\n vert.addInitializer(\"use_material = (0u == (surfaceFlags & kSurfaceBit_IgnoreMaterial));\");\r\n else\r\n vert.addInitializer(\"use_material = !nthBitSet(surfaceFlags, kSurfaceBit_IgnoreMaterial);\");\r\n\r\n // Uniform material\r\n vert.addFunction(decodeMaterialColor);\r\n vert.addUniform(\"u_materialColor\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_materialColor\", (uniform, params) => {\r\n const info = wantMaterials(params.target.currentViewFlags) ? params.geometry.materialInfo : undefined;\r\n const mat = undefined !== info && !info.isAtlas ? info : Material.default;\r\n uniform.setUniform4fv(mat.rgba);\r\n });\r\n });\r\n\r\n vert.addUniform(\"u_materialParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_materialParams\", (uniform, params) => {\r\n const info = wantMaterials(params.target.currentViewFlags) ? params.geometry.materialInfo : undefined;\r\n const mat = undefined !== info && !info.isAtlas ? info : Material.default;\r\n uniform.setUniform4fv(mat.fragUniforms);\r\n });\r\n });\r\n\r\n if (!instanced) {\r\n // Material atlas\r\n vert.addFunction(unpackFloat);\r\n vert.addFunction(readMaterialAtlas);\r\n vert.addUniform(\"u_numColors\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_numColors\", (uniform, params) => {\r\n const info = params.geometry.materialInfo;\r\n const numColors = undefined !== info && info.isAtlas ? info.vertexTableOffset : 0;\r\n uniform.setUniform1f(numColors);\r\n });\r\n });\r\n }\r\n vert.addGlobal(\"g_materialParams\", VariableType.Vec4);\r\n vert.set(VertexShaderComponent.ComputeMaterial, instanced ? computeMaterialInstanced : computeMaterial);\r\n vert.set(VertexShaderComponent.ApplyMaterialColor, applyMaterialColor);\r\n builder.addFunctionComputedVarying(\"v_materialParams\", VariableType.Vec4, \"computeMaterialParams\", computeMaterialParams);\r\n}\r\n\r\nconst computePositionPrelude = `\r\n vec4 pos = MAT_MV * rawPos;\r\n`;\r\n\r\n// We used to use gl.polygonOffset() for blanking regions, but that doesn't work with logarithmic depth buffer which overwrites the\r\n// computed Z. Instead we must manually offset in vertex shader. We do this even if log depth is not enabled/supported.\r\n// NOTE: If log depth is *not* supported, then the hilite surface vertex shaders previously would still include this logic, but the\r\n// fragment shaders would not use v_eyeSpace. Some Ubuntu 20.04 graphics drivers cleverly and correctly optimized out the varying and the uniform,\r\n// causing an exception when gl.getProgramLocation() failed. So, omit this bit in that case.\r\nconst adjustEyeSpace = `\r\n v_eyeSpace = pos.xyz;\r\n const float blankingRegionOffset = 2.0 / 65536.0;\r\n if (kRenderOrder_BlankingRegion == u_renderOrder)\r\n v_eyeSpace.z -= blankingRegionOffset * (u_frustum.y - u_frustum.x);\r\n`;\r\n\r\nconst computePositionPostlude = `\r\n return u_proj * pos;\r\n`;\r\n\r\nfunction createCommon(isInstanced: IsInstanced, animated: IsAnimated, shadowable: IsShadowable, isThematic: IsThematic, isHiliter: boolean, positionType: PositionType): ProgramBuilder {\r\n const instanced = IsInstanced.Yes === isInstanced;\r\n const attrMap = AttributeMap.findAttributeMap(TechniqueId.Surface, instanced);\r\n const builder = new ProgramBuilder(attrMap, { positionType, instanced });\r\n const vert = builder.vert;\r\n\r\n if (animated)\r\n addAnimation(vert, true, isThematic);\r\n\r\n if (shadowable)\r\n addSolarShadowMap(builder);\r\n\r\n addProjectionMatrix(vert);\r\n addModelViewMatrix(vert);\r\n\r\n let computePosition;\r\n if (isHiliter && !System.instance.supportsLogZBuffer) {\r\n computePosition = computePositionPrelude + computePositionPostlude;\r\n } else {\r\n addFrustum(builder);\r\n addRenderOrder(builder.vert);\r\n addRenderOrderConstants(builder.vert);\r\n builder.addVarying(\"v_eyeSpace\", VariableType.Vec3);\r\n computePosition = computePositionPrelude + adjustEyeSpace + computePositionPostlude;\r\n }\r\n\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createSurfaceHiliter(instanced: IsInstanced, classified: IsClassified, posType: PositionType): ProgramBuilder {\r\n const builder = createCommon(instanced, IsAnimated.No, IsShadowable.No, IsThematic.No, true, posType);\r\n\r\n addSurfaceFlags(builder, true, false);\r\n addTexture(builder, IsAnimated.No, IsThematic.No, false, true);\r\n if (classified) {\r\n addHilitePlanarClassifier(builder);\r\n builder.vert.addGlobal(\"feature_ignore_material\", VariableType.Boolean, \"false\");\r\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n } else {\r\n addSurfaceHiliter(builder);\r\n }\r\n\r\n return builder;\r\n}\r\n\r\nconst isSurfaceBitSet = `\r\nbool isSurfaceBitSet(float flag) { return nthBitSet(surfaceFlags, flag); }\r\n`;\r\nconst isSurfaceBitSet2 = `\r\nbool isSurfaceBitSet(uint flag) { return 0u != (surfaceFlags & flag); }\r\n`;\r\n\r\n/** @internal */\r\nfunction addSurfaceFlagsLookup(builder: ShaderBuilder) {\r\n builder.addConstant(\"kSurfaceBitIndex_HasTexture\", VariableType.Int, SurfaceBitIndex.HasTexture.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_ApplyLighting\", VariableType.Int, SurfaceBitIndex.ApplyLighting.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_HasNormals\", VariableType.Int, SurfaceBitIndex.HasNormals.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_IgnoreMaterial\", VariableType.Int, SurfaceBitIndex.IgnoreMaterial.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_TransparencyThreshold\", VariableType.Int, SurfaceBitIndex.TransparencyThreshold.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_BackgroundFill\", VariableType.Int, SurfaceBitIndex.BackgroundFill.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_HasColorAndNormal\", VariableType.Int, SurfaceBitIndex.HasColorAndNormal.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_OverrideRgb\", VariableType.Int, SurfaceBitIndex.OverrideRgb.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_HasNormalMap\", VariableType.Int, SurfaceBitIndex.HasNormalMap.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_HasMaterialAtlas\", VariableType.Int, SurfaceBitIndex.HasMaterialAtlas.toString());\r\n\r\n // Surface flags which get modified in vertex shader are still passed to fragment shader as a single float & are thus\r\n // used differently there & so require different constants. Unused constants are commented out.\r\n builder.addBitFlagConstant(\"kSurfaceBit_HasTexture\", SurfaceBitIndex.HasTexture);\r\n builder.addBitFlagConstant(\"kSurfaceBit_IgnoreMaterial\", SurfaceBitIndex.IgnoreMaterial);\r\n builder.addBitFlagConstant(\"kSurfaceBit_OverrideRgb\", SurfaceBitIndex.OverrideRgb);\r\n builder.addBitFlagConstant(\"kSurfaceBit_HasNormalMap\", SurfaceBitIndex.HasNormalMap);\r\n\r\n // Only need masks for flags modified in vertex shader\r\n const suffix = System.instance.capabilities.isWebGL2 ? \"u\" : \".0\";\r\n const type = System.instance.capabilities.isWebGL2 ? VariableType.Uint : VariableType.Float;\r\n builder.addConstant(\"kSurfaceMask_HasTexture\", type, SurfaceFlags.HasTexture.toString() + suffix);\r\n builder.addConstant(\"kSurfaceMask_IgnoreMaterial\", type, SurfaceFlags.IgnoreMaterial.toString() + suffix);\r\n builder.addConstant(\"kSurfaceMask_OverrideRgb\", type, SurfaceFlags.OverrideRgb.toString() + suffix);\r\n builder.addConstant(\"kSurfaceMask_HasNormalMap\", type, SurfaceFlags.HasNormalMap.toString() + suffix);\r\n\r\n addExtractNthBit(builder);\r\n if (System.instance.capabilities.isWebGL2) {\r\n builder.addFunction(isSurfaceBitSet2);\r\n builder.addGlobal(\"surfaceFlags\", VariableType.Uint);\r\n } else {\r\n builder.addFunction(isSurfaceBitSet);\r\n builder.addGlobal(\"surfaceFlags\", VariableType.Float);\r\n }\r\n}\r\n\r\nconst initSurfaceFlags = `\r\n surfaceFlags = u_surfaceFlags[kSurfaceBitIndex_HasTexture] ? kSurfaceMask_HasTexture : 0.0;\r\n surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_IgnoreMaterial] ? kSurfaceMask_IgnoreMaterial : 0.0;\r\n surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_OverrideRgb] ? kSurfaceMask_OverrideRgb : 0.0;\r\n surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_HasNormalMap] ? kSurfaceMask_HasNormalMap : 0.0;\r\n`;\r\nconst initSurfaceFlags2 = `\r\n surfaceFlags = u_surfaceFlags[kSurfaceBitIndex_HasTexture] ? kSurfaceMask_HasTexture : 0u;\r\n surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_IgnoreMaterial] ? kSurfaceMask_IgnoreMaterial : 0u;\r\n surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_OverrideRgb] ? kSurfaceMask_OverrideRgb : 0u;\r\n surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_HasNormalMap] ? kSurfaceMask_HasNormalMap : 0u;\r\n`;\r\n\r\nconst computeBaseSurfaceFlags = `\r\n if (feature_ignore_material) {\r\n if (u_surfaceFlags[kSurfaceBitIndex_HasTexture])\r\n surfaceFlags -= kSurfaceMask_HasTexture;\r\n if (u_surfaceFlags[kSurfaceBitIndex_HasNormalMap])\r\n surfaceFlags -= kSurfaceMask_HasNormalMap;\r\n\r\n surfaceFlags += kSurfaceMask_IgnoreMaterial;\r\n }\r\n`;\r\n\r\n// Textured surfaces (including raster glyphs) always *multiply* the sampled alpha by the alpha override.\r\nconst computeColorSurfaceFlags = `\r\n if (feature_rgb.r >= 0.0)\r\n surfaceFlags += kSurfaceMask_OverrideRgb;\r\n`;\r\n\r\nconst returnSurfaceFlags = \" return surfaceFlags;\\n\";\r\nconst returnSurfaceFlags2 = \" return float(surfaceFlags);\\n\";\r\n\r\nconst computeSurfaceFlags = computeBaseSurfaceFlags;\r\nconst computeSurfaceFlagsWithColor = computeBaseSurfaceFlags + computeColorSurfaceFlags;\r\n\r\n/** @internal */\r\nexport const octDecodeNormal = `\r\nvec3 octDecodeNormal(vec2 e) {\r\n e = e / 255.0 * 2.0 - 1.0;\r\n vec3 n = vec3(e.x, e.y, 1.0 - abs(e.x) - abs(e.y));\r\n if (n.z < 0.0) {\r\n vec2 signNotZero = vec2(n.x >= 0.0 ? 1.0 : -1.0, n.y >= 0.0 ? 1.0 : -1.0);\r\n n.xy = (1.0 - abs(n.yx)) * signNotZero;\r\n }\r\n\r\n return normalize(n);\r\n}\r\n`;\r\n\r\nfunction getComputeNormal(quantized: boolean): string {\r\n const a = quantized ? \"g_vertLutData3.xy\" : \"g_vertLutData4.zw\";\r\n const b = quantized ? \"g_vertLutData1.zw\" : \"g_vertLutData5.xy\";\r\n return `\r\n if (!u_surfaceFlags[kSurfaceBitIndex_HasNormals])\r\n return vec3(0.0);\r\n\r\n vec2 normal = (u_surfaceFlags[kSurfaceBitIndex_HasColorAndNormal]) ? ${a} : ${b};\r\n return normalize(MAT_NORM * octDecodeNormal(normal));\r\n`;\r\n}\r\n\r\nconst finalizeNormalPrelude = `\r\n vec3 normal = normalize(v_n) * (2.0 * float(gl_FrontFacing) - 1.0);\r\n`;\r\n\r\nconst finalizeNormalNormalMap = `\r\n if (isSurfaceBitSet(kSurfaceBit_HasNormalMap)) {\r\n // Modify the normal with the normal map texture.\r\n // First calculate the tangent.\r\n vec3 dp1 = dFdx(v_eyeSpace);\r\n vec3 dp2 = dFdy(v_eyeSpace);\r\n vec2 duv1 = dFdx(v_texCoord);\r\n vec2 duv2 = dFdy(v_texCoord);\r\n vec3 tangent = normalize(duv2.y * dp1 - duv1.y * dp2);\r\n tangent = normalize (tangent - normal * dot (normal, tangent)); // re-orthogonalize with normal\r\n bool flip = (duv1.x * duv2.y - duv2.x * duv1.y) < 0.0;\r\n if (flip)\r\n tangent = -tangent;\r\n vec3 biTangent = cross (normal, tangent);\r\n if (flip)\r\n biTangent = -biTangent;\r\n vec3 normM = TEXTURE(s_normalMap, v_texCoord).xyz;\r\n if (length (normM) > 0.0001) { // check for empty normal texture\r\n normM = (normM - 0.5) * 2.0;\r\n normM = normalize (normM);\r\n normM.x *= abs(u_normalMapScale);\r\n normM.y *= u_normalMapScale;\r\n normM = normalize (normM);\r\n normal = normalize (normM.x * tangent + normM.y * biTangent + normM.z * normal);\r\n }\r\n }\r\n`;\r\n\r\nconst finalizeNormalPostlude = `\r\n return normal;\r\n`;\r\n\r\nfunction getComputeAnimatedNormal(quantized: boolean): string {\r\n return `\r\n if (u_animNormalParams.x >= 0.0)\r\n return normalize(MAT_NORM * computeAnimationNormal(u_animNormalParams.x, u_animNormalParams.y, u_animNormalParams.z));\r\n\r\n ${getComputeNormal(quantized)}`;\r\n}\r\n\r\nconst applyBackgroundColor = `\r\n return u_surfaceFlags[kSurfaceBitIndex_BackgroundFill] ? vec4(u_bgColor.rgb, baseColor.a) : baseColor;\r\n`;\r\n\r\nfunction getComputeTexCoord(quantized: boolean): string {\r\n const vertData = quantized ? \"g_vertLutData3\" : \"g_vertLutData4\";\r\n return `\r\n vec4 rgba = ${vertData};\r\n vec2 qcoords = vec2(decodeUInt16(rgba.xy), decodeUInt16(rgba.zw));\r\n return chooseVec2With2BitFlags(vec2(0.0), unquantize2d(qcoords, u_qTexCoordParams), surfaceFlags, kSurfaceBit_HasTexture, kSurfaceBit_HasNormalMap);\r\n`;\r\n}\r\n\r\nfunction getComputeAnimatedTexCoord(quantized: boolean): string {\r\n return `\r\n if (u_animScalarQParams.x >= 0.0)\r\n return computeAnimationParam(u_animScalarParams.x, u_animScalarParams.y, u_animScalarParams.z, u_animScalarQParams.x, u_animScalarQParams.y);\r\n\r\n ${getComputeTexCoord(quantized)}\r\n`;\r\n}\r\n\r\nconst getSurfaceColor = `\r\nvec4 getSurfaceColor() { return v_color; }\r\n`;\r\n\r\n// If we have texture weight < 1.0 we must compute the element/material color first then mix with texture color\r\n// in ApplyMaterialOverrides(). Do the sample once, here, and store in a global variable for possible later use.\r\n// If a glyph texture, must mix getSurfaceColor() with texture color so texture color alpha is applied 100% and\r\n// surface color rgb is scaled by texture color rgb (latter is full white originally but stretched via mipmapping).\r\nconst computeBaseColor = `\r\n g_surfaceTexel = sampleSurfaceTexture();\r\n vec4 surfaceColor = getSurfaceColor();\r\n\r\n if (!u_applyGlyphTex)\r\n return surfaceColor;\r\n\r\n // Compute color for raster glyph.\r\n const vec3 white = vec3(1.0);\r\n const vec3 epsilon = vec3(0.0001);\r\n const vec3 almostWhite = white - epsilon;\r\n\r\n // set to black if almost white and reverse white-on-white is on\r\n bvec3 isAlmostWhite = greaterThan(surfaceColor.rgb, almostWhite);\r\n surfaceColor.rgb = (u_reverseWhiteOnWhite && isAlmostWhite.r && isAlmostWhite.g && isAlmostWhite.b ? vec3(0.0, 0.0, 0.0) : surfaceColor.rgb);\r\n return vec4(surfaceColor.rgb * g_surfaceTexel.rgb, g_surfaceTexel.a);\r\n`;\r\n\r\nconst surfaceFlagArray = new Int32Array(SurfaceBitIndex.Count);\r\n\r\n/** @internal */\r\nexport function addSurfaceFlags(builder: ProgramBuilder, withFeatureOverrides: boolean, withFeatureColor: boolean) {\r\n addSurfaceFlagsLookup(builder.vert);\r\n addSurfaceFlagsLookup(builder.frag);\r\n\r\n let compute = (System.instance.capabilities.isWebGL2 ? initSurfaceFlags2 : initSurfaceFlags);\r\n if (withFeatureOverrides)\r\n compute += `${withFeatureColor ? computeSurfaceFlagsWithColor : computeSurfaceFlags}\\n`;\r\n compute += (System.instance.capabilities.isWebGL2 ? returnSurfaceFlags2 : returnSurfaceFlags);\r\n builder.addFunctionComputedVarying(\"v_surfaceFlags\", VariableType.Float, \"computeSurfaceFlags\", compute);\r\n\r\n if (System.instance.capabilities.isWebGL2)\r\n builder.frag.addInitializer(\"surfaceFlags = uint(floor(v_surfaceFlags + 0.5));\");\r\n else\r\n builder.frag.addInitializer(\"surfaceFlags = floor(v_surfaceFlags + 0.5);\");\r\n\r\n builder.addUniformArray(\"u_surfaceFlags\", VariableType.Boolean, SurfaceBitIndex.Count, (prog) => {\r\n prog.addGraphicUniform(\"u_surfaceFlags\", (uniform, params) => {\r\n assert(undefined !== params.geometry.asSurface);\r\n const mesh = params.geometry.asSurface;\r\n mesh.computeSurfaceFlags(params.programParams, surfaceFlagArray);\r\n uniform.setUniform1iv(surfaceFlagArray);\r\n });\r\n });\r\n}\r\n\r\nfunction addNormal(builder: ProgramBuilder, instanced: IsInstanced, animated: IsAnimated) {\r\n addNormalMatrix(builder.vert, instanced);\r\n\r\n const quantized = \"quantized\" === builder.vert.positionType;\r\n builder.vert.addFunction(octDecodeNormal);\r\n builder.vert.addFunction(\"vec3 computeSurfaceNormal()\", getComputeNormal(quantized));\r\n builder.addFunctionComputedVarying(\"v_n\", VariableType.Vec3, \"computeLightingNormal\", animated ? getComputeAnimatedNormal(quantized) : \"return computeSurfaceNormal();\");\r\n builder.frag.addGlobal(\"g_normal\", VariableType.Vec3);\r\n let finalizeNormal = finalizeNormalPrelude;\r\n if (System.instance.capabilities.isWebGL2) {\r\n finalizeNormal += finalizeNormalNormalMap;\r\n builder.frag.addUniform(\"u_normalMapScale\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_normalMapScale\", (uniform, params) => {\r\n let normalMapScale = 1.0;\r\n if (undefined !== params.geometry.materialInfo && !params.geometry.materialInfo.isAtlas &&\r\n undefined !== params.geometry.materialInfo.textureMapping &&\r\n undefined !== params.geometry.materialInfo.textureMapping.normalMapParams) {\r\n normalMapScale = params.geometry.materialInfo.textureMapping.normalMapParams.scale ?? 1.0;\r\n if (!params.geometry.materialInfo.textureMapping.normalMapParams.greenDown)\r\n normalMapScale = -normalMapScale;\r\n }\r\n uniform.setUniform1f(normalMapScale);\r\n });\r\n });\r\n }\r\n finalizeNormal += finalizeNormalPostlude;\r\n builder.frag.set(FragmentShaderComponent.FinalizeNormal, finalizeNormal);\r\n\r\n // Set to true to colorize surfaces based on normals (in world space).\r\n // You must also set checkMaxVarying to false in ProgramBuilder.buildProgram to avoid assertions, if using a non-optimized build.\r\n const debugNormals = false;\r\n if (debugNormals) {\r\n builder.frag.set(FragmentShaderComponent.ApplyDebugColor, \"return vec4(vec3(v_normal / 2.0 + 0.5), baseColor.a);\");\r\n builder.addInlineComputedVarying(\"v_normal\", VariableType.Vec3, \"v_normal = computeSurfaceNormal();\");\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function addTexture(builder: ProgramBuilder, animated: IsAnimated, isThematic: IsThematic, isPointCloud: boolean, isHilite: boolean) {\r\n if (isThematic) {\r\n builder.addInlineComputedVarying(\"v_thematicIndex\", VariableType.Float, getComputeThematicIndex(builder.vert.usesInstancedGeometry, isPointCloud, true));\r\n }\r\n\r\n // Point clouds do not need to compute texture coordinates since the only texture they use is the thematic gradient.\r\n // Surfaces now need texture coordinates even for thematic in case they have a normal map (except for webgl1 which does not have normal maps).\r\n if (!isPointCloud && (System.instance.capabilities.isWebGL2 || !isThematic)) {\r\n builder.vert.addFunction(unquantize2d);\r\n addChooseVec2WithBitFlagsFunction(builder.vert);\r\n const quantized = \"quantized\" === builder.vert.positionType;\r\n builder.addFunctionComputedVarying(\"v_texCoord\", VariableType.Vec2, \"computeTexCoord\", animated ? getComputeAnimatedTexCoord(quantized) : getComputeTexCoord(quantized));\r\n builder.vert.addUniform(\"u_qTexCoordParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_qTexCoordParams\", (uniform, params) => {\r\n const surfGeom = params.geometry.asSurface!;\r\n if (surfGeom.useTexture(params.programParams) || (surfGeom.useNormalMap(params.programParams) && !isPointCloud)) {\r\n const uvQParams = surfGeom.lut.uvQParams;\r\n if (undefined !== uvQParams) {\r\n uniform.setUniform4fv(uvQParams);\r\n }\r\n }\r\n });\r\n });\r\n builder.frag.addFunction(sampleSurfaceTexture);\r\n }\r\n\r\n builder.frag.addUniform(\"s_texture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_texture\", (uniform, params) => {\r\n const surfGeom = params.geometry.asSurface!;\r\n if (params.geometry.supportsThematicDisplay && params.target.wantThematicDisplay) { // NB: if thematic display is enabled, bind the thematic texture and ignore any applied surface textures\r\n params.target.uniforms.thematic.bindTexture(uniform, TextureUnit.SurfaceTexture);\r\n } else if (surfGeom.useTexture(params.programParams)) {\r\n const texture = (params.geometry.hasAnimation && params.target.analysisTexture) ? (params.target.analysisTexture as Texture) : surfGeom.texture;\r\n assert(undefined !== texture);\r\n texture.texture.bindSampler(uniform, TextureUnit.SurfaceTexture);\r\n } else {\r\n System.instance.ensureSamplerBound(uniform, TextureUnit.SurfaceTexture);\r\n }\r\n });\r\n });\r\n\r\n if (!isHilite && !isPointCloud && System.instance.capabilities.isWebGL2) {\r\n builder.frag.addUniform(\"s_normalMap\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_normalMap\", (uniform, params) => {\r\n const surfGeom = params.geometry.asSurface!;\r\n if (surfGeom.useNormalMap(params.programParams)) {\r\n const normalMap = surfGeom.normalMap;\r\n assert(undefined !== normalMap);\r\n normalMap.texture.bindSampler(uniform, TextureUnit.NormalMap);\r\n } else {\r\n System.instance.ensureSamplerBound(uniform, TextureUnit.NormalMap);\r\n }\r\n });\r\n });\r\n }\r\n}\r\n\r\nexport const discardClassifiedByAlpha = `\r\n if (u_no_classifier_discard)\r\n return false;\r\n\r\n bool hasAlpha = alpha <= s_maxAlpha;\r\n bool isOpaquePass = (kRenderPass_OpaqueLinear <= u_renderPass && kRenderPass_OpaqueGeneral >= u_renderPass);\r\n bool isTranslucentPass = kRenderPass_Translucent == u_renderPass;\r\n return (isOpaquePass && hasAlpha) || (isTranslucentPass && !hasAlpha);\r\n`;\r\n\r\nconst discardByTextureAlpha = `\r\n if (isSurfaceBitSet(kSurfaceBit_HasTexture)) {\r\n float cutoff = abs(u_alphaCutoff);\r\n if (kRenderPass_Translucent == u_renderPass)\r\n return u_alphaCutoff > 0.0 && alpha >= cutoff;\r\n else\r\n return alpha < cutoff;\r\n }\r\n\r\n return false;\r\n`;\r\n\r\nfunction addTransparencyDiscard(frag: FragmentShaderBuilder): void {\r\n addRenderPass(frag);\r\n frag.addUniform(\"u_alphaCutoff\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_alphaCutoff\", (uniform, params) => {\r\n // This cutoff is used to discard pixels based on the alpha value sampled from the surface texture.\r\n // During readPixels, or when transparency is disabled, only discard 100% opaque pixels.\r\n // Otherwise, if the geometry draws in both opaque and translucent passes, use DisplayParams.minTransparency to filter pixels into appropriate pass to produce appropriate blending.\r\n // Negative cutoff applies only during opaque pass; positive cutoff applies during opaque and translucent passes.\r\n const pass = params.geometry.getPass(params.target);\r\n const cutoff = (!Pass.rendersOpaqueAndTranslucent(pass) || params.target.isReadPixelsInProgress || !params.target.currentViewFlags.transparency) ? -1 / 255 : 241 / 255;\r\n uniform.setUniform1f(cutoff);\r\n });\r\n });\r\n\r\n frag.set(FragmentShaderComponent.DiscardByAlpha, discardByTextureAlpha);\r\n}\r\n\r\n/** @internal */\r\nexport function createSurfaceBuilder(flags: TechniqueFlags): ProgramBuilder {\r\n const builder = createCommon(flags.isInstanced, flags.isAnimated, flags.isShadowable, flags.isThematic, false, flags.positionType);\r\n addShaderFlags(builder);\r\n\r\n const feat = flags.featureMode;\r\n let opts = FeatureMode.Overrides === feat ? FeatureSymbologyOptions.Surface : FeatureSymbologyOptions.None;\r\n if (flags.isClassified) {\r\n opts &= ~FeatureSymbologyOptions.Alpha;\r\n addColorPlanarClassifier(builder, flags.isTranslucent, flags.isThematic);\r\n }\r\n\r\n if (flags.isThematic)\r\n addThematicDisplay(builder);\r\n\r\n addFeatureSymbology(builder, feat, opts);\r\n addSurfaceFlags(builder, FeatureMode.Overrides === feat, true);\r\n addSurfaceDiscard(builder, flags);\r\n addNormal(builder, flags.isInstanced, flags.isAnimated);\r\n\r\n // In HiddenLine mode, we must compute the base color (plus feature overrides etc) in order to get the alpha, then replace with background color (preserving alpha for the transparency threshold test).\r\n builder.frag.set(FragmentShaderComponent.FinalizeBaseColor, applyBackgroundColor);\r\n builder.frag.addUniform(\"u_bgColor\", VariableType.Vec3, (prog) => {\r\n prog.addProgramUniform(\"u_bgColor\", (uniform, params) => {\r\n params.target.uniforms.style.bindBackgroundRgb(uniform);\r\n });\r\n });\r\n\r\n addTexture(builder, flags.isAnimated, flags.isThematic, false, false);\r\n\r\n builder.frag.addUniform(\"u_applyGlyphTex\", VariableType.Boolean, (prog) => {\r\n prog.addGraphicUniform(\"u_applyGlyphTex\", (uniform, params) => {\r\n const surfGeom = params.geometry.asSurface!;\r\n uniform.setUniform1i(surfGeom.useTexture(params.programParams) && surfGeom.isGlyph ? 1 : 0);\r\n });\r\n });\r\n\r\n // Fragment and Vertex\r\n addColor(builder);\r\n\r\n // Fragment\r\n builder.frag.addFunction(getSurfaceColor);\r\n addLighting(builder);\r\n addWhiteOnWhiteReversal(builder.frag);\r\n\r\n if (flags.isTranslucent) {\r\n addTranslucency(builder);\r\n } else {\r\n if (FeatureMode.None === feat) {\r\n addFragColorWithPreMultipliedAlpha(builder.frag);\r\n } else {\r\n if (!flags.isClassified)\r\n addOverrideClassifierColor(builder, flags.isThematic);\r\n else\r\n addFeaturePlanarClassifier(builder);\r\n\r\n builder.frag.addFunction(decodeDepthRgb);\r\n if (flags.isEdgeTestNeeded || flags.isClassified)\r\n addPickBufferOutputs(builder.frag);\r\n else\r\n addAltPickBufferOutputs(builder.frag);\r\n }\r\n }\r\n\r\n builder.frag.addGlobal(\"g_surfaceTexel\", VariableType.Vec4);\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, (flags.isThematic === IsThematic.No) ? computeBaseColor : \"return getSurfaceColor();\");\r\n\r\n if (flags.isClassified)\r\n addClassificationTranslucencyDiscard(builder);\r\n else\r\n addTransparencyDiscard(builder.frag);\r\n\r\n addSurfaceMonochrome(builder.frag);\r\n addMaterial(builder, flags.isInstanced === IsInstanced.Yes);\r\n\r\n if (flags.isWiremesh)\r\n addWiremesh(builder);\r\n\r\n return builder;\r\n}\r\n\r\nexport function addClassificationTranslucencyDiscard(builder: ProgramBuilder) {\r\n // For unclassified geometry, we need to render in both the translucent and opaque passes if any feature transparency overrides are applied that would change the default render pass used.\r\n // Those shaders compute the transparency in the vertex shader and discard the vertex in one pass or the other.\r\n // For classified geometry, the transparency comes from the classifier geometry (when using Display.ElementColor), so even if there are no feature overrides, we may need to draw in both passes.\r\n // Since the transparency is not known until the fragment shader, we must perform the discard there instead.\r\n addMaxAlpha(builder.frag);\r\n addRenderPass(builder.frag);\r\n\r\n // Do not discard transparent classified geometry if we're trying to do a pick...\r\n builder.frag.addUniform(\"u_no_classifier_discard\", VariableType.Boolean, (prog) => {\r\n prog.addProgramUniform(\"u_no_classifier_discard\", (uniform, params) => {\r\n uniform.setUniform1i(params.target.isReadPixelsInProgress ? 1 : 0);\r\n });\r\n });\r\n\r\n builder.frag.set(FragmentShaderComponent.DiscardByAlpha, discardClassifiedByAlpha);\r\n}\r\n"]}
1
+ {"version":3,"file":"Surface.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Surface.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,IAAI,EAAiC,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAC2C,cAAc,GAC/D,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAMnC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,iCAAiC,EAAE,gCAAgC,EAAE,gBAAgB,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC7I,OAAO,EAAE,2BAA2B,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACrF,OAAO,EACL,mBAAmB,EAAE,WAAW,EAAE,cAAc,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,iBAAiB,GAChH,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,uBAAuB,EAAE,kCAAkC,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,eAAe,GAC5H,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACrJ,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,oDAAoD;AACpD,MAAM,oBAAoB,GAAG;;;;CAI5B,CAAC;AAEF,MAAM,kBAAkB,GAAG;;;;;CAK1B,CAAC;AAEF,kGAAkG;AAClG,wDAAwD;AACxD,8CAA8C;AAC9C,kDAAkD;AAClD,wDAAwD;AACxD,MAAM,kBAAkB,GAAG;;;;;;;;;CAS1B,CAAC;AAEF,MAAM,wBAAwB,GAAG;;;;;;;;;;CAUhC,CAAC;AAEF,MAAM,mBAAmB,GAAG;;;;;CAK3B,CAAC;AAEF,2CAA2C;AAC3C,MAAM,qBAAqB,GAAG;;;CAG7B,CAAC;AAEF,sFAAsF;AACtF,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BzB,CAAC;AAEF,MAAM,eAAe,GAAG;;;;;;;CAOvB,CAAC;AAEF,MAAM,wBAAwB,GAAG;;;CAGhC,CAAC;AAEF,SAAS,WAAW,CAAC,OAAuB,EAAE,SAAkB;IAC9D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAElD,IAAI,CAAC,SAAS,CAAC,oBAAoB,gBAAqB,CAAC;IACzD,IAAI,CAAC,SAAS,CAAC,aAAa,eAAoB,CAAC,CAAC,oBAAoB;IACtE,IAAI,CAAC,SAAS,CAAC,cAAc,eAAoB,CAAC,CAAC,gBAAgB;IAEnE,2BAA2B,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IAC3C,IAAI,CAAC,cAAc,CAAC,yCAAyC,CAAC,CAAC;IAE/D,gCAAgC,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC,GAAG,iCAAiD,kBAAkB,CAAC,CAAC;IAE7E,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,IAAI,CAAC,SAAS,CAAC,SAAS,eAAoB,CAAC,CAAC,kCAAkC;IAChF,IAAI,CAAC,SAAS,CAAC,WAAW,eAAoB,CAAC,CAAC,kCAAkC;IAClF,IAAI,CAAC,SAAS,CAAC,cAAc,kBAAuB,CAAC;IACrD,IAAI,CAAC,cAAc,CAAC,qEAAqE,CAAC,CAAC;IAE3F,mBAAmB;IACnB,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;IACtC,IAAI,CAAC,UAAU,CAAC,iBAAiB,gBAAqB,CAAC,IAAI,EAAE,EAAE;QAC7D,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC5D,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;YACtG,MAAM,GAAG,GAAG,SAAS,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC1E,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,UAAU,CAAC,kBAAkB,gBAAqB,CAAC,IAAI,EAAE,EAAE;QAC9D,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC7D,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;YACtG,MAAM,GAAG,GAAG,SAAS,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC1E,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,SAAS,EAAE;QACd,iBAAiB;QACjB,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC9B,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,aAAa,iBAAsB,CAAC,IAAI,EAAE,EAAE;YAC1D,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACxD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC;gBAC1C,MAAM,SAAS,GAAG,SAAS,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClF,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;KACJ;IACD,IAAI,CAAC,SAAS,CAAC,kBAAkB,eAAoB,CAAC;IACtD,IAAI,CAAC,GAAG,0BAAwC,SAAS,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;IACxG,IAAI,CAAC,GAAG,6BAA2C,kBAAkB,CAAC,CAAC;IACvE,OAAO,CAAC,0BAA0B,CAAC,kBAAkB,gBAAqB,uBAAuB,EAAE,qBAAqB,CAAC,CAAC;AAC5H,CAAC;AAED,MAAM,sBAAsB,GAAG;;CAE9B,CAAC;AAEF,mIAAmI;AACnI,uHAAuH;AACvH,mIAAmI;AACnI,kJAAkJ;AAClJ,4FAA4F;AAC5F,MAAM,cAAc,GAAG;;;;;CAKtB,CAAC;AAEF,MAAM,uBAAuB,GAAG;;CAE/B,CAAC;AAEF,SAAS,YAAY,CAAC,WAAwB,EAAE,QAAoB,EAAE,UAAwB,EAAE,SAAkB,EAAE,YAA0B;IAC5I,MAAM,SAAS,GAAG,gBAAoB,WAAW,CAAC;IAClD,MAAM,OAAO,GAAG,YAAY,CAAC,gBAAgB,kBAAsB,SAAS,CAAC,CAAC;IAC9E,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC;IACzE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAE1B,IAAI,QAAQ;QACV,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAE3B,IAAI,UAAU;QACZ,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAE7B,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC1B,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAEzB,IAAI,eAAe,CAAC;IACpB,IAAI,SAAS,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,EAAE;QACpD,eAAe,GAAG,sBAAsB,GAAG,uBAAuB,CAAC;KACpE;SAAM;QACL,UAAU,CAAC,OAAO,CAAC,CAAC;QACpB,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7B,uBAAuB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACtC,OAAO,CAAC,UAAU,CAAC,YAAY,eAAoB,CAAC;QACpD,eAAe,GAAG,sBAAsB,GAAG,cAAc,GAAG,uBAAuB,CAAC;KACrF;IAED,IAAI,CAAC,GAAG,2BAAwC,eAAe,CAAC,CAAC;IAEjE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,oBAAoB,CAAC,SAAsB,EAAE,UAAwB,EAAE,OAAqB;IAC1G,MAAM,OAAO,GAAG,YAAY,CAAC,SAAS,0BAAkC,IAAI,EAAE,OAAO,CAAC,CAAC;IAEvF,eAAe,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACtC,UAAU,CAAC,OAAO,0BAAgC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC/D,IAAI,UAAU,EAAE;QACd,yBAAyB,CAAC,OAAO,CAAC,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,yBAAyB,mBAAwB,OAAO,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,CAAC,GAAG,0BAAyC,eAAe,CAAC,CAAC;KAC3E;SAAM;QACL,iBAAiB,CAAC,OAAO,CAAC,CAAC;KAC5B;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,eAAe,GAAG;;CAEvB,CAAC;AAEF,gBAAgB;AAChB,SAAS,qBAAqB,CAAC,OAAsB;IACnD,OAAO,CAAC,WAAW,CAAC,6BAA6B,eAAoB,mBAA2B,QAAQ,EAAE,CAAC,CAAC;IAC5G,OAAO,CAAC,WAAW,CAAC,gCAAgC,eAAoB,sBAA8B,QAAQ,EAAE,CAAC,CAAC;IAClH,OAAO,CAAC,WAAW,CAAC,6BAA6B,eAAoB,mBAA2B,QAAQ,EAAE,CAAC,CAAC;IAC5G,OAAO,CAAC,WAAW,CAAC,iCAAiC,eAAoB,uBAA+B,QAAQ,EAAE,CAAC,CAAC;IACpH,OAAO,CAAC,WAAW,CAAC,wCAAwC,eAAoB,8BAAsC,QAAQ,EAAE,CAAC,CAAC;IAClI,OAAO,CAAC,WAAW,CAAC,iCAAiC,eAAoB,uBAA+B,QAAQ,EAAE,CAAC,CAAC;IACpH,OAAO,CAAC,WAAW,CAAC,oCAAoC,eAAoB,0BAAkC,QAAQ,EAAE,CAAC,CAAC;IAC1H,OAAO,CAAC,WAAW,CAAC,8BAA8B,eAAoB,oBAA4B,QAAQ,EAAE,CAAC,CAAC;IAC9G,OAAO,CAAC,WAAW,CAAC,+BAA+B,eAAoB,qBAA6B,QAAQ,EAAE,CAAC,CAAC;IAChH,OAAO,CAAC,WAAW,CAAC,mCAAmC,eAAoB,yBAAiC,QAAQ,EAAE,CAAC,CAAC;IAExH,qHAAqH;IACrH,gGAAgG;IAChG,OAAO,CAAC,kBAAkB,CAAC,wBAAwB,qBAA6B,CAAC;IACjF,OAAO,CAAC,kBAAkB,CAAC,4BAA4B,yBAAiC,CAAC;IACzF,OAAO,CAAC,kBAAkB,CAAC,yBAAyB,sBAA8B,CAAC;IACnF,OAAO,CAAC,kBAAkB,CAAC,0BAA0B,uBAA+B,CAAC;IAErF,sDAAsD;IACtD,MAAM,MAAM,GAAG,GAAG,CAAC;IACnB,MAAM,IAAI,gBAAoB,CAAC;IAC/B,OAAO,CAAC,WAAW,CAAC,yBAAyB,EAAE,IAAI,EAAE,mBAAwB,QAAQ,EAAE,GAAG,MAAM,CAAC,CAAC;IAClG,OAAO,CAAC,WAAW,CAAC,6BAA6B,EAAE,IAAI,EAAE,uBAA4B,QAAQ,EAAE,GAAG,MAAM,CAAC,CAAC;IAC1G,OAAO,CAAC,WAAW,CAAC,0BAA0B,EAAE,IAAI,EAAE,sBAAyB,QAAQ,EAAE,GAAG,MAAM,CAAC,CAAC;IACpG,OAAO,CAAC,WAAW,CAAC,2BAA2B,EAAE,IAAI,EAAE,uBAA0B,QAAQ,EAAE,GAAG,MAAM,CAAC,CAAC;IAEtG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC1B,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IACrC,OAAO,CAAC,SAAS,CAAC,cAAc,gBAAoB,CAAC;AACvD,CAAC;AAED,MAAM,gBAAgB,GAAG;;;;;CAKxB,CAAC;AAEF,MAAM,uBAAuB,GAAG;;;;;;;;;CAS/B,CAAC;AAEF,yGAAyG;AACzG,MAAM,wBAAwB,GAAG;;;CAGhC,CAAC;AAEF,MAAM,kBAAkB,GAAG,iCAAiC,CAAC;AAE7D,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;AACpD,MAAM,4BAA4B,GAAG,uBAAuB,GAAG,wBAAwB,CAAC;AAExF,gBAAgB;AAChB,MAAM,CAAC,MAAM,eAAe,GAAG;;;;;;;;;;;CAW9B,CAAC;AAEF,SAAS,gBAAgB,CAAC,SAAkB;IAC1C,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAC;IAChE,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAC;IAChE,OAAO;;;;yEAIgE,CAAC,MAAM,CAAC;;CAEhF,CAAC;AACF,CAAC;AAED,MAAM,qBAAqB,GAAG;;CAE7B,CAAC;AAEF,MAAM,uBAAuB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;CA0B/B,CAAC;AAEF,MAAM,sBAAsB,GAAG;;CAE9B,CAAC;AAEF,SAAS,wBAAwB,CAAC,SAAkB;IAClD,OAAO;;;;IAIL,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,oBAAoB,GAAG;;CAE5B,CAAC;AAEF,SAAS,kBAAkB,CAAC,SAAkB;IAC5C,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC;IACjE,OAAO;gBACO,QAAQ;;;CAGvB,CAAC;AACF,CAAC;AAED,SAAS,0BAA0B,CAAC,SAAkB;IACpD,OAAO;;;;IAIL,kBAAkB,CAAC,SAAS,CAAC;CAChC,CAAC;AACF,CAAC;AAED,MAAM,eAAe,GAAG;;CAEvB,CAAC;AAEF,+GAA+G;AAC/G,gHAAgH;AAChH,+GAA+G;AAC/G,mHAAmH;AACnH,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;CAgBxB,CAAC;AAEF,MAAM,gBAAgB,GAAG,IAAI,UAAU,gBAAuB,CAAC;AAE/D,gBAAgB;AAChB,MAAM,UAAU,eAAe,CAAC,OAAuB,EAAE,oBAA6B,EAAE,gBAAyB;IAC/G,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpC,IAAI,OAAO,GAAG,gBAAgB,CAAC;IAC/B,IAAI,oBAAoB;QACtB,OAAO,IAAI,GAAG,gBAAgB,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,mBAAmB,IAAI,CAAC;IAC1F,OAAO,IAAI,kBAAkB,CAAC;IAC9B,OAAO,CAAC,0BAA0B,CAAC,gBAAgB,iBAAsB,qBAAqB,EAAE,OAAO,CAAC,CAAC;IAEzG,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,mDAAmD,CAAC,CAAC;IAEjF,OAAO,CAAC,eAAe,CAAC,gBAAgB,mCAA+C,CAAC,IAAI,EAAE,EAAE;QAC9F,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3D,MAAM,CAAC,SAAS,KAAK,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAChD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;YACvC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;YACjE,OAAO,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAAC,OAAuB,EAAE,QAAoB;IAC9D,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9B,MAAM,SAAS,GAAG,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;IAC5D,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IAC1C,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,6BAA6B,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC;IACrF,OAAO,CAAC,0BAA0B,CAAC,KAAK,gBAAqB,uBAAuB,EAAE,QAAQ,CAAC,CAAC,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC;IACzK,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,eAAoB,CAAC;IACtD,IAAI,cAAc,GAAG,qBAAqB,CAAC;IAE3C,cAAc,IAAI,uBAAuB,CAAC;IAC1C,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,iBAAsB,CAAC,IAAI,EAAE,EAAE;QACvE,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;;YAC7D,IAAI,cAAc,GAAG,GAAG,CAAC;YACzB,IAAI,SAAS,KAAK,MAAM,CAAC,QAAQ,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO;gBACnF,SAAS,KAAK,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,cAAc;gBACzD,SAAS,KAAK,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,cAAc,CAAC,eAAe,EAAE;gBAC7E,cAAc,GAAG,MAAA,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,cAAc,CAAC,eAAe,CAAC,KAAK,mCAAI,GAAG,CAAC;gBAC1F,IAAI,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,cAAc,CAAC,eAAe,CAAC,OAAO;oBACrE,cAAc,GAAG,CAAC,cAAc,CAAC;aACpC;YACD,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,cAAc,IAAI,sBAAsB,CAAC;IACzC,OAAO,CAAC,IAAI,CAAC,GAAG,0BAAyC,cAAc,CAAC,CAAC;IAEzE,sEAAsE;IACtE,iIAAiI;IACjI,MAAM,YAAY,GAAG,KAAK,CAAC;IAC3B,IAAI,YAAY,EAAE;QAChB,OAAO,CAAC,IAAI,CAAC,GAAG,2BAA0C,uDAAuD,CAAC,CAAC;QACnH,OAAO,CAAC,wBAAwB,CAAC,UAAU,gBAAqB,oCAAoC,CAAC,CAAC;KACvG;AACH,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,UAAU,CAAC,OAAuB,EAAE,QAAoB,EAAE,UAAsB,EAAE,YAAqB,EAAE,QAAiB;IACxI,IAAI,UAAU,EAAE;QACd,OAAO,CAAC,wBAAwB,CAAC,iBAAiB,iBAAsB,uBAAuB,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;KAC1J;IAED,oHAAoH;IACpH,0FAA0F;IAC1F,IAAI,CAAC,YAAY,EAAE;QACjB,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QACvC,iCAAiC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;QAC5D,OAAO,CAAC,0BAA0B,CAAC,YAAY,gBAAqB,iBAAiB,EAAE,QAAQ,CAAC,CAAC,CAAC,0BAA0B,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC;QACzK,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,gBAAqB,CAAC,IAAI,EAAE,EAAE;YACvE,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC9D,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAU,CAAC;gBAC5C,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;oBAC/G,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;oBACzC,IAAI,SAAS,KAAK,SAAS,EAAE;wBAC3B,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;qBAClC;iBACF;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;KAChD;IAED,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,qBAA0B,CAAC,IAAI,EAAE,EAAE;QACpE,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACtD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAU,CAAC;YAC5C,IAAI,MAAM,CAAC,QAAQ,CAAC,uBAAuB,IAAI,MAAM,CAAC,MAAM,CAAC,mBAAmB,EAAE,EAAE,wGAAwG;gBAC1L,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;aAClF;iBAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE;gBACpD,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,IAAI,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAE,MAAM,CAAC,MAAM,CAAC,eAA2B,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAChJ,MAAM,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC;gBAC9B,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;aAClE;iBAAM;gBACL,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;aACzE;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,EAAE;QAC9B,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,qBAA0B,CAAC,IAAI,EAAE,EAAE;YACtE,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACxD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAU,CAAC;gBAC5C,IAAI,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE;oBAC/C,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;oBACrC,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;oBAChC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;iBAC/D;qBAAM;oBACL,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,OAAO,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;iBACpE;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;KACJ;AACH,CAAC;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAG;;;;;;;;CAQvC,CAAC;AAEF,MAAM,qBAAqB,GAAG;;;;;;;;;;CAU7B,CAAC;AAEF,SAAS,sBAAsB,CAAC,IAA2B;IACzD,aAAa,CAAC,IAAI,CAAC,CAAC;IACpB,IAAI,CAAC,UAAU,CAAC,eAAe,iBAAsB,CAAC,IAAI,EAAE,EAAE;QAC5D,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1D,mGAAmG;YACnG,wFAAwF;YACxF,oLAAoL;YACpL,iHAAiH;YACjH,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACpD,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,sBAAsB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC;YACxK,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,yBAAyC,qBAAqB,CAAC,CAAC;AAC1E,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,oBAAoB,CAAC,KAAqB;IACxD,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IACjH,cAAc,CAAC,OAAO,CAAC,CAAC;IAExB,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC;IAC/B,IAAI,IAAI,GAAG,sBAA0B,IAAI,CAAC,CAAC,kBAAiC,CAAC,aAA6B,CAAC;IAC3G,IAAI,KAAK,CAAC,YAAY,EAAE;QACtB,IAAI,IAAI,eAA8B,CAAC;QACvC,wBAAwB,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;KAC1E;IAED,IAAI,KAAK,CAAC,UAAU;QAClB,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAE9B,mBAAmB,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACzC,eAAe,CAAC,OAAO,EAAE,sBAA0B,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/D,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAClC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAErC,wMAAwM;IACxM,OAAO,CAAC,IAAI,CAAC,GAAG,4BAA4C,oBAAoB,CAAC,CAAC;IAClF,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,gBAAqB,CAAC,IAAI,EAAE,EAAE;QAC/D,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACtD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAEtE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,mBAAwB,CAAC,IAAI,EAAE,EAAE;QACxE,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC5D,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAU,CAAC;YAC5C,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9F,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,sBAAsB;IACtB,QAAQ,CAAC,OAAO,CAAC,CAAC;IAElB,WAAW;IACX,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IAC1C,WAAW,CAAC,OAAO,CAAC,CAAC;IACrB,uBAAuB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtC,IAAI,KAAK,CAAC,aAAa,EAAE;QACvB,eAAe,CAAC,OAAO,CAAC,CAAC;KAC1B;SAAM;QACL,IAAI,iBAAqB,IAAI,EAAE;YAC7B,kCAAkC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAClD;aAAM;YACL,IAAI,CAAC,KAAK,CAAC,YAAY;gBACrB,0BAA0B,CAAC,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;;gBAEtD,0BAA0B,CAAC,OAAO,CAAC,CAAC;YAEtC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;YACzC,IAAI,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,YAAY;gBAC9C,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;gBAEnC,uBAAuB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SACzC;KACF;IAED,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,eAAoB,CAAC;IAC5D,OAAO,CAAC,IAAI,CAAC,GAAG,2BAA2C,CAAC,KAAK,CAAC,UAAU,eAAkB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC;IAElJ,IAAI,KAAK,CAAC,YAAY;QACpB,oCAAoC,CAAC,OAAO,CAAC,CAAC;;QAE9C,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,WAAW,gBAAoB,CAAC,CAAC;IAE5D,IAAI,KAAK,CAAC,UAAU;QAClB,WAAW,CAAC,OAAO,CAAC,CAAC;IAEvB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,oCAAoC,CAAC,OAAuB;IAC1E,2LAA2L;IAC3L,+GAA+G;IAC/G,iMAAiM;IACjM,4GAA4G;IAC5G,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B,iFAAiF;IACjF,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,yBAAyB,mBAAwB,CAAC,IAAI,EAAE,EAAE;QAChF,IAAI,CAAC,iBAAiB,CAAC,yBAAyB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACpE,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,CAAC,GAAG,yBAAyC,wBAAwB,CAAC,CAAC;AACrF,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { Material } from \"../Material\";\r\nimport { Pass, SurfaceBitIndex, SurfaceFlags, TextureUnit } from \"../RenderFlags\";\r\nimport {\r\n FragmentShaderBuilder, FragmentShaderComponent, ProgramBuilder, ShaderBuilder, VariableType, VertexShaderComponent,\r\n} from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport {\r\n FeatureMode, IsAnimated, IsClassified, IsInstanced, IsShadowable, IsThematic, PositionType, TechniqueFlags,\r\n} from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { Texture } from \"../Texture\";\r\nimport { addAnimation } from \"./Animation\";\r\nimport { unpackFloat } from \"./Clipping\";\r\nimport { addColor } from \"./Color\";\r\nimport { addChooseVec2WithBitFlagsFunction, addChooseVec3WithBitFlagFunction, addExtractNthBit, addFrustum, addShaderFlags } from \"./Common\";\r\nimport { addUnpackAndNormalize2Bytes, decodeDepthRgb, unquantize2d } from \"./Decode\";\r\nimport {\r\n addFeatureSymbology, addMaxAlpha, addRenderOrder, addRenderOrderConstants, addSurfaceDiscard, addSurfaceHiliter, FeatureSymbologyOptions,\r\n} from \"./FeatureSymbology\";\r\nimport {\r\n addAltPickBufferOutputs, addFragColorWithPreMultipliedAlpha, addPickBufferOutputs, addWhiteOnWhiteReversal, assignFragColor,\r\n} from \"./Fragment\";\r\nimport { addLighting } from \"./Lighting\";\r\nimport { addSurfaceMonochrome } from \"./Monochrome\";\r\nimport { addColorPlanarClassifier, addFeaturePlanarClassifier, addHilitePlanarClassifier, addOverrideClassifierColor } from \"./PlanarClassification\";\r\nimport { addRenderPass } from \"./RenderPass\";\r\nimport { addSolarShadowMap } from \"./SolarShadowMapping\";\r\nimport { addThematicDisplay, getComputeThematicIndex } from \"./Thematic\";\r\nimport { addTranslucency } from \"./Translucency\";\r\nimport { addModelViewMatrix, addNormalMatrix, addProjectionMatrix } from \"./Vertex\";\r\nimport { wantMaterials } from \"../SurfaceGeometry\";\r\nimport { addWiremesh } from \"./Wiremesh\";\r\n\r\n// NB: Textures do not contain pre-multiplied alpha.\r\nconst sampleSurfaceTexture = `\r\nvec4 sampleSurfaceTexture() {\r\n return TEXTURE(s_texture, v_texCoord);\r\n}\r\n`;\r\n\r\nconst applyMaterialColor = `\r\n float useMatColor = float(use_material);\r\n vec3 rgb = mix(baseColor.rgb, mat_rgb.rgb, useMatColor * mat_rgb.a);\r\n float a = mix(baseColor.a, mat_alpha.x, useMatColor * mat_alpha.y);\r\n return vec4(rgb, a);\r\n`;\r\n\r\n// if this is a raster glyph, the sampled color has already been modified - do not modify further.\r\n// Mix diffuse color with texel based on texture weight.\r\n// Replace with diffuse RGB if RGB overridden.\r\n// Replace with diffuse alpha if alpha overridden.\r\n// Multiply texel alpha with diffuse alpha if specified.\r\nconst applyTextureWeight = `\r\n bool applyTexture = !u_applyGlyphTex && isSurfaceBitSet(kSurfaceBit_HasTexture);\r\n float textureWeight = applyTexture ? mat_texture_weight : 0.0;\r\n vec3 rgb = mix(baseColor.rgb, g_surfaceTexel.rgb, textureWeight);\r\n rgb = chooseVec3WithBitFlag(rgb, baseColor.rgb, surfaceFlags, kSurfaceBit_OverrideRgb);\r\n\r\n float a = applyTexture ? baseColor.a * g_surfaceTexel.a : baseColor.a;\r\n\r\n return vec4(rgb, a);\r\n`;\r\n\r\nconst decodeFragMaterialParams = `\r\nvoid decodeMaterialParams(vec4 params) {\r\n mat_weights = unpackAndNormalize2Bytes(params.x);\r\n\r\n vec2 texAndSpecR = unpackAndNormalize2Bytes(params.y);\r\n mat_texture_weight = texAndSpecR.x;\r\n\r\n vec2 specGB = unpackAndNormalize2Bytes(params.z);\r\n mat_specular = vec4(texAndSpecR.y, specGB, params.w);\r\n}\r\n`;\r\n\r\nconst decodeMaterialColor = `\r\nvoid decodeMaterialColor(vec4 rgba) {\r\n mat_rgb = vec4(rgba.rgb, float(rgba.r >= 0.0));\r\n mat_alpha = vec2(rgba.a, float(rgba.a >= 0.0));\r\n}\r\n`;\r\n\r\n// defaults: (0x6699, 0xffff, 0xffff, 13.5)\r\nconst computeMaterialParams = `\r\n const vec4 defaults = vec4(26265.0, 65535.0, 65535.0, 13.5);\r\n return use_material ? g_materialParams : defaults;\r\n`;\r\n\r\n// The 8-bit material index is stored with the 24-bit feature index, in the high byte.\r\nconst readMaterialAtlas = `\r\nvoid readMaterialAtlas() {\r\n float materialAtlasStart = u_vertParams.z * u_vertParams.w + u_numColors;\r\n float materialIndex = g_featureAndMaterialIndex.w * 4.0 + materialAtlasStart;\r\n\r\n vec2 tc = computeLUTCoords(materialIndex, u_vertParams.xy, g_vert_center, 1.0);\r\n vec4 rgba = TEXTURE(u_vertLUT, tc);\r\n\r\n tc = computeLUTCoords(materialIndex + 1.0, u_vertParams.xy, g_vert_center, 1.0);\r\n vec4 weightsAndFlags = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n\r\n tc = computeLUTCoords(materialIndex + 2.0, u_vertParams.xy, g_vert_center, 1.0);\r\n vec3 specularRgb = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5).rgb;\r\n\r\n tc = computeLUTCoords(materialIndex + 3.0, u_vertParams.xy, g_vert_center, 1.0);\r\n vec4 packedSpecularExponent = TEXTURE(u_vertLUT, tc);\r\n\r\n float flags = weightsAndFlags.w;\r\n mat_rgb = vec4(rgba.rgb, float(flags == 1.0 || flags == 3.0));\r\n mat_alpha = vec2(rgba.a, float(flags == 2.0 || flags == 3.0));\r\n\r\n float specularExponent = unpackFloat(packedSpecularExponent);\r\n g_materialParams.x = weightsAndFlags.y + weightsAndFlags.z * 256.0;\r\n g_materialParams.y = 255.0 + specularRgb.r * 256.0;\r\n g_materialParams.z = specularRgb.g + specularRgb.b * 256.0;\r\n g_materialParams.w = specularExponent;\r\n}\r\n`;\r\n\r\nconst computeMaterial = `\r\n if (u_surfaceFlags[kSurfaceBitIndex_HasMaterialAtlas]) {\r\n readMaterialAtlas();\r\n } else {\r\n decodeMaterialColor(u_materialColor);\r\n g_materialParams = u_materialParams;\r\n }\r\n`;\r\n\r\nconst computeMaterialInstanced = `\r\n decodeMaterialColor(u_materialColor);\r\n g_materialParams = u_materialParams;\r\n`;\r\n\r\nfunction addMaterial(builder: ProgramBuilder, instanced: boolean): void {\r\n const frag = builder.frag;\r\n assert(undefined !== frag.find(\"v_surfaceFlags\"));\r\n\r\n frag.addGlobal(\"mat_texture_weight\", VariableType.Float);\r\n frag.addGlobal(\"mat_weights\", VariableType.Vec2); // diffuse, specular\r\n frag.addGlobal(\"mat_specular\", VariableType.Vec4); // rgb, exponent\r\n\r\n addUnpackAndNormalize2Bytes(frag);\r\n frag.addFunction(decodeFragMaterialParams);\r\n frag.addInitializer(\"decodeMaterialParams(v_materialParams);\");\r\n\r\n addChooseVec3WithBitFlagFunction(frag);\r\n frag.set(FragmentShaderComponent.ApplyMaterialOverrides, applyTextureWeight);\r\n\r\n const vert = builder.vert;\r\n vert.addGlobal(\"mat_rgb\", VariableType.Vec4); // a = 0 if not overridden, else 1\r\n vert.addGlobal(\"mat_alpha\", VariableType.Vec2); // a = 0 if not overridden, else 1\r\n vert.addGlobal(\"use_material\", VariableType.Boolean);\r\n vert.addInitializer(\"use_material = (0u == (surfaceFlags & kSurfaceBit_IgnoreMaterial));\");\r\n\r\n // Uniform material\r\n vert.addFunction(decodeMaterialColor);\r\n vert.addUniform(\"u_materialColor\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_materialColor\", (uniform, params) => {\r\n const info = wantMaterials(params.target.currentViewFlags) ? params.geometry.materialInfo : undefined;\r\n const mat = undefined !== info && !info.isAtlas ? info : Material.default;\r\n uniform.setUniform4fv(mat.rgba);\r\n });\r\n });\r\n\r\n vert.addUniform(\"u_materialParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_materialParams\", (uniform, params) => {\r\n const info = wantMaterials(params.target.currentViewFlags) ? params.geometry.materialInfo : undefined;\r\n const mat = undefined !== info && !info.isAtlas ? info : Material.default;\r\n uniform.setUniform4fv(mat.fragUniforms);\r\n });\r\n });\r\n\r\n if (!instanced) {\r\n // Material atlas\r\n vert.addFunction(unpackFloat);\r\n vert.addFunction(readMaterialAtlas);\r\n vert.addUniform(\"u_numColors\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_numColors\", (uniform, params) => {\r\n const info = params.geometry.materialInfo;\r\n const numColors = undefined !== info && info.isAtlas ? info.vertexTableOffset : 0;\r\n uniform.setUniform1f(numColors);\r\n });\r\n });\r\n }\r\n vert.addGlobal(\"g_materialParams\", VariableType.Vec4);\r\n vert.set(VertexShaderComponent.ComputeMaterial, instanced ? computeMaterialInstanced : computeMaterial);\r\n vert.set(VertexShaderComponent.ApplyMaterialColor, applyMaterialColor);\r\n builder.addFunctionComputedVarying(\"v_materialParams\", VariableType.Vec4, \"computeMaterialParams\", computeMaterialParams);\r\n}\r\n\r\nconst computePositionPrelude = `\r\n vec4 pos = MAT_MV * rawPos;\r\n`;\r\n\r\n// We used to use gl.polygonOffset() for blanking regions, but that doesn't work with logarithmic depth buffer which overwrites the\r\n// computed Z. Instead we must manually offset in vertex shader. We do this even if log depth is not enabled/supported.\r\n// NOTE: If log depth is *not* supported, then the hilite surface vertex shaders previously would still include this logic, but the\r\n// fragment shaders would not use v_eyeSpace. Some Ubuntu 20.04 graphics drivers cleverly and correctly optimized out the varying and the uniform,\r\n// causing an exception when gl.getProgramLocation() failed. So, omit this bit in that case.\r\nconst adjustEyeSpace = `\r\n v_eyeSpace = pos.xyz;\r\n const float blankingRegionOffset = 2.0 / 65536.0;\r\n if (kRenderOrder_BlankingRegion == u_renderOrder)\r\n v_eyeSpace.z -= blankingRegionOffset * (u_frustum.y - u_frustum.x);\r\n`;\r\n\r\nconst computePositionPostlude = `\r\n return u_proj * pos;\r\n`;\r\n\r\nfunction createCommon(isInstanced: IsInstanced, animated: IsAnimated, shadowable: IsShadowable, isHiliter: boolean, positionType: PositionType): ProgramBuilder {\r\n const instanced = IsInstanced.Yes === isInstanced;\r\n const attrMap = AttributeMap.findAttributeMap(TechniqueId.Surface, instanced);\r\n const builder = new ProgramBuilder(attrMap, { positionType, instanced });\r\n const vert = builder.vert;\r\n\r\n if (animated)\r\n addAnimation(vert, true);\r\n\r\n if (shadowable)\r\n addSolarShadowMap(builder);\r\n\r\n addProjectionMatrix(vert);\r\n addModelViewMatrix(vert);\r\n\r\n let computePosition;\r\n if (isHiliter && !System.instance.supportsLogZBuffer) {\r\n computePosition = computePositionPrelude + computePositionPostlude;\r\n } else {\r\n addFrustum(builder);\r\n addRenderOrder(builder.vert);\r\n addRenderOrderConstants(builder.vert);\r\n builder.addVarying(\"v_eyeSpace\", VariableType.Vec3);\r\n computePosition = computePositionPrelude + adjustEyeSpace + computePositionPostlude;\r\n }\r\n\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createSurfaceHiliter(instanced: IsInstanced, classified: IsClassified, posType: PositionType): ProgramBuilder {\r\n const builder = createCommon(instanced, IsAnimated.No, IsShadowable.No, true, posType);\r\n\r\n addSurfaceFlags(builder, true, false);\r\n addTexture(builder, IsAnimated.No, IsThematic.No, false, true);\r\n if (classified) {\r\n addHilitePlanarClassifier(builder);\r\n builder.vert.addGlobal(\"feature_ignore_material\", VariableType.Boolean, \"false\");\r\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n } else {\r\n addSurfaceHiliter(builder);\r\n }\r\n\r\n return builder;\r\n}\r\n\r\nconst isSurfaceBitSet = `\r\nbool isSurfaceBitSet(uint flag) { return 0u != (surfaceFlags & flag); }\r\n`;\r\n\r\n/** @internal */\r\nfunction addSurfaceFlagsLookup(builder: ShaderBuilder) {\r\n builder.addConstant(\"kSurfaceBitIndex_HasTexture\", VariableType.Int, SurfaceBitIndex.HasTexture.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_ApplyLighting\", VariableType.Int, SurfaceBitIndex.ApplyLighting.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_HasNormals\", VariableType.Int, SurfaceBitIndex.HasNormals.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_IgnoreMaterial\", VariableType.Int, SurfaceBitIndex.IgnoreMaterial.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_TransparencyThreshold\", VariableType.Int, SurfaceBitIndex.TransparencyThreshold.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_BackgroundFill\", VariableType.Int, SurfaceBitIndex.BackgroundFill.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_HasColorAndNormal\", VariableType.Int, SurfaceBitIndex.HasColorAndNormal.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_OverrideRgb\", VariableType.Int, SurfaceBitIndex.OverrideRgb.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_HasNormalMap\", VariableType.Int, SurfaceBitIndex.HasNormalMap.toString());\r\n builder.addConstant(\"kSurfaceBitIndex_HasMaterialAtlas\", VariableType.Int, SurfaceBitIndex.HasMaterialAtlas.toString());\r\n\r\n // Surface flags which get modified in vertex shader are still passed to fragment shader as a single float & are thus\r\n // used differently there & so require different constants. Unused constants are commented out.\r\n builder.addBitFlagConstant(\"kSurfaceBit_HasTexture\", SurfaceBitIndex.HasTexture);\r\n builder.addBitFlagConstant(\"kSurfaceBit_IgnoreMaterial\", SurfaceBitIndex.IgnoreMaterial);\r\n builder.addBitFlagConstant(\"kSurfaceBit_OverrideRgb\", SurfaceBitIndex.OverrideRgb);\r\n builder.addBitFlagConstant(\"kSurfaceBit_HasNormalMap\", SurfaceBitIndex.HasNormalMap);\r\n\r\n // Only need masks for flags modified in vertex shader\r\n const suffix = \"u\";\r\n const type = VariableType.Uint;\r\n builder.addConstant(\"kSurfaceMask_HasTexture\", type, SurfaceFlags.HasTexture.toString() + suffix);\r\n builder.addConstant(\"kSurfaceMask_IgnoreMaterial\", type, SurfaceFlags.IgnoreMaterial.toString() + suffix);\r\n builder.addConstant(\"kSurfaceMask_OverrideRgb\", type, SurfaceFlags.OverrideRgb.toString() + suffix);\r\n builder.addConstant(\"kSurfaceMask_HasNormalMap\", type, SurfaceFlags.HasNormalMap.toString() + suffix);\r\n\r\n addExtractNthBit(builder);\r\n builder.addFunction(isSurfaceBitSet);\r\n builder.addGlobal(\"surfaceFlags\", VariableType.Uint);\r\n}\r\n\r\nconst initSurfaceFlags = `\r\n surfaceFlags = u_surfaceFlags[kSurfaceBitIndex_HasTexture] ? kSurfaceMask_HasTexture : 0u;\r\n surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_IgnoreMaterial] ? kSurfaceMask_IgnoreMaterial : 0u;\r\n surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_OverrideRgb] ? kSurfaceMask_OverrideRgb : 0u;\r\n surfaceFlags += u_surfaceFlags[kSurfaceBitIndex_HasNormalMap] ? kSurfaceMask_HasNormalMap : 0u;\r\n`;\r\n\r\nconst computeBaseSurfaceFlags = `\r\n if (feature_ignore_material) {\r\n if (u_surfaceFlags[kSurfaceBitIndex_HasTexture])\r\n surfaceFlags -= kSurfaceMask_HasTexture;\r\n if (u_surfaceFlags[kSurfaceBitIndex_HasNormalMap])\r\n surfaceFlags -= kSurfaceMask_HasNormalMap;\r\n\r\n surfaceFlags += kSurfaceMask_IgnoreMaterial;\r\n }\r\n`;\r\n\r\n// Textured surfaces (including raster glyphs) always *multiply* the sampled alpha by the alpha override.\r\nconst computeColorSurfaceFlags = `\r\n if (feature_rgb.r >= 0.0)\r\n surfaceFlags += kSurfaceMask_OverrideRgb;\r\n`;\r\n\r\nconst returnSurfaceFlags = \" return float(surfaceFlags);\\n\";\r\n\r\nconst computeSurfaceFlags = computeBaseSurfaceFlags;\r\nconst computeSurfaceFlagsWithColor = computeBaseSurfaceFlags + computeColorSurfaceFlags;\r\n\r\n/** @internal */\r\nexport const octDecodeNormal = `\r\nvec3 octDecodeNormal(vec2 e) {\r\n e = e / 255.0 * 2.0 - 1.0;\r\n vec3 n = vec3(e.x, e.y, 1.0 - abs(e.x) - abs(e.y));\r\n if (n.z < 0.0) {\r\n vec2 signNotZero = vec2(n.x >= 0.0 ? 1.0 : -1.0, n.y >= 0.0 ? 1.0 : -1.0);\r\n n.xy = (1.0 - abs(n.yx)) * signNotZero;\r\n }\r\n\r\n return normalize(n);\r\n}\r\n`;\r\n\r\nfunction getComputeNormal(quantized: boolean): string {\r\n const a = quantized ? \"g_vertLutData3.xy\" : \"g_vertLutData4.zw\";\r\n const b = quantized ? \"g_vertLutData1.zw\" : \"g_vertLutData5.xy\";\r\n return `\r\n if (!u_surfaceFlags[kSurfaceBitIndex_HasNormals])\r\n return vec3(0.0);\r\n\r\n vec2 normal = (u_surfaceFlags[kSurfaceBitIndex_HasColorAndNormal]) ? ${a} : ${b};\r\n return normalize(MAT_NORM * octDecodeNormal(normal));\r\n`;\r\n}\r\n\r\nconst finalizeNormalPrelude = `\r\n vec3 normal = normalize(v_n) * (2.0 * float(gl_FrontFacing) - 1.0);\r\n`;\r\n\r\nconst finalizeNormalNormalMap = `\r\n if (isSurfaceBitSet(kSurfaceBit_HasNormalMap)) {\r\n // Modify the normal with the normal map texture.\r\n // First calculate the tangent.\r\n vec3 dp1 = dFdx(v_eyeSpace);\r\n vec3 dp2 = dFdy(v_eyeSpace);\r\n vec2 duv1 = dFdx(v_texCoord);\r\n vec2 duv2 = dFdy(v_texCoord);\r\n vec3 tangent = normalize(duv2.y * dp1 - duv1.y * dp2);\r\n tangent = normalize (tangent - normal * dot (normal, tangent)); // re-orthogonalize with normal\r\n bool flip = (duv1.x * duv2.y - duv2.x * duv1.y) < 0.0;\r\n if (flip)\r\n tangent = -tangent;\r\n vec3 biTangent = cross (normal, tangent);\r\n if (flip)\r\n biTangent = -biTangent;\r\n vec3 normM = TEXTURE(s_normalMap, v_texCoord).xyz;\r\n if (length (normM) > 0.0001) { // check for empty normal texture\r\n normM = (normM - 0.5) * 2.0;\r\n normM = normalize (normM);\r\n normM.x *= abs(u_normalMapScale);\r\n normM.y *= u_normalMapScale;\r\n normM = normalize (normM);\r\n normal = normalize (normM.x * tangent + normM.y * biTangent + normM.z * normal);\r\n }\r\n }\r\n`;\r\n\r\nconst finalizeNormalPostlude = `\r\n return normal;\r\n`;\r\n\r\nfunction getComputeAnimatedNormal(quantized: boolean): string {\r\n return `\r\n if (u_animNormalParams.x >= 0.0)\r\n return normalize(MAT_NORM * computeAnimationNormal(u_animNormalParams.x, u_animNormalParams.y, u_animNormalParams.z));\r\n\r\n ${getComputeNormal(quantized)}`;\r\n}\r\n\r\nconst applyBackgroundColor = `\r\n return u_surfaceFlags[kSurfaceBitIndex_BackgroundFill] ? vec4(u_bgColor.rgb, baseColor.a) : baseColor;\r\n`;\r\n\r\nfunction getComputeTexCoord(quantized: boolean): string {\r\n const vertData = quantized ? \"g_vertLutData3\" : \"g_vertLutData4\";\r\n return `\r\n vec4 rgba = ${vertData};\r\n vec2 qcoords = vec2(decodeUInt16(rgba.xy), decodeUInt16(rgba.zw));\r\n return chooseVec2With2BitFlags(vec2(0.0), unquantize2d(qcoords, u_qTexCoordParams), surfaceFlags, kSurfaceBit_HasTexture, kSurfaceBit_HasNormalMap);\r\n`;\r\n}\r\n\r\nfunction getComputeAnimatedTexCoord(quantized: boolean): string {\r\n return `\r\n if (u_animScalarQParams.x >= 0.0)\r\n return computeAnimationParam(u_animScalarParams.x, u_animScalarParams.y, u_animScalarParams.z, u_animScalarQParams.x, u_animScalarQParams.y);\r\n\r\n ${getComputeTexCoord(quantized)}\r\n`;\r\n}\r\n\r\nconst getSurfaceColor = `\r\nvec4 getSurfaceColor() { return v_color; }\r\n`;\r\n\r\n// If we have texture weight < 1.0 we must compute the element/material color first then mix with texture color\r\n// in ApplyMaterialOverrides(). Do the sample once, here, and store in a global variable for possible later use.\r\n// If a glyph texture, must mix getSurfaceColor() with texture color so texture color alpha is applied 100% and\r\n// surface color rgb is scaled by texture color rgb (latter is full white originally but stretched via mipmapping).\r\nconst computeBaseColor = `\r\n g_surfaceTexel = sampleSurfaceTexture();\r\n vec4 surfaceColor = getSurfaceColor();\r\n\r\n if (!u_applyGlyphTex)\r\n return surfaceColor;\r\n\r\n // Compute color for raster glyph.\r\n const vec3 white = vec3(1.0);\r\n const vec3 epsilon = vec3(0.0001);\r\n const vec3 almostWhite = white - epsilon;\r\n\r\n // set to black if almost white and reverse white-on-white is on\r\n bvec3 isAlmostWhite = greaterThan(surfaceColor.rgb, almostWhite);\r\n surfaceColor.rgb = (u_reverseWhiteOnWhite && isAlmostWhite.r && isAlmostWhite.g && isAlmostWhite.b ? vec3(0.0, 0.0, 0.0) : surfaceColor.rgb);\r\n return vec4(surfaceColor.rgb * g_surfaceTexel.rgb, g_surfaceTexel.a);\r\n`;\r\n\r\nconst surfaceFlagArray = new Int32Array(SurfaceBitIndex.Count);\r\n\r\n/** @internal */\r\nexport function addSurfaceFlags(builder: ProgramBuilder, withFeatureOverrides: boolean, withFeatureColor: boolean) {\r\n addSurfaceFlagsLookup(builder.vert);\r\n addSurfaceFlagsLookup(builder.frag);\r\n\r\n let compute = initSurfaceFlags;\r\n if (withFeatureOverrides)\r\n compute += `${withFeatureColor ? computeSurfaceFlagsWithColor : computeSurfaceFlags}\\n`;\r\n compute += returnSurfaceFlags;\r\n builder.addFunctionComputedVarying(\"v_surfaceFlags\", VariableType.Float, \"computeSurfaceFlags\", compute);\r\n\r\n builder.frag.addInitializer(\"surfaceFlags = uint(floor(v_surfaceFlags + 0.5));\");\r\n\r\n builder.addUniformArray(\"u_surfaceFlags\", VariableType.Boolean, SurfaceBitIndex.Count, (prog) => {\r\n prog.addGraphicUniform(\"u_surfaceFlags\", (uniform, params) => {\r\n assert(undefined !== params.geometry.asSurface);\r\n const mesh = params.geometry.asSurface;\r\n mesh.computeSurfaceFlags(params.programParams, surfaceFlagArray);\r\n uniform.setUniform1iv(surfaceFlagArray);\r\n });\r\n });\r\n}\r\n\r\nfunction addNormal(builder: ProgramBuilder, animated: IsAnimated) {\r\n addNormalMatrix(builder.vert);\r\n\r\n const quantized = \"quantized\" === builder.vert.positionType;\r\n builder.vert.addFunction(octDecodeNormal);\r\n builder.vert.addFunction(\"vec3 computeSurfaceNormal()\", getComputeNormal(quantized));\r\n builder.addFunctionComputedVarying(\"v_n\", VariableType.Vec3, \"computeLightingNormal\", animated ? getComputeAnimatedNormal(quantized) : \"return computeSurfaceNormal();\");\r\n builder.frag.addGlobal(\"g_normal\", VariableType.Vec3);\r\n let finalizeNormal = finalizeNormalPrelude;\r\n\r\n finalizeNormal += finalizeNormalNormalMap;\r\n builder.frag.addUniform(\"u_normalMapScale\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_normalMapScale\", (uniform, params) => {\r\n let normalMapScale = 1.0;\r\n if (undefined !== params.geometry.materialInfo && !params.geometry.materialInfo.isAtlas &&\r\n undefined !== params.geometry.materialInfo.textureMapping &&\r\n undefined !== params.geometry.materialInfo.textureMapping.normalMapParams) {\r\n normalMapScale = params.geometry.materialInfo.textureMapping.normalMapParams.scale ?? 1.0;\r\n if (params.geometry.materialInfo.textureMapping.normalMapParams.greenUp)\r\n normalMapScale = -normalMapScale;\r\n }\r\n uniform.setUniform1f(normalMapScale);\r\n });\r\n });\r\n\r\n finalizeNormal += finalizeNormalPostlude;\r\n builder.frag.set(FragmentShaderComponent.FinalizeNormal, finalizeNormal);\r\n\r\n // Set to true to colorize surfaces based on normals (in world space).\r\n // You must also set checkMaxVarying to false in ProgramBuilder.buildProgram to avoid assertions, if using a non-optimized build.\r\n const debugNormals = false;\r\n if (debugNormals) {\r\n builder.frag.set(FragmentShaderComponent.ApplyDebugColor, \"return vec4(vec3(v_normal / 2.0 + 0.5), baseColor.a);\");\r\n builder.addInlineComputedVarying(\"v_normal\", VariableType.Vec3, \"v_normal = computeSurfaceNormal();\");\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function addTexture(builder: ProgramBuilder, animated: IsAnimated, isThematic: IsThematic, isPointCloud: boolean, isHilite: boolean) {\r\n if (isThematic) {\r\n builder.addInlineComputedVarying(\"v_thematicIndex\", VariableType.Float, getComputeThematicIndex(builder.vert.usesInstancedGeometry, isPointCloud, true));\r\n }\r\n\r\n // Point clouds do not need to compute texture coordinates since the only texture they use is the thematic gradient.\r\n // Surfaces now need texture coordinates even for thematic in case they have a normal map.\r\n if (!isPointCloud) {\r\n builder.vert.addFunction(unquantize2d);\r\n addChooseVec2WithBitFlagsFunction(builder.vert);\r\n const quantized = \"quantized\" === builder.vert.positionType;\r\n builder.addFunctionComputedVarying(\"v_texCoord\", VariableType.Vec2, \"computeTexCoord\", animated ? getComputeAnimatedTexCoord(quantized) : getComputeTexCoord(quantized));\r\n builder.vert.addUniform(\"u_qTexCoordParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_qTexCoordParams\", (uniform, params) => {\r\n const surfGeom = params.geometry.asSurface!;\r\n if (surfGeom.useTexture(params.programParams) || (surfGeom.useNormalMap(params.programParams) && !isPointCloud)) {\r\n const uvQParams = surfGeom.lut.uvQParams;\r\n if (undefined !== uvQParams) {\r\n uniform.setUniform4fv(uvQParams);\r\n }\r\n }\r\n });\r\n });\r\n builder.frag.addFunction(sampleSurfaceTexture);\r\n }\r\n\r\n builder.frag.addUniform(\"s_texture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_texture\", (uniform, params) => {\r\n const surfGeom = params.geometry.asSurface!;\r\n if (params.geometry.supportsThematicDisplay && params.target.wantThematicDisplay) { // NB: if thematic display is enabled, bind the thematic texture and ignore any applied surface textures\r\n params.target.uniforms.thematic.bindTexture(uniform, TextureUnit.SurfaceTexture);\r\n } else if (surfGeom.useTexture(params.programParams)) {\r\n const texture = (params.geometry.hasAnimation && params.target.analysisTexture) ? (params.target.analysisTexture as Texture) : surfGeom.texture;\r\n assert(undefined !== texture);\r\n texture.texture.bindSampler(uniform, TextureUnit.SurfaceTexture);\r\n } else {\r\n System.instance.ensureSamplerBound(uniform, TextureUnit.SurfaceTexture);\r\n }\r\n });\r\n });\r\n\r\n if (!isHilite && !isPointCloud) {\r\n builder.frag.addUniform(\"s_normalMap\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_normalMap\", (uniform, params) => {\r\n const surfGeom = params.geometry.asSurface!;\r\n if (surfGeom.useNormalMap(params.programParams)) {\r\n const normalMap = surfGeom.normalMap;\r\n assert(undefined !== normalMap);\r\n normalMap.texture.bindSampler(uniform, TextureUnit.NormalMap);\r\n } else {\r\n System.instance.ensureSamplerBound(uniform, TextureUnit.NormalMap);\r\n }\r\n });\r\n });\r\n }\r\n}\r\n\r\nexport const discardClassifiedByAlpha = `\r\n if (u_no_classifier_discard)\r\n return false;\r\n\r\n bool hasAlpha = alpha <= s_maxAlpha;\r\n bool isOpaquePass = (kRenderPass_OpaqueLinear <= u_renderPass && kRenderPass_OpaqueGeneral >= u_renderPass);\r\n bool isTranslucentPass = kRenderPass_Translucent == u_renderPass;\r\n return (isOpaquePass && hasAlpha) || (isTranslucentPass && !hasAlpha);\r\n`;\r\n\r\nconst discardByTextureAlpha = `\r\n if (isSurfaceBitSet(kSurfaceBit_HasTexture)) {\r\n float cutoff = abs(u_alphaCutoff);\r\n if (kRenderPass_Translucent == u_renderPass)\r\n return u_alphaCutoff > 0.0 && alpha >= cutoff;\r\n else\r\n return alpha < cutoff;\r\n }\r\n\r\n return false;\r\n`;\r\n\r\nfunction addTransparencyDiscard(frag: FragmentShaderBuilder): void {\r\n addRenderPass(frag);\r\n frag.addUniform(\"u_alphaCutoff\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_alphaCutoff\", (uniform, params) => {\r\n // This cutoff is used to discard pixels based on the alpha value sampled from the surface texture.\r\n // During readPixels, or when transparency is disabled, only discard 100% opaque pixels.\r\n // Otherwise, if the geometry draws in both opaque and translucent passes, use DisplayParams.minTransparency to filter pixels into appropriate pass to produce appropriate blending.\r\n // Negative cutoff applies only during opaque pass; positive cutoff applies during opaque and translucent passes.\r\n const pass = params.geometry.getPass(params.target);\r\n const cutoff = (!Pass.rendersOpaqueAndTranslucent(pass) || params.target.isReadPixelsInProgress || !params.target.currentViewFlags.transparency) ? -1 / 255 : 241 / 255;\r\n uniform.setUniform1f(cutoff);\r\n });\r\n });\r\n\r\n frag.set(FragmentShaderComponent.DiscardByAlpha, discardByTextureAlpha);\r\n}\r\n\r\n/** @internal */\r\nexport function createSurfaceBuilder(flags: TechniqueFlags): ProgramBuilder {\r\n const builder = createCommon(flags.isInstanced, flags.isAnimated, flags.isShadowable, false, flags.positionType);\r\n addShaderFlags(builder);\r\n\r\n const feat = flags.featureMode;\r\n let opts = FeatureMode.Overrides === feat ? FeatureSymbologyOptions.Surface : FeatureSymbologyOptions.None;\r\n if (flags.isClassified) {\r\n opts &= ~FeatureSymbologyOptions.Alpha;\r\n addColorPlanarClassifier(builder, flags.isTranslucent, flags.isThematic);\r\n }\r\n\r\n if (flags.isThematic)\r\n addThematicDisplay(builder);\r\n\r\n addFeatureSymbology(builder, feat, opts);\r\n addSurfaceFlags(builder, FeatureMode.Overrides === feat, true);\r\n addSurfaceDiscard(builder, flags);\r\n addNormal(builder, flags.isAnimated);\r\n\r\n // In HiddenLine mode, we must compute the base color (plus feature overrides etc) in order to get the alpha, then replace with background color (preserving alpha for the transparency threshold test).\r\n builder.frag.set(FragmentShaderComponent.FinalizeBaseColor, applyBackgroundColor);\r\n builder.frag.addUniform(\"u_bgColor\", VariableType.Vec3, (prog) => {\r\n prog.addProgramUniform(\"u_bgColor\", (uniform, params) => {\r\n params.target.uniforms.style.bindBackgroundRgb(uniform);\r\n });\r\n });\r\n\r\n addTexture(builder, flags.isAnimated, flags.isThematic, false, false);\r\n\r\n builder.frag.addUniform(\"u_applyGlyphTex\", VariableType.Boolean, (prog) => {\r\n prog.addGraphicUniform(\"u_applyGlyphTex\", (uniform, params) => {\r\n const surfGeom = params.geometry.asSurface!;\r\n uniform.setUniform1i(surfGeom.useTexture(params.programParams) && surfGeom.isGlyph ? 1 : 0);\r\n });\r\n });\r\n\r\n // Fragment and Vertex\r\n addColor(builder);\r\n\r\n // Fragment\r\n builder.frag.addFunction(getSurfaceColor);\r\n addLighting(builder);\r\n addWhiteOnWhiteReversal(builder.frag);\r\n\r\n if (flags.isTranslucent) {\r\n addTranslucency(builder);\r\n } else {\r\n if (FeatureMode.None === feat) {\r\n addFragColorWithPreMultipliedAlpha(builder.frag);\r\n } else {\r\n if (!flags.isClassified)\r\n addOverrideClassifierColor(builder, flags.isThematic);\r\n else\r\n addFeaturePlanarClassifier(builder);\r\n\r\n builder.frag.addFunction(decodeDepthRgb);\r\n if (flags.isEdgeTestNeeded || flags.isClassified)\r\n addPickBufferOutputs(builder.frag);\r\n else\r\n addAltPickBufferOutputs(builder.frag);\r\n }\r\n }\r\n\r\n builder.frag.addGlobal(\"g_surfaceTexel\", VariableType.Vec4);\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, (flags.isThematic === IsThematic.No) ? computeBaseColor : \"return getSurfaceColor();\");\r\n\r\n if (flags.isClassified)\r\n addClassificationTranslucencyDiscard(builder);\r\n else\r\n addTransparencyDiscard(builder.frag);\r\n\r\n addSurfaceMonochrome(builder.frag);\r\n addMaterial(builder, flags.isInstanced === IsInstanced.Yes);\r\n\r\n if (flags.isWiremesh)\r\n addWiremesh(builder);\r\n\r\n return builder;\r\n}\r\n\r\nexport function addClassificationTranslucencyDiscard(builder: ProgramBuilder) {\r\n // For unclassified geometry, we need to render in both the translucent and opaque passes if any feature transparency overrides are applied that would change the default render pass used.\r\n // Those shaders compute the transparency in the vertex shader and discard the vertex in one pass or the other.\r\n // For classified geometry, the transparency comes from the classifier geometry (when using Display.ElementColor), so even if there are no feature overrides, we may need to draw in both passes.\r\n // Since the transparency is not known until the fragment shader, we must perform the discard there instead.\r\n addMaxAlpha(builder.frag);\r\n addRenderPass(builder.frag);\r\n\r\n // Do not discard transparent classified geometry if we're trying to do a pick...\r\n builder.frag.addUniform(\"u_no_classifier_discard\", VariableType.Boolean, (prog) => {\r\n prog.addProgramUniform(\"u_no_classifier_discard\", (uniform, params) => {\r\n uniform.setUniform1i(params.target.isReadPixelsInProgress ? 1 : 0);\r\n });\r\n });\r\n\r\n builder.frag.set(FragmentShaderComponent.DiscardByAlpha, discardClassifiedByAlpha);\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Thematic.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Thematic.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAA2B,cAAc,EAA+B,MAAM,kBAAkB,CAAC;AAkLxG,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,GAAG,MAAM,CAmBzH;AAsBD,gBAAgB;AAChB,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,cAAc,EAAE,gBAAgB,UAAQ,EAAE,gBAAgB,UAAQ,QAwI7G"}
1
+ {"version":3,"file":"Thematic.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Thematic.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAA2B,cAAc,EAA+B,MAAM,kBAAkB,CAAC;AAgKxG,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,GAAG,MAAM,CAmBzH;AAsBD,gBAAgB;AAChB,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,cAAc,EAAE,gBAAgB,UAAQ,EAAE,gBAAgB,UAAQ,QA0H7G"}
@@ -7,7 +7,6 @@
7
7
  */
8
8
  import { ThematicDisplayMode, ThematicGradientMode } from "@itwin/core-common";
9
9
  import { System } from "../System";
10
- import { unpackFloat } from "./Clipping";
11
10
  import { addRenderPass } from "./RenderPass";
12
11
  import { addInstancedRtcMatrix, addProjectionMatrix } from "./Vertex";
13
12
  import { TextureUnit } from "../RenderFlags";
@@ -19,21 +18,6 @@ vec4 getSensor(int index) {
19
18
  return TEXTURE(s_sensorSampler, vec2(x, y));
20
19
  }
21
20
  `;
22
- const unpackSensor = `
23
- vec4 getSensor(int index) {
24
- float y = (float(index) + 0.5) / float(u_numSensors);
25
- float sx = 0.25;
26
- vec2 tc = vec2(0.125, y);
27
- float posX = unpackFloat(TEXTURE(s_sensorSampler, tc));
28
- tc.x += sx;
29
- float posY = unpackFloat(TEXTURE(s_sensorSampler, tc));
30
- tc.x += sx;
31
- float posZ = unpackFloat(TEXTURE(s_sensorSampler, tc));
32
- tc.x += sx;
33
- float value = unpackFloat(TEXTURE(s_sensorSampler, tc));
34
- return vec4(posX, posY, posZ, value);
35
- }
36
- `;
37
21
  // Access a gradient texture at the specified index.
38
22
  // A stepped gradient texture is arranged with single unique color pixels for each step. The dimension of a stepped gradient texture is stepCount.
39
23
  // A smooth gradient texture is arranged with blended color pixels across the entire span of the texture. The dimension of a smooth gradient texture is the system's maximum texture size.
@@ -58,8 +42,7 @@ vec3 getIsoLineColor(float ndx, float stepCount) {
58
42
  return TEXTURE(s_texture, vec2(0.0, ndx)).rgb;
59
43
  }
60
44
  `;
61
- const fwidthWhenAvailable = `\nfloat _universal_fwidth(float coord) { return fwidth(coord); }\n`;
62
- const fwidthWhenNotAvailable = `\nfloat _universal_fwidth(float coord) { return coord; }\n`; // ###TODO: can we do something reasonable in this case?
45
+ const fwidth = `\nfloat _universal_fwidth(float coord) { return fwidth(coord); }\n`;
63
46
  const slopeAndHillShadeShader = ` else if (kThematicDisplayMode_Slope == u_thematicDisplayMode) {
64
47
  float d = dot(g_normal, u_thematicAxis);
65
48
  if (d < 0.0)
@@ -311,24 +294,8 @@ export function addThematicDisplay(builder, isForPointClouds = false, isForTerra
311
294
  });
312
295
  });
313
296
  }
314
- const isWebGL2 = System.instance.capabilities.isWebGL2;
315
- if (isWebGL2) {
316
- frag.addFunction(fwidthWhenAvailable);
317
- }
318
- else if (System.instance.capabilities.supportsStandardDerivatives) {
319
- frag.addExtension("GL_OES_standard_derivatives");
320
- frag.addFunction(fwidthWhenAvailable);
321
- }
322
- else {
323
- frag.addFunction(fwidthWhenNotAvailable);
324
- }
325
- if (System.instance.capabilities.supportsTextureFloat) {
326
- frag.addFunction(getSensorFloat);
327
- }
328
- else {
329
- frag.addFunction(unpackFloat);
330
- frag.addFunction(unpackSensor);
331
- }
297
+ frag.addFunction(fwidth);
298
+ frag.addFunction(getSensorFloat);
332
299
  frag.addFunction(getColor);
333
300
  frag.addFunction(getIsoLineColor);
334
301
  frag.set(7 /* ApplyThematicDisplay */, _getShader(isForPointClouds));